| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103 | from plum import Servicefrom .testcases import DockerClientTestCaseclass ServiceTest(DockerClientTestCase):    def test_name_validations(self):        self.assertRaises(ValueError, lambda: Service(name=''))        self.assertRaises(ValueError, lambda: Service(name=' '))        self.assertRaises(ValueError, lambda: Service(name='/'))        self.assertRaises(ValueError, lambda: Service(name='!'))        self.assertRaises(ValueError, lambda: Service(name='\xe2'))        self.assertRaises(ValueError, lambda: Service(name='_'))        self.assertRaises(ValueError, lambda: Service(name='____'))        self.assertRaises(ValueError, lambda: Service(name='foo_bar'))        self.assertRaises(ValueError, lambda: Service(name='__foo_bar__'))        Service('a')        Service('foo')    def test_containers(self):        foo = self.create_service('foo')        bar = self.create_service('bar')        foo.start()        self.assertEqual(len(foo.containers()), 1)        self.assertEqual(foo.containers()[0].name, '/foo_1')        self.assertEqual(len(bar.containers()), 0)        bar.scale(2)        self.assertEqual(len(foo.containers()), 1)        self.assertEqual(len(bar.containers()), 2)        names = [c.name for c in bar.containers()]        self.assertIn('/bar_1', names)        self.assertIn('/bar_2', names)    def test_up_scale_down(self):        service = self.create_service('scalingtest')        self.assertEqual(len(service.containers()), 0)        service.start()        self.assertEqual(len(service.containers()), 1)        service.start()        self.assertEqual(len(service.containers()), 1)        service.scale(2)        self.assertEqual(len(service.containers()), 2)        service.scale(1)        self.assertEqual(len(service.containers()), 1)        service.stop()        self.assertEqual(len(service.containers()), 0)        service.stop()        self.assertEqual(len(service.containers()), 0)    def test_start_container_passes_through_options(self):        db = self.create_service('db')        db.start_container(environment={'FOO': 'BAR'})        self.assertEqual(db.containers()[0].environment['FOO'], 'BAR')    def test_start_container_inherits_options_from_constructor(self):        db = self.create_service('db', environment={'FOO': 'BAR'})        db.start_container()        self.assertEqual(db.containers()[0].environment['FOO'], 'BAR')    def test_start_container_creates_links(self):        db = self.create_service('db')        web = self.create_service('web', links=[db])        db.start_container()        web.start_container()        self.assertIn('db_1', web.containers()[0].links())        db.stop()        web.stop()    def test_start_container_builds_images(self):        service = Service(            name='test',            client=self.client,            build='tests/fixtures/simple-dockerfile',        )        container = service.start()        container.wait()        self.assertIn('success', container.logs())    def test_start_container_creates_ports(self):        service = self.create_service('web', ports=[8000])        container = service.start_container().inspect()        self.assertIn('8000/tcp', container['HostConfig']['PortBindings'])        self.assertNotEqual(container['HostConfig']['PortBindings']['8000/tcp'][0]['HostPort'], '8000')    def test_start_container_creates_fixed_external_ports(self):        service = self.create_service('web', ports=['8000:8000'])        container = service.start_container().inspect()        self.assertIn('8000/tcp', container['HostConfig']['PortBindings'])        self.assertEqual(container['HostConfig']['PortBindings']['8000/tcp'][0]['HostPort'], '8000')
 |