Skip to content
This repository was archived by the owner on Oct 3, 2023. It is now read-only.

Commit b2e8835

Browse files
committed
add tests for metadata headers
1 parent a962c19 commit b2e8835

File tree

2 files changed

+93
-4
lines changed

2 files changed

+93
-4
lines changed

packages/opencensus-instrumentation-grpc/src/grpc.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ import * as lodash from 'lodash';
2222
import * as shimmer from 'shimmer';
2323

2424
/** The metadata key under which span context is stored as a binary value. */
25-
const GRPC_TRACE_KEY = 'grpc-trace-bin';
25+
export const GRPC_TRACE_KEY = 'grpc-trace-bin';
2626
const findIndex = lodash.findIndex;
2727

2828
//
@@ -162,7 +162,6 @@ export class GrpcPlugin extends BasePlugin {
162162
if (spanContext) {
163163
traceOptions.spanContext = spanContext;
164164
}
165-
166165
plugin.logger.debug(
167166
'path func: %s', JSON.stringify(traceOptions));
168167

packages/opencensus-instrumentation-grpc/test/test-grpc.ts

Lines changed: 92 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,14 +19,14 @@ import {logger} from '@opencensus/core';
1919
import * as assert from 'assert';
2020
import * as grpcModule from 'grpc';
2121
import * as path from 'path';
22-
import {GrpcModule, GrpcPlugin, plugin, SendUnaryDataCallback} from '../src/';
22+
23+
import {GRPC_TRACE_KEY, GrpcModule, GrpcPlugin, plugin, SendUnaryDataCallback} from '../src/';
2324

2425
const PROTO_PATH = __dirname + '/fixtures/grpc-instrumentation-test.proto';
2526
const grpcPort = 50051;
2627
const MAX_ERROR_STATUS = grpcModule.status.UNAUTHENTICATED;
2728
const log = logger.logger();
2829

29-
3030
const replicate = (request: TestRequestResponse) => {
3131
const result: TestRequestResponse[] = [];
3232
for (let i = 0; i < request.num; i++) {
@@ -492,4 +492,94 @@ describe('GrpcPlugin() ', function() {
492492
});
493493
});
494494
});
495+
describe('setSpanContext', () => {
496+
const metadata = new grpcModule.Metadata();
497+
const spanContext = {
498+
traceId: '3ad17e665f514aabb896341f670179ed',
499+
spanId: '3aaeb440a89d9e82',
500+
options: 0x1
501+
};
502+
503+
it('should set span context', () => {
504+
GrpcPlugin.setSpanContext(metadata, spanContext);
505+
const actualSpanContext = GrpcPlugin.getSpanContext(metadata);
506+
assert.deepEqual(actualSpanContext, spanContext);
507+
});
508+
});
509+
510+
describe('getSpanContext', () => {
511+
const metadata = new grpcModule.Metadata();
512+
it('should return null when span context is not set', () => {
513+
const actualSpanContext = GrpcPlugin.getSpanContext(metadata);
514+
assert.equal(actualSpanContext, null);
515+
});
516+
517+
it('should return valid span context', () => {
518+
const buffer = new Buffer([
519+
0x00, 0x00, 0xdf, 0x6a, 0x20, 0x38, 0xfa, 0x78, 0xc4, 0xcd,
520+
0x42, 0x20, 0x91, 0x26, 0x24, 0x9c, 0x31, 0xc7, 0x01, 0xc2,
521+
0xb7, 0xce, 0x7a, 0x57, 0x2a, 0x37, 0xc6, 0x02, 0x01
522+
]);
523+
const expectedSpanContext = {
524+
traceId: 'df6a2038fa78c4cd42209126249c31c7',
525+
spanId: 'c2b7ce7a572a37c6',
526+
options: 1
527+
};
528+
metadata.set(GRPC_TRACE_KEY, buffer);
529+
const actualSpanContext = GrpcPlugin.getSpanContext(metadata);
530+
assert.deepEqual(actualSpanContext, expectedSpanContext);
531+
});
532+
533+
it('should return null for unsupported version', () => {
534+
const buffer = new Buffer([
535+
0x66, 0x64, 0xdf, 0x6a, 0x20, 0x38, 0xfa, 0x78, 0xc4, 0xcd,
536+
0x42, 0x20, 0x91, 0x26, 0x24, 0x9c, 0x31, 0xc7, 0x01, 0xc2,
537+
0xb7, 0xce, 0x7a, 0x57, 0x2a, 0x37, 0xc6, 0x02, 0x01
538+
]);
539+
metadata.set(GRPC_TRACE_KEY, buffer);
540+
const actualSpanContext = GrpcPlugin.getSpanContext(metadata);
541+
assert.deepEqual(actualSpanContext, null);
542+
});
543+
544+
it('should return null when unexpected trace ID offset', () => {
545+
const buffer = new Buffer([
546+
0x00, 0x04, 0xdf, 0x6a, 0x20, 0x38, 0xfa, 0x78, 0xc4, 0xcd,
547+
0x42, 0x20, 0x91, 0x26, 0x24, 0x9c, 0x31, 0xc7, 0x01, 0xc2,
548+
0xb7, 0xce, 0x7a, 0x57, 0x2a, 0x37, 0xc6, 0x02, 0x01
549+
]);
550+
metadata.set(GRPC_TRACE_KEY, buffer);
551+
const actualSpanContext = GrpcPlugin.getSpanContext(metadata);
552+
assert.deepEqual(actualSpanContext, null);
553+
});
554+
555+
it('should return null when unexpected span ID offset', () => {
556+
const buffer = new Buffer([
557+
0x00, 0x00, 0xdf, 0x6a, 0x20, 0x38, 0xfa, 0x78, 0xc4, 0xcd,
558+
0x42, 0x20, 0x91, 0x26, 0x24, 0x9c, 0x31, 0xc7, 0x03, 0xc2,
559+
0xb7, 0xce, 0x7a, 0x57, 0x2a, 0x37, 0xc6, 0x02, 0x01
560+
]);
561+
metadata.set(GRPC_TRACE_KEY, buffer);
562+
const actualSpanContext = GrpcPlugin.getSpanContext(metadata);
563+
assert.deepEqual(actualSpanContext, null);
564+
});
565+
566+
it('should return null when unexpected options offset', () => {
567+
const buffer = new Buffer([
568+
0x00, 0x00, 0xdf, 0x6a, 0x20, 0x38, 0xfa, 0x78, 0xc4, 0xcd,
569+
0x42, 0x20, 0x91, 0x26, 0x24, 0x9c, 0x31, 0xc7, 0x03, 0xc2,
570+
0xb7, 0xce, 0x7a, 0x57, 0x2a, 0x37, 0xc6, 0x00, 0x01
571+
]);
572+
metadata.set(GRPC_TRACE_KEY, buffer);
573+
const actualSpanContext = GrpcPlugin.getSpanContext(metadata);
574+
assert.deepEqual(actualSpanContext, null);
575+
});
576+
577+
it('should return null when invalid input i.e. truncated', () => {
578+
const buffer =
579+
new Buffer([0x00, 0x00, 0xdf, 0x6a, 0x20, 0x38, 0xfa, 0x78, 0xc4]);
580+
metadata.set(GRPC_TRACE_KEY, buffer);
581+
const actualSpanContext = GrpcPlugin.getSpanContext(metadata);
582+
assert.deepEqual(actualSpanContext, null);
583+
});
584+
});
495585
});

0 commit comments

Comments
 (0)