-
Notifications
You must be signed in to change notification settings - Fork 36
/
visitor.test.ts
126 lines (114 loc) · 3.1 KB
/
visitor.test.ts
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
import {expect} from '@esm-bundle/chai';
import * as dag from '../dag/mod';
import {
addGenesis,
addIndexChange,
addLocal,
addSnapshot,
Chain,
} from './test-helpers';
import {fakeHash} from '../hash';
import type {Node} from '../btree/node';
import type {ReadonlyJSONValue} from '../json';
import {Visitor} from './visitor';
import {Commit, Meta, newLocal} from './commit';
test('test that we get to the data nodes', async () => {
const dagStore = new dag.TestStore();
const log: ReadonlyJSONValue[] = [];
const chain: Chain = [];
class TestVisitor extends Visitor {
override async visitBTreeNodeChunk(chunk: dag.Chunk<Node>) {
log.push(chunk.data[1]);
}
}
const t = async (commit: Commit<Meta>, expected: ReadonlyJSONValue[]) => {
log.length = 0;
await dagStore.withRead(async dagRead => {
const visitor = new TestVisitor(dagRead);
await visitor.visitCommit(commit.chunk.hash);
expect(log).to.deep.equal(expected);
});
};
await addGenesis(chain, dagStore);
await t(chain[0], [[]]);
await addLocal(chain, dagStore);
await t(chain[1], [[['local', '1']], []]);
await addIndexChange(chain, dagStore);
await t(chain[2], [[['local', '1']], [['\u00001\u0000local', '1']], []]);
await addLocal(chain, dagStore);
await t(chain[3], [
[['local', '3']],
[['\u00003\u0000local', '3']],
[['local', '1']],
[['\u00001\u0000local', '1']],
[],
]);
await addSnapshot(chain, dagStore, [['k', 42]]);
await t(chain[4], [
[
['k', 42],
['local', '3'],
],
[['\u00003\u0000local', '3']],
]);
// await addLocal(chain, dagStore);
// const syncChain = await addSyncSnapshot(chain, dagStore, chain.length - 1);
// await t(syncChain[0], [
// [
// ['k', 42],
// ['local', '3'],
// ],
// [['\u00005\u0000local', '5']],
// [['\u00003\u0000local', '3']],
// ]);
const localCommit = await dagStore.withWrite(async dagWrite => {
const prevCommit = chain[chain.length - 1];
const localCommit = newLocal(
dagWrite.createChunk,
prevCommit.chunk.hash,
42,
'mutname',
[],
fakeHash('none'),
prevCommit.valueHash,
prevCommit.indexes,
88,
);
await dagWrite.putChunk(localCommit.chunk);
await dagWrite.setHead('test', localCommit.chunk.hash);
await dagWrite.commit();
return localCommit;
});
await t(localCommit, [
[
['k', 42],
['local', '3'],
],
[['\u00003\u0000local', '3']],
]);
const localCommit2 = await dagStore.withWrite(async dagWrite => {
const prevCommit = chain[chain.length - 1];
const localCommit2 = newLocal(
dagWrite.createChunk,
prevCommit.chunk.hash,
42,
'mutname',
[],
localCommit.chunk.hash,
prevCommit.valueHash,
prevCommit.indexes,
88,
);
await dagWrite.putChunk(localCommit2.chunk);
await dagWrite.setHead('test2', localCommit2.chunk.hash);
await dagWrite.commit();
return localCommit2;
});
await t(localCommit2, [
[
['k', 42],
['local', '3'],
],
[['\u00003\u0000local', '3']],
]);
});