Exemple #1
0
    def test_create(self):
        containers = {
            'c1': BlockadeContainerConfig("c1", "image"),
            'c2': BlockadeContainerConfig("c2", "image"),
            'c3': BlockadeContainerConfig("c3", "image")
        }
        config = BlockadeConfig(containers)

        self.network.get_container_device.side_effect = lambda dc, y: "veth" + y

        initialize = lambda x, y: BlockadeState("ourblockadeid", x)
        self.state_factory.initialize.side_effect = initialize
        self.state_factory.exists.side_effect = lambda: False
        self.state_factory.get_blockade_id = mock.MagicMock(
            return_value="ourblockadeid")
        self.docker_client.create_container.side_effect = [{
            "Id": "container1"
        }, {
            "Id": "container2"
        }, {
            "Id": "container3"
        }]

        b = Blockade(config, self.state_factory, self.network,
                     self.docker_client)

        b.create()

        self.assertEqual(self.state_factory.initialize.call_count, 1)
        self.assertEqual(self.docker_client.create_container.call_count, 3)
Exemple #2
0
class BlockadeIdTests(unittest.TestCase):
    state = BlockadeState()

    def test_blockade_id(self):
        get_blockade_id = self.state._get_blockade_id_from_cwd
        self.assertEqual(get_blockade_id(cwd="/abs/path/1234"), "1234")
        self.assertEqual(get_blockade_id(cwd="rel/path/abc"), "abc")

        # invalid names should be replaced with "default"
        self.assertEqual(get_blockade_id(cwd="/"), "default")
        self.assertEqual(get_blockade_id(cwd="rel/path/$$("), "default")
Exemple #3
0
class BlockadeStateTests(unittest.TestCase):
    tempdir = None
    oldcwd = None
    state = None

    def setUp(self):
        self.tempdir = tempfile.mkdtemp()
        self.oldcwd = os.getcwd()
        os.chdir(self.tempdir)
        self.state = BlockadeState(data_dir=self.tempdir)

    def tearDown(self):
        self.state = None
        if self.oldcwd:
            os.chdir(self.oldcwd)
        if self.tempdir:
            try:
                shutil.rmtree(self.tempdir)
            except Exception:
                pass

    def test_state_initialize(self):

        containers = {"n1": {"a": 1}, "n2": {"a": 4}}
        self.state.initialize(containers=containers)

        self.assertTrue(os.path.exists(".blockade/state.yml"))

        self.assertEqual(self.state.containers, containers)
        self.assertIsNot(self.state.containers, containers)
        self.assertIsNot(self.state.containers["n2"], containers["n2"])

        self.assertRegexpMatches(self.state.blockade_id, "^[a-z0-9]+$")

        self.state.load()
        self.assertEqual(self.state.containers, containers)
        self.assertIsNot(self.state.containers, containers)
        self.assertIsNot(self.state.containers["n2"], containers["n2"])

        self.state.destroy()
        self.assertFalse(os.path.exists(".blockade/state.yml"))
        self.assertFalse(os.path.exists(".blockade"))

    def test_state_uninitialized(self):
        with self.assertRaises(NotInitializedError):
            self.state.load()
Exemple #4
0
    def test_create(self):
        containers = [BlockadeContainerConfig("c1", "image"),
                      BlockadeContainerConfig("c2", "image"),
                      BlockadeContainerConfig("c3", "image")]
        config = BlockadeConfig(containers)

        self.network.new_veth_device_name.side_effect = ["veth1", "veth2",
                                                         "veth3"]
        initialize = lambda x: BlockadeState("ourblockadeid", x)
        self.state_factory.initialize.side_effect = initialize
        self.docker_client.create_container.side_effect = [
            {"Id": "container1"},
            {"Id": "container2"},
            {"Id": "container3"}]

        b = Blockade(config, self.state_factory, self.network,
                     self.docker_client)
        b.create()

        self.assertEqual(self.state_factory.initialize.call_count, 1)
        self.assertEqual(self.docker_client.create_container.call_count, 3)
Exemple #5
0
 def setUp(self):
     self.tempdir = tempfile.mkdtemp()
     self.oldcwd = os.getcwd()
     os.chdir(self.tempdir)
     self.state = BlockadeState(data_dir=self.tempdir)
Exemple #6
0
 def load_state(name):
     global DATA_DIR
     try:
         return BlockadeState(blockade_id=name, data_dir=DATA_DIR)
     except InvalidBlockadeName:
         raise