Skip to content

Commit bb44c62

Browse files
committed
Add callback variant of regression test
1 parent 6c879ec commit bb44c62

File tree

4 files changed

+79
-40
lines changed

4 files changed

+79
-40
lines changed

observability-test/database.ts

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -518,7 +518,7 @@ describe('Database', () => {
518518

519519
getSessionStub.callsFake(callback => callback(fakeError, null));
520520

521-
database.getSnapshot((err, snapshot) => {
521+
database.getSnapshot(err => {
522522
assert.strictEqual(err, fakeError);
523523
traceExporter.forceFlush();
524524
const spans = traceExporter.getFinishedSpans();
@@ -1136,7 +1136,6 @@ describe('Database', () => {
11361136
});
11371137

11381138
it('with error on null mutation should catch thrown error', done => {
1139-
const fakeError = new Error('err');
11401139
try {
11411140
database.writeAtLeastOnce(null, (err, res) => {});
11421141
} catch (err) {

observability-test/session-pool.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,6 @@ const {SimpleSpanProcessor} = require('@opentelemetry/sdk-trace-base');
3232
import {Database} from '../src/database';
3333
import {Session} from '../src/session';
3434
import * as sp from '../src/session-pool';
35-
import {Transaction} from '../src/transaction';
3635

3736
let pQueueOverride: typeof PQueue | null = null;
3837

observability-test/spanner.ts

Lines changed: 76 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -1010,52 +1010,43 @@ describe('ObservabilityOptions injection and propagation', async () => {
10101010
});
10111011
});
10121012

1013-
describe('Regression tests for fixed bugs', () => {
1014-
it('async/await correctly parents trace spans', async () => {
1015-
// See https://github.com/googleapis/nodejs-spanner/issues/2146.
1016-
const traceExporter = new InMemorySpanExporter();
1017-
const provider = new NodeTracerProvider({
1013+
describe('Regression tests for fixed bugs', async () => {
1014+
let server: grpc.Server;
1015+
let spanner: Spanner;
1016+
let database: Database;
1017+
let spannerMock: mock.MockSpanner;
1018+
let traceExporter: typeof InMemorySpanExporter;
1019+
let provider: typeof TracerProvider;
1020+
let observabilityOptions: typeof ObservabilityOptions;
1021+
1022+
beforeEach(async () => {
1023+
traceExporter = new InMemorySpanExporter();
1024+
provider = new NodeTracerProvider({
10181025
sampler: new AlwaysOnSampler(),
10191026
exporter: traceExporter,
10201027
});
10211028
provider.addSpanProcessor(new SimpleSpanProcessor(traceExporter));
10221029

1023-
const observabilityOptions: typeof ObservabilityOptions = {
1030+
observabilityOptions = {
10241031
tracerProvider: provider,
10251032
enableExtendedTracing: true,
10261033
};
10271034
const setupResult = await setup(observabilityOptions);
1028-
const spanner = setupResult.spanner;
1029-
const server = setupResult.server;
1030-
const spannerMock = setupResult.spannerMock;
1031-
1032-
after(async () => {
1033-
provider.shutdown();
1034-
spannerMock.resetRequests();
1035-
spanner.close();
1036-
server.tryShutdown(() => {});
1037-
});
1038-
1039-
async function main() {
1040-
const instance = spanner.instance('testing');
1041-
instance._observabilityOptions = observabilityOptions;
1042-
const database = instance.database('db-1');
1043-
1044-
const query = {
1045-
sql: selectSql,
1046-
};
1047-
1048-
const [rows] = await database.run(query);
1049-
1050-
rows.forEach(row => {
1051-
const json = row.toJSON();
1052-
});
1053-
1054-
provider.forceFlush();
1055-
}
1035+
spanner = setupResult.spanner;
1036+
server = setupResult.server;
1037+
spannerMock = setupResult.spannerMock;
1038+
});
10561039

1057-
await main();
1040+
afterEach(async () => {
1041+
traceExporter.reset();
1042+
provider.shutdown();
1043+
spannerMock.resetRequests();
1044+
spanner.close();
1045+
server.tryShutdown(() => {});
1046+
});
10581047

1048+
function assertAsyncAwaitExpectations() {
1049+
// See https://github.com/googleapis/nodejs-spanner/issues/2146.
10591050
traceExporter.forceFlush();
10601051
const spans = traceExporter.getFinishedSpans();
10611052

@@ -1162,5 +1153,55 @@ describe('Regression tests for fixed bugs', () => {
11621153
expectedEventNames,
11631154
`Unexpected events:\n\tGot: ${actualEventNames}\n\tWant: ${expectedEventNames}`
11641155
);
1156+
}
1157+
1158+
it('async/await correctly parents trace spans', async () => {
1159+
// See https://github.com/googleapis/nodejs-spanner/issues/2146.
1160+
async function main() {
1161+
const instance = spanner.instance('testing');
1162+
instance._observabilityOptions = observabilityOptions;
1163+
const database = instance.database('db-1');
1164+
1165+
const query = {
1166+
sql: selectSql,
1167+
};
1168+
1169+
const [rows] = await database.run(query);
1170+
1171+
rows.forEach(row => {
1172+
const json = row.toJSON();
1173+
});
1174+
1175+
provider.forceFlush();
1176+
}
1177+
1178+
await main();
1179+
assertAsyncAwaitExpectations();
1180+
});
1181+
1182+
it('callback correctly parents trace spans', done => {
1183+
function main(onComplete) {
1184+
const instance = spanner.instance('testing');
1185+
instance._observabilityOptions = observabilityOptions;
1186+
const database = instance.database('db-1');
1187+
1188+
const query = {
1189+
sql: selectSql,
1190+
};
1191+
1192+
database.run(query, (err, rows) => {
1193+
rows.forEach(row => {
1194+
const json = row.toJSON();
1195+
});
1196+
1197+
provider.forceFlush();
1198+
onComplete();
1199+
});
1200+
}
1201+
1202+
main(() => {
1203+
assertAsyncAwaitExpectations();
1204+
done();
1205+
});
11651206
});
11661207
});

src/session-pool.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -762,8 +762,8 @@ export class SessionPool extends EventEmitter implements SessionPoolInterface {
762762
this.database._observabilityOptions = this._observabilityOptions;
763763
}
764764

765-
const q = {opts: this._observabilityOptions};
766-
return startTrace('SessionPool.createSessions', q, async span => {
765+
const traceConfig = {opts: this._observabilityOptions};
766+
return startTrace('SessionPool.createSessions', traceConfig, async span => {
767767
span.addEvent(`Requesting ${amount} sessions`);
768768

769769
// while we can request as many sessions be created as we want, the backend

0 commit comments

Comments
 (0)