-
Notifications
You must be signed in to change notification settings - Fork 224
/
service-resource-inference.test.js
110 lines (102 loc) · 3 KB
/
service-resource-inference.test.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
/*
* Copyright Elasticsearch B.V. and other contributors where applicable.
* Licensed under the BSD 2-Clause License; you may not use this file except in
* compliance with the BSD 2-Clause License.
*/
'use strict';
// Test cases from the cross-agent "json-specs/service_resource_inference.json"
// from apm.git.
const { CapturingTransport } = require('./_capturing_transport');
const apm = require('..').start({
serviceName: 'test-service-resource-inference',
metricsInterval: '0s',
centralConfig: false,
logLevel: 'off',
spanCompressionEnabled: false,
transport() {
return new CapturingTransport();
},
});
const test = require('tape');
test('setup: current trans', (t) => {
apm.startTransaction('aTrans', 'manual');
t.end();
});
var testData = require('./fixtures/json-specs/service_resource_inference.json');
testData.forEach((testDatum) => {
test(testDatum.failure_message, (t) => {
// 1. Create a span according to `testDatum.span`.
const spanOpts = {
exitSpan: testDatum.span.exit === 'true',
};
const span = apm.startSpan(
'aSpan',
testDatum.span.type,
testDatum.span.subtype,
spanOpts,
);
if (testDatum.span.context) {
if (testDatum.span.context.db) {
span.setDbContext(testDatum.span.context.db);
}
if (testDatum.span.context.http) {
span.setHttpContext(testDatum.span.context.http);
}
if (testDatum.span.context.message) {
span.setMessageContext(testDatum.span.context.message);
}
if (
testDatum.span.context.service &&
testDatum.span.context.service.target
) {
span.setServiceTarget(
testDatum.span.context.service.target.type,
testDatum.span.context.service.target.name,
);
}
}
span.end();
// 2. Then assert that it has the expected destination.service.resource and
// service.target.
apm.flush(() => {
const spanPayload = apm._apmClient.spans.pop();
if (testDatum.expected_resource === null) {
t.ok(
!(
spanPayload.context &&
spanPayload.context.destination &&
spanPayload.context.destination.service
),
'no span.context.destination.service.resource',
);
} else {
t.equal(
spanPayload.context.destination.service.resource,
testDatum.expected_resource,
'span.context.destination.service.resource',
);
}
if (testDatum.expected_service_target === null) {
t.ok(
!(
spanPayload.context &&
spanPayload.context.service &&
spanPayload.context.service.target
),
'no span.context.service.target',
);
} else {
t.deepEqual(
spanPayload.context.service.target,
testDatum.expected_service_target,
'span.context.service.target',
);
}
t.end();
});
});
});
test('teardown', (t) => {
apm.endTransaction();
t.end();
});