public void Test1() {
RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();
TableServerData tsd = new TableServerData("0");
Entry[] not_expired = new Entry[12];
Entry[] to_expire = new Entry[12];
DateTime now = DateTime.UtcNow;
DateTime live = now.AddSeconds(120);
DateTime expire = now.AddSeconds(5);
for(int i = 0; i < 4; i++) {
byte[] key = new byte[20];
rng.GetBytes(key);
for(int j = 0; j < 3; j++) {
byte[] value = new byte[20];
rng.GetBytes(value);
Entry ent = new Entry(key, value, now, expire);
to_expire[i * 3 + j] = ent;
tsd.AddEntry(ent);
value = new byte[20];
rng.GetBytes(value);
ent = new Entry(key, value, now, live);
not_expired[i * 3 + j] = ent;
tsd.AddEntry(ent);
Assert.IsFalse(not_expired[i * 3 + j].Equals(to_expire[i * 3 + j]),
String.Format("{0}: not_expired == to_expire.", i * 3 + j));
}
}
for(int i = 0; i < 4; i++) {
LinkedList<Entry> entries = tsd.GetEntries(not_expired[i * 3].Key);
for(int j = 0; j < 3; j++) {
Assert.IsTrue(entries.Contains(not_expired[i * 3 + j]), "step 0: not_expired " + (i * 3 + j));
Assert.IsTrue(entries.Contains(to_expire[i * 3 + j]), "step 0: to_expire " + (i * 3 + j));
}
}
for(int i = 0; i < 4; i++) {
for(int j = 0; j < 3; j++) {
int pos = i * 3 + j;
if(pos % 2 == 0) {
Entry ent = not_expired[pos];
tsd.UpdateEntry(ent.Key, ent.Value, now.AddSeconds(160));
}
}
}
Entry entry = to_expire[11];
tsd.UpdateEntry(entry.Key, entry.Value, now.AddSeconds(160));
for(int i = 0; i < 4; i++) {
LinkedList<Entry> entries = tsd.GetEntries(not_expired[i * 3].Key);
for(int j = 0; j < 3; j++) {
Assert.IsTrue(entries.Contains(not_expired[i * 3 + j]), "step 1: not_expired " + (i * 3 + j));
Assert.IsTrue(entries.Contains(to_expire[i * 3 + j]), "step 1: to_expire " + (i * 3 + j));
}
}
while(DateTime.UtcNow < expire.AddSeconds(1)) {
for(int i = 0; i < 50000000; i++) {
int k = i % 5;
k += 6;
}
}
for(int i = 0; i < 3; i++) {
LinkedList<Entry> entries = tsd.GetEntries(not_expired[i * 3].Key);
for(int j = 0; j < 3; j++) {
Assert.IsTrue(entries.Contains(not_expired[i * 3 + j]), "step 2: not_expired " + (i * 3 + j));
Assert.IsFalse(entries.Contains(to_expire[i * 3 + j]), "step 2: to_expire " + (i * 3 + j));
}
}
Assert.AreEqual(13, tsd.Count, "Entries we didn't check are removed by CheckEntries.");
}