def test_unscale_after_restart(self): web = self.create_service('web') project = Project('composetest', [web], self.client) project.start() service = project.get_service('web') service.scale(1) self.assertEqual(len(service.containers()), 1) service.scale(3) self.assertEqual(len(service.containers()), 3) project.up() service = project.get_service('web') self.assertEqual(len(service.containers()), 3) service.scale(1) self.assertEqual(len(service.containers()), 1) project.up() service = project.get_service('web') self.assertEqual(len(service.containers()), 1) # does scale=0 ,makes any sense? after recreating at least 1 container is running service.scale(0) project.up() service = project.get_service('web') self.assertEqual(len(service.containers()), 1) project.kill() project.remove_stopped()
def test_get_service(self): web = Service( project='composetest', name='web', client=None, image="busybox:latest", ) project = Project('test', [web], None) self.assertEqual(project.get_service('web'), web)
def test_get_service(self): web = Service( project='composetest', name='web', client=None, image=BUSYBOX_IMAGE_WITH_TAG, ) project = Project('test', [web], None) assert project.get_service('web') == web
def test_unscale_after_restart(self): web = self.create_service('web') project = Project('composetest', [web], self.client) project.start() service = project.get_service('web') service.scale(1) self.assertEqual(len(service.containers()), 1) service.scale(3) self.assertEqual(len(service.containers()), 3) project.up() service = project.get_service('web') self.assertEqual(len(service.containers()), 3) service.scale(1) self.assertEqual(len(service.containers()), 1) project.up() service = project.get_service('web') self.assertEqual(len(service.containers()), 1) # does scale=0 ,makes any sense? after recreating at least 1 container is running service.scale(0) project.up() service = project.get_service('web') self.assertEqual(len(service.containers()), 1)
class LegacyTestCase(DockerClientTestCase): def setUp(self): super(LegacyTestCase, self).setUp() self.containers = [] db = self.create_service('db') web = self.create_service('web', links=[(db, 'db')]) nginx = self.create_service('nginx', links=[(web, 'web')]) self.services = [db, web, nginx] self.project = Project('composetest', self.services, self.client) # Create a legacy container for each service for service in self.services: service.ensure_image_exists() container = self.client.create_container( name='{}_{}_1'.format(self.project.name, service.name), **service.options ) self.client.start(container) self.containers.append(container) # Create a single one-off legacy container self.containers.append(self.client.create_container( name='{}_{}_run_1'.format(self.project.name, db.name), **self.services[0].options )) def tearDown(self): super(LegacyTestCase, self).tearDown() for container in self.containers: try: self.client.kill(container) except APIError: pass try: self.client.remove_container(container) except APIError: pass def get_legacy_containers(self, **kwargs): return legacy.get_legacy_containers( self.client, self.project.name, [s.name for s in self.services], **kwargs ) def test_get_legacy_container_names(self): self.assertEqual(len(self.get_legacy_containers()), len(self.services)) def test_get_legacy_container_names_one_off(self): self.assertEqual(len(self.get_legacy_containers(one_off=True)), 1) def test_migration_to_labels(self): # Trying to get the container list raises an exception with self.assertRaises(legacy.LegacyContainersError) as cm: self.project.containers(stopped=True) self.assertEqual( set(cm.exception.names), set(['composetest_db_1', 'composetest_web_1', 'composetest_nginx_1']), ) self.assertEqual( set(cm.exception.one_off_names), set(['composetest_db_run_1']), ) # Migrate the containers legacy.migrate_project_to_labels(self.project) # Getting the list no longer raises an exception containers = self.project.containers(stopped=True) self.assertEqual(len(containers), len(self.services)) def test_migration_one_off(self): # We've already migrated legacy.migrate_project_to_labels(self.project) # Trying to create a one-off container results in a Docker API error with self.assertRaises(APIError) as cm: self.project.get_service('db').create_container(one_off=True) # Checking for legacy one-off containers raises an exception with self.assertRaises(legacy.LegacyOneOffContainersError) as cm: legacy.check_for_legacy_containers( self.client, self.project.name, ['db'], allow_one_off=False, ) self.assertEqual( set(cm.exception.one_off_names), set(['composetest_db_run_1']), ) # Remove the old one-off container c = self.client.inspect_container('composetest_db_run_1') self.client.remove_container(c) # Checking no longer raises an exception legacy.check_for_legacy_containers( self.client, self.project.name, ['db'], allow_one_off=False, ) # Creating a one-off container no longer results in an API error self.project.get_service('db').create_container(one_off=True) self.assertIsInstance(self.client.inspect_container('composetest_db_run_1'), dict)
def test_get_service_not_found(self): project = Project('test', [], None) with self.assertRaises(NoSuchService): project.get_service('not_found')
class LegacyTestCase(DockerClientTestCase): def setUp(self): super(LegacyTestCase, self).setUp() self.containers = [] db = self.create_service('db') web = self.create_service('web', links=[(db, 'db')]) nginx = self.create_service('nginx', links=[(web, 'web')]) self.services = [db, web, nginx] self.project = Project('composetest', self.services, self.client) # Create a legacy container for each service for service in self.services: service.ensure_image_exists() container = self.client.create_container(name='{}_{}_1'.format( self.project.name, service.name), **service.options) self.client.start(container) self.containers.append(container) # Create a single one-off legacy container self.containers.append( self.client.create_container(name='{}_{}_run_1'.format( self.project.name, db.name), **self.services[0].options)) def tearDown(self): super(LegacyTestCase, self).tearDown() for container in self.containers: try: self.client.kill(container) except APIError: pass try: self.client.remove_container(container) except APIError: pass def get_legacy_containers(self, **kwargs): return legacy.get_legacy_containers(self.client, self.project.name, [s.name for s in self.services], **kwargs) def test_get_legacy_container_names(self): self.assertEqual(len(self.get_legacy_containers()), len(self.services)) def test_get_legacy_container_names_one_off(self): self.assertEqual(len(self.get_legacy_containers(one_off=True)), 1) def test_migration_to_labels(self): # Trying to get the container list raises an exception with self.assertRaises(legacy.LegacyContainersError) as cm: self.project.containers(stopped=True) self.assertEqual( set(cm.exception.names), set([ 'composetest_db_1', 'composetest_web_1', 'composetest_nginx_1' ]), ) self.assertEqual( set(cm.exception.one_off_names), set(['composetest_db_run_1']), ) # Migrate the containers legacy.migrate_project_to_labels(self.project) # Getting the list no longer raises an exception containers = self.project.containers(stopped=True) self.assertEqual(len(containers), len(self.services)) def test_migration_one_off(self): # We've already migrated legacy.migrate_project_to_labels(self.project) # Trying to create a one-off container results in a Docker API error with self.assertRaises(APIError) as cm: self.project.get_service('db').create_container(one_off=True) # Checking for legacy one-off containers raises an exception with self.assertRaises(legacy.LegacyOneOffContainersError) as cm: legacy.check_for_legacy_containers( self.client, self.project.name, ['db'], allow_one_off=False, ) self.assertEqual( set(cm.exception.one_off_names), set(['composetest_db_run_1']), ) # Remove the old one-off container c = self.client.inspect_container('composetest_db_run_1') self.client.remove_container(c) # Checking no longer raises an exception legacy.check_for_legacy_containers( self.client, self.project.name, ['db'], allow_one_off=False, ) # Creating a one-off container no longer results in an API error self.project.get_service('db').create_container(one_off=True) self.assertIsInstance( self.client.inspect_container('composetest_db_run_1'), dict)
def test_get_service(self): web = Service(project="composetest", name="web", client=None, image="busybox:latest") project = Project("test", [web], None) self.assertEqual(project.get_service("web"), web)