You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by an...@apache.org on 2013/10/03 08:06:39 UTC
[41/50] git commit: updated refs/heads/4.2 to 86c9363
CLOUDSTACK-4691: move egress rules host maintenance tests to maint folder
Signed-off-by: venkataswamybabu budumuru <ve...@citrix.com>
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/6b28e03d
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/6b28e03d
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/6b28e03d
Branch: refs/heads/4.2
Commit: 6b28e03d6d88e9b6bd9d0521a45c93d5b4af6501
Parents: a34bf45
Author: SrikanteswaraRao Talluri <ka...@gmail.com>
Authored: Wed Sep 25 15:16:13 2013 +0530
Committer: venkataswamybabu budumuru <ve...@citrix.com>
Committed: Mon Sep 30 15:06:46 2013 +0530
----------------------------------------------------------------------
.../maint/test_egress_rules_host_maintenance.py | 290 +++++++++++++++++++
.../maint/test_host_high_availability.py | 4 +-
test/integration/component/test_egress_rules.py | 12 +-
tools/marvin/marvin/integration/lib/base.py | 10 +-
.../demo/simulator/testcase/libs/base.py | 8 +-
5 files changed, 307 insertions(+), 17 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6b28e03d/test/integration/component/maint/test_egress_rules_host_maintenance.py
----------------------------------------------------------------------
diff --git a/test/integration/component/maint/test_egress_rules_host_maintenance.py b/test/integration/component/maint/test_egress_rules_host_maintenance.py
new file mode 100644
index 0000000..6f0f768
--- /dev/null
+++ b/test/integration/component/maint/test_egress_rules_host_maintenance.py
@@ -0,0 +1,290 @@
+# 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.
+
+""" P1 for Egresss & Ingress rules
+"""
+#Import Local Modules
+import marvin
+from nose.plugins.attrib import attr
+from marvin.cloudstackTestCase import *
+from marvin.cloudstackAPI import *
+from marvin.remoteSSHClient import remoteSSHClient
+from marvin.integration.lib.utils import *
+from marvin.integration.lib.base import *
+from marvin.integration.lib.common import *
+
+#Import System modules
+import time
+import subprocess
+
+
+class Services:
+ """Test Security groups Services
+ """
+
+ def __init__(self):
+ self.services = {
+ "account": {
+ "email": "test@test.com",
+ "firstname": "Test",
+ "lastname": "User",
+ "username": "test",
+ # Random characters are appended in create account to
+ # ensure unique username generated each time
+ "password": "password",
+ },
+ "virtual_machine": {
+ # Create a small virtual machine instance with disk offering
+ "displayname": "Test VM",
+ "username": "root", # VM creds for SSH
+ "password": "password",
+ "ssh_port": 22,
+ "hypervisor": 'XenServer',
+ "privateport": 22,
+ "publicport": 22,
+ "protocol": 'TCP',
+ "userdata": 'This is sample data',
+ },
+ "service_offering": {
+ "name": "Tiny Instance",
+ "displaytext": "Tiny Instance",
+ "cpunumber": 1,
+ "cpuspeed": 100, # in MHz
+ "memory": 128, # In MBs
+ },
+ "security_group": {
+ "name": 'SSH',
+ "protocol": 'TCP',
+ "startport": 22,
+ "endport": 22,
+ "cidrlist": '0.0.0.0/0',
+ },
+ "ostype": 'CentOS 5.3 (64-bit)',
+ # CentOS 5.3 (64-bit)
+ "sleep": 60,
+ "timeout": 10,
+ }
+
+
+class TestEgressAfterHostMaintenance(cloudstackTestCase):
+
+ def setUp(self):
+
+ self.apiclient = self.testClient.getApiClient()
+ self.dbclient = self.testClient.getDbConnection()
+ self.cleanup = []
+ return
+
+ def tearDown(self):
+ try:
+ #Clean up, terminate the created templates
+ cleanup_resources(self.apiclient, self.cleanup)
+
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+ return
+
+ @classmethod
+ def setUpClass(cls):
+ cls.services = Services().services
+ cls.api_client = super(
+ TestEgressAfterHostMaintenance,
+ cls
+ ).getClsTestClient().getApiClient()
+
+ # Get Zone, Domain and templates
+ cls.domain = get_domain(cls.api_client, cls.services)
+ cls.zone = get_zone(cls.api_client, cls.services)
+ cls.services['mode'] = cls.zone.networktype
+ cls.pod = get_pod(
+ cls.api_client,
+ zoneid=cls.zone.id
+ )
+
+ template = get_template(
+ cls.api_client,
+ cls.zone.id,
+ cls.services["ostype"]
+ )
+ cls.services["domainid"] = cls.domain.id
+ cls.services["virtual_machine"]["zoneid"] = cls.zone.id
+ cls.services["virtual_machine"]["template"] = template.id
+
+ cls.service_offering = ServiceOffering.create(
+ cls.api_client,
+ cls.services["service_offering"]
+ )
+ cls.account = Account.create(
+ cls.api_client,
+ cls.services["account"],
+ domainid=cls.domain.id
+ )
+ cls.services["account"] = cls.account.name
+ cls._cleanup = [
+ cls.account,
+ cls.service_offering
+ ]
+ return
+
+ @classmethod
+ def tearDownClass(cls):
+ try:
+ #Cleanup resources used
+ cleanup_resources(cls.api_client, cls._cleanup)
+
+ except Exception as e:
+ raise Exception("Warning: Exception during cleanup : %s" % e)
+
+ return
+
+ @attr(speed = "slow")
+ @attr(tags = ["sg", "eip", "maintenance"])
+ def test_egress_after_host_maintenance(self):
+ """Test maintenance case for egress
+ """
+
+ # Validate the following:
+ # 1. createaccount of type user
+ # 2. createsecuritygroup (ssh) for this account
+ # 3. authorizeSecurityGroupIngress to allow ssh access to the VM
+ # 4. authorizeSecurityGroupEgress to allow ssh access only out to
+ # CIDR: 0.0.0.0/0
+ # 5. deployVirtualMachine into this security group (ssh)
+ # 6. deployed VM should be Running, ssh should be allowed into the VM
+ # 7. Enable maintenance mode for host, cance maintenance mode
+ # 8. User should be able to SSH into VM after maintainace
+
+ security_group = SecurityGroup.create(
+ self.apiclient,
+ self.services["security_group"],
+ account=self.account.name,
+ domainid=self.account.domainid
+ )
+ self.debug("Created security group with ID: %s" % security_group.id)
+
+ # Default Security group should not have any ingress rule
+ sercurity_groups = SecurityGroup.list(
+ self.apiclient,
+ account=self.account.name,
+ domainid=self.account.domainid
+ )
+ self.assertEqual(
+ isinstance(sercurity_groups, list),
+ True,
+ "Check for list security groups response"
+ )
+
+ self.assertEqual(
+ len(sercurity_groups),
+ 2,
+ "Check List Security groups response"
+ )
+ # Authorize Security group to SSH to VM
+ self.debug(
+ "Authorizing ingress rule for sec group ID: %s for ssh access"
+ % security_group.id)
+ ingress_rule = security_group.authorize(
+ self.apiclient,
+ self.services["security_group"],
+ account=self.account.name,
+ domainid=self.account.domainid
+ )
+
+ self.assertEqual(
+ isinstance(ingress_rule, dict),
+ True,
+ "Check ingress rule created properly"
+ )
+
+ ssh_rule = (ingress_rule["ingressrule"][0]).__dict__
+
+ # Authorize Security group to SSH to VM
+ self.debug(
+ "Authorizing egress rule for sec group ID: %s for ssh access"
+ % security_group.id)
+ egress_rule = security_group.authorizeEgress(
+ self.apiclient,
+ self.services["security_group"],
+ account=self.account.name,
+ domainid=self.account.domainid
+ )
+
+ self.assertEqual(
+ isinstance(egress_rule, dict),
+ True,
+ "Check egress rule created properly"
+ )
+ ssh_egress_rule = (egress_rule["egressrule"][0]).__dict__
+
+ self.virtual_machine = VirtualMachine.create(
+ self.apiclient,
+ self.services["virtual_machine"],
+ accountid=self.account.name,
+ domainid=self.account.domainid,
+ serviceofferingid=self.service_offering.id,
+ securitygroupids=[security_group.id]
+ )
+ self.debug("Deploying VM in account: %s" % self.account.name)
+
+ # Should be able to SSH VM
+ try:
+ self.debug("SSH into VM: %s" % self.virtual_machine.id)
+ ssh = self.virtual_machine.get_ssh_client()
+ except Exception as e:
+ self.fail("SSH Access failed for %s: %s" % \
+ (self.virtual_machine.ipaddress, e)
+ )
+ vms = VirtualMachine.list(
+ self.apiclient,
+ id=self.virtual_machine.id,
+ listall=True
+ )
+ self.assertEqual(
+ isinstance(vms, list),
+ True,
+ "Check list VMs response for valid host"
+ )
+ vm = vms[0]
+
+ self.debug("Enabling host maintenance for ID: %s" % vm.hostid)
+ cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd()
+ cmd.id = vm.hostid
+ self.apiclient.prepareHostForMaintenance(cmd)
+
+ self.debug("Canceling host maintenance for ID: %s" % vm.hostid)
+ cmd = cancelHostMaintenance.cancelHostMaintenanceCmd()
+ cmd.id = vm.hostid
+ self.apiclient.cancelHostMaintenance(cmd)
+
+ self.debug("Waiting for SSVMs to come up")
+ wait_for_ssvms(
+ self.apiclient,
+ zoneid=self.zone.id,
+ podid=self.pod.id,
+ )
+ self.debug("Starting VM: %s" % self.virtual_machine.id)
+
+ self.virtual_machine.start(self.apiclient)
+ # Should be able to SSH VM
+ try:
+ self.debug("SSH into VM: %s" % self.virtual_machine.id)
+ ssh = self.virtual_machine.get_ssh_client(reconnect=True)
+ except Exception as e:
+ self.fail("SSH Access failed for %s: %s" % \
+ (self.virtual_machine.ipaddress, e)
+ )
+ return
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6b28e03d/test/integration/component/maint/test_host_high_availability.py
----------------------------------------------------------------------
diff --git a/test/integration/component/maint/test_host_high_availability.py b/test/integration/component/maint/test_host_high_availability.py
index 5fb047b..b4c50c7 100644
--- a/test/integration/component/maint/test_host_high_availability.py
+++ b/test/integration/component/maint/test_host_high_availability.py
@@ -616,7 +616,7 @@ class TestHostHighAvailability(cloudstackTestCase):
"The virtual machine is not ha enabled so check if VM is created on host which is also not ha enabled"
)
- #put the Host in maintainance mode
+ #put the Host in maintenance mode
self.debug("Enabling maintenance mode for host %s" % vm_with_ha_enabled.hostid)
cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd()
cmd.id = vm_with_ha_enabled.hostid
@@ -748,7 +748,7 @@ class TestHostHighAvailability(cloudstackTestCase):
"The virtual machine is not ha enabled so check if VM is created on host which is also not ha enabled"
)
- #put the Host in maintainance mode
+ #put the Host in maintenance mode
self.debug("Enabling maintenance mode for host %s" % vm_with_ha_disabled.hostid)
cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd()
cmd.id = vm_with_ha_disabled.hostid
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6b28e03d/test/integration/component/test_egress_rules.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_egress_rules.py b/test/integration/component/test_egress_rules.py
index 10e0d03..05b4544 100644
--- a/test/integration/component/test_egress_rules.py
+++ b/test/integration/component/test_egress_rules.py
@@ -2149,7 +2149,7 @@ class TestInvalidParametersForEgress(cloudstackTestCase):
return
-class TestEgressAfterHostMaintainance(cloudstackTestCase):
+class TestEgressAfterHostMaintenance(cloudstackTestCase):
def setUp(self):
@@ -2171,7 +2171,7 @@ class TestEgressAfterHostMaintainance(cloudstackTestCase):
def setUpClass(cls):
cls.services = Services().services
cls.api_client = super(
- TestEgressAfterHostMaintainance,
+ TestEgressAfterHostMaintenance,
cls
).getClsTestClient().getApiClient()
@@ -2222,7 +2222,7 @@ class TestEgressAfterHostMaintainance(cloudstackTestCase):
@attr(speed = "slow")
@attr(tags = ["sg", "eip", "maintenance"])
- def test_egress_after_host_maintainance(self):
+ def test_egress_after_host_maintenance(self):
"""Test maintenance case for egress
"""
@@ -2234,7 +2234,7 @@ class TestEgressAfterHostMaintainance(cloudstackTestCase):
# CIDR: 0.0.0.0/0
# 5. deployVirtualMachine into this security group (ssh)
# 6. deployed VM should be Running, ssh should be allowed into the VM
- # 7. Enable maintainance mode for host, cance maintainance mode
+ # 7. Enable maintenance mode for host, cance maintenance mode
# 8. User should be able to SSH into VM after maintainace
security_group = SecurityGroup.create(
@@ -2329,12 +2329,12 @@ class TestEgressAfterHostMaintainance(cloudstackTestCase):
)
vm = vms[0]
- self.debug("Enabling host maintainance for ID: %s" % vm.hostid)
+ self.debug("Enabling host maintenance for ID: %s" % vm.hostid)
cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd()
cmd.id = vm.hostid
self.apiclient.prepareHostForMaintenance(cmd)
- self.debug("Canceling host maintainance for ID: %s" % vm.hostid)
+ self.debug("Canceling host maintenance for ID: %s" % vm.hostid)
cmd = cancelHostMaintenance.cancelHostMaintenanceCmd()
cmd.id = vm.hostid
self.apiclient.cancelHostMaintenance(cmd)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6b28e03d/tools/marvin/marvin/integration/lib/base.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/integration/lib/base.py b/tools/marvin/marvin/integration/lib/base.py
index df81406..0d52224 100755
--- a/tools/marvin/marvin/integration/lib/base.py
+++ b/tools/marvin/marvin/integration/lib/base.py
@@ -1803,7 +1803,7 @@ class Host:
return
def enableMaintenance(self, apiclient):
- """enables maintainance mode Host"""
+ """enables maintenance mode Host"""
cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd()
cmd.id = self.id
@@ -1811,14 +1811,14 @@ class Host:
@classmethod
def enableMaintenance(cls, apiclient, id):
- """enables maintainance mode Host"""
+ """enables maintenance mode Host"""
cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd()
cmd.id = id
return apiclient.prepareHostForMaintenance(cmd)
def cancelMaintenance(self, apiclient):
- """Cancels maintainance mode Host"""
+ """Cancels maintenance mode Host"""
cmd = cancelHostMaintenance.cancelHostMaintenanceCmd()
cmd.id = self.id
@@ -1826,7 +1826,7 @@ class Host:
@classmethod
def cancelMaintenance(cls, apiclient, id):
- """Cancels maintainance mode Host"""
+ """Cancels maintenance mode Host"""
cmd = cancelHostMaintenance.cancelHostMaintenanceCmd()
cmd.id = id
@@ -1895,7 +1895,7 @@ class StoragePool:
return
def enableMaintenance(self, apiclient):
- """enables maintainance mode Storage pool"""
+ """enables maintenance mode Storage pool"""
cmd = enableStorageMaintenance.enableStorageMaintenanceCmd()
cmd.id = self.id
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/6b28e03d/tools/marvin/marvin/sandbox/demo/simulator/testcase/libs/base.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/sandbox/demo/simulator/testcase/libs/base.py b/tools/marvin/marvin/sandbox/demo/simulator/testcase/libs/base.py
index 0b5da5c..7c8546c 100644
--- a/tools/marvin/marvin/sandbox/demo/simulator/testcase/libs/base.py
+++ b/tools/marvin/marvin/sandbox/demo/simulator/testcase/libs/base.py
@@ -1053,8 +1053,8 @@ class Host:
return
def enableMaintenance(self, apiclient):
- """enables maintainance mode Host"""
-
+ """enables maintenance mode Host"""
+
cmd = prepareHostForMaintenance.prepareHostForMaintenanceCmd()
cmd.id = self.id
return apiclient.prepareHostForMaintenance(cmd)
@@ -1113,8 +1113,8 @@ class StoragePool:
return
def enableMaintenance(self, apiclient):
- """enables maintainance mode Storage pool"""
-
+ """enables maintenance mode Storage pool"""
+
cmd = enableStorageMaintenance.enableStorageMaintenanceCmd()
cmd.id = self.id
return apiclient.enableStorageMaintenance(cmd)