opentelemetry-auto-instrume.../plugins/node/opentelemetry-instrumentation-http/test/functionals/http-disable.test.ts

91 lines
2.6 KiB
TypeScript

/*
* Copyright The OpenTelemetry Authors
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* https://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import * as assert from 'assert';
import { HttpInstrumentation } from '../../src/http';
import { AddressInfo } from 'net';
import * as nock from 'nock';
import * as sinon from 'sinon';
import { httpRequest } from '../utils/httpRequest';
import { isWrapped } from '@opentelemetry/instrumentation';
const instrumentation = new HttpInstrumentation();
instrumentation.enable();
instrumentation.disable();
import * as http from 'http';
import {
trace,
TracerProvider,
INVALID_SPAN_CONTEXT,
} from '@opentelemetry/api';
describe('HttpInstrumentation', () => {
let server: http.Server;
let serverPort = 0;
describe('disable()', () => {
let provider: TracerProvider;
let startSpanStub: sinon.SinonStub;
before(() => {
provider = {
getTracer: () => {
startSpanStub = sinon
.stub()
.returns(trace.wrapSpanContext(INVALID_SPAN_CONTEXT));
return { startSpan: startSpanStub } as any;
},
};
nock.cleanAll();
nock.enableNetConnect();
instrumentation.enable();
assert.strictEqual(isWrapped(http.Server.prototype.emit), true);
instrumentation.setTracerProvider(provider);
server = http.createServer((request, response) => {
response.end('Test Server Response');
});
server.listen(serverPort);
server.once('listening', () => {
serverPort = (server.address() as AddressInfo).port;
});
});
afterEach(() => {
sinon.restore();
});
after(() => {
server.close();
});
describe('unpatch()', () => {
it('should not call provider methods for creating span', async () => {
instrumentation.disable();
assert.strictEqual(isWrapped(http.Server.prototype.emit), false);
const testPath = '/incoming/unpatch/';
const options = { host: 'localhost', path: testPath, port: serverPort };
await httpRequest.get(options).then(() => {
sinon.assert.notCalled(startSpanStub);
});
});
});
});
});