metaapi.cloud-sdk
Version:
SDK for MetaApi, a professional cloud forex API which includes MetaTrader REST API and MetaTrader websocket API. Supports both MetaTrader 5 (MT5) and MetaTrader 4 (MT4). CopyFactory copy trading API included. (https://metaapi.cloud)
157 lines (121 loc) • 3.93 kB
text/typescript
;
import UsageCounter from './usageCounter';
import 'should';
/**
* @test {UsageCounter}
*/
describe('UsageCounter', () => {
let counter: UsageCounter;
beforeEach(() => {
counter = new UsageCounter();
});
/**
* @test {UsageCounter#acquire}
*/
describe('acquire', () => {
/**
* @test {UsageCounter#acquire}
*/
it('should acquire key', () => {
counter.acquire('key1', 'usage1');
counter.acquire('key1', 'usage1');
counter.acquire('key1', 'usage2');
counter.acquire('key2', 'usage1');
counter.isAcquiredBy('key1', 'usage1').should.be.true();
counter.isAcquiredBy('key1', 'usage2').should.be.true();
counter.isAcquiredBy('key1', 'usage3').should.be.false();
counter.isAcquiredBy('key2', 'usage1').should.be.true();
counter.isAcquiredBy('key2', 'usage2').should.be.false();
counter.isAcquiredBy('key3', 'usage1').should.be.false();
});
});
/**
* @test {UsageCounter#release}
*/
describe('release', () => {
/**
* @test {UsageCounter#release}
*/
it('should release key', () => {
counter.acquire('key1', 'usage1');
counter.acquire('key1', 'usage2');
counter.release('key1', 'usage1');
counter.isInUse('key1').should.be.true();
counter.release('key1', 'usage3');
counter.release('key2', 'usage2');
counter.isInUse('key1').should.be.true();
counter.release('key1', 'usage2');
counter.isInUse('key1').should.be.false();
});
});
/**
* @test {UsageCounter#isInUse}
*/
describe('isInUse', () => {
/**
* @test {UsageCounter#isInUse}
*/
it('should return if a key is in use', () => {
counter.isInUse('key1').should.be.false();
counter.acquire('key1', 'usage1');
counter.acquire('key1', 'usage2');
counter.isInUse('key1').should.be.true();
counter.release('key1', 'usage1');
counter.isInUse('key1').should.be.true();
counter.release('key1', 'usage2');
counter.isInUse('key1').should.be.false();
});
});
/**
* @test {UsageCounter#getUsageIds}
*/
describe('getUsageIds', () => {
/**
* @test {UsageCounter#getUsageIds}
*/
it('should return usage IDs of a key', () => {
counter.getUsages('key1').should.deepEqual(new Set());
counter.acquire('key1', 'usage1');
counter.acquire('key1', 'usage1');
counter.acquire('key1', 'usage2');
counter.acquire('key2', 'usage3');
counter.getUsages('key1').should.deepEqual(new Set(['usage1', 'usage2']));
});
});
/**
* @test {UsageCounter#isAcquiredBy}
*/
describe('isAcquiredBy', () => {
/**
* @test {UsageCounter#isAcquiredBy}
*/
it('should return if a key is acquired by specific usage ID', () => {
counter.isAcquiredBy('key1', 'usage1').should.be.false();
counter.acquire('key1', 'usage1');
counter.acquire('key1', 'usage1');
counter.isAcquiredBy('key1', 'usage1').should.be.true();
counter.isAcquiredBy('key1', 'usage2').should.be.false();
counter.release('key1', 'usage1');
counter.isAcquiredBy('key1', 'usage1').should.be.false();
});
});
/**
* @test {UsageCounter#getAcquiredBy}
*/
describe('getAcquiredBy', () => {
/**
* @test {UsageCounter#getAcquiredBy}
*/
it('should return keys acquired by specified usage ID', () => {
counter.getAcquiredBy('usage1').should.deepEqual([]);
counter.acquire('key1', 'usage1');
counter.acquire('key2', 'usage1');
counter.acquire('key3', 'usage2');
counter.getAcquiredBy('usage1').should.deepEqual(['key1', 'key2']);
counter.release('key1', 'usage1');
counter.getAcquiredBy('usage1').should.deepEqual(['key2']);
counter.release('key2', 'usage1');
counter.getAcquiredBy('usage1').should.deepEqual([]);
});
});
});