[8.6] Xadd changes by nkaradzhov · Pull Request #3161 · redis/node-redis
Expand Up
@@ -110,6 +110,67 @@ describe('XADD', () => {
['XADD', 'key', 'MAXLEN', '~', '1000', 'LIMIT', '100', 'ACKED', '*', 'field', 'value']
);
});
it('with policy', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.KEEPREF }), ['XADD', 'key', 'KEEPREF', '*', 'field', 'value'] ); });
it('with IDMPAUTO', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { IDMPAUTO: { pid: 'producer1' } }), ['XADD', 'key', 'IDMPAUTO', 'producer1', '*', 'field', 'value'] ); });
it('with IDMP', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { IDMP: { pid: 'producer1', iid: '42' } }), ['XADD', 'key', 'IDMP', 'producer1', '42', '*', 'field', 'value'] ); });
it('with policy and IDMPAUTO', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.DELREF, IDMPAUTO: { pid: 'producer1' } }), ['XADD', 'key', 'DELREF', 'IDMPAUTO', 'producer1', '*', 'field', 'value'] ); });
it('with policy, IDMP, and TRIM', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.ACKED, IDMP: { pid: 'producer1', iid: 'msg123' }, TRIM: { strategy: 'MAXLEN', threshold: 1000 } }), ['XADD', 'key', 'ACKED', 'IDMP', 'producer1', 'msg123', 'MAXLEN', '1000', '*', 'field', 'value'] ); }); });
testUtils.testAll('xAdd', async client => { Expand All @@ -128,7 +189,7 @@ describe('XADD', () => { 'xAdd with TRIM policy', async (client) => { assert.equal( typeof await client.xAdd('{tag}key', '*', typeof await client.xAdd('{tag}key', '*', { field: 'value' }, { TRIM: { Expand All @@ -151,7 +212,7 @@ describe('XADD', () => { 'xAdd with all TRIM options', async (client) => { assert.equal( typeof await client.xAdd('{tag}key2', '*', typeof await client.xAdd('{tag}key2', '*', { field: 'value' }, { TRIM: { Expand All @@ -171,4 +232,99 @@ describe('XADD', () => { cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 2] }, } );
testUtils.testAll( 'xAdd with policy', async (client) => { assert.equal( typeof await client.xAdd('{tag}key3', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.KEEPREF } ), 'string' ); }, { client: { ...GLOBAL.SERVERS.OPEN, minimumDockerVersion: [8, 6] }, cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 6] }, } );
testUtils.testAll( 'xAdd with IDMPAUTO', async (client) => { const id1 = await client.xAdd('{tag}key4', '*', { field1: 'value1', field2: 'value2' }, { IDMPAUTO: { pid: 'producer1' } } ); assert.equal(typeof id1, 'string');
// Adding the same content with same producer should return the same ID (idempotent) const id2 = await client.xAdd('{tag}key4', '*', { field1: 'value1', field2: 'value2' }, { IDMPAUTO: { pid: 'producer1' } } ); assert.equal(id1, id2); }, { client: { ...GLOBAL.SERVERS.OPEN, minimumDockerVersion: [8, 6] }, cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 6] }, } );
testUtils.testAll( 'xAdd with IDMP', async (client) => { const id1 = await client.xAdd('{tag}key5', '*', { field: 'value' }, { IDMP: { pid: 'producer1', iid: '42' } } ); assert.equal(typeof id1, 'string');
// Adding with same producer and iid should return the same ID (idempotent) const id2 = await client.xAdd('{tag}key5', '*', { field: 'value' }, { IDMP: { pid: 'producer1', iid: '42' } } ); assert.equal(id1, id2); }, { client: { ...GLOBAL.SERVERS.OPEN, minimumDockerVersion: [8, 6] }, cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 6] }, } );
testUtils.testAll( 'xAdd with policy, IDMP, and TRIM', async (client) => { assert.equal( typeof await client.xAdd('{tag}key6', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.ACKED, IDMP: { pid: 'producer1', iid: 'msg123' }, TRIM: { strategy: 'MAXLEN', threshold: 1000 } } ), 'string' ); }, { client: { ...GLOBAL.SERVERS.OPEN, minimumDockerVersion: [8, 6] }, cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 6] }, } ); });
it('with policy', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.KEEPREF }), ['XADD', 'key', 'KEEPREF', '*', 'field', 'value'] ); });
it('with IDMPAUTO', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { IDMPAUTO: { pid: 'producer1' } }), ['XADD', 'key', 'IDMPAUTO', 'producer1', '*', 'field', 'value'] ); });
it('with IDMP', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { IDMP: { pid: 'producer1', iid: '42' } }), ['XADD', 'key', 'IDMP', 'producer1', '42', '*', 'field', 'value'] ); });
it('with policy and IDMPAUTO', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.DELREF, IDMPAUTO: { pid: 'producer1' } }), ['XADD', 'key', 'DELREF', 'IDMPAUTO', 'producer1', '*', 'field', 'value'] ); });
it('with policy, IDMP, and TRIM', () => { assert.deepEqual( parseArgs(XADD, 'key', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.ACKED, IDMP: { pid: 'producer1', iid: 'msg123' }, TRIM: { strategy: 'MAXLEN', threshold: 1000 } }), ['XADD', 'key', 'ACKED', 'IDMP', 'producer1', 'msg123', 'MAXLEN', '1000', '*', 'field', 'value'] ); }); });
testUtils.testAll('xAdd', async client => { Expand All @@ -128,7 +189,7 @@ describe('XADD', () => { 'xAdd with TRIM policy', async (client) => { assert.equal( typeof await client.xAdd('{tag}key', '*', typeof await client.xAdd('{tag}key', '*', { field: 'value' }, { TRIM: { Expand All @@ -151,7 +212,7 @@ describe('XADD', () => { 'xAdd with all TRIM options', async (client) => { assert.equal( typeof await client.xAdd('{tag}key2', '*', typeof await client.xAdd('{tag}key2', '*', { field: 'value' }, { TRIM: { Expand All @@ -171,4 +232,99 @@ describe('XADD', () => { cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 2] }, } );
testUtils.testAll( 'xAdd with policy', async (client) => { assert.equal( typeof await client.xAdd('{tag}key3', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.KEEPREF } ), 'string' ); }, { client: { ...GLOBAL.SERVERS.OPEN, minimumDockerVersion: [8, 6] }, cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 6] }, } );
testUtils.testAll( 'xAdd with IDMPAUTO', async (client) => { const id1 = await client.xAdd('{tag}key4', '*', { field1: 'value1', field2: 'value2' }, { IDMPAUTO: { pid: 'producer1' } } ); assert.equal(typeof id1, 'string');
// Adding the same content with same producer should return the same ID (idempotent) const id2 = await client.xAdd('{tag}key4', '*', { field1: 'value1', field2: 'value2' }, { IDMPAUTO: { pid: 'producer1' } } ); assert.equal(id1, id2); }, { client: { ...GLOBAL.SERVERS.OPEN, minimumDockerVersion: [8, 6] }, cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 6] }, } );
testUtils.testAll( 'xAdd with IDMP', async (client) => { const id1 = await client.xAdd('{tag}key5', '*', { field: 'value' }, { IDMP: { pid: 'producer1', iid: '42' } } ); assert.equal(typeof id1, 'string');
// Adding with same producer and iid should return the same ID (idempotent) const id2 = await client.xAdd('{tag}key5', '*', { field: 'value' }, { IDMP: { pid: 'producer1', iid: '42' } } ); assert.equal(id1, id2); }, { client: { ...GLOBAL.SERVERS.OPEN, minimumDockerVersion: [8, 6] }, cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 6] }, } );
testUtils.testAll( 'xAdd with policy, IDMP, and TRIM', async (client) => { assert.equal( typeof await client.xAdd('{tag}key6', '*', { field: 'value' }, { policy: STREAM_DELETION_POLICY.ACKED, IDMP: { pid: 'producer1', iid: 'msg123' }, TRIM: { strategy: 'MAXLEN', threshold: 1000 } } ), 'string' ); }, { client: { ...GLOBAL.SERVERS.OPEN, minimumDockerVersion: [8, 6] }, cluster: { ...GLOBAL.CLUSTERS.OPEN, minimumDockerVersion: [8, 6] }, } ); });