From af95af1727129cc73175010f547ed53423e62bd0 Mon Sep 17 00:00:00 2001 From: vmarchaud Date: Sat, 24 Oct 2020 10:32:13 +0200 Subject: [PATCH] chore: fix tests of exporter-collector-proto --- .../test/CollectorMetricExporter.test.ts | 22 +++++++++---------- .../test/CollectorTraceExporter.test.ts | 21 +++++++++--------- .../test/helper.ts | 20 +++++++++++++++++ 3 files changed, 41 insertions(+), 22 deletions(-) diff --git a/packages/opentelemetry-exporter-collector-proto/test/CollectorMetricExporter.test.ts b/packages/opentelemetry-exporter-collector-proto/test/CollectorMetricExporter.test.ts index ea7a25f1d8a..9c4c77775e3 100644 --- a/packages/opentelemetry-exporter-collector-proto/test/CollectorMetricExporter.test.ts +++ b/packages/opentelemetry-exporter-collector-proto/test/CollectorMetricExporter.test.ts @@ -30,6 +30,7 @@ import { ensureExportedCounterIsCorrect, ensureExportedObserverIsCorrect, ensureExportedValueRecorderIsCorrect, + MockedResponse, } from './helper'; import { MetricRecord } from '@opentelemetry/metrics'; @@ -39,14 +40,6 @@ const fakeRequest = { write: function () {}, }; -const mockRes = { - statusCode: 200, -}; - -const mockResError = { - statusCode: 400, -}; - // send is lazy loading file so need to wait a bit const waitTimeMS = 20; @@ -164,9 +157,11 @@ describe('CollectorMetricExporter - node with proto over http', () => { collectorExporter.export(metrics, responseSpy); setTimeout(() => { + const mockRes = new MockedResponse(200); const args = spyRequest.args[0]; const callback = args[1]; callback(mockRes); + mockRes.send('success'); setTimeout(() => { const response: any = spyLoggerDebug.args[1][0]; assert.strictEqual(response, 'statusCode: 200'); @@ -191,12 +186,17 @@ describe('CollectorMetricExporter - node with proto over http', () => { collectorExporter.export(metrics, responseSpy); setTimeout(() => { + const mockRes = new MockedResponse(400); const args = spyRequest.args[0]; const callback = args[1]; - callback(mockResError); + callback(mockRes); + mockRes.send('failed'); setTimeout(() => { - const response = spyLoggerError.args[0][0] as string; - assert.ok(response.includes('"code":"400"')); + const error = JSON.parse( + spyLoggerError.args[0][0] + ) as collectorTypes.CollectorExporterError; + assert.strictEqual(error.code, '400'); + assert.strictEqual(error.data, 'failed'); assert.strictEqual(responseSpy.args[0][0], 1); done(); }); diff --git a/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts b/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts index 6363bd44078..db2f30f351e 100644 --- a/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts +++ b/packages/opentelemetry-exporter-collector-proto/test/CollectorTraceExporter.test.ts @@ -28,6 +28,7 @@ import { ensureExportTraceServiceRequestIsSet, ensureProtoSpanIsCorrect, mockedReadableSpan, + MockedResponse, } from './helper'; const fakeRequest = { @@ -36,14 +37,6 @@ const fakeRequest = { write: function () {}, }; -const mockRes = { - statusCode: 200, -}; - -const mockResError = { - statusCode: 400, -}; - // send is lazy loading file so need to wait a bit const waitTimeMS = 20; @@ -130,9 +123,11 @@ describe('CollectorTraceExporter - node with proto over http', () => { collectorExporter.export(spans, responseSpy); setTimeout(() => { + const mockRes = new MockedResponse(200); const args = spyRequest.args[0]; const callback = args[1]; callback(mockRes); + mockRes.send('success'); setTimeout(() => { const response: any = spyLoggerDebug.args[1][0]; assert.strictEqual(response, 'statusCode: 200'); @@ -157,13 +152,17 @@ describe('CollectorTraceExporter - node with proto over http', () => { collectorExporter.export(spans, responseSpy); setTimeout(() => { + const mockResError = new MockedResponse(400); const args = spyRequest.args[0]; const callback = args[1]; callback(mockResError); + mockResError.send('failed'); setTimeout(() => { - const response = spyLoggerError.args[0][0] as string; - - assert.ok(response.includes('"code":"400"')); + const error = JSON.parse( + spyLoggerError.args[0][0] + ) as collectorTypes.CollectorExporterError; + assert.strictEqual(error.code, '400'); + assert.strictEqual(error.data, 'failed'); assert.strictEqual(responseSpy.args[0][0], 1); done(); }); diff --git a/packages/opentelemetry-exporter-collector-proto/test/helper.ts b/packages/opentelemetry-exporter-collector-proto/test/helper.ts index 0217aa130db..5c21bd7f548 100644 --- a/packages/opentelemetry-exporter-collector-proto/test/helper.ts +++ b/packages/opentelemetry-exporter-collector-proto/test/helper.ts @@ -20,6 +20,7 @@ import { Resource } from '@opentelemetry/resources'; import { collectorTypes } from '@opentelemetry/exporter-collector'; import * as assert from 'assert'; import { MeterProvider, MetricRecord } from '@opentelemetry/metrics'; +import { Stream } from 'stream'; const meterProvider = new MeterProvider({ interval: 30000, @@ -415,3 +416,22 @@ export function ensureExportMetricsServiceRequestIsSet( const metrics = resourceMetrics[0].instrumentationLibraryMetrics[0].metrics; assert.strictEqual(metrics.length, 3, 'Metrics are missing'); } + +export class MockedResponse extends Stream { + constructor(private _code: number, private _msg?: string) { + super(); + } + + send(data: string) { + this.emit('data', data); + this.emit('end'); + } + + get statusCode() { + return this._code; + } + + get statusMessage() { + return this._msg; + } +}