From 1de1b41dabf8bc8b73612883308eb88e07163f5b Mon Sep 17 00:00:00 2001 From: Alexey Yarmosh Date: Wed, 5 Feb 2025 16:31:13 +0100 Subject: [PATCH] test: add int test for ws message validation --- src/probe/router.ts | 1 - src/probe/types.ts | 1 - .../measurement/probe-communication.test.ts | 122 ++++++++++++++---- 3 files changed, 98 insertions(+), 26 deletions(-) diff --git a/src/probe/router.ts b/src/probe/router.ts index 0f23fef6..f29f36e9 100644 --- a/src/probe/router.ts +++ b/src/probe/router.ts @@ -177,7 +177,6 @@ export class ProbeRouter { tags: test.probe.tags.map(tag => ({ value: tag, type: 'offline' })), stats: { cpu: { - count: null, load: [], }, jobs: { count: null }, diff --git a/src/probe/types.ts b/src/probe/types.ts index 964665f1..f4806c57 100644 --- a/src/probe/types.ts +++ b/src/probe/types.ts @@ -81,7 +81,6 @@ export type OfflineProbe = Modify { let probe: Socket; + let waitForProbesUpdate: () => Promise; let addFakeProbe: (events?: Record) => Promise; let deleteFakeProbes: () => Promise; let getTestServer; @@ -24,7 +24,7 @@ describe('Create measurement request', () => { before(async () => { await td.replaceEsm('crypto-random-string', {}, cryptoRandomString); await td.replaceEsm('../../../../src/lib/ip-ranges.ts', { getRegion: () => 'gcp-us-west4', populateMemList: () => Promise.resolve() }); - ({ getTestServer, addFakeProbe, deleteFakeProbes } = await import('../../../utils/server.js')); + ({ getTestServer, waitForProbesUpdate, addFakeProbe, deleteFakeProbes } = await import('../../../utils/server.js')); const app = await getTestServer(); requestAgent = request(app); }); @@ -303,30 +303,105 @@ describe('Create measurement request', () => { }); }); + it('should validate incoming messages', async () => { + probe.emit('probe:status:update', 'ready'); + probe.emit('probe:isIPv4Supported:update', true); + probe.emit('probe:isIPv6Supported:update', true); + await waitForProbesUpdate(); + + await requestAgent.post('/v1/measurements').send({ + type: 'ping', + target: 'jsdelivr.com', + locations: [{ country: 'US' }], + measurementOptions: { + packets: 4, + }, + }); + + await setTimeout(20); + + await requestAgent.get(`/v1/measurements/measurementid`).send().expect(200).expect((response) => { + expect(response.body.results[0].result).to.deep.include({ + status: 'in-progress', + rawOutput: '', + }); + }); + + probe.emit('probe:measurement:ack', null, () => {}); + + probe.emit('probe:measurement:progress', { + testId: '0', + measurementId: 'measurementid', + result: { + invalidField: 'Invalid field value', + }, + }); + + await requestAgent.get(`/v1/measurements/measurementid`).send().expect(200).expect((response) => { + expect(response.body.results[0].result).to.deep.include({ + status: 'in-progress', + rawOutput: '', + }); + }); + + probe.emit('probe:measurement:progress', { + testId: '0', + measurementId: 'measurementid', + result: { + rawOutput: 'Valid progress value', + }, + }); + + await requestAgent.get(`/v1/measurements/measurementid`).send().expect(200).expect((response) => { + expect(response.body.results[0].result).to.deep.include({ + status: 'in-progress', + rawOutput: 'Valid progress value', + }); + }); + + probe.emit('probe:measurement:result', { + testId: '0', + measurementId: 'measurementid', + result: { + status: 'invalid-status', + rawOutput: 'Result with invalid status value', + resolvedHostname: 'jsdelivr.com', + resolvedAddress: '1.1.1.1', + stats: { + min: 1, + avg: 1, + max: 1, + total: 4, + rcv: 4, + drop: 0, + loss: 0, + }, + timings: [], + }, + }); + + await setTimeout(100); // We need to wait until all redis writes finish + + await requestAgent.get(`/v1/measurements/measurementid`).send() + .expect(200).expect((response) => { + expect(response.body.results[0].result).to.deep.equal({ + status: 'failed', + rawOutput: 'Measurement result validation failed', + }); + }); + }); + it('should handle stats event from probe', async () => { probe.emit('probe:stats:report', { jobs: { count: 0, }, cpu: { - count: 4, load: [ - { - usage: 1.02, - idle: 98.98, - }, - { - usage: 6.32, - idle: 93.68, - }, - { - usage: 2.06, - idle: 97.94, - }, - { - usage: 43, - idle: 57, - }, + { usage: 1.02 }, + { usage: 6.32 }, + { usage: 2.06 }, + { usage: 43 }, ], }, }); @@ -361,12 +436,11 @@ describe('Create measurement request', () => { count: 0, }, cpu: { - count: 4, load: [ - { usage: 1.02, idle: 98.98 }, - { usage: 6.32, idle: 93.68 }, - { usage: 2.06, idle: 97.94 }, - { usage: 43, idle: 57 }, + { usage: 1.02 }, + { usage: 6.32 }, + { usage: 2.06 }, + { usage: 43 }, ], }, },