summaryrefslogtreecommitdiffstats
path: root/testing/mozbase/moznetwork/tests/test.py
diff options
context:
space:
mode:
Diffstat (limited to 'testing/mozbase/moznetwork/tests/test.py')
-rw-r--r--testing/mozbase/moznetwork/tests/test.py85
1 files changed, 85 insertions, 0 deletions
diff --git a/testing/mozbase/moznetwork/tests/test.py b/testing/mozbase/moznetwork/tests/test.py
new file mode 100644
index 000000000..79eee6b03
--- /dev/null
+++ b/testing/mozbase/moznetwork/tests/test.py
@@ -0,0 +1,85 @@
+#!/usr/bin/env python
+"""
+Unit-Tests for moznetwork
+"""
+
+import os
+import mock
+import mozinfo
+import moznetwork
+import re
+import subprocess
+import unittest
+
+
+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
+
+ :param ip: IPv4 address in the xxx.xxx.xxx.xxx format as a string
+ Example Usage:
+ verify_ip_in_list('192.168.0.1')
+
+ 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"]
+
+ if mozinfo.isWin:
+ args = ["ipconfig"]
+
+ ps = subprocess.Popen(args, 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
+ else:
+ return False
+
+
+class TestGetIP(unittest.TestCase):
+
+ def test_get_ip(self):
+ """ Attempt to test the IP address returned by
+ moznetwork.get_ip() is valid """
+
+ ip = moznetwork.get_ip()
+
+ # Check the IP returned by moznetwork is in the list
+ self.assertTrue(verify_ip_in_list(ip))
+
+ def test_get_ip_using_get_interface(self):
+ """ Test that the control flow path for get_ip() using
+ _get_interface_list() is works """
+
+ if mozinfo.isLinux or mozinfo.isMac:
+
+ with mock.patch('socket.gethostbyname') as byname:
+ # Force socket.gethostbyname to return None
+ byname.return_value = None
+
+ ip = moznetwork.get_ip()
+
+ # Check the IP returned by moznetwork is in the list
+ self.assertTrue(verify_ip_in_list(ip))
+
+
+if __name__ == '__main__':
+ unittest.main()