def testGetDhcpOption(self, optscan, socket): optscan.return_value = None result = dhcp.GetDhcpOption('192.168.0.1', '11:22:33:44:55:66', 102) self.assertEqual(None, result) optscan.return_value = 'America/Chicago' result = dhcp.GetDhcpOption('192.168.0.2', '11:22:33:44:55:66', 101) self.assertEqual('America/Chicago', result) socket.return_value.recv.side_effect = dhcp.socket.timeout result = dhcp.GetDhcpOption( '192.168.0.2', '11:22:33:44:55:66', 101, server_addr='10.0.0.1', socket_timeout=5) socket.return_value.sendto.assert_called_with(mock.ANY, ('10.0.0.1', 67)) socket.return_value.settimeout.assert_called_with(5) self.assertEqual(None, result) # bad mac result = dhcp.GetDhcpOption( '192.168.0.2', None, 101, server_addr='10.0.0.1', socket_timeout=5) # bad ip self.assertEqual(None, result) result = dhcp.GetDhcpOption( None, '11:22:33:44:55:66', 101, server_addr='10.0.0.1', socket_timeout=5) self.assertEqual(None, result)
def Run(self): """Sets the timezone inside unattend.xml.""" local_tz = 'Pacific Standard Time' from_dhcp = False retries = 0 while not from_dhcp and retries < 5: for intf in self._build_info.NetInterfaces(): if intf.ip_address and intf.mac_address: servers = ['255.255.255.255'] if intf.dhcp_server: servers.insert(0, intf.dhcp_server) logging.debug( 'Attempting to get timezone from interface with IP %s and MAC %s', intf.ip_address, intf.mac_address) for dhcp_server in servers: dhcp_response = dhcp.GetDhcpOption( client_addr=intf.ip_address, client_mac=intf.mac_address, option=101, server_addr=dhcp_server) try: from_dhcp = dhcp_response.decode('utf-8') except AttributeError: logging.warning( 'could not decode dhcp response %s', dhcp_response) from_dhcp = None logging.debug('DHCP server %s returned: %s', dhcp_server, from_dhcp) if from_dhcp: break if from_dhcp: break logging.debug('No result from DHCP. Retrying...') retries += 1 if from_dhcp: logging.debug('Got timezone %s from DHCP.', from_dhcp) tz = timezone.Timezone(load_map=True) translated = tz.TranslateZone(from_dhcp) if translated: local_tz = translated logging.debug('Successfully translated timezone to %s.', local_tz) else: logging.error('Could not translate DHCP timezone.') else: logging.error('Could not find timezone from DHCP.') logging.debug('Finalized timezone is %s.', local_tz) self._EditUnattend(local_tz)