@@ -64,7 +64,8 @@ def assertRaisesIOError(self, fn, args, errmsg):
6464 fn (* args )
6565 except IOError as e :
6666 # Check the details of the exception:
67- self .assertEquals (e .args , (errmsg , ))
67+ enum , emsg = e .args
68+ self .assertEquals ('[Errno {}] {}' .format (enum , emsg ), errmsg )
6869 else :
6970 self .fail ('IOError was not raised calling %s on %s' % (fn , args ))
7071
@@ -99,23 +100,20 @@ def _functions_accepting_devnames(self, devname):
99100 scraped = ifconfig .get_device_by_name (devname )
100101
101102 self .assertIsString (ethtool .get_broadcast (devname ))
102- self .assertEqualIpv4Str (ethtool .get_broadcast (devname ),
103- scraped .broadcast )
103+
104+ # Broadcast is optional in ifconfig output
105+ if scraped .broadcast :
106+ self .assertEqualIpv4Str (ethtool .get_broadcast (devname ),
107+ scraped .broadcast )
104108
105109 self .assertIsStringExceptForLoopback (ethtool .get_businfo , devname ,
106110 '[Errno 95] Operation not supported' )
107111
108- # ethtool.get_coalesce(devname)
109- # this gives me:
110- # IOError: [Errno 95] Operation not supported
111- # on my test box
112-
113112 self .assertIsInt (ethtool .get_flags (devname ))
114113 # flagsint cannot be obtained from old ifconfig format
115114 if not ifconfig .oldFormat :
116115 self .assertEqual (ethtool .get_flags (devname ), scraped .flagsint )
117116 self .assertIsInt (ethtool .get_gso (devname ))
118-
119117 self .assertIsString (ethtool .get_hwaddr (devname ))
120118 self .assertEqualHwAddr (ethtool .get_hwaddr (devname ),
121119 scraped .hwaddr )
@@ -124,26 +122,26 @@ def _functions_accepting_devnames(self, devname):
124122
125123 self .assertIsStringExceptForLoopback (ethtool .get_module , devname ,
126124 '[Errno 95] Operation not supported' )
127-
125+
128126 self .assertIsString (ethtool .get_netmask (devname ))
129127 self .assertEqual (ethtool .get_netmask (devname ),
130128 scraped .netmask )
131-
132- #self.assertRaisesIOError(ethtool.get_ringparam, (devname, ),
133- # '[Errno 95] Operation not supported')
134-
135- # Disabling until BZ#703089 is investigated
136- #self.assertIsInt(ethtool.get_sg(devname))
137- #self.assertIsInt(ethtool.get_ufo(devname))
138-
129+
130+ # Operation is not supported only on loopback device
131+ if devname == 'lo' :
132+ self .assertRaisesIOError (ethtool .get_ringparam , (devname , ),
133+ '[Errno 95] Operation not supported' )
134+
135+ self .assertIsInt (ethtool .get_sg (devname ))
136+ self .assertIsInt (ethtool .get_ufo (devname ))
137+
139138 self .assertIsInt (ethtool .get_tso (devname ))
140-
141-
142- #TODO: self.assertIsString(ethtool.set_coalesce(devname))
143-
144- #TODO: self.assertIsString(ethtool.set_ringparam(devname))
145139
146- #TODO: self.assertIsString(ethtool.set_tso(devname))
140+ # TODO: self.assertIsString(ethtool.set_coalesce(devname))
141+
142+ # TODO: self.assertIsString(ethtool.set_ringparam(devname))
143+
144+ # TODO: self.assertIsString(ethtool.set_tso(devname))
147145
148146 def _verify_etherinfo_object (self , ei ):
149147 self .assert_ (isinstance (ei , ethtool .etherinfo ))
@@ -159,17 +157,17 @@ def _verify_etherinfo_object(self, ei):
159157 self .assertEqual (ei .ipv4_address , scraped .inet )
160158
161159 self .assertIsStringOrNone (ei .ipv4_broadcast )
162- if scraped :
160+ if scraped and scraped .broadcast :
161+ # Broadcast is optional
163162 self .assertEqual (ei .ipv4_broadcast , scraped .broadcast )
164163
165164 self .assertIsInt (ei .ipv4_netmask )
166165 if scraped :
167166 self .assertEqual (ei .ipv4_netmask , scraped .get_netmask_bits ())
168167
169168 self .assertIsStringOrNone (ei .mac_address )
170- if scraped :
171- if scraped .hwaddr :
172- scraped .hwaddr = scraped .hwaddr .lower ()
169+ if scraped and scraped .hwaddr and scraped .hwtitle .lower () != 'unspec' :
170+ scraped .hwaddr = scraped .hwaddr .lower ()
173171 self .assertEqualHwAddr (ei .mac_address .lower (), scraped .hwaddr )
174172
175173 i6s = ei .get_ipv6_addresses ()
@@ -178,10 +176,6 @@ def _verify_etherinfo_object(self, ei):
178176 self .assertIsString (i6 .address )
179177 self .assertIsInt (i6 .netmask )
180178 self .assertIsString (i6 .scope )
181- self .assertEquals (str (i6 ),
182- '[%s] %s/%i' % (i6 .scope ,
183- i6 .address ,
184- i6 .netmask ))
185179
186180 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
187181 # tests
@@ -208,16 +202,15 @@ def test_invalid_devices(self):
208202 self .assertRaisesNoSuchDevice (getattr (ethtool , fnname ),
209203 INVALID_DEVICE_NAME , 42 )
210204
211-
212205 def test_get_interface_info_invalid (self ):
213206 eis = ethtool .get_interfaces_info (INVALID_DEVICE_NAME )
214207 self .assertEquals (len (eis ), 1 )
215208 ei = eis [0 ]
216209 self .assertEquals (ei .device , INVALID_DEVICE_NAME )
210+ self .assertEquals (ei .ipv4_netmask , 0 )
217211 self .assertEquals (ei .ipv4_address , None )
218212 self .assertEquals (ei .ipv4_broadcast , None )
219- self .assertEquals (ei .ipv4_netmask , 0 )
220- self .assertEquals (ei .mac_address , None )
213+ self .assertRaisesIOError (getattr , (ei , 'mac_address' ), '[Errno 19] No such device' )
221214
222215 def test_get_interface_info_active (self ):
223216 eis = ethtool .get_interfaces_info (ethtool .get_active_devices ())
@@ -231,6 +224,9 @@ def test_get_interface_info_all(self):
231224
232225 def test_get_active_devices (self ):
233226 for devname in ethtool .get_active_devices ():
227+ # Skip these test on tun devices
228+ if devname .startswith ('tun' ):
229+ continue
234230 self ._functions_accepting_devnames (devname )
235231
236232 def test_etherinfo_objects (self ):
0 commit comments