예제 #1
0
파일: core.py 프로젝트: ynaka81/dockerEE
 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)
예제 #2
0
파일: core.py 프로젝트: ynaka81/dockerEE
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)