@@ -24,6 +24,7 @@ const common = require('../common');
2424const assert = require ( 'assert' ) ;
2525const os = require ( 'os' ) ;
2626const path = require ( 'path' ) ;
27+ const { inspect } = require ( 'util' ) ;
2728
2829const is = {
2930 string : ( value ) => { assert . strictEqual ( typeof value , 'string' ) ; } ,
@@ -121,7 +122,7 @@ switch (platform) {
121122 const actual = interfaces . lo . filter ( filter ) ;
122123 const expected = [ { address : '127.0.0.1' , netmask : '255.0.0.0' ,
123124 mac : '00:00:00:00:00:00' , family : 'IPv4' ,
124- internal : true } ] ;
125+ internal : true , cidr : '127.0.0.1/8' } ] ;
125126 assert . deepStrictEqual ( actual , expected ) ;
126127 break ;
127128 }
@@ -131,11 +132,31 @@ switch (platform) {
131132 const actual = interfaces [ 'Loopback Pseudo-Interface 1' ] . filter ( filter ) ;
132133 const expected = [ { address : '127.0.0.1' , netmask : '255.0.0.0' ,
133134 mac : '00:00:00:00:00:00' , family : 'IPv4' ,
134- internal : true } ] ;
135+ internal : true , cidr : '127.0.0.1/8' } ] ;
135136 assert . deepStrictEqual ( actual , expected ) ;
136137 break ;
137138 }
138139}
140+ function flatten ( arr ) {
141+ return arr . reduce (
142+ ( acc , c ) => acc . concat ( Array . isArray ( c ) ? flatten ( c ) : c ) ,
143+ [ ]
144+ ) ;
145+ }
146+ const netmaskToCIDRSuffixMap = new Map ( Object . entries ( {
147+ '255.0.0.0' : 8 ,
148+ '255.255.255.0' : 24 ,
149+ 'ffff:ffff:ffff:ffff::' : 64 ,
150+ 'ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff' : 128
151+ } ) ) ;
152+ flatten ( Object . values ( interfaces ) )
153+ . map ( ( v ) => ( { v, mask : netmaskToCIDRSuffixMap . get ( v . netmask ) } ) )
154+ . forEach ( ( { v, mask } ) => {
155+ assert . ok ( 'cidr' in v , `"cidr" prop not found in ${ inspect ( v ) } ` ) ;
156+ if ( mask ) {
157+ assert . strictEqual ( v . cidr , `${ v . address } /${ mask } ` ) ;
158+ }
159+ } ) ;
139160
140161const EOL = os . EOL ;
141162assert . ok ( EOL . length > 0 ) ;
0 commit comments