blob: 500acfbaf3d931c6cd52f9eba76ede9e50d9cef9 [file] [log] [blame]
# Copyright (c) 2012 The Chromium OS Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.
import logging
import utils
from autotest_lib.client.common_lib import error
from autotest_lib.client.cros import dhcp_packet
from autotest_lib.client.cros import dhcp_test_base
# Length of time the lease from the DHCP server is valid.
LEASE_TIME_SECONDS = 60
# We'll fill in the subnet and give this address to the client.
INTENDED_IP_SUFFIX = '0.0.0.101'
# Most ChromeOS devices are configured with this name.
DEFAULT_HOSTNAME = 'localhost'
# Hostname we'll provide to the device.
TEST_HOSTNAME = 'britney-spears'
class network_DhcpRequestHostName(dhcp_test_base.DhcpTestBase):
"""Tests that we can supply a hostname to the shill over DHCP."""
def test_body(self):
# Make sure that shill is started with
# --accept-hostname-from=pseudoethernet0.
required_flag = '--accept-hostname-from=pseudoethernet0'
pid = utils.system_output('pgrep shill')
process_info = utils.system_output('ps %s' % pid)
if required_flag not in process_info:
raise error.TestNAError('Invalid Test. '
'Expected shill to be started with %s' %
required_flag)
# Keep track of the original hostname.
original_hostname = utils.system_output('hostname')
if original_hostname != DEFAULT_HOSTNAME:
logging.warning('Unexpected starting hostname %s (expected %s)',
original_hostname, DEFAULT_HOSTNAME)
# Set the hostname to something we know.
utils.system('hostname %s' % DEFAULT_HOSTNAME)
subnet_mask = self.ethernet_pair.interface_subnet_mask
intended_ip = dhcp_test_base.DhcpTestBase.rewrite_ip_suffix(
subnet_mask,
self.server_ip,
INTENDED_IP_SUFFIX)
# Two real name servers, and a bogus one to be unpredictable.
dns_servers = ['8.8.8.8', '8.8.4.4', '192.168.87.88']
domain_name = 'corp.google.com'
dns_search_list = [
'corgie.google.com',
'lies.google.com',
'that.is.a.tasty.burger.google.com',
]
# This is the pool of information the server will give out to the client
# upon request.
dhcp_options = {
dhcp_packet.OPTION_SERVER_ID : self.server_ip,
dhcp_packet.OPTION_SUBNET_MASK : subnet_mask,
dhcp_packet.OPTION_IP_LEASE_TIME : LEASE_TIME_SECONDS,
dhcp_packet.OPTION_REQUESTED_IP : intended_ip,
dhcp_packet.OPTION_DNS_SERVERS : dns_servers,
dhcp_packet.OPTION_DOMAIN_NAME : domain_name,
dhcp_packet.OPTION_HOST_NAME : TEST_HOSTNAME,
dhcp_packet.OPTION_DNS_DOMAIN_SEARCH_LIST : dns_search_list,
}
try:
self.negotiate_and_check_lease(dhcp_options)
system_hostname = utils.system_output('hostname')
finally:
# Set the hostname back to the original to avoid side effects.
utils.system_output('hostname %s' % original_hostname)
# Test that shill updated the system hostname correctly.
if system_hostname != TEST_HOSTNAME:
raise error.TestFail('Expected system host name to be set to '
'%s, but got %s instead.' %
(TEST_HOSTNAME, system_hostname))