diff --git a/packages/opencensus-propagation-tracecontext/src/tracecontext-format.ts b/packages/opencensus-propagation-tracecontext/src/tracecontext-format.ts index 3cb363de3..3b7e82b5b 100644 --- a/packages/opencensus-propagation-tracecontext/src/tracecontext-format.ts +++ b/packages/opencensus-propagation-tracecontext/src/tracecontext-format.ts @@ -16,18 +16,12 @@ import {HeaderGetter, HeaderSetter, Propagation, SpanContext} from '@opencensus/core'; import * as crypto from 'crypto'; - import {isValidOption, isValidSpanId, isValidTraceId, isValidVersion} from './validators'; // Header names -const TRACE_PARENT = 'traceparent'; -const TRACE_STATE = 'tracestate'; - -// Option flags -const REQUESTED_FLAG = 0x1; -const RECORDED_FLAG = 0x2; - -const DEFAULT_OPTIONS = 0x0; +export const TRACE_PARENT = 'traceparent'; +export const TRACE_STATE = 'tracestate'; +export const DEFAULT_OPTIONS = 0x0; /** * Propagates span context through Trace Context format propagation. @@ -47,12 +41,12 @@ export class TraceContextFormat implements Propagation { * context is returned. * @param getter */ - extract(getter: HeaderGetter): SpanContext { + extract(getter: HeaderGetter): SpanContext|null { if (getter) { // Construct empty span context that we will fill const spanContext: SpanContext = { - traceId: undefined, - spanId: undefined, + traceId: '', + spanId: '', options: DEFAULT_OPTIONS, traceState: undefined }; diff --git a/packages/opencensus-propagation-tracecontext/test/test-tracecontext-format.ts b/packages/opencensus-propagation-tracecontext/test/test-tracecontext-format.ts index 021cffea8..226df518c 100644 --- a/packages/opencensus-propagation-tracecontext/test/test-tracecontext-format.ts +++ b/packages/opencensus-propagation-tracecontext/test/test-tracecontext-format.ts @@ -17,13 +17,7 @@ import {HeaderGetter, HeaderSetter, SpanContext} from '@opencensus/core'; import * as assert from 'assert'; -import {TraceContextFormat} from '../src/'; - -// Header names -const TRACE_PARENT = 'traceparent'; -const TRACE_STATE = 'tracestate'; - -const DEFAULT_OPTIONS = 0x0; +import {DEFAULT_OPTIONS, TRACE_PARENT, TRACE_STATE, TraceContextFormat} from '../src/'; const traceContextFormat = new TraceContextFormat(); @@ -34,8 +28,8 @@ describe('TraceContextPropagation', () => { beforeEach(() => { emptySpanContext = { - traceId: undefined, - spanId: undefined, + traceId: '', + spanId: '', options: DEFAULT_OPTIONS, traceState: undefined }; @@ -44,7 +38,7 @@ describe('TraceContextPropagation', () => { // Generates the appropriate `traceparent` header for the given SpanContext const traceParentHeaderFromSpanContext = (spanContext: SpanContext): string => { - const {traceId, spanId, options} = spanContext; + const {traceId, spanId} = spanContext; return `00-${traceId}-${spanId}-${ Buffer.from([spanContext.options]).toString('hex')}`; }; @@ -57,8 +51,9 @@ describe('TraceContextPropagation', () => { // Construct headers from the generated span context const headers: Record = {}; headers[TRACE_PARENT] = traceParentHeaderFromSpanContext(spanContext); - headers[TRACE_STATE] = spanContext.traceState; - + if (spanContext.traceState) { + headers[TRACE_STATE] = spanContext.traceState; + } const getter: HeaderGetter = { getHeader(name: string) { return headers[name]; @@ -135,7 +130,6 @@ describe('TraceContextPropagation', () => { }; Object.getOwnPropertyNames(testCases).forEach(testCase => { - const traceState = ''; const headers: Headers = { [TRACE_PARENT]: testCases[testCase], [TRACE_STATE]: '', @@ -179,8 +173,10 @@ describe('TraceContextPropagation', () => { }; const extractedSpanContext = traceContextFormat.extract(getter); - assert.strictEqual( - extractedSpanContext.options, DEFAULT_OPTIONS, testCase); + if (extractedSpanContext !== null) { + assert.strictEqual( + extractedSpanContext.options, DEFAULT_OPTIONS, testCase); + } }); }); @@ -205,18 +201,13 @@ describe('TraceContextPropagation', () => { it('should gracefully handle an unset header', () => { const getter: HeaderGetter = { getHeader(name: string) { - return null; + return undefined; } }; const extractedSpanContext = traceContextFormat.extract(getter); assert.deepEqual(extractedSpanContext, emptySpanContext); }); - - it('should gracefully handle null getter', () => { - const spanContext = traceContextFormat.extract(null); - assert.equal(spanContext, null); - }); }); describe('inject', () => { @@ -251,24 +242,6 @@ describe('TraceContextPropagation', () => { traceContextFormat.inject(setter, spanContext); assert.strictEqual(headers[TRACE_STATE], 'foo=bar'); }); - - it('should gracefully handle null setter or context', () => { - // Null setter - const spanContext = traceContextFormat.generate(); - try { - traceContextFormat.inject(null, spanContext); - } catch (err) { - assert.fail(err); - } - - // Null context - const setter: HeaderSetter = {setHeader(name: string, value: string) {}}; - try { - traceContextFormat.inject(setter, null); - } catch (err) { - assert.fail(err); - } - }); }); describe('generate', () => { diff --git a/packages/opencensus-propagation-tracecontext/tsconfig.json b/packages/opencensus-propagation-tracecontext/tsconfig.json index 021d9d61a..4a7edf10f 100644 --- a/packages/opencensus-propagation-tracecontext/tsconfig.json +++ b/packages/opencensus-propagation-tracecontext/tsconfig.json @@ -6,7 +6,8 @@ "pretty": true, "module": "commonjs", "target": "es6", - "strictNullChecks": false + "strictNullChecks": true, + "noUnusedLocals": true }, "include": [ "src/**/*.ts",