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)
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")
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()
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)
def setUp(self): self.tempdir = tempfile.mkdtemp() self.oldcwd = os.getcwd() os.chdir(self.tempdir) self.state = BlockadeState(data_dir=self.tempdir)
def load_state(name): global DATA_DIR try: return BlockadeState(blockade_id=name, data_dir=DATA_DIR) except InvalidBlockadeName: raise