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

Commit 6ec8a64

Browse files
author
Amir Blum
committed
test(opentelemetry-plugin-aws-sdk): add tests to sqs
1 parent b61385b commit 6ec8a64

File tree

1 file changed

+120
-105
lines changed

1 file changed

+120
-105
lines changed

packages/plugin-aws-sdk/test/sqs.spec.ts

Lines changed: 120 additions & 105 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,6 @@ const responseMockSuccess = {
2525
error: null,
2626
};
2727

28-
const expectReceiver2ProcessWithOneChildEach = (spans: ReadableSpan[]) => {
29-
const awsReceiveSpan = spans.filter(
30-
(s) => s.attributes[SqsAttributeNames.MESSAGING_OPERATION] === "receive"
31-
);
32-
expect(awsReceiveSpan.length).toBe(1);
33-
34-
const processSpans = spans.filter(
35-
(s) => s.attributes[SqsAttributeNames.MESSAGING_OPERATION] === "process"
36-
);
37-
expect(processSpans.length).toBe(2);
38-
expect(processSpans[0].parentSpanId).toStrictEqual(
39-
awsReceiveSpan[0].spanContext.spanId
40-
);
41-
expect(processSpans[1].parentSpanId).toStrictEqual(
42-
awsReceiveSpan[0].spanContext.spanId
43-
);
44-
45-
const processChildSpans = spans.filter((s) => s.kind === SpanKind.INTERNAL);
46-
expect(processChildSpans.length).toBe(2);
47-
expect(processChildSpans[0].parentSpanId).toStrictEqual(
48-
processSpans[0].spanContext.spanId
49-
);
50-
expect(processChildSpans[1].parentSpanId).toStrictEqual(
51-
processSpans[1].spanContext.spanId
52-
);
53-
};
54-
5528
describe("sqs", () => {
5629
beforeAll(() => {
5730
AWS.config.credentials = {
@@ -81,61 +54,120 @@ describe("sqs", () => {
8154
contextManager.disable();
8255
});
8356

84-
it("should set parent context in sqs receive callback", async (done) => {
85-
const sqs = new AWS.SQS();
86-
sqs
87-
.receiveMessage({
88-
QueueUrl: "queue/url/for/unittests",
89-
})
90-
.send((err: AWSError, data: AWS.SQS.Types.ReceiveMessageResult) => {
91-
expect(err).toBeFalsy();
92-
const childSpan = provider
93-
.getTracer("default")
94-
.startSpan("child span of sqs.receiveMessage in send callback");
95-
childSpan.end();
96-
const awsReceiveSpan = memoryExporter
97-
.getFinishedSpans()
98-
.filter((s) => s.kind === SpanKind.CONSUMER);
99-
expect(awsReceiveSpan.length).toBe(1);
100-
const internalSpan = memoryExporter
101-
.getFinishedSpans()
102-
.filter((s) => s.kind === SpanKind.INTERNAL);
103-
expect(internalSpan.length).toBe(1);
104-
expect(internalSpan[0].parentSpanId).toStrictEqual(
105-
awsReceiveSpan[0].spanContext.spanId
106-
);
107-
done();
108-
});
109-
});
57+
describe("receive context", () => {
58+
const createReceiveChildSpan = () => {
59+
const childSpan = provider
60+
.getTracer("default")
61+
.startSpan("child span of sqs.receiveMessage");
62+
childSpan.end();
63+
};
64+
65+
const expectReceiverWithChildSpan = (spans: ReadableSpan[]) => {
66+
const awsReceiveSpan = spans.filter((s) => s.kind === SpanKind.CONSUMER);
67+
expect(awsReceiveSpan.length).toBe(1);
68+
const internalSpan = spans.filter((s) => s.kind === SpanKind.INTERNAL);
69+
expect(internalSpan.length).toBe(1);
70+
expect(internalSpan[0].parentSpanId).toStrictEqual(
71+
awsReceiveSpan[0].spanContext.spanId
72+
);
73+
};
74+
75+
it("should set parent context in sqs receive callback", async (done) => {
76+
const sqs = new AWS.SQS();
77+
sqs
78+
.receiveMessage({
79+
QueueUrl: "queue/url/for/unittests",
80+
})
81+
.send((err: AWSError, data: AWS.SQS.Types.ReceiveMessageResult) => {
82+
expect(err).toBeFalsy();
83+
createReceiveChildSpan();
84+
expectReceiverWithChildSpan(memoryExporter.getFinishedSpans());
85+
done();
86+
});
87+
});
88+
89+
it("should set parent context in sqs receive promise then", async () => {
90+
const sqs = new AWS.SQS();
91+
const res = await sqs
92+
.receiveMessage({
93+
QueueUrl: "queue/url/for/unittests",
94+
})
95+
.promise()
96+
.then(() => {
97+
createReceiveChildSpan();
98+
expectReceiverWithChildSpan(memoryExporter.getFinishedSpans());
99+
});
100+
});
110101

111-
it("should set parent context in sqs receive after await", async () => {
112-
const sqs = new AWS.SQS();
113-
const res = await sqs
114-
.receiveMessage({
115-
QueueUrl: "queue/url/for/unittests",
116-
})
117-
.promise();
118-
119-
const childSpan = provider
120-
.getTracer("default")
121-
.startSpan("child span of sqs.receiveMessage after promise await");
122-
childSpan.end();
123-
const awsReceiveSpan = memoryExporter
124-
.getFinishedSpans()
125-
.filter((s) => s.kind === SpanKind.CONSUMER);
126-
expect(awsReceiveSpan.length).toBe(1);
127-
const internalSpan = memoryExporter
128-
.getFinishedSpans()
129-
.filter((s) => s.kind === SpanKind.INTERNAL);
130-
expect(internalSpan.length).toBe(1);
131-
expect(internalSpan[0].parentSpanId).toStrictEqual(
132-
awsReceiveSpan[0].spanContext.spanId
133-
);
102+
it.skip("should set parent context in sqs receive after await", async () => {
103+
const sqs = new AWS.SQS();
104+
await sqs
105+
.receiveMessage({
106+
QueueUrl: "queue/url/for/unittests",
107+
})
108+
.promise();
109+
110+
createReceiveChildSpan();
111+
expectReceiverWithChildSpan(memoryExporter.getFinishedSpans());
112+
});
113+
114+
it.skip("should set parent context in sqs receive from async function", async () => {
115+
const asycnReceive = async () => {
116+
try {
117+
const sqs = new AWS.SQS();
118+
return await sqs
119+
.receiveMessage({
120+
QueueUrl: "queue/url/for/unittests",
121+
})
122+
.promise();
123+
} catch (err) {}
124+
};
125+
126+
const res = await asycnReceive();
127+
createReceiveChildSpan();
128+
expectReceiverWithChildSpan(memoryExporter.getFinishedSpans());
129+
});
134130
});
135131

136132
describe("process spans", () => {
137133
let receivedMessages: Message[];
138134

135+
const createProcessChildSpan = (msgContext: any) => {
136+
const processChildSpan = provider
137+
.getTracer("default")
138+
.startSpan(`child span of sqs processing span of msg ${msgContext}`);
139+
processChildSpan.end();
140+
};
141+
142+
const expectReceiver2ProcessWithOneChildEach = (spans: ReadableSpan[]) => {
143+
const awsReceiveSpan = spans.filter(
144+
(s) => s.attributes[SqsAttributeNames.MESSAGING_OPERATION] === "receive"
145+
);
146+
expect(awsReceiveSpan.length).toBe(1);
147+
148+
const processSpans = spans.filter(
149+
(s) => s.attributes[SqsAttributeNames.MESSAGING_OPERATION] === "process"
150+
);
151+
expect(processSpans.length).toBe(2);
152+
expect(processSpans[0].parentSpanId).toStrictEqual(
153+
awsReceiveSpan[0].spanContext.spanId
154+
);
155+
expect(processSpans[1].parentSpanId).toStrictEqual(
156+
awsReceiveSpan[0].spanContext.spanId
157+
);
158+
159+
const processChildSpans = spans.filter(
160+
(s) => s.kind === SpanKind.INTERNAL
161+
);
162+
expect(processChildSpans.length).toBe(2);
163+
expect(processChildSpans[0].parentSpanId).toStrictEqual(
164+
processSpans[0].spanContext.spanId
165+
);
166+
expect(processChildSpans[1].parentSpanId).toStrictEqual(
167+
processSpans[1].spanContext.spanId
168+
);
169+
};
170+
139171
beforeEach(async () => {
140172
const sqs = new AWS.SQS();
141173
const res = await sqs
@@ -148,72 +180,55 @@ describe("sqs", () => {
148180

149181
it("should create processing child with forEach", async () => {
150182
receivedMessages.forEach((msg) => {
151-
const processChildSpan = provider
152-
.getTracer("default")
153-
.startSpan(`child span of sqs processing span of msg ${msg.Body}`);
154-
processChildSpan.end();
183+
createProcessChildSpan(msg.Body);
155184
});
156-
157185
expectReceiver2ProcessWithOneChildEach(memoryExporter.getFinishedSpans());
158186
});
159187

160188
it("should create processing child with map", async () => {
161189
receivedMessages.map((msg) => {
162-
const processChildSpan = provider
163-
.getTracer("default")
164-
.startSpan(`child span of sqs processing span of msg ${msg.Body}`);
165-
processChildSpan.end();
190+
createProcessChildSpan(msg.Body);
166191
});
167-
168192
expectReceiver2ProcessWithOneChildEach(memoryExporter.getFinishedSpans());
169193
});
170194

171195
it.skip("should create processing child with array index access", async () => {
172196
for (let i = 0; i < receivedMessages.length; i++) {
173197
const msg = receivedMessages[i];
174-
const processChildSpan = provider
175-
.getTracer("default")
176-
.startSpan(`child span of sqs processing span of msg ${msg.Body}`);
177-
processChildSpan.end();
198+
createProcessChildSpan(msg.Body);
178199
}
179-
180200
expectReceiver2ProcessWithOneChildEach(memoryExporter.getFinishedSpans());
181201
});
182202

183203
it.skip("should create processing child with map and forEach calls", async () => {
184204
receivedMessages
185205
.map((msg) => JSON.parse(msg.Body))
186206
.forEach((msgBody) => {
187-
const processChildSpan = provider
188-
.getTracer("default")
189-
.startSpan(`child span of sqs processing span of msg ${msgBody}`);
190-
processChildSpan.end();
207+
createProcessChildSpan(msgBody);
191208
});
192-
193209
expectReceiver2ProcessWithOneChildEach(memoryExporter.getFinishedSpans());
194210
});
195211

196212
it.skip("should create processing child with filter and forEach", async () => {
197213
receivedMessages
198214
.filter((msg) => msg)
199215
.forEach((msgBody) => {
200-
const processChildSpan = provider
201-
.getTracer("default")
202-
.startSpan(`child span of sqs processing span of msg ${msgBody}`);
203-
processChildSpan.end();
216+
createProcessChildSpan(msgBody);
204217
});
205-
206218
expectReceiver2ProcessWithOneChildEach(memoryExporter.getFinishedSpans());
207219
});
208220

209221
it.skip("should create processing child with for(msg of messages)", () => {
210222
for (const msg of receivedMessages) {
211-
const processChildSpan = provider
212-
.getTracer("default")
213-
.startSpan(`child span of sqs processing span of msg ${msg.Body}`);
214-
processChildSpan.end();
223+
createProcessChildSpan(msg.Body);
215224
}
225+
expectReceiver2ProcessWithOneChildEach(memoryExporter.getFinishedSpans());
226+
});
216227

228+
it.skip("should create processing child with array.values() for loop", () => {
229+
for (const msg of receivedMessages.values()) {
230+
createProcessChildSpan(msg.Body);
231+
}
217232
expectReceiver2ProcessWithOneChildEach(memoryExporter.getFinishedSpans());
218233
});
219234
});

0 commit comments

Comments
 (0)