def setUp(self): arg = {"host": "localhost", "user": "******", "password": "******"} ## remote interface self.__interface = RemoteInterfaceImpl(**arg) ## container_manager self.__manager = ContainerManagerImpl(**arg) ## test utils self.__utils = DockerContainerTestUtils(**arg)
class TestContainerManagerImpl(unittest.TestCase): ## init test case # @param self The object pointer def setUp(self): arg = {"host": "localhost", "user": "******", "password": "******"} ## remote interface self.__interface = RemoteInterfaceImpl(**arg) ## container_manager self.__manager = ContainerManagerImpl(**arg) ## test utils self.__utils = DockerContainerTestUtils(**arg) ## test ContainerManagerImpl.create(name) # @param self The object pointer def testCreate(self): container = "c1" c = self.__manager.create(container) self.assertTrue(self.__utils.checkContainerExist(container)) ## test ContainerManagerImpl.create(name. privilege) # @param self The object pointer def testCreateWithPrivilege(self): container = "c1" c = self.__manager.create(container, privilege=["NET_ADMIN", "SYS_ADMIN"]) ret = self.__interface.sudo("docker exec -i " + container + " umount /etc/hosts") self.assertEqual(ret.rc, 0) ## test ContainerManagerImpl.create(name, hosts) # @param self The object pointer def testCreateWithHosts(self): container = "c1" hosts = [{"name": "c1", "IP": "1.0.1.10"}, {"name": "c2", "IP": "1.0.1.11"}] c = self.__manager.create(container, hosts=hosts) ret = self.__interface.sudo("docker exec -i " + container + " cat /etc/hosts") container_hosts = ret.stdout.splitlines()[-len(hosts):] for i in range(len(hosts)): container_host = container_hosts[i].split() host = hosts[i] self.assertEqual(container_host[1], host["name"]) self.assertEqual(container_host[0], host["IP"]) ## test ContainerManagerImpl.create(name, image) # @param self The object pointer def testCreateWithImage(self): container = "c1" image = "centos:6" c = self.__manager.create(container, image=image) ret = self.__interface.sudo("docker ps -a") lines = ret.stdout.splitlines() self.assertIn(image, lines[1].split()) ## test ContainerManagerImpl.destroyContainerImpl(container) # @param self The object pointer def testDestroy(self): container = "c1" c = self.__manager.create(container) self.assertTrue(self.__utils.checkContainerExist(container)) del c self.assertTrue(self.__utils.checkContainerNotExist(container)) ## test ContainerManagerImpl.command(container, command) # @param self The object pointer def testCommand(self): container = "c1" c = self.__manager.create(container) ret = c.command("uname -n") self.assertEqual(ret.stdout, container) ## test ContainerManagerImpl.attachIP(container, segment, dev, IP, gw) # @param self The object pointer def testAttachIP(self): bridge = "br1" self.__interface.sudo("brctl addbr " + bridge) self.__interface.sudo("ip link set " + bridge + " up") container = "c1" c = self.__manager.create(container) ip1 = ip_interface(u"192.168.0.1/24") dev1 = "eth0" c.attachIP(bridge, dev1, ip1) ret = c.command("ip addr show") self.assertTrue(re.search(r"inet " + str(ip1) + ".*" + dev1, ret.stdout)) ip2 = ip_interface(u"192.168.1.1/24") dev2 = "eth1" gw = ip_interface(u"192.168.1.254/24") c.attachIP(bridge, dev2, ip2, gw) ret = c.command("ip addr show") self.assertTrue(re.search(r"inet " + str(ip2) + ".*" + dev2, ret.stdout)) ret = c.command("ip route show") self.assertIn("default via " + str(gw.ip) + " dev " + dev2, ret.stdout) self.__interface.sudo("ip link set " + bridge + " down") self.__interface.sudo("brctl delbr " + bridge) ## test ContainerManagerImpl.__init__(host, user, password) fails because docker service is not running # @param self The object pointer def testFailInit(self): self.__interface.sudo("service docker stop") with self.assertRaises(RuntimeError): self.setUp() self.__interface.sudo("service docker start") ## test ContainerManagerImpl.create(name) fails because docker service is not running # @param self The object pointer def testFailCreate(self): self.__interface.sudo("service docker stop") with self.assertRaises(RuntimeError): self.__manager.create("c1") self.__interface.sudo("service docker start") ## test ContainerManagerImpl.command(container, command) fails because the command does not exist # @param self The object pointer def testFailCommand(self): container = "c1" c = self.__manager.create(container) with self.assertRaises(RuntimeError): c.command("fail") ## test ContainerManagerImpl.attachIP(container, segment, dev, IP) fails bacause the same dev is already attached # @param self The object pointer def testFailAttachIP(self): bridge = "br1" self.__interface.sudo("brctl addbr " + bridge) self.__interface.sudo("ip link set " + bridge + " up") container = "c1" c = self.__manager.create(container) ip = ip_interface(u"192.168.0.1/24") dev = "eth0" c.attachIP(bridge, dev, ip) with self.assertRaises(RuntimeError): c.attachIP(bridge, dev, ip) self.__interface.sudo("ip link set " + bridge + " down") self.__interface.sudo("brctl delbr " + bridge)