From 41a36611c1ede95c8a5e3910bd6cb7f7f04dc4df Mon Sep 17 00:00:00 2001 From: Ade Lee Date: Wed, 23 Aug 2017 21:44:47 -0400 Subject: [PATCH] Add compute node tests --- novajoin_tempest_plugin/config.py | 3 ++ .../tests/scenario/novajoin_manager.py | 22 ++++++++--- .../scenario/test_novajoin_enrollment.py | 26 +++++-------- .../tests/scenario/test_tripleo_deployment.py | 37 +++++++++++++------ .../tests/scenario/test_tripleo_tls.py | 24 +++++++----- 5 files changed, 69 insertions(+), 43 deletions(-) diff --git a/novajoin_tempest_plugin/config.py b/novajoin_tempest_plugin/config.py index c338927..ca83ef4 100644 --- a/novajoin_tempest_plugin/config.py +++ b/novajoin_tempest_plugin/config.py @@ -34,6 +34,9 @@ NovajoinGroup = [ cfg.ListOpt('tripleo_controllers', default=['overcloud-controller-0'], help='List of overcloud controller short host names'), + cfg.ListOpt('tripleo_computes', + default=['overcloud-novacompute-0'], + help='List of overcloud compute short host names'), cfg.StrOpt('tripleo_undercloud', default='undercloud', help='Undercloud short host name' diff --git a/novajoin_tempest_plugin/tests/scenario/novajoin_manager.py b/novajoin_tempest_plugin/tests/scenario/novajoin_manager.py index a9980b6..f27ec1e 100644 --- a/novajoin_tempest_plugin/tests/scenario/novajoin_manager.py +++ b/novajoin_tempest_plugin/tests/scenario/novajoin_manager.py @@ -113,17 +113,18 @@ class NovajoinScenarioTest(manager.ScenarioTest): subhost = '{host}.{network}.{domain}'.format( host=host, network=network, domain=self.ipa_client.domain ) - service_principal = self.get_service_principal(subhost, service) - result = self.ipa_client.find_service(service_principal) - self.assertFalse(result['count'] > 0) + service_principal = self.get_service_principal( + subhost, service) + result = self.ipa_client.find_service(service_principal) + self.assertFalse(result['count'] > 0) def verify_managed_services_deleted(self, services): for principal in services: service = principal.split('/', 1)[0] host = principal.split('/', 1)[1] - service_principal = self.get_service_principal(host, service) - result = self.ipa_client.find_service(service_principal) - self.assertFalse(result['count'] > 0) + service_principal = self.get_service_principal(host, service) + result = self.ipa_client.find_service(service_principal) + self.assertFalse(result['count'] > 0) def get_service_cert(self, service, host): service_principal = self.get_service_principal(host, service) @@ -214,6 +215,11 @@ class NovajoinScenarioTest(manager.ScenarioTest): return href.split('/')[-1] return None + def get_overcloud_server_ip(self, host): + host_id = self.get_server_id(host) + host_data = self.servers_client.show_server(host_id)['server'] + return self.get_server_ip(host_data) + def get_haproxy_cfg(self, user, controller_ip): try: # check containerized location first @@ -232,6 +238,10 @@ class NovajoinScenarioTest(manager.ScenarioTest): cmd = 'sudo hiera -c /etc/puppet/hiera.yaml rabbitmq::ssl_port' return self.execute_on_controller(user, controller_ip, cmd).rstrip() + def get_libvirt_port(self, user, compute_ip): + # TODO(alee) Get from hiera nova::migration::libvirt::listen_address + return "16514" + def execute_on_controller(self, user, hostip, target_cmd): keypair = '/home/stack/.ssh/id_rsa' cmd = ['ssh', '-i', keypair, diff --git a/novajoin_tempest_plugin/tests/scenario/test_novajoin_enrollment.py b/novajoin_tempest_plugin/tests/scenario/test_novajoin_enrollment.py index ce711ef..4887eb4 100644 --- a/novajoin_tempest_plugin/tests/scenario/test_novajoin_enrollment.py +++ b/novajoin_tempest_plugin/tests/scenario/test_novajoin_enrollment.py @@ -47,7 +47,7 @@ class ServerTest(novajoin_manager.NovajoinScenarioTest): def _create_flavor(self, flavor_name): specs = {"capabilities:boot_option": "local", "capabilities:profile": "compute"} - flvid = data_utils.rand_int_id(start=1000) + flv_id = data_utils.rand_int_id(start=1000) ram = 4096 vcpus = 1 disk = 40 @@ -55,10 +55,10 @@ class ServerTest(novajoin_manager.NovajoinScenarioTest): ram=ram, vcpus=vcpus, disk=disk, - id=flvid)['flavor'] - self.flavors_client.set_flavor_extra_spec(flvid, + id=flv_id)['flavor'] + self.flavors_client.set_flavor_extra_spec(flv_id, **specs) - return flvid + return flv_id def _create_image(self, name, properties={}): container_format = 'bare' @@ -69,9 +69,8 @@ class ServerTest(novajoin_manager.NovajoinScenarioTest): properties=properties) return image_id - def _verify_host_and_services_are_enrolled(self, server_name, - server_id, keypair): - + def _verify_host_and_services_are_enrolled( + self, server_name, server_id, keypair): self.verify_host_registered_with_ipa(server_name) self.verify_host_has_keytab(server_name) @@ -87,8 +86,6 @@ class ServerTest(novajoin_manager.NovajoinScenarioTest): ) # Verify managed services are created - metadata = self.servers_client.list_server_metadata(server_id - )['metadata'] self.managed_services = [metadata[key] for key in metadata.keys() if key.startswith('managed_service_')] self.verify_managed_services(self.managed_services) @@ -99,10 +96,7 @@ class ServerTest(novajoin_manager.NovajoinScenarioTest): ip = self.get_server_ip(server_details) self.verify_host_is_ipaclient(ip, USER, keypair) - def _verify_host_and_services_are_not_enrolled(self, - server_name, - server_id): - + def _verify_host_and_services_are_not_enrolled(self, server_name): # Verify host and associated compact and managed services # are no longer registered with ipa self.verify_host_not_registered_with_ipa(server_name) @@ -135,8 +129,7 @@ class ServerTest(novajoin_manager.NovajoinScenarioTest): server['id'], keypair) self.servers_client.delete_server(server['id']) - self._verify_host_and_services_are_not_enrolled(instance_name, - server['id']) + self._verify_host_and_services_are_not_enrolled(instance_name) def test_enrollment_metadata_in_image(self): @@ -165,5 +158,4 @@ class ServerTest(novajoin_manager.NovajoinScenarioTest): self._verify_host_and_services_are_enrolled(instance_name, server['id'], keypair) self.servers_client.delete_server(server['id']) - self._verify_host_and_services_are_not_enrolled(instance_name, - server['id']) + self._verify_host_and_services_are_not_enrolled(instance_name) diff --git a/novajoin_tempest_plugin/tests/scenario/test_tripleo_deployment.py b/novajoin_tempest_plugin/tests/scenario/test_tripleo_deployment.py index d565b05..56b9a03 100644 --- a/novajoin_tempest_plugin/tests/scenario/test_tripleo_deployment.py +++ b/novajoin_tempest_plugin/tests/scenario/test_tripleo_deployment.py @@ -34,6 +34,11 @@ CONTROLLER_CERT_TAGS = [ 'haproxy-storage_mgmt-cert' ] +COMPUTE_CERT_TAGS = [ + 'libvirt-client-cert', + 'libvirt-server-cert' +] + class TripleOTest(novajoin_manager.NovajoinScenarioTest): @@ -64,12 +69,15 @@ class TripleOTest(novajoin_manager.NovajoinScenarioTest): def test_hosts_are_registered(self): hosts = list(CONF.novajoin.tripleo_controllers) hosts.append(CONF.novajoin.tripleo_undercloud) + hosts.extend(CONF.novajoin.tripleo_computes) for host in hosts: self.verify_host_registered_with_ipa(host) self.verify_host_has_keytab(host) def test_verify_compact_services_created(self): - for host in CONF.novajoin.tripleo_controllers: + hosts = list(CONF.novajoin.tripleo_controllers) + hosts.extend(CONF.novajoin.tripleo_computes) + for host in hosts: metadata = self.servers_client.list_server_metadata( self.get_server_id(host))['metadata'] services = metadata['compact_services'] @@ -92,12 +100,9 @@ class TripleOTest(novajoin_manager.NovajoinScenarioTest): services=managed_services, verify_certs=True) - def test_verify_service_certs_are_tracked(self): + def test_verify_controller_certs_are_tracked(self): for host in CONF.novajoin.tripleo_controllers: - server_id = self.get_server_id(host) - server = self.servers_client.show_server(server_id)['server'] - server_ip = self.get_server_ip(server) - + server_ip = self.get_overcloud_server_ip(host) for tag in CONTROLLER_CERT_TAGS: self.verify_overcloud_cert_tracked( server_ip, @@ -105,11 +110,21 @@ class TripleOTest(novajoin_manager.NovajoinScenarioTest): tag ) - def test_overcloud_is_ipaclient(self): - for host in CONF.novajoin.tripleo_controllers: - server_id = self.get_server_id(host) - server = self.servers_client.show_server(server_id)['server'] - server_ip = self.get_server_ip(server) + def test_verify_compute_certs_are_tracked(self): + for host in CONF.novajoin.tripleo_computes: + server_ip = self.get_overcloud_server_ip(host) + for tag in COMPUTE_CERT_TAGS: + self.verify_overcloud_cert_tracked( + server_ip, + 'heat-admin', + tag + ) + + def test_overcloud_hosts_are_ipaclients(self): + hosts = list(CONF.novajoin.tripleo_controllers) + hosts.extend(CONF.novajoin.tripleo_computes) + for host in hosts: + server_ip = self.get_overcloud_server_ip(host) self.verify_overcloud_host_is_ipaclient( server_ip, 'heat-admin' diff --git a/novajoin_tempest_plugin/tests/scenario/test_tripleo_tls.py b/novajoin_tempest_plugin/tests/scenario/test_tripleo_tls.py index a81e13f..e31b7a3 100644 --- a/novajoin_tempest_plugin/tests/scenario/test_tripleo_tls.py +++ b/novajoin_tempest_plugin/tests/scenario/test_tripleo_tls.py @@ -77,11 +77,7 @@ class TripleOTLSTest(novajoin_manager.NovajoinScenarioTest): def test_haproxy_tls_connections(self): for controller in CONF.novajoin.tripleo_controllers: - controller_id = self.get_server_id(controller) - controller_data = self.servers_client.show_server( - controller_id)['server'] - controller_ip = self.get_server_ip(controller_data) - + controller_ip = self.get_overcloud_server_ip(controller) haproxy = self.get_haproxy_cfg('heat-admin', controller_ip) services = self.parse_haproxy_cfg(haproxy) @@ -111,10 +107,7 @@ class TripleOTLSTest(novajoin_manager.NovajoinScenarioTest): def test_rabbitmq_tls_connection(self): for controller in CONF.novajoin.tripleo_controllers: - controller_id = self.get_server_id(controller) - controller_data = self.servers_client.show_server( - controller_id)['server'] - controller_ip = self.get_server_ip(controller_data) + controller_ip = self.get_overcloud_server_ip(controller) rabbitmq_host = self.get_rabbitmq_host('heat-admin', controller_ip) rabbitmq_port = self.get_rabbitmq_port('heat-admin', controller_ip) self.verify_overcloud_tls_connection( @@ -123,3 +116,16 @@ class TripleOTLSTest(novajoin_manager.NovajoinScenarioTest): hostport="{host}:{port}".format(host=rabbitmq_host, port=rabbitmq_port) ) + + def test_libvirt_tls_connection(self): + for compute in CONF.novajoin.tripleo_computes: + compute_ip = self.get_overcloud_server_ip(compute) + libvirt_port = self.get_libvirt_port('heat-admin', compute_ip) + + # TODO(alee) Is the host correct? + self.verify_overcloud_tls_connection( + controller_ip=compute_ip, + user='heat-admin', + hostport="{host}:{port}".format(host=compute_ip, + port=libvirt_port) + )