mirror of https://github.com/grpc/grpc-node.git
Merge pull request #1199 from ortoo/master
grpc-js: fix explicit ipv6 addresses not resolving correctly
This commit is contained in:
commit
baaa4794ef
|
@ -115,14 +115,15 @@ const dnsLookupPromise = util.promisify(dns.lookup);
|
|||
function parseIP(target: string): string[] | null {
|
||||
/* These three regular expressions are all mutually exclusive, so we just
|
||||
* want the first one that matches the target string, if any do. */
|
||||
const ipv4Match = IPV4_REGEX.exec(target);
|
||||
const match =
|
||||
IPV4_REGEX.exec(target) ||
|
||||
IPV6_REGEX.exec(target) ||
|
||||
IPV6_BRACKET_REGEX.exec(target);
|
||||
ipv4Match || IPV6_REGEX.exec(target) || IPV6_BRACKET_REGEX.exec(target);
|
||||
if (match === null) {
|
||||
return null;
|
||||
}
|
||||
const addr = match[1];
|
||||
|
||||
// ipv6 addresses should be bracketed
|
||||
const addr = ipv4Match ? match[1] : `[${match[1]}]`;
|
||||
let port: string;
|
||||
if (match[2]) {
|
||||
port = match[2];
|
||||
|
|
|
@ -67,6 +67,63 @@ describe('Name Resolver', () => {
|
|||
const resolver = resolverManager.createResolver(target, listener);
|
||||
resolver.updateResolution();
|
||||
});
|
||||
it('Should correctly represent an ipv4 address', done => {
|
||||
const target = '1.2.3.4';
|
||||
const listener: resolverManager.ResolverListener = {
|
||||
onSuccessfulResolution: (
|
||||
addressList: string[],
|
||||
serviceConfig: ServiceConfig | null,
|
||||
serviceConfigError: StatusObject | null
|
||||
) => {
|
||||
assert(addressList.includes('1.2.3.4:443'));
|
||||
// We would check for the IPv6 address but it needs to be omitted on some Node versions
|
||||
done();
|
||||
},
|
||||
onError: (error: StatusObject) => {
|
||||
done(new Error(`Failed with status ${error.details}`));
|
||||
},
|
||||
};
|
||||
const resolver = resolverManager.createResolver(target, listener);
|
||||
resolver.updateResolution();
|
||||
});
|
||||
it('Should correctly represent an ipv6 address', done => {
|
||||
const target = '::1';
|
||||
const listener: resolverManager.ResolverListener = {
|
||||
onSuccessfulResolution: (
|
||||
addressList: string[],
|
||||
serviceConfig: ServiceConfig | null,
|
||||
serviceConfigError: StatusObject | null
|
||||
) => {
|
||||
assert(addressList.includes('[::1]:443'));
|
||||
// We would check for the IPv6 address but it needs to be omitted on some Node versions
|
||||
done();
|
||||
},
|
||||
onError: (error: StatusObject) => {
|
||||
done(new Error(`Failed with status ${error.details}`));
|
||||
},
|
||||
};
|
||||
const resolver = resolverManager.createResolver(target, listener);
|
||||
resolver.updateResolution();
|
||||
});
|
||||
it('Should correctly represent a bracketed ipv6 address', done => {
|
||||
const target = '[::1]:50051';
|
||||
const listener: resolverManager.ResolverListener = {
|
||||
onSuccessfulResolution: (
|
||||
addressList: string[],
|
||||
serviceConfig: ServiceConfig | null,
|
||||
serviceConfigError: StatusObject | null
|
||||
) => {
|
||||
assert(addressList.includes('[::1]:50051'));
|
||||
// We would check for the IPv6 address but it needs to be omitted on some Node versions
|
||||
done();
|
||||
},
|
||||
onError: (error: StatusObject) => {
|
||||
done(new Error(`Failed with status ${error.details}`));
|
||||
},
|
||||
};
|
||||
const resolver = resolverManager.createResolver(target, listener);
|
||||
resolver.updateResolution();
|
||||
});
|
||||
it('Should resolve a public address', done => {
|
||||
const target = 'example.com';
|
||||
const listener: resolverManager.ResolverListener = {
|
||||
|
|
Loading…
Reference in New Issue