# Licensed to the Apache Software Foundation (ASF) under one # or more contributor license agreements. See the NOTICE file # distributed with this work for additional information # regarding copyright ownership. The ASF licenses this file # to you under the Apache License, Version 2.0 (the # "License"); you may not use this file except in compliance # with the License. You may obtain a copy of the License at # # http://www.apache.org/licenses/LICENSE-2.0 # # Unless required by applicable law or agreed to in writing, # software distributed under the License is distributed on an # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY # KIND, either express or implied. See the License for the # specific language governing permissions and limitations # under the License. #from marvin.cloudstackAPI import * from marvin.cloudstackTestCase import cloudstackTestCase from marvin.lib.base import PhysicalNetwork from marvin.lib.common import setNonContiguousVlanIds, get_zone from nose.plugins.attrib import attr class TestUpdatePhysicalNetwork(cloudstackTestCase): """ Test to extend physical network vlan range """ def setUp(self): self.apiClient = self.testClient.getApiClient() self.zone = get_zone(self.apiClient, self.testClient.getZoneForTests()) self.physicalnetwork, self.vlan = setNonContiguousVlanIds(self.apiClient, self.zone.id) self.physicalnetworkid = self.physicalnetwork.id self.existing_vlan = self.physicalnetwork.vlan if self.vlan is None: raise Exception("Failed to set non contiguous vlan ids to test. Free some ids from \ from existing physical networks at ends") @attr(tags = ["advanced"], required_hardware="false") def test_extendPhysicalNetworkVlan(self): """ Test to update a physical network and extend its vlan """ phy_networks = PhysicalNetwork.list(self.apiClient) self.assertNotEqual(len(phy_networks), 0, msg="There are no physical networks in the zone") phy_network = None for network in phy_networks: if hasattr(network, 'vlan'): phy_network = network break self.assertTrue(phy_network is not None, msg="No network with vlan found") self.network = phy_network self.networkid = phy_network.id self.existing_vlan = phy_network.vlan vlan1 = self.existing_vlan+","+self.vlan["partial_range"][0] updatePhysicalNetworkResponse = self.network.update(self.apiClient, id = self.networkid, vlan = vlan1) self.assertTrue(updatePhysicalNetworkResponse is not None, msg="couldn't extend the physical network with vlan %s"%vlan1) self.assertTrue(isinstance(self.network, PhysicalNetwork)) vlan2 = vlan1+","+self.vlan["partial_range"][1] updatePhysicalNetworkResponse2 = self.network.update(self.apiClient, id = self.networkid, vlan = vlan2) self.assertTrue(updatePhysicalNetworkResponse2 is not None, msg="couldn't extend the physical network with vlan %s"%vlan2) self.assertTrue(isinstance(self.network, PhysicalNetwork)) vlanranges= updatePhysicalNetworkResponse2.vlan self.assertTrue(vlanranges is not None, "No VLAN ranges found on the deployment") def tearDown(self): """ Teardown to update a physical network and shrink its vlan @return: """ phy_networks = PhysicalNetwork.list(self.apiClient) self.assertNotEqual(len(phy_networks), 0, msg="There are no physical networks in the zone") self.network = phy_networks[0] self.networkid = phy_networks[0].id updateResponse = self.network.update(self.apiClient, id = self.networkid, vlan=self.existing_vlan) self.assertTrue(updateResponse.vlan.find(self.vlan["full_range"]) < 0, "VLAN was not removed successfully")