class JujuStateMultiTest(unittest.TestCase): def setUp(self): self.juju = None if JUJU_USELIVE and JUJU_INSTALLED: self.juju = JujuState(_run('juju status').decode('ascii')) else: with open('test/juju-output/juju-status-multi-install.yaml') as f: self.juju = JujuState(f.read()) def test_verify_instance_id(self): """ Validate we have maas instance-ids Example instance-id: /MAAS/api/1.0/nodes/node-a59c35b4-bfed-11e3-b7a8-a0cec8006f97/ """ for m in self.juju.machines(): self.assertTrue('MAAS/api' in m.instance_id) def test_machine_dns_names(self): """ Are machine dns-names assigned """ for m in self.juju.machines(): self.assertTrue(m.dns_name) def test_machine_dns_names_host(self): """ Machines should have `maas` as the host in their dns-name """ for m in self.juju.machines(): self.assertTrue('maas' in m.dns_name) def test_container_dns_is_ip(self): """ Make sure dns-names are valid ip address """ for m in self.juju.machines(): for c in m.containers: self.assertTrue(ipaddress.ip_address(c.dns_name)) def test_container_lxc_instance_id(self): """ Container instance ids should have lxc defined """ for m in self.juju.machines(): for c in m.containers: self.assertTrue('lxc' in c.instance_id)
def test_parse_state(): with open('test/juju-output/service-pending.out') as juju_file: with open('test/maas-output/twonodes.out') as maas_file: juju_state = JujuState(juju_file) maas_state = MaasState(json.load(maas_file)) update_machine_info(juju_state, maas_state) juju_machines = list(juju_state.machines()) assert ("node-4c49e73e-e8b8-11e2-ac16-5254002cb1d6" in juju_machines[0].instance_id) assert ("node-5fb74ba0-e8c1-11e2-b109-5254002cb1d6" in juju_machines[1].instance_id)
class JujuStateSingleTest(unittest.TestCase): "Read the 'juju status' yaml for single post-install" def setUp(self): with open('test/juju-output/juju-status-single-install.yaml') as f: self.juju = JujuState(f.read()) self.m_one = self.juju.machine("1") self.c_one = self.m_one.container("1/lxc/0") def test_ignore_bootstrap_node(self): "jujustate.machines() should not include #0" self.assertEqual(len(list(self.juju.machines())), 2) def test_services(self): "All services parsed correctly" expected = [ 'glance', 'juju-gui', 'keystone', 'mysql', 'nova-cloud-controller', 'nova-compute', 'openstack-dashboard', 'rabbitmq-server' ] actual = list(self.juju.services) actual_names = [s.service_name for s in actual] self.assertEqual(set(actual_names), set(expected)) def test_find_service(self): "Find a service based on charm name" cn = "juju-gui" s = self.juju.service(cn) self.assertEqual(cn, s.service_name) def test_bogus_service_returns_none(self): "return empty dictionary for nonexistent services" cn = "fake-bogus-charm" s = self.juju.service(cn) self.assertEqual({}, s.service) def test_two_machines_allocated(self): ml = self.juju.machines_allocated() self.assertEqual(2, len(ml)) def test_m_one_containers(self): cl = list(self.m_one.containers) self.assertEqual(7, len(cl)) self.assertEqual(self.c_one.agent_state, "started") def test_get_hardware(self): cpu_cores = self.m_one.hardware("cpu-cores") self.assertEqual(cpu_cores, '3') self.assertEqual(self.c_one.hardware("arch"), "amd64")
class JujuStateSingleTest(unittest.TestCase): "Read the 'juju status' yaml for single post-install" def setUp(self): with open('test/juju-output/juju-status-single-install.yaml') as f: self.juju = JujuState(f.read()) self.m_one = self.juju.machine("1") self.c_one = self.m_one.container("1/lxc/0") def test_ignore_bootstrap_node(self): "jujustate.machines() should not include #0" self.assertEqual(len(list(self.juju.machines())), 2) def test_services(self): "All services parsed correctly" expected = ['glance', 'juju-gui', 'keystone', 'mysql', 'nova-cloud-controller', 'nova-compute', 'openstack-dashboard', 'rabbitmq-server'] actual = list(self.juju.services) actual_names = [s.service_name for s in actual] self.assertEqual(set(actual_names), set(expected)) def test_find_service(self): "Find a service based on charm name" cn = "juju-gui" s = self.juju.service(cn) self.assertEqual(cn, s.service_name) def test_bogus_service_returns_none(self): "return empty dictionary for nonexistent services" cn = "fake-bogus-charm" s = self.juju.service(cn) self.assertEqual({}, s.service) def test_two_machines_allocated(self): ml = self.juju.machines_allocated() self.assertEqual(2, len(ml)) def test_m_one_containers(self): cl = list(self.m_one.containers) self.assertEqual(7, len(cl)) self.assertEqual(self.c_one.agent_state, "started") def test_get_hardware(self): cpu_cores = self.m_one.hardware("cpu-cores") self.assertEqual(cpu_cores, '3') self.assertEqual(self.c_one.hardware("arch"), "amd64")