diff --git a/experimental/CHANGELOG.md b/experimental/CHANGELOG.md index 389f9fd95..f4c1bf24d 100644 --- a/experimental/CHANGELOG.md +++ b/experimental/CHANGELOG.md @@ -12,6 +12,8 @@ For notes on migrating to 2.x / 0.200.x see [the upgrade guide](doc/upgrade-to-2 ### :bug: Bug Fixes +fix(otlp-transformer): do not throw when deserializing empty JSON response [#5551](https://github.com/open-telemetry/opentelemetry-js/pull/5551) @pichlermarc + ### :books: Documentation ### :house: Internal diff --git a/experimental/packages/otlp-transformer/src/logs/json/logs.ts b/experimental/packages/otlp-transformer/src/logs/json/logs.ts index b9e6f6b15..11c1e4910 100644 --- a/experimental/packages/otlp-transformer/src/logs/json/logs.ts +++ b/experimental/packages/otlp-transformer/src/logs/json/logs.ts @@ -34,6 +34,9 @@ export const JsonLogsSerializer: ISerializer< return encoder.encode(JSON.stringify(request)); }, deserializeResponse: (arg: Uint8Array) => { + if (arg.length === 0) { + return {}; + } const decoder = new TextDecoder(); return JSON.parse(decoder.decode(arg)) as IExportLogsServiceResponse; }, diff --git a/experimental/packages/otlp-transformer/src/metrics/json/metrics.ts b/experimental/packages/otlp-transformer/src/metrics/json/metrics.ts index 9f7273cbc..85243ab1b 100644 --- a/experimental/packages/otlp-transformer/src/metrics/json/metrics.ts +++ b/experimental/packages/otlp-transformer/src/metrics/json/metrics.ts @@ -30,6 +30,9 @@ export const JsonMetricsSerializer: ISerializer< return encoder.encode(JSON.stringify(request)); }, deserializeResponse: (arg: Uint8Array) => { + if (arg.length === 0) { + return {}; + } const decoder = new TextDecoder(); return JSON.parse(decoder.decode(arg)) as IExportMetricsServiceResponse; }, diff --git a/experimental/packages/otlp-transformer/src/trace/json/trace.ts b/experimental/packages/otlp-transformer/src/trace/json/trace.ts index da188b090..fa15a39f3 100644 --- a/experimental/packages/otlp-transformer/src/trace/json/trace.ts +++ b/experimental/packages/otlp-transformer/src/trace/json/trace.ts @@ -31,6 +31,9 @@ export const JsonTraceSerializer: ISerializer< return encoder.encode(JSON.stringify(request)); }, deserializeResponse: (arg: Uint8Array) => { + if (arg.length === 0) { + return {}; + } const decoder = new TextDecoder(); return JSON.parse(decoder.decode(arg)) as IExportTraceServiceResponse; }, diff --git a/experimental/packages/otlp-transformer/test/logs.test.ts b/experimental/packages/otlp-transformer/test/logs.test.ts index 05da91f89..6a9e3623b 100644 --- a/experimental/packages/otlp-transformer/test/logs.test.ts +++ b/experimental/packages/otlp-transformer/test/logs.test.ts @@ -344,6 +344,12 @@ describe('Logs', () => { 1 ); }); + + it('does not throw when deserializing an empty response', () => { + assert.doesNotThrow(() => + ProtobufLogsSerializer.deserializeResponse(new Uint8Array([])) + ); + }); }); describe('JsonLogsSerializer', function () { @@ -383,5 +389,11 @@ describe('Logs', () => { 1 ); }); + + it('does not throw when deserializing an empty response', () => { + assert.doesNotThrow(() => + JsonLogsSerializer.deserializeResponse(new Uint8Array([])) + ); + }); }); }); diff --git a/experimental/packages/otlp-transformer/test/metrics.test.ts b/experimental/packages/otlp-transformer/test/metrics.test.ts index f97d6497b..22d01ed5b 100644 --- a/experimental/packages/otlp-transformer/test/metrics.test.ts +++ b/experimental/packages/otlp-transformer/test/metrics.test.ts @@ -858,6 +858,12 @@ describe('Metrics', () => { 1 ); }); + + it('does not throw when deserializing an empty response', () => { + assert.doesNotThrow(() => + ProtobufMetricsSerializer.deserializeResponse(new Uint8Array([])) + ); + }); }); describe('JsonMetricsSerializer', function () { @@ -929,5 +935,11 @@ describe('Metrics', () => { 1 ); }); + + it('does not throw when deserializing an empty response', () => { + assert.doesNotThrow(() => + JsonMetricsSerializer.deserializeResponse(new Uint8Array([])) + ); + }); }); }); diff --git a/experimental/packages/otlp-transformer/test/trace.test.ts b/experimental/packages/otlp-transformer/test/trace.test.ts index 2cada313d..6b0cd633b 100644 --- a/experimental/packages/otlp-transformer/test/trace.test.ts +++ b/experimental/packages/otlp-transformer/test/trace.test.ts @@ -495,6 +495,12 @@ describe('Trace', () => { 1 ); }); + + it('does not throw when deserializing an empty response', () => { + assert.doesNotThrow(() => + ProtobufTraceSerializer.deserializeResponse(new Uint8Array([])) + ); + }); }); describe('JsonTracesSerializer', function () { @@ -537,5 +543,11 @@ describe('Trace', () => { 1 ); }); + + it('does not throw when deserializing an empty response', () => { + assert.doesNotThrow(() => + JsonTraceSerializer.deserializeResponse(new Uint8Array([])) + ); + }); }); });