Bug 1003417 - Use 'ip addr show' instead of 'ifconfig' for moznetwork tests, r?ted draft
authorAndrew Halberstadt <ahalberstadt@mozilla.com>
Fri, 06 Jan 2017 11:19:19 -0500
changeset 480680 34d735e7ec2e991d85b4164456bc88ca8f61d333
parent 480651 5dd159fa43700688d41e4959bafdedef83885165
child 480681 6a79cdcae7d1ecaafd9c37d3b0328ebd537e2708
push id44627
push userahalberstadt@mozilla.com
push dateWed, 08 Feb 2017 20:16:08 +0000
reviewersted
bugs1003417
milestone54.0a1
Bug 1003417 - Use 'ip addr show' instead of 'ifconfig' for moznetwork tests, r?ted The taskcluster docker image for source-check tasks does not have 'ifconfig' installed. We could add this package, but ifconfig is more or less deprecated in favour of 'ip addr show'. Although the formats of both commands are different, because the test pulls ip addresses out of the output with regexes, the only change that is needed to make sure the tests still pass is to change the command. MozReview-Commit-ID: 758Qb6KSHzS
testing/mozbase/moznetwork/tests/test.py
--- a/testing/mozbase/moznetwork/tests/test.py
+++ b/testing/mozbase/moznetwork/tests/test.py
@@ -1,20 +1,20 @@
 #!/usr/bin/env python
 """
 Unit-Tests for moznetwork
 """
 
-import os
 import mock
 import mozinfo
 import moznetwork
 import re
 import subprocess
 import unittest
+from distutils.spawn import find_executable
 
 import mozunit
 
 
 def verify_ip_in_list(ip):
     """
     Helper Method to check if `ip` is listed in Network Adresses
     returned by ipconfig/ifconfig, depending on the platform in use
@@ -26,29 +26,36 @@ def verify_ip_in_list(ip):
     returns True if the `ip` is in the list of IPs in ipconfig/ifconfig
     """
 
     # Regex to match IPv4 addresses.
     # 0-255.0-255.0-255.0-255, note order is important here.
     regexip = re.compile("((25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)\.){3}"
                          "(25[0-5]|2[0-4]\d|1\d\d|[1-9]\d|\d)")
 
-    if mozinfo.isLinux or mozinfo.isMac or mozinfo.isBsd:
-        # if "/sbin/ifconfig" exist, use it because it may not be in the
-        # PATH (at least on some linux platforms)
-        if os.path.isfile('/sbin/ifconfig') and os.access('/sbin/ifconfig',
-                                                          os.X_OK):
-            args = ['/sbin/ifconfig']
-        else:
-            args = ["ifconfig"]
+    commands = (
+        ['ip', 'addr', 'show'],
+        ['ifconfig'],
+        ['ipconfig'],
+        # Explicitly search '/sbin' because it doesn't always appear
+        # to be on the $PATH of all systems
+        ['/sbin/ip', 'addr', 'show'],
+        ['/sbin/ifconfig'],
+    )
 
-    if mozinfo.isWin:
-        args = ["ipconfig"]
+    cmd = None
+    for command in commands:
+        if find_executable(command[0]):
+            cmd = command
+            break
+    else:
+        raise OSError("No program for detecting ip address found! Ensure one of 'ip', "
+                      "'ifconfig' or 'ipconfig' exists on your $PATH.")
 
-    ps = subprocess.Popen(args, stdout=subprocess.PIPE)
+    ps = subprocess.Popen(cmd, stdout=subprocess.PIPE)
     standardoutput, standarderror = ps.communicate()
 
     # Generate a list of IPs by parsing the output of ip/ifconfig
     ip_list = [x.group() for x in re.finditer(regexip, standardoutput)]
 
     # Check if ip is in list
     if ip in ip_list:
         return True