@@ -31,6 +31,58 @@ describe('fastLookup', () => {
3131 } ) ;
3232 } ) ;
3333
34+ it ( 'should use dns.lookup directly for .local hostnames (mDNS)' , ( done ) => {
35+ mockResolve ( 'resolve4' , [ '192.0.78.134' ] ) ; // bogus public-DNS result
36+ mockLookup ( '192.168.33.254' , 4 ) ; // correct mDNS result
37+
38+ fastLookup ( 'fhir.local' , { } , ( err , address , family ) => {
39+ expect ( err ) . toBeNull ( ) ;
40+ expect ( address ) . toBe ( '192.168.33.254' ) ;
41+ expect ( family ) . toBe ( 4 ) ;
42+ expect ( dns . resolve4 ) . not . toHaveBeenCalled ( ) ;
43+ done ( ) ;
44+ } ) ;
45+ } ) ;
46+
47+ it ( 'should use dns.lookup for mixed-case .LOCAL hostnames' , ( done ) => {
48+ mockResolve ( 'resolve4' , [ '192.0.78.134' ] ) ;
49+ mockLookup ( '192.168.33.254' , 4 ) ;
50+
51+ fastLookup ( 'FHIR.LOCAL' , { } , ( err , address , family ) => {
52+ expect ( err ) . toBeNull ( ) ;
53+ expect ( address ) . toBe ( '192.168.33.254' ) ;
54+ expect ( family ) . toBe ( 4 ) ;
55+ expect ( dns . resolve4 ) . not . toHaveBeenCalled ( ) ;
56+ done ( ) ;
57+ } ) ;
58+ } ) ;
59+
60+ it ( 'should use dns.lookup directly for localhost (RFC 6761)' , ( done ) => {
61+ mockResolve ( 'resolve4' , [ '93.184.216.34' ] ) ; // hijacked result
62+ mockLookup ( '127.0.0.1' , 4 ) ;
63+
64+ fastLookup ( 'localhost' , { } , ( err , address , family ) => {
65+ expect ( err ) . toBeNull ( ) ;
66+ expect ( address ) . toBe ( '127.0.0.1' ) ;
67+ expect ( family ) . toBe ( 4 ) ;
68+ expect ( dns . resolve4 ) . not . toHaveBeenCalled ( ) ;
69+ done ( ) ;
70+ } ) ;
71+ } ) ;
72+
73+ it ( 'should use dns.lookup for .localhost subdomains' , ( done ) => {
74+ mockResolve ( 'resolve4' , [ '93.184.216.34' ] ) ;
75+ mockLookup ( '127.0.0.1' , 4 ) ;
76+
77+ fastLookup ( 'api.localhost' , { } , ( err , address , family ) => {
78+ expect ( err ) . toBeNull ( ) ;
79+ expect ( address ) . toBe ( '127.0.0.1' ) ;
80+ expect ( family ) . toBe ( 4 ) ;
81+ expect ( dns . resolve4 ) . not . toHaveBeenCalled ( ) ;
82+ done ( ) ;
83+ } ) ;
84+ } ) ;
85+
3486 it ( 'should fall back to dns.lookup when both resolvers fail' , ( done ) => {
3587 mockResolve ( 'resolve4' , [ ] , new Error ( 'ENOTFOUND' ) ) ;
3688 mockResolve ( 'resolve6' , [ ] , new Error ( 'ENOTFOUND' ) ) ;
0 commit comments