opentelemetry-js/packages/opentelemetry-exporter-coll.../test/common/transform.test.ts

180 lines
5.3 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 { SpanAttributes } from '@opentelemetry/api';
import { TimedEvent } from '@opentelemetry/tracing';
import * as assert from 'assert';
import * as transform from '../../src/transform';
import {
ensureSpanIsCorrect,
mockedReadableSpan,
mockedResources,
mockedInstrumentationLibraries,
multiResourceTrace,
multiInstrumentationLibraryTrace,
} from '../helper';
import { Resource } from '@opentelemetry/resources';
describe('transform', () => {
describe('toCollectorAttributes', () => {
it('should convert attribute string', () => {
const attributes: SpanAttributes = {
foo: 'bar',
};
assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [
{ key: 'foo', value: { stringValue: 'bar' } },
]);
});
it('should convert attribute integer to integer', () => {
const attributes: SpanAttributes = {
foo: 13,
};
assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [
{ key: 'foo', value: { intValue: 13 } },
]);
});
it('should convert attribute integer to double', () => {
const attributes: SpanAttributes = {
foo: 2247483647,
};
assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [
{ key: 'foo', value: { doubleValue: 2247483647 } },
]);
});
it('should convert attribute boolean', () => {
const attributes: SpanAttributes = {
foo: true,
};
assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [
{ key: 'foo', value: { boolValue: true } },
]);
});
it('should convert attribute double', () => {
const attributes: SpanAttributes = {
foo: 1.34,
};
assert.deepStrictEqual(transform.toCollectorAttributes(attributes), [
{ key: 'foo', value: { doubleValue: 1.34 } },
]);
});
});
describe('toCollectorEvents', () => {
it('should convert events to otc events', () => {
const events: TimedEvent[] = [
{ name: 'foo', time: [123, 123], attributes: { a: 'b' } },
{
name: 'foo2',
time: [321, 321],
attributes: { c: 'd' },
},
];
assert.deepStrictEqual(transform.toCollectorEvents(events), [
{
timeUnixNano: 123000000123,
name: 'foo',
attributes: [{ key: 'a', value: { stringValue: 'b' } }],
droppedAttributesCount: 0,
},
{
timeUnixNano: 321000000321,
name: 'foo2',
attributes: [{ key: 'c', value: { stringValue: 'd' } }],
droppedAttributesCount: 0,
},
]);
});
});
describe('toCollectorSpan', () => {
it('should convert span using hex', () => {
ensureSpanIsCorrect(transform.toCollectorSpan(mockedReadableSpan, true));
});
it('should convert span using base64', () => {
ensureSpanIsCorrect(transform.toCollectorSpan(mockedReadableSpan), false);
});
});
describe('toCollectorResource', () => {
it('should convert resource', () => {
const resource = transform.toCollectorResource(
new Resource({
service: 'ui',
version: 1.0,
success: true,
})
);
assert.deepStrictEqual(resource, {
attributes: [
{
key: 'service',
value: { stringValue: 'ui' },
},
{
key: 'version',
value: { intValue: 1 },
},
{ key: 'success', value: { boolValue: true } },
],
droppedAttributesCount: 0,
});
});
});
describe('groupSpansByResourceAndLibrary', () => {
it('should group by resource', () => {
const [resource1, resource2] = mockedResources;
const [instrumentationLibrary] = mockedInstrumentationLibraries;
const [span1, span2, span3] = multiResourceTrace;
const expected = new Map([
[resource1, new Map([[instrumentationLibrary, [span1]]])],
[resource2, new Map([[instrumentationLibrary, [span2, span3]]])],
]);
const result = transform.groupSpansByResourceAndLibrary(
multiResourceTrace
);
assert.deepStrictEqual(result, expected);
});
it('should group by instrumentation library', () => {
const [resource] = mockedResources;
const [lib1, lib2] = mockedInstrumentationLibraries;
const [span1, span2, span3] = multiInstrumentationLibraryTrace;
const expected = new Map([
[
resource,
new Map([
[lib1, [span1, span2]],
[lib2, [span3]],
]),
],
]);
const result = transform.groupSpansByResourceAndLibrary(
multiInstrumentationLibraryTrace
);
assert.deepStrictEqual(result, expected);
});
});
});