Skip to content

Commit

Permalink
test: verify archiver store is idempotent
Browse files Browse the repository at this point in the history
  • Loading branch information
alexghr committed Nov 28, 2023
1 parent 4a85244 commit aa07751
Showing 1 changed file with 78 additions and 1 deletion.
79 changes: 78 additions & 1 deletion yarn-project/archiver/src/archiver/archiver_store_test_suite.ts
Original file line number Diff line number Diff line change
Expand Up @@ -156,14 +156,39 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch
).resolves.toEqual(true);
});

it('allows duplicates', async () => {
it('allows duplicate pending messages in different positions in the same block', async () => {
const message = L1ToL2Message.random(Fr.random());
await expect(
store.addPendingL1ToL2Messages([
new PendingL1ToL2Message(message, 1n, 0),
new PendingL1ToL2Message(message, 1n, 1),
]),
).resolves.toEqual(true);

await expect(store.getPendingL1ToL2MessageKeys(2)).resolves.toEqual([message.entryKey!, message.entryKey!]);
});

it('allows duplicate pending messages in different blocks', async () => {
const message = L1ToL2Message.random(Fr.random());
await expect(
store.addPendingL1ToL2Messages([
new PendingL1ToL2Message(message, 1n, 0),
new PendingL1ToL2Message(message, 2n, 0),
]),
).resolves.toEqual(true);

await expect(store.getPendingL1ToL2MessageKeys(2)).resolves.toEqual([message.entryKey!, message.entryKey!]);
});

it('is idempotent', async () => {
const message = L1ToL2Message.random(Fr.random());
await expect(
store.addPendingL1ToL2Messages([
new PendingL1ToL2Message(message, 1n, 0),
new PendingL1ToL2Message(message, 1n, 0),
]),
).resolves.toEqual(true);
await expect(store.getPendingL1ToL2MessageKeys(2)).resolves.toEqual([message.entryKey!]);
});
});

Expand Down Expand Up @@ -256,6 +281,58 @@ export function describeArchiverDataStore(testName: string, getStore: () => Arch
await store.addPendingL1ToL2Messages([new PendingL1ToL2Message(message, 2n, 0)]);
await expect(store.getPendingL1ToL2MessageKeys(1)).resolves.toEqual([message.entryKey!]);
});

it('allows adding and cancelling in the same block', async () => {
const message = L1ToL2Message.random(Fr.random());
await store.addPendingL1ToL2Messages([new PendingL1ToL2Message(message, 1n, 0)]);
await store.cancelPendingL1ToL2Messages([new CancelledL1ToL2Message(message.entryKey!, 1n, 0)]);
await expect(store.getPendingL1ToL2MessageKeys(1)).resolves.toEqual([]);
});

it('allows duplicates cancellations in different positions in the same block', async () => {
const message = L1ToL2Message.random(Fr.random());
await store.addPendingL1ToL2Messages([
new PendingL1ToL2Message(message, 1n, 0),
new PendingL1ToL2Message(message, 1n, 1),
]);

await store.cancelPendingL1ToL2Messages([
new CancelledL1ToL2Message(message.entryKey!, 2n, 0),
new CancelledL1ToL2Message(message.entryKey!, 2n, 1),
]);

await expect(store.getPendingL1ToL2MessageKeys(2)).resolves.toEqual([]);
});

it('allows duplicates cancellations in different blocks', async () => {
const message = L1ToL2Message.random(Fr.random());
await store.addPendingL1ToL2Messages([
new PendingL1ToL2Message(message, 1n, 0),
new PendingL1ToL2Message(message, 1n, 1),
]);

await store.cancelPendingL1ToL2Messages([
new CancelledL1ToL2Message(message.entryKey!, 2n, 0),
new CancelledL1ToL2Message(message.entryKey!, 3n, 0),
]);

await expect(store.getPendingL1ToL2MessageKeys(2)).resolves.toEqual([]);
});

it('is idempotent', async () => {
const message = L1ToL2Message.random(Fr.random());
await store.addPendingL1ToL2Messages([
new PendingL1ToL2Message(message, 1n, 0),
new PendingL1ToL2Message(message, 1n, 1),
]);

await store.cancelPendingL1ToL2Messages([
new CancelledL1ToL2Message(message.entryKey!, 2n, 0),
new CancelledL1ToL2Message(message.entryKey!, 2n, 0),
]);

await expect(store.getPendingL1ToL2MessageKeys(2)).resolves.toEqual([message.entryKey!]);
});
});

describe('getContractData', () => {
Expand Down

0 comments on commit aa07751

Please sign in to comment.