Files
dolt/js/src/put-cache-test.js

89 lines
2.7 KiB
JavaScript

// @flow
// Copyright 2016 Attic Labs, Inc. All rights reserved.
// Licensed under the Apache License, version 2.0:
// http://www.apache.org/licenses/LICENSE-2.0
import {suite, test} from 'mocha';
import {assert} from 'chai';
import {notNull} from './assert.js';
import OrderedPutCache from './put-cache.js';
import Chunk from './chunk.js';
suite('OrderedPutCache', () => {
test('append', async () => {
const canned = [Chunk.fromString('abc'), Chunk.fromString('def')];
const cache = new OrderedPutCache();
assert.isTrue(cache.append(canned[0]));
assert.isTrue(cache.append(canned[1]));
await cache.destroy();
});
test('repeated append returns false', async () => {
const canned = [Chunk.fromString('abc'), Chunk.fromString('def')];
const cache = new OrderedPutCache();
assert.isTrue(cache.append(canned[0]));
assert.isTrue(cache.append(canned[1]));
assert.isFalse(cache.append(canned[0]));
await cache.destroy();
});
test('get', async () => {
const canned = [Chunk.fromString('abc'), Chunk.fromString('def')];
const cache = new OrderedPutCache();
assert.isTrue(cache.append(canned[0]));
let p = cache.get(canned[1].hash.toString());
assert.isNull(p);
assert.isTrue(cache.append(canned[1]));
p = cache.get(canned[1].hash.toString());
assert.isNotNull(p);
const chunk = await notNull(p);
assert.isTrue(canned[1].hash.equals(chunk.hash));
await cache.destroy();
});
test('dropUntil', async () => {
const canned = [Chunk.fromString('abc'), Chunk.fromString('def'), Chunk.fromString('ghi')];
const cache = new OrderedPutCache();
for (const chunk of canned) {
assert.isTrue(cache.append(chunk));
}
await cache.dropUntil(canned[1].hash.toString());
let p = cache.get(canned[2].hash.toString());
assert.isNotNull(p);
const chunk = await notNull(p);
assert.isTrue(canned[2].hash.equals(chunk.hash));
p = cache.get(canned[0].hash.toString());
assert.isNull(p);
p = cache.get(canned[1].hash.toString());
assert.isNull(p);
await cache.destroy();
});
test('extractChunks', async () => {
const canned = [Chunk.fromString('abc'), Chunk.fromString('def'), Chunk.fromString('ghi')];
const cache = new OrderedPutCache();
for (const chunk of canned) {
assert.isTrue(cache.append(chunk));
}
const chunkStream = await cache.extractChunks(canned[0].hash.toString(),
canned[2].hash.toString());
const chunks = [];
await chunkStream(chunk => { chunks.push(chunk); });
for (let i = 0; i < canned.length; i++) {
assert.isTrue(canned[i].hash.equals(chunks[i].hash));
}
await cache.destroy();
});
});