| #!/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() |