boolean failed = false;
long[] evMatrix = new long[] {
3, 3, 3, 0, 0, 0, 0, 0, 9, 6, 6, 9 };
long[] evTxnMatrix = new long[] {
2, 2, 2, 0, 0, 0, 0, 0, 6, 4, 4, 6 };
SimpleEntry sampleEntry1 = new SimpleEntry("TestEntry #1", 1);
SimpleEntry sampleEntry2 = new SimpleEntry("TestEntry #2", 2);
SimpleEntry sampleEntry3 = new SimpleEntry("TestEntry #1", 2);
SimpleEntry template;
Entry snapshot1;
Entry snapshot2;
Entry snapshot3;
Transaction txn;
long leaseTime1 = timeout2 * 3;
long leaseTime2 = Lease.FOREVER;
long leaseTime3 = Lease.ANY;
long evNum;
int i;
// first check that space is empty
if (!checkSpace(space)) {
throw new TestException(
"Space is not empty in the beginning.");
}
// create snapshot of sample entries
snapshot1 = space.snapshot(sampleEntry1);
snapshot2 = space.snapshot(sampleEntry2);
snapshot3 = space.snapshot(sampleEntry3);
// create the non null transaction
txn = getTransaction();
/*
* init 3 RemoteEvent counters for each of sample entries
* and their snapshots
*/
snsh_ncs[0] = new SnapshotNotifyCounter(sampleEntry1, leaseTime1,
space);
snsh_ncs[1] = new SnapshotNotifyCounter(sampleEntry2, leaseTime2,
space);
snsh_ncs[2] = new SnapshotNotifyCounter(sampleEntry3, leaseTime3,
space);
// init 5 counters with wrong templates and their snapshots
template = new SimpleEntry("TestEntry #3", 1);
snsh_ncs[3] = new SnapshotNotifyCounter(template, leaseTime1,
space);
// 2-nd wrong template and it's snapshot
template = new SimpleEntry("TestEntry #1", 3);
snsh_ncs[4] = new SnapshotNotifyCounter(template, leaseTime2,
space);
// 3-rd wrong template it's snapshot
template = new SimpleEntry("TestEntry #3", 3);
snsh_ncs[5] = new SnapshotNotifyCounter(template, leaseTime3,
space);
// 4-th wrong template it's snapshot
template = new SimpleEntry(null, 3);
snsh_ncs[6] = new SnapshotNotifyCounter(template, leaseForeverTime,
space);
// 5-th wrong template it's snapshot
template = new SimpleEntry("TestEntry #3", null);
snsh_ncs[7] = new SnapshotNotifyCounter(template, leaseTime1,
space);
// init counter with null entry as a template and it's snapshot
snsh_ncs[8] = new SnapshotNotifyCounter(null, leaseForeverTime,
space);
// init 3 counters with null values for different fields
template = new SimpleEntry("TestEntry #1", null);
snsh_ncs[9] = new SnapshotNotifyCounter(template, leaseTime1,
space);
// 2-nd template
template = new SimpleEntry(null, 2);
snsh_ncs[10] = new SnapshotNotifyCounter(template, leaseTime2,
space);
// 3-rd template
template = new SimpleEntry(null, null);
snsh_ncs[11] = new SnapshotNotifyCounter(template, leaseTime3,
space);
// now register all counters with null transaction parameter
for (i = 0; i < 12; i++) {
snsh_ers[i] = space.notify(snsh_ncs[i].getSnapshot(), null,
snsh_ncs[i], snsh_ncs[i].getLeaseTime(), null);
}
// sleep for a while to let all listeners register properly
logDebugText("now sleeping for " + timeout1
+ " to let all listeners register properly.");
Thread.sleep(timeout1);
// write 3 sample entries 3 times to the space without transactions
space.write(sampleEntry1, null, leaseForeverTime);
space.write(sampleEntry1, null, leaseForeverTime);
space.write(sampleEntry1, null, leaseForeverTime);
space.write(sampleEntry2, null, leaseForeverTime);
space.write(sampleEntry2, null, leaseForeverTime);
space.write(sampleEntry2, null, leaseForeverTime);
space.write(sampleEntry3, null, leaseForeverTime);
space.write(sampleEntry3, null, leaseForeverTime);
space.write(sampleEntry3, null, leaseForeverTime);
logDebugText("3 sample entries have been written"
+ " to the space 3 times without transactions.");
// write 3 sample entries twice to the space within the transaction
space.write(sampleEntry1, txn, leaseForeverTime);
space.write(sampleEntry1, txn, leaseForeverTime);
space.write(sampleEntry2, txn, leaseForeverTime);
space.write(sampleEntry2, txn, leaseForeverTime);
space.write(sampleEntry3, txn, leaseForeverTime);
space.write(sampleEntry3, txn, leaseForeverTime);
logDebugText("3 sample entries have been written"
+ " to the space twice within the non null transaction.");
// wait for a while to let all listeners get notifications
logDebugText("now sleeping for " + timeout1
+ " to let all listeners get notifications.");
Thread.sleep(timeout1);
/*
* check, that listeners got required number of notifications
* before transaction's committing
*/
for (i = 0; i < 12; i++) {
if (snsh_ncs[i].getEventsNum(snsh_ers[i]) != evMatrix[i]) {
failed = true;
snsh_failMatrix[i] = true;
} else {
snsh_failMatrix[i] = false;
}
}
for (i = 0; i < 12; i++) {
if (snsh_failMatrix[i]) {
logDebugText("FAILED: " + snsh_ncs[i] + " has got "
+ snsh_ncs[i].getEventsNum(snsh_ers[i])
+ " notifications instead of " + evMatrix[i]
+ " required before transaction's committing.");
} else {
logDebugText(snsh_ncs[i].toString() + " has got "
+ snsh_ncs[i].getEventsNum(snsh_ers[i])
+ " notifications as expected\n"
+ " before transaction's committing.");
}
}
// commit the transaction
txnCommit(txn);
logDebugText("Transaction has been committed.");
// wait for a while to let all listeners get notifications
logDebugText("now sleeping for " + timeout2
+ " to let all listeners get notifications.");
Thread.sleep(timeout2);
/*
* check, that listeners got required number of notifications
* after transaction's committing
*/
for (i = 0; i < 12; i++) {
evNum = evMatrix[i] + evTxnMatrix[i];
if (snsh_ncs[i].getEventsNum(snsh_ers[i]) != evNum) {
failed = true;
snsh_failMatrix[i] = true;
} else {
snsh_failMatrix[i] = false;
}
}
for (i = 0; i < 12; i++) {
evNum = evMatrix[i] + evTxnMatrix[i];
if (snsh_failMatrix[i]) {
logDebugText("FAILED: " + snsh_ncs[i] + " has got "
+ snsh_ncs[i].getEventsNum(snsh_ers[i])
+ " notifications instead of " + evNum
+ " required after transaction's committing.");
} else {
logDebugText(snsh_ncs[i].toString() + " has got "
+ snsh_ncs[i].getEventsNum(snsh_ers[i])
+ " notifications as expected\n"
+ " after transaction's committing.");
}
}
logDebugText("Stage 1 with writing ordinal entries has been"
+ " completed.");
logDebugText("------------------------------\n");
logDebugText("Starting 2-nd stage with snapshots.");
// clean the space
cleanSpace(space);
// create the non null transaction
txn = getTransaction();
// init 3 RemoteEvent counters for each of sample entries
ncs[0] = new NotifyCounter(sampleEntry1, leaseTime1);
ncs[1] = new NotifyCounter(sampleEntry2, leaseTime2);
ncs[2] = new NotifyCounter(sampleEntry3, leaseTime3);
/*
* init 3 RemoteEvent counters for each of sample entries
* and their snapshots
*/
ncs[0] = new NotifyCounter(sampleEntry1, leaseTime1);
ncs[1] = new NotifyCounter(sampleEntry2, leaseTime2);
ncs[2] = new NotifyCounter(sampleEntry3, leaseTime3);
snsh_ncs[0] = new SnapshotNotifyCounter(sampleEntry1, leaseTime1,
space);
snsh_ncs[1] = new SnapshotNotifyCounter(sampleEntry2, leaseTime2,
space);
snsh_ncs[2] = new SnapshotNotifyCounter(sampleEntry3, leaseTime3,
space);
// init 5 counters with wrong templates and their snapshots
template = new SimpleEntry("TestEntry #3", 1);
ncs[3] = new NotifyCounter(template, leaseTime1);
snsh_ncs[3] = new SnapshotNotifyCounter(template, leaseTime1,
space);
// 2-nd wrong template and it's snapshot
template = new SimpleEntry("TestEntry #1", 3);
ncs[4] = new NotifyCounter(template, leaseTime2);
snsh_ncs[4] = new SnapshotNotifyCounter(template, leaseTime2,
space);
// 3-rd wrong template it's snapshot
template = new SimpleEntry("TestEntry #3", 3);
ncs[5] = new NotifyCounter(template, leaseTime3);
snsh_ncs[5] = new SnapshotNotifyCounter(template, leaseTime3,
space);
// 4-th wrong template it's snapshot
template = new SimpleEntry(null, 3);
ncs[6] = new NotifyCounter(template, leaseForeverTime);
snsh_ncs[6] = new SnapshotNotifyCounter(template, leaseForeverTime,
space);
// 5-th wrong template it's snapshot
template = new SimpleEntry("TestEntry #3", null);
ncs[7] = new NotifyCounter(template, leaseTime1);
snsh_ncs[7] = new SnapshotNotifyCounter(template, leaseTime1,
space);
// init counter with null entry as a template and it's snapshot
ncs[8] = new NotifyCounter(null, leaseForeverTime);
snsh_ncs[8] = new SnapshotNotifyCounter(null, leaseForeverTime,
space);
// init 3 counters with null values for different fields
template = new SimpleEntry("TestEntry #1", null);
ncs[9] = new NotifyCounter(template, leaseTime1);
snsh_ncs[9] = new SnapshotNotifyCounter(template, leaseTime1,
space);
// 2-nd template
template = new SimpleEntry(null, 2);
ncs[10] = new NotifyCounter(template, leaseTime2);
snsh_ncs[10] = new SnapshotNotifyCounter(template, leaseTime2,
space);
// 3-rd template
template = new SimpleEntry(null, null);
ncs[11] = new NotifyCounter(template, leaseTime3);
snsh_ncs[11] = new SnapshotNotifyCounter(template, leaseTime3,
space);
// now register all counters with null transaction parameter