blob: fa7020ccc038cfb17ce0bbfc843aba3f43851f6f [file] [log] [blame]
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You under the Apache License, Version 2.0
* (the "License"); you may not use this file except in compliance with
* the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
require('jasmine-expect');
const TestingHelper = require('../TestingHelper');
const {IgniteClient, ObjectType, CacheConfiguration, CacheClient, CacheEntry} = require('apache-ignite-client');
const CACHE_NAME = '__test_cache';
describe('cache key value operations test suite >', () => {
let igniteClient = null;
let cache = null;
beforeAll((done) => {
Promise.resolve().
then(async () => {
await TestingHelper.init();
igniteClient = TestingHelper.igniteClient;
await testSuiteCleanup(done);
await igniteClient.getOrCreateCache(CACHE_NAME);
cache = igniteClient.getCache(CACHE_NAME).
setKeyType(ObjectType.PRIMITIVE_TYPE.INTEGER).
setValueType(ObjectType.PRIMITIVE_TYPE.INTEGER);
}).
then(done).
catch(error => done.fail(error));
}, TestingHelper.TIMEOUT);
afterAll((done) => {
Promise.resolve().
then(async () => {
await testSuiteCleanup(done);
await TestingHelper.cleanUp();
}).
then(done).
catch(error => done.fail(error));
}, TestingHelper.TIMEOUT);
it ('get', (done) => {
Promise.resolve().
then(async () => {
try {
let value = await cache.get(1);
expect(value).toBe(null);
await cache.put(1, 2);
value = await cache.get(1);
expect(value).toBe(2);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('get wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined];
for (let arg of wrongArgs) {
try {
let value = await cache.get(arg);
done.fail(`cache.get(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAll', (done) => {
Promise.resolve().
then(async () => {
try {
for (let i = 0; i < 5; i++) {
await cache.put(i, i * 2);
}
let entries = await cache.getAll([3, 4, 5, 6, 7]);
expect(entries.length).toBe(2, 'get all length is incorrect');
for (let entry of entries) {
expect(entry.getKey()).toBeWithinRange(3, 4);
expect(entry.getValue()).toBe(entry.getKey() * 2);
}
entries = await cache.getAll([6, 7, 8]);
expect(entries.length).toBe(0, 'get all length is incorrect');
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAll wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined, 12345, 'abc', []];
for (let arg of wrongArgs) {
try {
let value = await cache.getAll(arg);
done.fail(`cache.getAll(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('put', (done) => {
Promise.resolve().
then(async () => {
try {
let value = await cache.get(1);
expect(value).toBe(null);
await cache.put(1, 2);
value = await cache.get(1);
expect(value).toBe(2);
await cache.put(1, 4);
value = await cache.get(1);
expect(value).toBe(4);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('put wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const args = [null, undefined, 1];
for (let key of args) {
for (let value of args) {
if (key === 1 && value === 1) {
continue;
}
try {
await cache.put(key, value);
done.fail(`cache.put(${key}, ${value}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('putAll', (done) => {
Promise.resolve().
then(async () => {
try {
const cacheEntries = new Array();
for (let i = 0; i < 5; i++) {
cacheEntries.push(new CacheEntry(i, i * 2));
}
await cache.putAll(cacheEntries);
let entries = await cache.getAll([3, 4, 5, 6, 7]);
expect(entries.length).toBe(2, 'get all length is incorrect');
for (let entry of entries) {
expect(entry.getKey()).toBeWithinRange(3, 4);
expect(entry.getValue()).toBe(entry.getKey() * 2);
}
entries = await cache.getAll([-2, -1, 0, 1, 2, 3, 4, 5, 6, 7]);
expect(entries.length).toBe(5, 'get all length is incorrect');
for (let entry of entries) {
expect(entry.getKey()).toBeWithinRange(0, 5);
expect(entry.getValue()).toBe(entry.getKey() * 2);
}
entries = await cache.getAll([6, 7, 8]);
expect(entries.length).toBe(0, 'get all length is incorrect');
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('putAll wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined, 12345, 'abc', [], [new CacheConfiguration()]];
for (let arg of wrongArgs) {
try {
let value = await cache.putAll(arg);
done.fail(`cache.putAll(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('containsKey', (done) => {
Promise.resolve().
then(async () => {
try {
let result = await cache.containsKey(1);
expect(result).toBe(false);
await cache.put(1, 2);
result = await cache.containsKey(1);
expect(result).toBe(true);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('containsKey wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined];
for (let arg of wrongArgs) {
try {
let value = await cache.get(arg);
done.fail(`cache.containsKey(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('containsKeys', (done) => {
Promise.resolve().
then(async () => {
try {
let result = await cache.containsKeys([1, 2, 3]);
expect(result).toBe(false);
await cache.putAll([new CacheEntry(1, 2), new CacheEntry(2, 4)]);
result = await cache.containsKeys([1, 2, 3]);
expect(result).toBe(false);
await cache.put(3, 6);
result = await cache.containsKeys([1, 2, 3]);
expect(result).toBe(true);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('containsKeys wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined, [], 12345, 'abc'];
for (let arg of wrongArgs) {
try {
let value = await cache.containsKeys(arg);
done.fail(`cache.containsKeys(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAndPut', (done) => {
Promise.resolve().
then(async () => {
try {
let value = await cache.getAndPut(1, 2);
expect(value).toBe(null);
value = await cache.getAndPut(1, 4);
expect(value).toBe(2);
await cache.put(1, 6);
value = await cache.getAndPut(1, 8);
expect(value).toBe(6);
value = await cache.get(1);
expect(value).toBe(8);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAndPut wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const args = [null, undefined, 1];
for (let key of args) {
for (let value of args) {
if (key === 1 && value === 1) {
continue;
}
try {
await cache.getAndPut(key, value);
done.fail(`cache.getAndPut(${key}, ${value}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAndReplace', (done) => {
Promise.resolve().
then(async () => {
try {
let value = await cache.getAndReplace(1, 2);
expect(value).toBe(null);
await cache.put(1, 4);
value = await cache.getAndReplace(1, 6);
expect(value).toBe(4);
value = await cache.get(1);
expect(value).toBe(6);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAndReplace wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const args = [null, undefined, 1];
for (let key of args) {
for (let value of args) {
if (key === 1 && value === 1) {
continue;
}
try {
await cache.getAndReplace(key, value);
done.fail(`cache.getAndReplace(${key}, ${value}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAndRemove', (done) => {
Promise.resolve().
then(async () => {
try {
let value = await cache.getAndRemove(1);
expect(value).toBe(null);
await cache.put(1, 2);
value = await cache.getAndRemove(1);
expect(value).toBe(2);
value = await cache.get(1);
expect(value).toBe(null);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAndRemove wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const args = [null, undefined];
for (let key of args) {
try {
await cache.getAndRemove(key);
done.fail(`cache.getAndRemove(${key}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('putIfAbsent', (done) => {
Promise.resolve().
then(async () => {
try {
let result = await cache.putIfAbsent(1, 2);
expect(result).toBe(true);
let value = await cache.get(1);
expect(value).toBe(2);
result = await cache.putIfAbsent(1, 4);
expect(result).toBe(false);
value = await cache.get(1);
expect(value).toBe(2);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('putIfAbsent wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const args = [null, undefined, 1];
for (let key of args) {
for (let value of args) {
if (key === 1 && value === 1) {
continue;
}
try {
await cache.putIfAbsent(key, value);
done.fail(`cache.putIfAbsent(${key}, ${value}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAndPutIfAbsent', (done) => {
Promise.resolve().
then(async () => {
try {
let value = await cache.getAndPutIfAbsent(1, 2);
expect(value).toBe(null);
value = await cache.get(1);
expect(value).toBe(2);
value = await cache.getAndPutIfAbsent(1, 4);
expect(value).toBe(2);
value = await cache.get(1);
expect(value).toBe(2);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getAndPutIfAbsent wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const args = [null, undefined, 1];
for (let key of args) {
for (let value of args) {
if (key === 1 && value === 1) {
continue;
}
try {
await cache.getAndPutIfAbsent(key, value);
done.fail(`cache.getAndPutIfAbsent(${key}, ${value}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('replace', (done) => {
Promise.resolve().
then(async () => {
try {
let result = await cache.replace(1, 2);
expect(result).toBe(false);
let value = await cache.get(1);
expect(value).toBe(null);
await cache.put(1, 1);
result = await cache.replace(1, 4);
expect(result).toBe(true);
value = await cache.get(1);
expect(value).toBe(4);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('replace wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const args = [null, undefined, 1];
for (let key of args) {
for (let value of args) {
if (key === 1 && value === 1) {
continue;
}
try {
await cache.replace(key, value);
done.fail(`cache.replace(${key}, ${value}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('replaceIfEquals', (done) => {
Promise.resolve().
then(async () => {
try {
let result = await cache.replaceIfEquals(1, 2, 3);
expect(result).toBe(false);
await cache.put(1, 4);
result = await cache.replaceIfEquals(1, 2, 3);
expect(result).toBe(false);
let value = await cache.get(1);
expect(value).toBe(4);
result = await cache.replaceIfEquals(1, 4, 3);
expect(result).toBe(true);
value = await cache.get(1);
expect(value).toBe(3);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('replaceIfEquals wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const args = [null, undefined, 1];
for (let key of args) {
for (let value of args) {
for (let newValue of args) {
if (key === 1 && value === 1 && newValue === 1) {
continue;
}
try {
await cache.replaceIfEquals(key, value, newValue);
done.fail(`cache.replaceIfEquals(${key}, ${value}, ${newValue}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('clear', (done) => {
Promise.resolve().
then(async () => {
try {
await cache.clear();
let result = await cache.getSize();
expect(result).toBe(0);
await cache.putAll([new CacheEntry(1, 2), new CacheEntry(2, 4), new CacheEntry(3, 6)]);
result = await cache.getSize();
expect(result).toBe(3);
await cache.clear();
result = await cache.getSize();
expect(result).toBe(0);
let entries = await cache.getAll([1, 2, 3]);
expect(entries.length).toBe(0, 'get all length is incorrect');
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('clearKeys', (done) => {
Promise.resolve().
then(async () => {
try {
await cache.clearKeys([1, 2, 3]);
let result = await cache.getSize();
expect(result).toBe(0);
await cache.putAll([new CacheEntry(1, 2), new CacheEntry(2, 4), new CacheEntry(3, 6)]);
result = await cache.getSize();
expect(result).toBe(3);
await cache.clearKeys([1, 2, 7, 8]);
result = await cache.getSize();
expect(result).toBe(1);
let value = await cache.get(3);
expect(value).toBe(6);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('clearKeys wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined, [], 12345, 'abc'];
for (let arg of wrongArgs) {
try {
let value = await cache.clearKeys(arg);
done.fail(`cache.clearKeys(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('clearKey', (done) => {
Promise.resolve().
then(async () => {
try {
await cache.clearKey(1);
let result = await cache.getSize();
expect(result).toBe(0);
await cache.putAll([new CacheEntry(1, 2), new CacheEntry(2, 4), new CacheEntry(3, 6)]);
result = await cache.getSize();
expect(result).toBe(3);
await cache.clearKey(1);
result = await cache.getSize();
expect(result).toBe(2);
let value = await cache.get(2);
expect(value).toBe(4);
value = await cache.get(3);
expect(value).toBe(6);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('clearKey wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined];
for (let arg of wrongArgs) {
try {
let value = await cache.clearKey(arg);
done.fail(`cache.clearKey(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('removeKey', (done) => {
Promise.resolve().
then(async () => {
try {
let result = await cache.removeKey(1);
expect(result).toBe(false);
result = await cache.getSize();
expect(result).toBe(0);
await cache.putAll([new CacheEntry(1, 2), new CacheEntry(2, 4), new CacheEntry(3, 6)]);
result = await cache.getSize();
expect(result).toBe(3);
result = await cache.removeKey(1);
expect(result).toBe(true);
result = await cache.removeKey(1);
expect(result).toBe(false);
result = await cache.getSize();
expect(result).toBe(2);
let value = await cache.get(2);
expect(value).toBe(4);
value = await cache.get(3);
expect(value).toBe(6);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('removeKey wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined];
for (let arg of wrongArgs) {
try {
let value = await cache.removeKey(arg);
done.fail(`cache.removeKey(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('removeIfEquals', (done) => {
Promise.resolve().
then(async () => {
try {
let result = await cache.removeIfEquals(1, 2);
expect(result).toBe(false);
await cache.put(1, 4);
result = await cache.removeIfEquals(1, 2);
expect(result).toBe(false);
result = await cache.removeIfEquals(1, 4);
expect(result).toBe(true);
let value = await cache.get(1);
expect(value).toBe(null);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('removeIfEquals wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const args = [null, undefined, 1];
for (let key of args) {
for (let value of args) {
if (key === 1 && value === 1) {
continue;
}
try {
await cache.removeIfEquals(key, value);
done.fail(`cache.removeIfEquals(${key}, ${value}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('removeKeys', (done) => {
Promise.resolve().
then(async () => {
try {
await cache.removeKeys([1, 2, 3]);
let result = await cache.getSize();
expect(result).toBe(0);
await cache.putAll([new CacheEntry(1, 2), new CacheEntry(2, 4), new CacheEntry(3, 6)]);
result = await cache.getSize();
expect(result).toBe(3);
await cache.removeKeys([1, 2, 7, 8]);
result = await cache.getSize();
expect(result).toBe(1);
let value = await cache.get(3);
expect(value).toBe(6);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('removeKeys wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined, [], 12345, 'abc'];
for (let arg of wrongArgs) {
try {
let value = await cache.removeKeys(arg);
done.fail(`cache.removeKeys(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('removeAll', (done) => {
Promise.resolve().
then(async () => {
try {
await cache.removeAll();
let result = await cache.getSize();
expect(result).toBe(0);
await cache.putAll([new CacheEntry(1, 2), new CacheEntry(2, 4), new CacheEntry(3, 6)]);
result = await cache.getSize();
expect(result).toBe(3);
await cache.removeAll();
result = await cache.getSize();
expect(result).toBe(0);
let entries = await cache.getAll([1, 2, 3]);
expect(entries.length).toBe(0, 'get all length is incorrect');
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getSize', (done) => {
Promise.resolve().
then(async () => {
try {
let result = await cache.getSize();
expect(result).toBe(0);
await cache.putAll([new CacheEntry(1, 2), new CacheEntry(2, 4), new CacheEntry(3, 6)]);
result = await cache.getSize();
expect(result).toBe(3);
result = await cache.getSize(CacheClient.PEEK_MODE.ALL);
expect(result).toBe(3);
result = await cache.getSize(CacheClient.PEEK_MODE.ALL, CacheClient.PEEK_MODE.ALL);
expect(result).toBe(3);
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
it ('getSize wrong args', (done) => {
Promise.resolve().
then(async () => {
try {
const wrongArgs = [null, undefined, [], 12345, 'abc', [12345], ['abc', 'def']];
for (let arg of wrongArgs) {
try {
let value = await cache.getSize(arg);
done.fail(`cache.getSize(${arg}) is allowed`);
}
catch (err) {
TestingHelper.checkIllegalArgumentError(err, done);
}
}
}
finally {
await cache.removeAll();
}
}).
then(done).
catch(error => done.fail(error));
});
async function testSuiteCleanup(done) {
await TestingHelper.destroyCache(CACHE_NAME, done);
}
});