def test_2_deployements_with_undeployed(self): site = "rennes" nodes_foo = [ "foocluster-1.rennes.grid5000.fr", "foocluster-2.rennes.grid5000.fr", ] nodes_bar = [ "barcluster-1.rennes.grid5000.fr", "barcluster-2.rennes.grid5000.fr", ] _c_network_1 = g5k_api_utils.ConcreteProd(site=site) _c_network_2 = g5k_api_utils.ConcreteVlan(vlan_id="4", site="rennes") r = Resources({ "resources": { "machines": [ { "_c_nodes": nodes_foo, "primary_network": "network1" }, { "_c_nodes": nodes_bar, "primary_network": "network2" }, ], "networks": [ { "type": PROD, "id": "network1", "_c_network": [_c_network_1], "site": "rennes", }, { "type": KAVLAN, "id": "network2", "_c_network": [_c_network_2], "site": "rennes", }, ], } }) d_foo = set(["foocluster-1.rennes.grid5000.fr"]) u_foo = set(nodes_foo) - d_foo d_bar = set(["barcluster-2.rennes.grid5000.fr"]) u_bar = set(nodes_bar) - d_bar # we make the deployed check fail to force the deployment api._check_deployed_nodes = mock.Mock(side_effect=[([], []), ([], [])]) r.driver.deploy = mock.Mock(side_effect=[(d_foo, u_foo), (d_bar, u_bar)]) r.deploy() self.assertEqual(2, r.driver.deploy.call_count) self.assertCountEqual(d_foo, r.c_resources["machines"][0]["_c_deployed"]) self.assertCountEqual(u_foo, r.c_resources["machines"][0]["_c_undeployed"]) self.assertCountEqual(d_bar, r.c_resources["machines"][1]["_c_deployed"]) self.assertCountEqual(u_bar, r.c_resources["machines"][1]["_c_undeployed"])
def test_not_order_dependent(self): _networks_1 = [ { "site": "rennes", "vlan_id": 4, "nature": "kavlan", "network": "1.2.3.4/24", }, { "site": "rennes", "vlan_id": 5, "nature": "kavlan", "network": "2.2.3.4/24", }, ] networks_1 = [g5k_api_utils.ConcreteVlan(**n) for n in _networks_1] networks_2 = [networks_1[1], networks_1[0]] resources_1 = copy.deepcopy(self.resources) resources_2 = copy.deepcopy(self.resources) utils.concretize_networks(resources_1, networks_1) utils.concretize_networks(resources_2, networks_2) self.maxDiff = None self.assertCountEqual(resources_1["networks"], resources_2["networks"])
def test_one_missing(self): _networks = [{ "site": "rennes", "vlan_id": 4, "nature": "kavlan", "network": "1.2.3.4/24", }] networks = [g5k_api_utils.ConcreteVlan(**n) for n in _networks] with self.assertRaises(MissingNetworkError): utils.concretize_networks(self.resources, networks)
def test_exact(self): desc = { "cluster": "foocluster", "_c_nodes": ["foocluster-1", "foocluster-2"], "secondary_networks": ["network_1", "network_2"], } networks = [ { "type": KAVLAN, "id": "network_1", "role": "net_role_1", "site": "rennes", "_c_network": [g5k_api_utils.ConcreteVlan(site="rennes", vlan_id="4")], }, { "type": KAVLAN, "id": "network_2", "roles": ["net_role_2", "net_role_3"], "site": "rennes", "_c_network": [g5k_api_utils.ConcreteVlan(site="rennes", vlan_id="5")], }, ] g5k_api_utils.get_cluster_interfaces = mock.MagicMock( return_value=[("eth0", "en0"), ("eth1", "en1")]) g5k_api_utils.set_nodes_vlan = mock.Mock() gk = mock.Mock() utils._mount_secondary_nics(desc, networks) self.assertCountEqual( [("en0", ["net_role_1"]), ("en1", ["net_role_2", "net_role_3"])], desc["_c_nics"], )
def test_concrete_network(self): concrete_net = g5k_api_utils.ConcreteVlan(site="nancy", vlan_id=1) expected_roles = ["mynetwork"] networks = [{ "typlse": KAVLAN, "id": "network1", "roles": expected_roles, "_c_network": concrete_net, }] # a bit hacky because _c_network will be deepcopied so the ref will change r = Resources({"resources": {"networks": networks, "machines": []}}) networks = r.get_networks() self.assertEqual(1, len(networks)) actual_roles, actual_net = networks[0] self.assertCountEqual(expected_roles, actual_roles)
def test_act(self): _networks = [{ "site": "rennes", "vlan_id": 4, "nature": "kavlan", "network": "1.2.3.4/24" }, { "site": "rennes", "vlan_id": 5, "nature": "kavlan", "network": "2.2.3.4/24" }] networks = [g5k_api_utils.ConcreteVlan(**n) for n in _networks] utils.concretize_networks(self.resources, networks) self.assertEqual([networks[0]], self.resources["networks"][0]["_c_network"]) self.assertEqual([networks[1]], self.resources["networks"][1]["_c_network"])
def test_vlan(self): site = "rennes" nodes = [ "foocluster-1.rennes.grid5000.fr", "foocluster-2.rennes.grid5000.fr" ] _c_network = g5k_api_utils.ConcreteVlan(vlan_id="4", site=site) r = Resources({ "resources": { "machines": [{ "_c_nodes": nodes, "primary_network": "network1" }], "networks": [{ "type": KAVLAN, "id": "network1", "_c_network": [_c_network], "site": "rennes", }], } }) deployed = set(nodes) undeployed = set() api._check_deployed_nodes = mock.Mock(return_value=(undeployed, deployed)) r.driver.deploy = mock.Mock(return_value=(deployed, undeployed)) r.deploy() r.driver.deploy.assert_called_with(site, nodes, { "env_name": DEFAULT_ENV_NAME, "vlan": "4" }) self.assertCountEqual(deployed, r.c_resources["machines"][0]["_c_deployed"]) self.assertCountEqual(deployed, r.c_resources["machines"][0]["_c_deployed"]) self.assertCountEqual(undeployed, r.c_resources["machines"][0]["_c_undeployed"])
def test_prod(self): self.resources["networks"][0]["type"] = PROD self.resources["networks"][0]["nature"] = PROD networks = [ g5k_api_utils.ConcreteVlan( **{ "site": "rennes", "vlan_id": 5, "nature": "kavlan", "network": "1.2.3.4/24" }), g5k_api_utils.ConcreteProd(**{ "site": "rennes", "nature": PROD, "network": "2.2.3.4/24" }) ] utils.concretize_networks(self.resources, networks) # self.assertEqual(networks[0], self.resources["networks"][0]["_c_network"]) self.assertEqual( None, self.resources["networks"][0]["_c_network"][0].vlan_id) self.assertEqual([networks[0]], self.resources["networks"][1]["_c_network"])