def test__composes_bootloader_section_v6(self): ip = factory.make_ipv6_address() output = config.compose_conditional_bootloader(True, ip) for name, method in BootMethodRegistry: if name == "uefi": self.assertThat(output, Contains("else")) self.assertThat(output, Contains(method.bootloader_path)) elif method.arch_octet is not None: if isinstance(method.arch_octet, list): self.assertThat(output, ContainsAll(method.arch_octet)) else: self.assertThat(output, Contains(method.arch_octet)) self.assertThat(output, Contains(method.bootloader_path)) else: # No DHCP configuration is rendered for boot methods that have # no `arch_octet`, with the solitary exception of PXE. pass if method.path_prefix_http or method.http_url: self.assertThat(output, Contains("http://[%s]:5248/" % ip)) if method.path_prefix_force: self.assertThat(output, Contains( "option dhcp6.oro = concat(option dhcp6.oro,00d2);")) if method.http_url: self.assertThat(output, Contains( 'option dhcp6.vendor-class 0 10 "HTTPClient";'))
def test_composes_bootloader_section_v4(self): ip = factory.make_ipv4_address() output = config.compose_conditional_bootloader(False, ip) for name, method in BootMethodRegistry: if name == "pxe": self.assertThat(output, Contains("else")) self.assertThat(output, Contains(method.bootloader_path)) elif method.arch_octet is not None: if isinstance(method.arch_octet, list): self.assertThat(output, ContainsAll(method.arch_octet)) else: self.assertThat(output, Contains(method.arch_octet)) self.assertThat(output, Contains(method.bootloader_path)) else: # No DHCP configuration is rendered for boot methods that have # no `arch_octet`, with the solitary exception of PXE. pass if method.path_prefix_http or method.http_url: self.assertThat(output, Contains("http://%s:5248/" % ip)) if method.path_prefix_force: self.assertThat( output, Contains("option dhcp-parameter-request-list = concat("), ) self.assertThat( output, Contains("option dhcp-parameter-request-list,d2);")) if method.http_url: self.assertThat( output, Contains('option vendor-class-identifier "HTTPClient";'), )
def test__includes_compose_conditional_bootloader(self): params = make_sample_params(self, ipv6=self.ipv6) rack_ip = params['shared_networks'][0]['subnets'][0]['router_ip'] self.patch( net_utils, 'get_all_interface_addresses' ).return_value = [netaddr.IPAddress(rack_ip)] bootloader = config.compose_conditional_bootloader( ipv6=self.ipv6, rack_ip=rack_ip) rendered = config.get_config(self.template, **params) validate_dhcpd_configuration(self, rendered, self.ipv6) self.assertThat(rendered, Contains(bootloader))
def test__composes_bootloader_section_v6(self): output = config.compose_conditional_bootloader(True) for name, method in BootMethodRegistry: if name == "uefi": self.assertThat(output, Contains("else")) self.assertThat(output, Contains(method.bootloader_path)) elif method.arch_octet is not None: self.assertThat(output, Contains(method.arch_octet)) self.assertThat(output, Contains(method.bootloader_path)) else: # No DHCP configuration is rendered for boot methods that have # no `arch_octet`, with the solitary exception of PXE. pass
def test_includes_compose_conditional_bootloader(self): params = make_sample_params(self, ipv6=self.ipv6) rack_ip = params["shared_networks"][0]["subnets"][0]["router_ip"] self.patch(net_utils, "get_all_interface_addresses").return_value = [ netaddr.IPAddress(rack_ip) ] bootloader = config.compose_conditional_bootloader(ipv6=self.ipv6, rack_ip=rack_ip) rendered = config.get_config(self.template, **params) validate_dhcpd_configuration(self, rendered, self.ipv6) self.assertThat(rendered, Contains(bootloader)) # Verify that "/images/" is automatically added to bootloaders # loaded over HTTP. This ensures nginx handles the result without # bothering rackd. self.assertIn("/images/bootx64.efi", rendered)
def test_disabled_boot_architecture(self): if factory.pick_bool(): ipv6 = True ip = factory.make_ipv6_address() else: ipv6 = False ip = factory.make_ipv4_address() disabled_arches = random.sample( [ boot_method for _, boot_method in BootMethodRegistry if boot_method.arch_octet or boot_method.user_class ], 3, ) output = config.compose_conditional_bootloader( ipv6, ip, [bm.name for bm in disabled_arches]) for disabled_arch in disabled_arches: if disabled_arch.arch_octet: self.assertNotIn(disabled_arch.arch_octet, output) else: self.assertNotIn(disabled_arch.user_class, output)