@@ -17,121 +17,160 @@ const {
1717const { internalBinding } = require ( 'internal/test/binding' ) ;
1818const {
1919 SocketAddress : _SocketAddress ,
20- AF_INET
20+ AF_INET ,
2121} = internalBinding ( 'block_list' ) ;
2222
23- {
24- const sa = new SocketAddress ( ) ;
25- strictEqual ( sa . address , '127.0.0.1' ) ;
26- strictEqual ( sa . port , 0 ) ;
27- strictEqual ( sa . family , 'ipv4' ) ;
28- strictEqual ( sa . flowlabel , 0 ) ;
23+ const { describe, it } = require ( 'node:test' ) ;
2924
30- const mc = new MessageChannel ( ) ;
31- mc . port1 . onmessage = common . mustCall ( ( { data } ) => {
32- ok ( SocketAddress . isSocketAddress ( data ) ) ;
25+ describe ( 'net.SocketAddress...' , ( ) => {
3326
34- strictEqual ( data . address , '127.0.0.1' ) ;
35- strictEqual ( data . port , 0 ) ;
36- strictEqual ( data . family , 'ipv4' ) ;
37- strictEqual ( data . flowlabel , 0 ) ;
27+ it ( 'is cloneable' , ( ) => {
28+ const sa = new SocketAddress ( ) ;
29+ strictEqual ( sa . address , '127.0.0.1' ) ;
30+ strictEqual ( sa . port , 0 ) ;
31+ strictEqual ( sa . family , 'ipv4' ) ;
32+ strictEqual ( sa . flowlabel , 0 ) ;
3833
39- mc . port1 . close ( ) ;
34+ const mc = new MessageChannel ( ) ;
35+ mc . port1 . onmessage = common . mustCall ( ( { data } ) => {
36+ ok ( SocketAddress . isSocketAddress ( data ) ) ;
37+
38+ strictEqual ( data . address , '127.0.0.1' ) ;
39+ strictEqual ( data . port , 0 ) ;
40+ strictEqual ( data . family , 'ipv4' ) ;
41+ strictEqual ( data . flowlabel , 0 ) ;
42+
43+ mc . port1 . close ( ) ;
44+ } ) ;
45+ mc . port2 . postMessage ( sa ) ;
4046 } ) ;
41- mc . port2 . postMessage ( sa ) ;
42- }
43-
44- {
45- const sa = new SocketAddress ( { } ) ;
46- strictEqual ( sa . address , '127.0.0.1' ) ;
47- strictEqual ( sa . port , 0 ) ;
48- strictEqual ( sa . family , 'ipv4' ) ;
49- strictEqual ( sa . flowlabel , 0 ) ;
50- }
51-
52- {
53- const sa = new SocketAddress ( {
54- address : '123.123.123.123' ,
47+
48+ it ( 'has reasonable defaults' , ( ) => {
49+ const sa = new SocketAddress ( { } ) ;
50+ strictEqual ( sa . address , '127.0.0.1' ) ;
51+ strictEqual ( sa . port , 0 ) ;
52+ strictEqual ( sa . family , 'ipv4' ) ;
53+ strictEqual ( sa . flowlabel , 0 ) ;
5554 } ) ;
56- strictEqual ( sa . address , '123.123.123.123' ) ;
57- strictEqual ( sa . port , 0 ) ;
58- strictEqual ( sa . family , 'ipv4' ) ;
59- strictEqual ( sa . flowlabel , 0 ) ;
60- }
61-
62- {
63- const sa = new SocketAddress ( {
64- address : '123.123.123.123' ,
65- port : 80
55+
56+ it ( 'interprets simple ipv4 correctly' , ( ) => {
57+ const sa = new SocketAddress ( {
58+ address : '123.123.123.123' ,
59+ } ) ;
60+ strictEqual ( sa . address , '123.123.123.123' ) ;
61+ strictEqual ( sa . port , 0 ) ;
62+ strictEqual ( sa . family , 'ipv4' ) ;
63+ strictEqual ( sa . flowlabel , 0 ) ;
6664 } ) ;
67- strictEqual ( sa . address , '123.123.123.123' ) ;
68- strictEqual ( sa . port , 80 ) ;
69- strictEqual ( sa . family , 'ipv4' ) ;
70- strictEqual ( sa . flowlabel , 0 ) ;
71- }
72-
73- {
74- const sa = new SocketAddress ( {
75- family : 'ipv6'
65+
66+ it ( 'sets the port correctly' , ( ) => {
67+ const sa = new SocketAddress ( {
68+ address : '123.123.123.123' ,
69+ port : 80
70+ } ) ;
71+ strictEqual ( sa . address , '123.123.123.123' ) ;
72+ strictEqual ( sa . port , 80 ) ;
73+ strictEqual ( sa . family , 'ipv4' ) ;
74+ strictEqual ( sa . flowlabel , 0 ) ;
7675 } ) ;
77- strictEqual ( sa . address , '::' ) ;
78- strictEqual ( sa . port , 0 ) ;
79- strictEqual ( sa . family , 'ipv6' ) ;
80- strictEqual ( sa . flowlabel , 0 ) ;
81- }
82-
83- {
84- const sa = new SocketAddress ( {
85- family : 'ipv6' ,
86- flowlabel : 1 ,
76+
77+ it ( 'interprets simple ipv6 correctly' , ( ) => {
78+ const sa = new SocketAddress ( {
79+ family : 'ipv6'
80+ } ) ;
81+ strictEqual ( sa . address , '::' ) ;
82+ strictEqual ( sa . port , 0 ) ;
83+ strictEqual ( sa . family , 'ipv6' ) ;
84+ strictEqual ( sa . flowlabel , 0 ) ;
8785 } ) ;
88- strictEqual ( sa . address , '::' ) ;
89- strictEqual ( sa . port , 0 ) ;
90- strictEqual ( sa . family , 'ipv6' ) ;
91- strictEqual ( sa . flowlabel , 1 ) ;
92- }
93-
94- [ 1 , false , 'hello' ] . forEach ( ( i ) => {
95- throws ( ( ) => new SocketAddress ( i ) , {
96- code : 'ERR_INVALID_ARG_TYPE'
86+
87+ it ( 'uses the flowlabel correctly' , ( ) => {
88+ const sa = new SocketAddress ( {
89+ family : 'ipv6' ,
90+ flowlabel : 1 ,
91+ } ) ;
92+ strictEqual ( sa . address , '::' ) ;
93+ strictEqual ( sa . port , 0 ) ;
94+ strictEqual ( sa . family , 'ipv6' ) ;
95+ strictEqual ( sa . flowlabel , 1 ) ;
9796 } ) ;
98- } ) ;
9997
100- [ 1 , false , { } , [ ] , 'test' ] . forEach ( ( family ) => {
101- throws ( ( ) => new SocketAddress ( { family } ) , {
102- code : 'ERR_INVALID_ARG_VALUE'
98+ it ( 'validates input correctly' , ( ) => {
99+ [ 1 , false , 'hello' ] . forEach ( ( i ) => {
100+ throws ( ( ) => new SocketAddress ( i ) , {
101+ code : 'ERR_INVALID_ARG_TYPE'
102+ } ) ;
103+ } ) ;
104+
105+ [ 1 , false , { } , [ ] , 'test' ] . forEach ( ( family ) => {
106+ throws ( ( ) => new SocketAddress ( { family } ) , {
107+ code : 'ERR_INVALID_ARG_VALUE'
108+ } ) ;
109+ } ) ;
110+
111+ [ 1 , false , { } , [ ] ] . forEach ( ( address ) => {
112+ throws ( ( ) => new SocketAddress ( { address } ) , {
113+ code : 'ERR_INVALID_ARG_TYPE'
114+ } ) ;
115+ } ) ;
116+
117+ [ - 1 , false , { } , [ ] ] . forEach ( ( port ) => {
118+ throws ( ( ) => new SocketAddress ( { port } ) , {
119+ code : 'ERR_SOCKET_BAD_PORT'
120+ } ) ;
121+ } ) ;
122+
123+ throws ( ( ) => new SocketAddress ( { flowlabel : - 1 } ) , {
124+ code : 'ERR_OUT_OF_RANGE'
125+ } ) ;
103126 } ) ;
104- } ) ;
105127
106- [ 1 , false , { } , [ ] ] . forEach ( ( address ) => {
107- throws ( ( ) => new SocketAddress ( { address } ) , {
108- code : 'ERR_INVALID_ARG_TYPE'
128+ it ( 'InternalSocketAddress correctly inherits from SocketAddress' , ( ) => {
129+ // Test that the internal helper class InternalSocketAddress correctly
130+ // inherits from SocketAddress and that it does not throw when its properties
131+ // are accessed.
132+
133+ const address = '127.0.0.1' ;
134+ const port = 8080 ;
135+ const flowlabel = 0 ;
136+ const handle = new _SocketAddress ( address , port , AF_INET , flowlabel ) ;
137+ const addr = new InternalSocketAddress ( handle ) ;
138+ ok ( addr instanceof SocketAddress ) ;
139+ strictEqual ( addr . address , address ) ;
140+ strictEqual ( addr . port , port ) ;
141+ strictEqual ( addr . family , 'ipv4' ) ;
142+ strictEqual ( addr . flowlabel , flowlabel ) ;
109143 } ) ;
110- } ) ;
111144
112- [ - 1 , false , { } , [ ] ] . forEach ( ( port ) => {
113- throws ( ( ) => new SocketAddress ( { port } ) , {
114- code : 'ERR_SOCKET_BAD_PORT'
145+ it ( 'SocketAddress.parse() works as expected' , ( ) => {
146+ const good = [
147+ { input : '1.2.3.4' , address : '1.2.3.4' , port : 0 , family : 'ipv4' } ,
148+ { input : '192.168.257:1' , address : '192.168.1.1' , port : 1 , family : 'ipv4' } ,
149+ { input : '256' , address : '0.0.1.0' , port : 0 , family : 'ipv4' } ,
150+ { input : '999999999:12' , address : '59.154.201.255' , port : 12 , family : 'ipv4' } ,
151+ { input : '0xffffffff' , address : '255.255.255.255' , port : 0 , family : 'ipv4' } ,
152+ { input : '0x.0x.0' , address : '0.0.0.0' , port : 0 , family : 'ipv4' } ,
153+ { input : '[1:0::]' , address : '1::' , port : 0 , family : 'ipv6' } ,
154+ { input : '[1::8]:123' , address : '1::8' , port : 123 , family : 'ipv6' } ,
155+ ] ;
156+
157+ good . forEach ( ( i ) => {
158+ const addr = SocketAddress . parse ( i . input ) ;
159+ strictEqual ( addr . address , i . address ) ;
160+ strictEqual ( addr . port , i . port ) ;
161+ strictEqual ( addr . family , i . family ) ;
162+ } ) ;
163+
164+ const bad = [
165+ 'not an ip' ,
166+ 'abc.123' ,
167+ '259.1.1.1' ,
168+ '12:12:12' ,
169+ ] ;
170+
171+ bad . forEach ( ( i ) => {
172+ strictEqual ( SocketAddress . parse ( i ) , undefined ) ;
173+ } ) ;
115174 } ) ;
116- } ) ;
117175
118- throws ( ( ) => new SocketAddress ( { flowlabel : - 1 } ) , {
119- code : 'ERR_OUT_OF_RANGE'
120176} ) ;
121-
122- {
123- // Test that the internal helper class InternalSocketAddress correctly
124- // inherits from SocketAddress and that it does not throw when its properties
125- // are accessed.
126-
127- const address = '127.0.0.1' ;
128- const port = 8080 ;
129- const flowlabel = 0 ;
130- const handle = new _SocketAddress ( address , port , AF_INET , flowlabel ) ;
131- const addr = new InternalSocketAddress ( handle ) ;
132- ok ( addr instanceof SocketAddress ) ;
133- strictEqual ( addr . address , address ) ;
134- strictEqual ( addr . port , port ) ;
135- strictEqual ( addr . family , 'ipv4' ) ;
136- strictEqual ( addr . flowlabel , flowlabel ) ;
137- }
0 commit comments