def test_find_registry_for_container_by_name(self): config = self._get_config('test_find_registry') c = maestro.Conductor(config) container = c.containers['foo1'] registry = plays.tasks.LoginTask.registry_for_container( container, c.registries) self.assertEqual(registry, c.registries['quay.io'])
def test_find_registry_for_container_not_found(self): config = self._get_config('test_find_registry') c = maestro.Conductor(config) container = c.containers['foo3'] registry = plays.tasks.LoginTask.registry_for_container( container, c.registries) self.assertEqual(registry, None)
def test_volumes_from_unknown(self): config = self._get_config('test_volumes_from_unknown') six.assertRaisesRegex(self, exceptions.InvalidVolumeConfigurationException, 'Unknown container instance-2 to get volumes from ' 'for instance-1!', lambda: maestro.Conductor(config))
def test_volumes_parsing(self): config = self._get_config('test_volumes') c = maestro.Conductor(config) instance1 = c.containers['instance-1'] instance2 = c.containers['instance-2'] self.assertEqual(instance1.get_volumes(), set(['/in1', '/in2'])) self.assertEqual(instance2.get_volumes(), set(['/in3'])) self.assertEqual(instance2.volumes_from, set([instance1.name]))
def test_ignore_errors_wraps_with_non_failing_auditor(self): config = self._get_config('auditor_ignore_errors') c = maestro.Conductor(config) self.assertTrue(len(c.auditor.get_auditors()), 2) self.assertTrue(isinstance(c.auditor.get_auditors()[0], maestro.audit._AlwaysFailAuditor)) self.assertTrue(isinstance(c.auditor.get_auditors()[1], maestro.audit.NonFailingAuditor))
def test_container_filters_container_and_ship_name(self): config = self._get_config('container_filter') c = maestro.Conductor(config) containers = c._to_containers(['webapp', 'webapp1'], True, '*-b', 'ship*2') self.assertEqual(len(containers), 2) container_names = set([c.name for c in containers]) self.assertEqual(container_names, {'webapp-b', 'webapp1-b'})
def test_volumes_from_adds_dependency(self): config = self._get_config('test_volumes_from_adds_dependency') c = maestro.Conductor(config) self.assertEqual(len(c.services), 2) self.assertEqual(len(c.containers), 2) self.assertEqual(len(list(c.services['myservice'].containers)), 1) self.assertEqual(c.services['myservice'].dependencies, set([c.services['mydata']])) self.assertEqual(c.services['myservice'].requires, set([c.services['mydata']]))
def test_ship_parsing(self): config = self._get_config('test_ships') c = maestro.Conductor(config) self.assertEqual(c.ships['ship1'].ip, '10.0.0.1') self.assertEqual(c.ships['ship1'].endpoint, '192.168.10.1') self.assertTrue('192.168.10.1' in c.ships['ship1'].backend.base_url) self.assertEqual(c.ships['ship2'].ip, '10.0.0.2') self.assertEqual(c.ships['ship2'].endpoint, '10.0.0.2') self.assertTrue('1234' in c.ships['ship2'].backend.base_url)
def test_missing_env_name(self): config = self._get_config('test_missing_envname') self.assertRaisesRegexp(exceptions.EnvironmentConfigurationException, 'Environment name is missing', lambda: maestro.Conductor(config))
def test_env_name(self): config = self._get_config('test_envname') c = maestro.Conductor(config) self.assertEqual(c.env_name, 'test') foo1 = c.containers['foo-1'] self.assertEqual(foo1.env['MAESTRO_ENVIRONMENT_NAME'], 'test')
def test_volume_conflict_volumes_from(self): config = self._get_config('test_volume_conflict_volumes_from') self.assertRaisesRegexp( exceptions.InvalidVolumeConfigurationException, 'Volume conflicts between instance-2 and instance-1: /in1!', lambda: maestro.Conductor(config))
def test_container_filters_ship_name(self): config = self._get_config('container_filter') c = maestro.Conductor(config) containers = c._to_containers(['webapp'], True, None, 'ship*2') self.assertEqual(len(containers), 1) self.assertEqual(containers[0].name, 'webapp-b')
def test_envfiles(self): config = self._get_config('test_envfiles') c = maestro.Conductor(config) self.assertEqual(c.services['s1'].env, { 'MAESTRO_ENVIRONMENT_NAME': 'test-envfiles', 'SERVICE_NAME': 's1', 'SOME_ENV': 'value', 'OVERRIDE': 'dog' }) self.assertEqual(c.containers['s1a'].env, { 'MAESTRO_ENVIRONMENT_NAME': 'test-envfiles', 'SERVICE_NAME': 's1', 'CONTAINER_NAME': 's1a', 'CONTAINER_HOST_ADDRESS': 'localhost', 'CONTAINER_HOST_ADDRESS': 'localhost', 'DOCKER_IMAGE': 'ubuntu', 'DOCKER_TAG': 'latest', 'S1_INSTANCES': 's1a,s1b', 'S1_S1A_HOST': 'localhost', 'S1_S1B_HOST': 'localhost', 'SOME_ENV': 'value', 'OVERRIDE': 'dog' }) self.assertEqual(c.containers['s1b'].env, { 'MAESTRO_ENVIRONMENT_NAME': 'test-envfiles', 'SERVICE_NAME': 's1', 'CONTAINER_NAME': 's1b', 'CONTAINER_HOST_ADDRESS': 'localhost', 'CONTAINER_HOST_ADDRESS': 'localhost', 'DOCKER_IMAGE': 'ubuntu', 'DOCKER_TAG': 'latest', 'S1_INSTANCES': 's1a,s1b', 'S1_S1A_HOST': 'localhost', 'S1_S1B_HOST': 'localhost', 'SOME_ENV': 'value', 'OVERRIDE': 'giraffe' }) self.assertEqual(c.services['s2'].env, { 'MAESTRO_ENVIRONMENT_NAME': 'test-envfiles', 'SERVICE_NAME': 's2', 'SOME_ENV': 'value', 'OVERRIDE': 'giraffe' }) self.assertEqual(c.containers['s2a'].env, { 'MAESTRO_ENVIRONMENT_NAME': 'test-envfiles', 'SERVICE_NAME': 's2', 'CONTAINER_NAME': 's2a', 'CONTAINER_HOST_ADDRESS': 'localhost', 'DOCKER_IMAGE': 'ubuntu', 'DOCKER_TAG': 'latest', 'S2_INSTANCES': 's2a,s2b', 'S2_S2A_HOST': 'localhost', 'S2_S2B_HOST': 'localhost', 'SOME_ENV': 'value', 'OVERRIDE': 'giraffe' }) self.assertEqual(c.containers['s2b'].env, { 'MAESTRO_ENVIRONMENT_NAME': 'test-envfiles', 'SERVICE_NAME': 's2', 'CONTAINER_NAME': 's2b', 'CONTAINER_HOST_ADDRESS': 'localhost', 'DOCKER_IMAGE': 'ubuntu', 'DOCKER_TAG': 'latest', 'S2_INSTANCES': 's2a,s2b', 'S2_S2A_HOST': 'localhost', 'S2_S2B_HOST': 'localhost', 'SOME_ENV': 'value', 'OVERRIDE': 'cat' })
def test_duplicate_container_name_across_services(self): config = self._get_config('duplicate_container_across_services') self.assertRaises( exceptions.EnvironmentConfigurationException, lambda: maestro.Conductor(config))
def test_empty_registry_list(self): config = self._get_config('empty_registries') c = maestro.Conductor(config) self.assertIsNot(c.registries, None) self.assertEqual(c.registries, {})
def test_non_failing_auditor(self): config = self._get_config('auditor_ignore_errors') c = maestro.Conductor(config) # Should not fail c.auditor.get_auditors()[1].action(maestro.audit.INFO, 'foo', 'start')
def test_container_filters_no_filter(self): config = self._get_config('container_filter') c = maestro.Conductor(config) containers = c._to_containers(['webapp'], True, None, None) self.assertEqual(len(containers), 2)