Skip to content

Commit 189fee1

Browse files
committed
tests
1 parent 8db5c17 commit 189fee1

File tree

4 files changed

+478
-384
lines changed

4 files changed

+478
-384
lines changed

observability-test/table.ts

Lines changed: 31 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,6 @@ import {SpanStatusCode} from '@opentelemetry/api';
3131

3232
// eslint-disable-next-line n/no-extraneous-require
3333
const {SimpleSpanProcessor} = require('@opentelemetry/sdk-trace-base');
34-
const {generateWithAllSpansHaveDBName} = require('./helper');
3534

3635
const fakePfy = extend({}, pfy, {
3736
promisifyAll(klass, options) {
@@ -83,6 +82,12 @@ describe('Table', () => {
8382

8483
const NAME = 'table-name';
8584

85+
const ROW = {};
86+
87+
const mutateRowsOptions = {
88+
requestOptions: {transactionTag: 'transaction-tag'},
89+
};
90+
8691
before(() => {
8792
Table = proxyquire('../src/table.js', {
8893
'@google-cloud/promisify': fakePfy,
@@ -102,10 +107,6 @@ describe('Table', () => {
102107
traceExporter.reset();
103108
});
104109

105-
const withAllSpansHaveDBName = generateWithAllSpansHaveDBName(
106-
DATABASE.formattedName_
107-
);
108-
109110
function getExportedSpans(minCount: number) {
110111
traceExporter.forceFlush();
111112
const spans = traceExporter.getFinishedSpans();
@@ -131,6 +132,13 @@ describe('Table', () => {
131132
return actualSpanNames;
132133
}
133134

135+
function verifySpanAttributes(span) {
136+
const attributes = span.attributes;
137+
assert.strictEqual(attributes['transaction.tag'], 'transaction-tag');
138+
assert.strictEqual(attributes['db.sql.table'], 'table-name');
139+
assert.strictEqual(attributes['db.name'], 'formatted-db-name');
140+
}
141+
134142
it('deleteRows', done => {
135143
const KEYS = ['key'];
136144
const stub = (
@@ -141,39 +149,39 @@ describe('Table', () => {
141149
callback();
142150
});
143151

144-
table.deleteRows(KEYS, err => {
152+
table.deleteRows(KEYS, mutateRowsOptions, err => {
145153
assert.ifError(err);
146154
assert.strictEqual(stub.callCount, 1);
147-
const actualSpanNames = spanNames(getExportedSpans(1));
155+
const spans = getExportedSpans(1);
156+
const actualSpanNames = spanNames(spans);
148157
const expectedSpanNames = ['CloudSpanner.Table.deleteRows'];
149158
assert.deepStrictEqual(
150159
actualSpanNames,
151160
expectedSpanNames,
152161
`span names mismatch:\n\tGot: ${actualSpanNames}\n\tWant: ${expectedSpanNames}`
153162
);
154-
163+
verifySpanAttributes(spans[0]);
155164
done();
156165
});
157166
});
158167

159-
const ROW = {};
160-
161168
it('insert', done => {
162169
const stub = (
163170
sandbox.stub(transaction, 'insert') as sinon.SinonStub
164171
).withArgs(table.name, ROW);
165172

166-
table.insert(ROW, err => {
173+
table.insert(ROW, mutateRowsOptions, err => {
167174
assert.ifError(err);
168175
assert.strictEqual(stub.callCount, 1);
169-
const actualSpanNames = spanNames(getExportedSpans(1));
176+
const spans = getExportedSpans(1);
177+
const actualSpanNames = spanNames(spans);
170178
const expectedSpanNames = ['CloudSpanner.Table.insert'];
171179
assert.deepStrictEqual(
172180
actualSpanNames,
173181
expectedSpanNames,
174182
`span names mismatch:\n\tGot: ${actualSpanNames}\n\tWant: ${expectedSpanNames}`
175183
);
176-
184+
verifySpanAttributes(spans[0]);
177185
done();
178186
});
179187
});
@@ -184,7 +192,7 @@ describe('Table', () => {
184192
.stub(DATABASE, 'runTransaction')
185193
.callsFake((opts, callback) => callback(fakeError));
186194

187-
table.insert(ROW, err => {
195+
table.insert(ROW, mutateRowsOptions, err => {
188196
assert.strictEqual(err, fakeError);
189197

190198
const gotSpans = getExportedSpans(1);
@@ -207,7 +215,7 @@ describe('Table', () => {
207215
expectedSpanNames,
208216
`span names mismatch:\n\tGot: ${actualSpanNames}\n\tWant: ${expectedSpanNames}`
209217
);
210-
218+
verifySpanAttributes(gotSpans[0]);
211219
done();
212220
});
213221
});
@@ -217,12 +225,11 @@ describe('Table', () => {
217225
sandbox.stub(transaction, 'upsert') as sinon.SinonStub
218226
).withArgs(table.name, ROW);
219227

220-
table.upsert(ROW, err => {
228+
table.upsert(ROW, mutateRowsOptions, err => {
221229
assert.ifError(err);
222230
assert.strictEqual(stub.callCount, 1);
223231

224232
const gotSpans = getExportedSpans(1);
225-
withAllSpansHaveDBName(gotSpans);
226233

227234
const actualSpanNames = spanNames(gotSpans);
228235
const expectedSpanNames = ['CloudSpanner.Table.upsert'];
@@ -232,7 +239,7 @@ describe('Table', () => {
232239
expectedSpanNames,
233240
`span names mismatch:\n\tGot: ${actualSpanNames}\n\tWant: ${expectedSpanNames}`
234241
);
235-
242+
verifySpanAttributes(gotSpans[0]);
236243
done();
237244
});
238245
});
@@ -243,11 +250,10 @@ describe('Table', () => {
243250
.stub(DATABASE, 'runTransaction')
244251
.callsFake((opts, callback) => callback(fakeError));
245252

246-
table.upsert(ROW, err => {
253+
table.upsert(ROW, mutateRowsOptions, err => {
247254
assert.strictEqual(err, fakeError);
248255

249256
const gotSpans = getExportedSpans(1);
250-
withAllSpansHaveDBName(gotSpans);
251257

252258
const gotSpanStatus = gotSpans[0].status;
253259
const wantSpanStatus = {
@@ -268,6 +274,7 @@ describe('Table', () => {
268274
`span names mismatch:\n\tGot: ${actualSpanNames}\n\tWant: ${expectedSpanNames}`
269275
);
270276

277+
verifySpanAttributes[gotSpans[0]];
271278
done();
272279
});
273280
});
@@ -277,12 +284,11 @@ describe('Table', () => {
277284
sandbox.stub(transaction, 'replace') as sinon.SinonStub
278285
).withArgs(table.name, ROW);
279286

280-
table.replace(ROW, err => {
287+
table.replace(ROW, mutateRowsOptions, err => {
281288
assert.ifError(err);
282289
assert.strictEqual(stub.callCount, 1);
283290

284291
const gotSpans = getExportedSpans(1);
285-
withAllSpansHaveDBName(gotSpans);
286292

287293
const actualSpanNames = spanNames(gotSpans);
288294
const expectedSpanNames = ['CloudSpanner.Table.replace'];
@@ -292,6 +298,7 @@ describe('Table', () => {
292298
`span names mismatch:\n\tGot: ${actualSpanNames}\n\tWant: ${expectedSpanNames}`
293299
);
294300

301+
verifySpanAttributes(gotSpans[0]);
295302
done();
296303
});
297304
});
@@ -302,7 +309,7 @@ describe('Table', () => {
302309
.stub(DATABASE, 'runTransaction')
303310
.callsFake((opts, callback) => callback(fakeError));
304311

305-
table.replace(ROW, err => {
312+
table.replace(ROW, mutateRowsOptions, err => {
306313
assert.strictEqual(err, fakeError);
307314
const gotSpans = getExportedSpans(1);
308315
const gotSpanStatus = gotSpans[0].status;
@@ -316,15 +323,14 @@ describe('Table', () => {
316323
`mismatch in span status:\n\tGot: ${JSON.stringify(gotSpanStatus)}\n\tWant: ${JSON.stringify(wantSpanStatus)}`
317324
);
318325

319-
withAllSpansHaveDBName(gotSpans);
320-
321326
const actualSpanNames = spanNames(gotSpans);
322327
const expectedSpanNames = ['CloudSpanner.Table.replace'];
323328
assert.deepStrictEqual(
324329
actualSpanNames,
325330
expectedSpanNames,
326331
`span names mismatch:\n\tGot: ${actualSpanNames}\n\tWant: ${expectedSpanNames}`
327332
);
333+
verifySpanAttributes(gotSpans[0]);
328334

329335
done();
330336
});

observability-test/transaction.ts

Lines changed: 45 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@ const {
3333
SimpleSpanProcessor,
3434
} = require('@opentelemetry/sdk-trace-base');
3535
const {generateWithAllSpansHaveDBName} = require('./helper');
36+
import {ExecuteSqlRequest, ReadRequest} from '../src/transaction';
3637

3738
describe('Transaction', () => {
3839
const sandbox = sinon.createSandbox();
@@ -445,10 +446,12 @@ describe('Transaction', () => {
445446
it('with error', done => {
446447
REQUEST_STREAM.resetHistory();
447448

448-
const fakeQuery = Object.assign({}, QUERY, {
449+
const fakeQuery: ExecuteSqlRequest = Object.assign({}, QUERY, {
449450
params: {a: undefined},
451+
requestOptions: {requestTag: 'request-tag'},
450452
});
451453

454+
snapshot.requestOptions = {transactionTag: 'transaction-tag'};
452455
const stream = snapshot.runStream(fakeQuery);
453456
stream.on('error', error => {
454457
assert.strictEqual(
@@ -488,11 +491,52 @@ describe('Transaction', () => {
488491
'Unexpected span status message'
489492
);
490493

494+
const attributes = exportResults.spans[0].attributes;
495+
assert.strictEqual(attributes['transaction.tag'], 'transaction-tag');
496+
assert.strictEqual(attributes['db.name'], 'formatted-database-name');
497+
assert.strictEqual(attributes['request.tag'], 'request-tag');
491498
done();
492499
});
493500
assert.ok(!REQUEST_STREAM.called, 'No request should be made');
494501
});
495502
});
503+
504+
describe('createReadStream', () => {
505+
const TABLE = 'my-table-123';
506+
507+
beforeEach(() => {
508+
PARTIAL_RESULT_STREAM.callsFake(makeRequest => makeRequest());
509+
});
510+
511+
it('without error', done => {
512+
const fakeStream = new EventEmitter();
513+
REQUEST_STREAM.returns(fakeStream);
514+
const request: ReadRequest = {
515+
requestOptions: {requestTag: 'request-tag'},
516+
};
517+
snapshot.requestOptions = {transactionTag: 'transaction-tag'};
518+
const stream = snapshot.createReadStream(TABLE, request);
519+
stream.on('end', () => {
520+
const exportResults = extractExportedSpans();
521+
const actualSpanNames = exportResults.spanNames;
522+
523+
const expectedSpanNames = ['CloudSpanner.Snapshot.createReadStream'];
524+
assert.deepStrictEqual(
525+
actualSpanNames,
526+
expectedSpanNames,
527+
`span names mismatch:\n\tGot: ${actualSpanNames}\n\tWant: ${expectedSpanNames}`
528+
);
529+
530+
const attributes = exportResults.spans[0].attributes;
531+
assert.strictEqual(attributes['transaction.tag'], 'transaction-tag');
532+
assert.strictEqual(attributes['db.sql.table'], TABLE);
533+
assert.strictEqual(attributes['db.name'], 'formatted-database-name');
534+
assert.strictEqual(attributes['request.tag'], 'request-tag');
535+
done();
536+
});
537+
fakeStream.emit('end');
538+
});
539+
});
496540
});
497541

498542
describe('rollback', () => {

0 commit comments

Comments
 (0)