Skip to content

Commit b0e28f7

Browse files
committed
grpc-js: Add test for sending metadata from call creds on channel creds
1 parent b8da460 commit b0e28f7

File tree

1 file changed

+73
-1
lines changed

1 file changed

+73
-1
lines changed

packages/grpc-js/test/test-channel-credentials.ts

Lines changed: 73 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,12 +17,22 @@
1717

1818
import * as assert from 'assert';
1919
import * as fs from 'fs';
20+
import * as path from 'path';
2021
import { promisify } from 'util';
22+
import * as protoLoader from '@grpc/proto-loader';
2123

2224
import { CallCredentials } from '../src/call-credentials';
2325
import { ChannelCredentials } from '../src/channel-credentials';
26+
import * as grpc from '../src';
27+
import { ServiceClient, ServiceClientConstructor } from '../src/make-client';
28+
import { TestServiceClient, TestServiceHandlers } from './generated/TestService';
29+
import { ProtoGrpcType as TestServiceGrpcType } from './generated/test_service';
2430

25-
import { assert2, mockFunction } from './common';
31+
import { assert2, loadProtoFile, mockFunction } from './common';
32+
import { sendUnaryData, ServerUnaryCall, ServiceError } from '../src';
33+
34+
const protoFile = path.join(__dirname, 'fixtures', 'echo_service.proto');
35+
const echoService = loadProtoFile(protoFile).EchoService as ServiceClientConstructor;
2636

2737
class CallCredentialsMock implements CallCredentials {
2838
child: CallCredentialsMock | null = null;
@@ -138,3 +148,65 @@ describe('ChannelCredentials Implementation', () => {
138148
});
139149
});
140150
});
151+
152+
describe('ChannelCredentials usage', () => {
153+
let client: ServiceClient;
154+
let server: grpc.Server;
155+
before(async () => {
156+
const {ca, key, cert} = await pFixtures;
157+
const serverCreds = grpc.ServerCredentials.createSsl(null, [{private_key: key, cert_chain: cert}]);
158+
const channelCreds = ChannelCredentials.createSsl(ca);
159+
const callCreds = CallCredentials.createFromMetadataGenerator((options, cb) => {
160+
const metadata = new grpc.Metadata();
161+
metadata.set('test-key', 'test-value');
162+
cb(null, metadata);
163+
});
164+
const combinedCreds = channelCreds.compose(callCreds);
165+
return new Promise<void>((resolve, reject) => {
166+
167+
server = new grpc.Server();
168+
server.addService(echoService.service, {
169+
echo(call: ServerUnaryCall<any, any>, callback: sendUnaryData<any>) {
170+
call.sendMetadata(call.metadata);
171+
callback(null, call.request);
172+
},
173+
});
174+
175+
server.bindAsync(
176+
'localhost:0',
177+
serverCreds,
178+
(err, port) => {
179+
if (err) {
180+
reject(err);
181+
return;
182+
}
183+
client = new echoService(
184+
`localhost:${port}`,
185+
combinedCreds,
186+
{'grpc.ssl_target_name_override': 'foo.test.google.fr', 'grpc.default_authority': 'foo.test.google.fr'}
187+
);
188+
server.start();
189+
resolve();
190+
}
191+
);
192+
});
193+
});
194+
after(() => {
195+
server.forceShutdown();
196+
});
197+
198+
it('Should send the metadata from call credentials attached to channel credentials', (done) => {
199+
const call = client.echo(
200+
{ value: 'test value', value2: 3 },
201+
assert2.mustCall((error: ServiceError, response: any) => {
202+
assert.ifError(error);
203+
assert.deepStrictEqual(response, { value: 'test value', value2: 3 });
204+
})
205+
);
206+
call.on('metadata', assert2.mustCall((metadata: grpc.Metadata) => {
207+
assert.deepStrictEqual(metadata.get('test-key'), ['test-value']);
208+
209+
}));
210+
assert2.afterMustCallsSatisfied(done);
211+
});
212+
});

0 commit comments

Comments
 (0)