diff --git a/lib/client/handlers/initialization.js b/lib/client/handlers/initialization.js index ec4255302..308c01261 100644 --- a/lib/client/handlers/initialization.js +++ b/lib/client/handlers/initialization.js @@ -52,7 +52,7 @@ module.exports = function (jiffClient) { * @memberof handlers */ jiffClient.handlers.connected = function () { - console.log('Connected!', jiffClient.id); // TODO: remove debugging + console.log('Connected!', jiffClient.id); // TODO: remove debugging - the id is null unless id set in advance jiffClient.initialization_counter++; if (jiffClient.secret_key == null && jiffClient.public_key == null) { @@ -91,6 +91,8 @@ module.exports = function (jiffClient) { // store the received public keys and resolve wait callbacks jiffClient.handlers.store_public_keys(msg.public_keys); + + jiffClient.resolveInit(); // This ensures the id assignment }; /** diff --git a/lib/jiff-client.js b/lib/jiff-client.js index cdb00ea02..49465b968 100644 --- a/lib/jiff-client.js +++ b/lib/jiff-client.js @@ -427,6 +427,11 @@ function JIFFClient(hostname, computation_id, options) { // set up counters for op_ids counters(this); + this.initPromise = new Promise((resolve, reject) => { + this.resolveInit = resolve; + this.rejectInit = reject; + }); + this.socketConnect = function (JIFFClientInstance) { if (options.__internal_socket == null) { /** diff --git a/tests/regr-tests/arithmetics.test.ts b/tests/regr-tests/arithmetics.test.ts index 883158047..d5e187091 100644 --- a/tests/regr-tests/arithmetics.test.ts +++ b/tests/regr-tests/arithmetics.test.ts @@ -1,7 +1,7 @@ describe('JIFF Arithmetic Operations', () => { const init_server = require('./server'); + const createClient = require('./common'); const jiff_s_bignumber = require('../../lib/ext/jiff-server-bignumber.js'); - const JIFFClient = require('../../lib/jiff-client.js'); const jiff_bignumber = require('../../lib/ext/jiff-client-bignumber.js'); const jiff_fixedpoint = require('../../lib/ext/jiff-client-fixedpoint.js'); const jiff_negativenumber = require('../../lib/ext/jiff-client-negativenumber.js'); @@ -30,7 +30,7 @@ describe('JIFF Arithmetic Operations', () => { Zp: 562949948117 }; - jiffClients = Array.from({ length: party_count }, () => new JIFFClient(baseUrl, computation_id, options)); + jiffClients = await Promise.all(Array.from({ length: party_count }, (_, index) => createClient(baseUrl, computation_id, options, index))); async function apply_extension(jiff: any) { await jiff.apply_extension(jiff_bignumber, options); diff --git a/tests/regr-tests/array.test.ts b/tests/regr-tests/array.test.ts index be8d4235f..2f6cf9239 100644 --- a/tests/regr-tests/array.test.ts +++ b/tests/regr-tests/array.test.ts @@ -1,6 +1,6 @@ describe('JIFF Array Operations', () => { const init_server = require('./server'); - const JIFFClient = require('../../lib/jiff-client.js'); + const createClient = require('./common'); let jiffClients: any[] = []; let jiffServer: any; @@ -24,7 +24,7 @@ describe('JIFF Array Operations', () => { crypto_provider: true }; - jiffClients = Array.from({ length: party_count }, () => new JIFFClient(baseUrl, computation_id, options)); + jiffClients = await Promise.all(Array.from({ length: party_count }, (_, index) => createClient(baseUrl, computation_id, options, index))); }); afterEach(async () => { diff --git a/tests/regr-tests/bit-preprocess.test.ts b/tests/regr-tests/bit-preprocess.test.ts index 3090f7187..835162fd2 100644 --- a/tests/regr-tests/bit-preprocess.test.ts +++ b/tests/regr-tests/bit-preprocess.test.ts @@ -1,7 +1,7 @@ describe('JIFF Preprocessing Operations', () => { const init_server = require('./server'); + const createClient = require('./common'); const jiff_s_bignumber = require('../../lib/ext/jiff-server-bignumber.js'); - const JIFFClient = require('../../lib/jiff-client.js'); const jiff_bignumber = require('../../lib/ext/jiff-client-bignumber.js'); const jiff_fixedpoint = require('../../lib/ext/jiff-client-fixedpoint.js'); @@ -27,7 +27,7 @@ describe('JIFF Preprocessing Operations', () => { crypto_provider: true }; - jiffClients = Array.from({ length: party_count }, () => new JIFFClient(baseUrl, computation_id, options)); + jiffClients = await Promise.all(Array.from({ length: party_count }, (_, index) => createClient(baseUrl, computation_id, options, index))); async function apply_extension(jiff: any) { await jiff.apply_extension(jiff_bignumber, options); @@ -46,17 +46,19 @@ describe('JIFF Preprocessing Operations', () => { }); it('should correctly preprocess bitwise operation and return 3000', async () => { - async function bit_smult(jiffClient: any, id: number) { - await jiffClient.preprocessing('smult', 2, 'bits', null, null, null, null, null, { div: false }); - await jiffClient.preprocessing('open', 1); + function bit_smult(jiffClient: any, id: number) { + jiffClient.preprocessing('smult', 2, null, null, null, null, null, null, { div: false }); + jiffClient.preprocessing('open', 1); return new Promise((resolve, reject) => { jiffClient.wait_for([1, 2], async () => { try { - const jiff_bits = jiffClient.protocols.bits; - const input = await jiff_bits.share(entries[id]); - const sec_ttl = await jiff_bits.smult(input[1], input[2]); - const result = await jiff_bits.open(sec_ttl); - resolve(result.toString(10)); + await jiffClient.executePreprocessing(async function () { + const jiff_bits = jiffClient.protocols.bits; + const input = await jiff_bits.share(entries[id]); + const sec_ttl = await jiff_bits.smult(input[1], input[2]); + const result = await jiff_bits.open(sec_ttl); + resolve(result.toString(10)); + }); } catch (error) { reject(error); } diff --git a/tests/regr-tests/bitwise-comp.test.ts b/tests/regr-tests/bitwise-comp.test.ts index fe2456950..3250075a6 100644 --- a/tests/regr-tests/bitwise-comp.test.ts +++ b/tests/regr-tests/bitwise-comp.test.ts @@ -1,5 +1,6 @@ describe('JIFF bitshare Comparison', () => { const init_server = require('./server'); + const createClient = require('./common'); const jiff_s_bignumber = require('../../lib/ext/jiff-server-bignumber.js'); const JIFFClient = require('../../lib/jiff-client.js'); const jiff_bignumber = require('../../lib/ext/jiff-client-bignumber.js'); @@ -27,7 +28,7 @@ describe('JIFF bitshare Comparison', () => { crypto_provider: true }; - jiffClients = Array.from({ length: party_count }, () => new JIFFClient(baseUrl, computation_id, options)); + jiffClients = await Promise.all(Array.from({ length: party_count }, (_, index) => createClient(baseUrl, computation_id, options, index))); async function apply_extension(jiff: any) { await jiff.apply_extension(jiff_bignumber, options); diff --git a/tests/regr-tests/bitwise-ops.test.ts b/tests/regr-tests/bitwise-ops.test.ts index e128ae9f2..a24f90fff 100644 --- a/tests/regr-tests/bitwise-ops.test.ts +++ b/tests/regr-tests/bitwise-ops.test.ts @@ -1,7 +1,7 @@ describe('JIFF bitwise Arithmetic Operations', () => { const init_server = require('./server'); + const createClient = require('./common'); const jiff_s_bignumber = require('../../lib/ext/jiff-server-bignumber.js'); - const JIFFClient = require('../../lib/jiff-client.js'); const jiff_bignumber = require('../../lib/ext/jiff-client-bignumber.js'); const jiff_fixedpoint = require('../../lib/ext/jiff-client-fixedpoint.js'); const jiff_negativenumber = require('../../lib/ext/jiff-client-negativenumber.js'); @@ -28,7 +28,7 @@ describe('JIFF bitwise Arithmetic Operations', () => { crypto_provider: true }; - jiffClients = Array.from({ length: party_count }, () => new JIFFClient(baseUrl, computation_id, options)); + jiffClients = await Promise.all(Array.from({ length: party_count }, (_, index) => createClient(baseUrl, computation_id, options, index))); async function apply_extension(jiff: any) { await jiff.apply_extension(jiff_bignumber, options); diff --git a/tests/regr-tests/common.ts b/tests/regr-tests/common.ts new file mode 100644 index 000000000..0b7f06e2f --- /dev/null +++ b/tests/regr-tests/common.ts @@ -0,0 +1,9 @@ +const JIFFClient = require('../../lib/jiff-client.js'); + +async function createClient(baseUrl: string, computation_id: string, options: any) { + const clientOptions = { ...options }; + const client = new JIFFClient(baseUrl, computation_id, clientOptions); + await client.initPromise; + return client; +} +module.exports = createClient; diff --git a/tests/regr-tests/preprocess.test.ts b/tests/regr-tests/preprocess.test.ts index a8be369b7..c44451ac1 100644 --- a/tests/regr-tests/preprocess.test.ts +++ b/tests/regr-tests/preprocess.test.ts @@ -1,7 +1,7 @@ describe('JIFF Preprocessing Operations', () => { const init_server = require('./server'); + const createClient = require('./common'); const jiff_s_bignumber = require('../../lib/ext/jiff-server-bignumber.js'); - const JIFFClient = require('../../lib/jiff-client.js'); const jiff_bignumber = require('../../lib/ext/jiff-client-bignumber.js'); const jiff_fixedpoint = require('../../lib/ext/jiff-client-fixedpoint.js'); @@ -26,8 +26,7 @@ describe('JIFF Preprocessing Operations', () => { party_count: party_count, crypto_provider: true }; - - jiffClients = Array.from({ length: party_count }, () => new JIFFClient(baseUrl, computation_id, options)); + jiffClients = await Promise.all(Array.from({ length: party_count }, (_, idx) => createClient(baseUrl, computation_id, options))); async function apply_extension(jiff: any) { await jiff.apply_extension(jiff_bignumber, options); @@ -46,9 +45,9 @@ describe('JIFF Preprocessing Operations', () => { }); it('should correctly preprocess inner product of the input array and return 329.59', async () => { - async function innerprod(jiffClient: any, id: number) { - await jiffClient.preprocessing('smult', entries[id].length, null, null, null, null, null, null, { div: false }); - await jiffClient.preprocessing('open', 1); + function innerprod(jiffClient: any, id: number) { + jiffClient.preprocessing('smult', entries[id].length, null, null, null, null, null, null, { div: false }); + jiffClient.preprocessing('open', 1); return new Promise((resolve, reject) => { jiffClient.wait_for([1, 2, 3], async () => { try { diff --git a/tests/regr-tests/statistics.test.ts b/tests/regr-tests/statistics.test.ts index 78d943f99..19f615f05 100644 --- a/tests/regr-tests/statistics.test.ts +++ b/tests/regr-tests/statistics.test.ts @@ -1,7 +1,7 @@ describe('JIFF Statistics Operations', () => { const init_server = require('./server'); + const createClient = require('./common'); const jiff_s_bignumber = require('../../lib/ext/jiff-server-bignumber.js'); - const JIFFClient = require('../../lib/jiff-client.js'); const jiff_bignumber = require('../../lib/ext/jiff-client-bignumber.js'); const jiff_fixedpoint = require('../../lib/ext/jiff-client-fixedpoint.js'); const jiff_negativenumber = require('../../lib/ext/jiff-client-negativenumber.js'); @@ -28,7 +28,7 @@ describe('JIFF Statistics Operations', () => { crypto_provider: true }; - jiffClients = Array.from({ length: party_count }, () => new JIFFClient(baseUrl, computation_id, options)); + jiffClients = await Promise.all(Array.from({ length: party_count }, (_, index) => createClient(baseUrl, computation_id, options, index))); async function apply_extension(jiff: any) { await jiff.apply_extension(jiff_bignumber, options); diff --git a/tests/regr-tests/vote.test.ts b/tests/regr-tests/vote.test.ts index 880c7ccda..25a86c5cf 100644 --- a/tests/regr-tests/vote.test.ts +++ b/tests/regr-tests/vote.test.ts @@ -1,6 +1,6 @@ describe('JIFF Voting', () => { const init_server = require('./server'); - const JIFFClient = require('../../lib/jiff-client.js'); + const createClient = require('./common'); const jiff_negativenumber = require('../../lib/ext/jiff-client-negativenumber.js'); let jiffClients: any[] = []; @@ -24,7 +24,7 @@ describe('JIFF Voting', () => { crypto_provider: true }; - jiffClients = Array.from({ length: party_count }, () => new JIFFClient(baseUrl, computation_id, options)); + jiffClients = await Promise.all(Array.from({ length: party_count }, (_, index) => createClient(baseUrl, computation_id, options, index))); async function apply_extension(jiff: any) { await jiff.apply_extension(jiff_negativenumber, options);