You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cloudstack.apache.org by gi...@apache.org on 2014/02/10 05:52:05 UTC
git commit: updated refs/heads/marvin to 3493f17
Updated Branches:
refs/heads/marvin 286afda5d -> 3493f17ba
CLOUDSTACK-5674: Few new fixes
Project: http://git-wip-us.apache.org/repos/asf/cloudstack/repo
Commit: http://git-wip-us.apache.org/repos/asf/cloudstack/commit/3493f17b
Tree: http://git-wip-us.apache.org/repos/asf/cloudstack/tree/3493f17b
Diff: http://git-wip-us.apache.org/repos/asf/cloudstack/diff/3493f17b
Branch: refs/heads/marvin
Commit: 3493f17bad3b8b57778b62d464c5e7f910351cc0
Parents: 286afda
Author: Girish Shilamkar <gi...@clogeny.com>
Authored: Sun Feb 9 16:02:52 2014 -0500
Committer: Girish Shilamkar <gi...@clogeny.com>
Committed: Sun Feb 9 16:04:31 2014 -0500
----------------------------------------------------------------------
setup/dev/advanced.cfg | 2 +-
test/integration/smoke/test_deploy_vm.py | 2 +-
.../smoke/test_deploy_vm_with_userdata.py | 2 +-
...deploy_vms_with_varied_deploymentplanners.py | 2 +-
test/integration/smoke/test_guest_vlan_range.py | 2 +-
test/integration/smoke/test_hosts.py | 2 +-
test/integration/smoke/test_internal_lb.py | 2 +-
test/integration/smoke/test_iso.py | 2 +-
test/integration/smoke/test_loadbalance.py | 2 +-
.../smoke/test_multipleips_per_nic.py | 2 +-
test/integration/smoke/test_network.py | 4 +-
test/integration/smoke/test_network_acl.py | 2 +-
test/integration/smoke/test_nic.py | 2 +-
.../integration/smoke/test_portable_publicip.py | 2 +-
test/integration/smoke/test_primary_storage.py | 2 +-
test/integration/smoke/test_public_ip_range.py | 2 +-
.../smoke/test_reset_vm_on_reboot.py | 2 +-
test/integration/smoke/test_resource_detail.py | 2 +-
test/integration/smoke/test_routers.py | 2 +-
test/integration/smoke/test_scale_vm.py | 2 +-
.../integration/smoke/test_service_offerings.py | 2 +-
test/integration/smoke/test_snapshots.py | 2 +-
test/integration/smoke/test_ssvm.py | 2 +-
test/integration/smoke/test_templates.py | 2 +-
test/integration/smoke/test_vm_life_cycle.py | 2 +-
test/integration/smoke/test_vm_snapshots.py | 2 +-
test/integration/smoke/test_volumes.py | 6 +-
test/integration/smoke/test_vpc_vpn.py | 2 +-
tools/marvin/marvin/asyncJobMgr.py | 2 +-
tools/marvin/marvin/cloudstackConnection.py | 2 +-
tools/marvin/marvin/cloudstackTestClient.py | 39 ++--
tools/marvin/marvin/configGenerator.py | 14 +-
tools/marvin/marvin/dbConnection.py | 2 +-
tools/marvin/marvin/deployDataCenter.py | 2 +-
tools/marvin/marvin/lib/utils.py | 2 +-
tools/marvin/marvin/marvinInit.py | 111 ++++-----
tools/marvin/marvin/marvinLog.py | 27 ++-
tools/marvin/marvin/marvinPlugin.py | 232 ++++++++++---------
tools/marvin/marvin/sshClient.py | 2 +-
39 files changed, 248 insertions(+), 249 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/setup/dev/advanced.cfg
----------------------------------------------------------------------
diff --git a/setup/dev/advanced.cfg b/setup/dev/advanced.cfg
index 15d1057..199571d 100644
--- a/setup/dev/advanced.cfg
+++ b/setup/dev/advanced.cfg
@@ -226,6 +226,6 @@
},
"TestData":
{
- "Path": "config/config.cfg"
+ "Path": ""
}
}
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_deploy_vm.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_deploy_vm.py b/test/integration/smoke/test_deploy_vm.py
index 9b28186..9f40f78 100644
--- a/test/integration/smoke/test_deploy_vm.py
+++ b/test/integration/smoke/test_deploy_vm.py
@@ -44,7 +44,7 @@ class TestDeployVM(cloudstackTestCase):
# Get Zone, Domain and Default Built-in template
self.domain = get_domain(self.apiclient)
- self.zone = get_zone(self.apiclient, self.testdata)
+ self.zone = get_zone(self.apiclient, self.testClient.getZoneForTests())
self.testdata["mode"] = self.zone.networktype
self.template = get_template(self.apiclient, self.zone.id, self.testdata["ostype"])
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_deploy_vm_with_userdata.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_deploy_vm_with_userdata.py b/test/integration/smoke/test_deploy_vm_with_userdata.py
index 27dce50..eb03194 100644
--- a/test/integration/smoke/test_deploy_vm_with_userdata.py
+++ b/test/integration/smoke/test_deploy_vm_with_userdata.py
@@ -36,7 +36,7 @@ class TestDeployVmWithUserData(cloudstackTestCase):
cls.apiClient = testClient.getApiClient()
cls.services = testClient.getParsedTestDataConfig()
- cls.zone = get_zone(cls.apiClient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiClient, testClient.getZoneForTests())
if cls.zone.localstorageenabled:
#For devcloud since localstroage is enabled
cls.services["service_offerings"]["storagetype"] = "local"
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_deploy_vms_with_varied_deploymentplanners.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_deploy_vms_with_varied_deploymentplanners.py b/test/integration/smoke/test_deploy_vms_with_varied_deploymentplanners.py
index 270d9d2..c0c77e7 100644
--- a/test/integration/smoke/test_deploy_vms_with_varied_deploymentplanners.py
+++ b/test/integration/smoke/test_deploy_vms_with_varied_deploymentplanners.py
@@ -34,7 +34,7 @@ class TestDeployVmWithVariedPlanners(cloudstackTestCase):
# Get Zone, Domain and templates
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.template = get_template(
cls.apiclient,
cls.zone.id,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_guest_vlan_range.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_guest_vlan_range.py b/test/integration/smoke/test_guest_vlan_range.py
index 886d1b8..ecf7a0d 100644
--- a/test/integration/smoke/test_guest_vlan_range.py
+++ b/test/integration/smoke/test_guest_vlan_range.py
@@ -36,7 +36,7 @@ class TestDedicateGuestVlanRange(cloudstackTestCase):
# Get Zone, Domain
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
# Create Account
cls.account = Account.create(
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_hosts.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_hosts.py b/test/integration/smoke/test_hosts.py
index 57c35f5..31af7fc 100644
--- a/test/integration/smoke/test_hosts.py
+++ b/test/integration/smoke/test_hosts.py
@@ -37,7 +37,7 @@ class TestHosts(cloudstackTestCase):
self.apiclient = self.testClient.getApiClient()
self.dbclient = self.testClient.getDbConnection()
self.services = self.testClient.getParsedTestDataConfig()
- self.zone = get_zone(self.apiclient, self.getZoneForTests())
+ self.zone = get_zone(self.apiclient, self.testClient.getZoneForTests())
self.pod = get_pod(self.apiclient, self.zone.id)
self.cleanup = []
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_internal_lb.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_internal_lb.py b/test/integration/smoke/test_internal_lb.py
index 5a9127b..8a64b4d 100644
--- a/test/integration/smoke/test_internal_lb.py
+++ b/test/integration/smoke/test_internal_lb.py
@@ -34,7 +34,7 @@ class TestInternalLb(cloudstackTestCase):
cls.apiclient = testClient.getApiClient()
cls.services = testClient.getParsedTestDataConfig()
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.domain = get_domain(cls.apiclient)
cls.service_offering = ServiceOffering.create(
cls.apiclient,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_iso.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_iso.py b/test/integration/smoke/test_iso.py
index 0aec94c..72dc70d 100644
--- a/test/integration/smoke/test_iso.py
+++ b/test/integration/smoke/test_iso.py
@@ -39,7 +39,7 @@ class TestCreateIso(cloudstackTestCase):
self.dbclient = self.testClient.getDbConnection()
# Get Zone, Domain and templates
self.domain = get_domain(self.apiclient)
- self.zone = get_zone(self.apiclient, self.getZoneForTests())
+ self.zone = get_zone(self.apiclient, self.testClient.getZoneForTests())
self.services['mode'] = self.zone.networktype
self.services["domainid"] = self.domain.id
self.services["iso_2"]["zoneid"] = self.zone.id
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_loadbalance.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_loadbalance.py b/test/integration/smoke/test_loadbalance.py
index c9fe2e0..28a14e4 100644
--- a/test/integration/smoke/test_loadbalance.py
+++ b/test/integration/smoke/test_loadbalance.py
@@ -38,7 +38,7 @@ class TestLoadBalance(cloudstackTestCase):
# Get Zone, Domain and templates
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
template = get_template(
cls.apiclient,
cls.zone.id,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_multipleips_per_nic.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_multipleips_per_nic.py b/test/integration/smoke/test_multipleips_per_nic.py
index 8acf285..9c7f2f7 100644
--- a/test/integration/smoke/test_multipleips_per_nic.py
+++ b/test/integration/smoke/test_multipleips_per_nic.py
@@ -48,7 +48,7 @@ class TestDeployVM(cloudstackTestCase):
# Get Zone, Domain and Default Built-in template
self.domain = get_domain(self.apiclient)
- self.zone = get_zone(self.apiclient, self.getZoneForTests())
+ self.zone = get_zone(self.apiclient, self.testClient.getZoneForTests())
self.testdata["mode"] = self.zone.networktype
self.template = get_template(self.apiclient, self.zone.id, self.testdata["ostype"])
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_network.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_network.py b/test/integration/smoke/test_network.py
index 566bd37..258d254 100644
--- a/test/integration/smoke/test_network.py
+++ b/test/integration/smoke/test_network.py
@@ -46,7 +46,7 @@ class TestPublicIP(cloudstackTestCase):
# Get Zone, Domain and templates
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = cls.zone.networktype
# Create Accounts & networks
cls.account = Account.create(
@@ -541,7 +541,7 @@ class TestRebootRouter(cloudstackTestCase):
# Get Zone, Domain and templates
self.domain = get_domain(self.apiclient)
- self.zone = get_zone(self.apiclient, self.getZoneForTests())
+ self.zone = get_zone(self.apiclient, self.testClient.getZoneForTests())
template = get_template(
self.apiclient,
self.zone.id,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_network_acl.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_network_acl.py b/test/integration/smoke/test_network_acl.py
index 50bbbf3..1133bee 100644
--- a/test/integration/smoke/test_network_acl.py
+++ b/test/integration/smoke/test_network_acl.py
@@ -32,7 +32,7 @@ class TestNetworkACL(cloudstackTestCase):
cls.apiclient = testClient.getApiClient()
cls.services = testClient.getParsedTestDataConfig()
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.domain = get_domain(cls.apiclient)
cls.service_offering = ServiceOffering.create(
cls.apiclient,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_nic.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_nic.py b/test/integration/smoke/test_nic.py
index 4ee43b5..0e866b8 100644
--- a/test/integration/smoke/test_nic.py
+++ b/test/integration/smoke/test_nic.py
@@ -48,7 +48,7 @@ class TestNic(cloudstackTestCase):
# Get Zone, Domain and templates
domain = get_domain(self.apiclient)
- zone = get_zone(self.apiclient, self.getZoneForTests())
+ zone = get_zone(self.apiclient, self.testClient.getZoneForTests())
self.services['mode'] = zone.networktype
if zone.networktype != 'Advanced':
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_portable_publicip.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_portable_publicip.py b/test/integration/smoke/test_portable_publicip.py
index 37aaada..48310a5 100644
--- a/test/integration/smoke/test_portable_publicip.py
+++ b/test/integration/smoke/test_portable_publicip.py
@@ -39,7 +39,7 @@ class TestPortablePublicIPRange(cloudstackTestCase):
# Get Zone, Domain
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, cls.testClient.getZoneForTests())
# Create Account
cls.account = Account.create(
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_primary_storage.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_primary_storage.py b/test/integration/smoke/test_primary_storage.py
index 9437b3d..8f89f4f 100644
--- a/test/integration/smoke/test_primary_storage.py
+++ b/test/integration/smoke/test_primary_storage.py
@@ -37,7 +37,7 @@ class TestPrimaryStorageServices(cloudstackTestCase):
self.services = self.testClient.getParsedTestDataConfig()
self.cleanup = []
# Get Zone and pod
- self.zone = get_zone(self.apiclient, self.getZoneForTests())
+ self.zone = get_zone(self.apiclient, self.testClient.getZoneForTests())
self.pod = get_pod(self.apiclient, self.zone.id)
return
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_public_ip_range.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_public_ip_range.py b/test/integration/smoke/test_public_ip_range.py
index 998bda2..ae9b64b 100644
--- a/test/integration/smoke/test_public_ip_range.py
+++ b/test/integration/smoke/test_public_ip_range.py
@@ -34,7 +34,7 @@ class TestDedicatePublicIPRange(cloudstackTestCase):
cls.services = Services().services
# Get Zone, Domain
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, cls.getClsTestClient.getZoneForTests())
# Create Account
cls.account = Account.create(
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_reset_vm_on_reboot.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_reset_vm_on_reboot.py b/test/integration/smoke/test_reset_vm_on_reboot.py
index fac96fa..253f0f4 100644
--- a/test/integration/smoke/test_reset_vm_on_reboot.py
+++ b/test/integration/smoke/test_reset_vm_on_reboot.py
@@ -36,7 +36,7 @@ class TestResetVmOnReboot(cloudstackTestCase):
# Get Zone, Domain and templates
domain = get_domain(cls.apiclient)
- zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = zone.networktype
template = get_template(
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_resource_detail.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_resource_detail.py b/test/integration/smoke/test_resource_detail.py
index e7081f7..1613a4a 100644
--- a/test/integration/smoke/test_resource_detail.py
+++ b/test/integration/smoke/test_resource_detail.py
@@ -40,7 +40,7 @@ class TestResourceDetail(cloudstackTestCase):
# Get Zone, Domain and templates
domain = get_domain(cls.apiclient)
- zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = zone.networktype
# Set Zones and disk offerings ??
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_routers.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_routers.py b/test/integration/smoke/test_routers.py
index 61dc5be..0c91b9f 100644
--- a/test/integration/smoke/test_routers.py
+++ b/test/integration/smoke/test_routers.py
@@ -42,7 +42,7 @@ class TestRouterServices(cloudstackTestCase):
# Get Zone, Domain and templates
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = cls.zone.networktype
template = get_template(
cls.apiclient,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_scale_vm.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_scale_vm.py b/test/integration/smoke/test_scale_vm.py
index 6fa8d77..5ab4463 100644
--- a/test/integration/smoke/test_scale_vm.py
+++ b/test/integration/smoke/test_scale_vm.py
@@ -36,7 +36,7 @@ class TestScaleVm(cloudstackTestCase):
# Get Zone, Domain and templates
domain = get_domain(cls.apiclient)
- zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = zone.networktype
template = get_template(
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_service_offerings.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_service_offerings.py b/test/integration/smoke/test_service_offerings.py
index b518c98..0c7752d 100644
--- a/test/integration/smoke/test_service_offerings.py
+++ b/test/integration/smoke/test_service_offerings.py
@@ -137,7 +137,7 @@ class TestServiceOfferings(cloudstackTestCase):
cls.services = testClient.getParsedTestDataConfig()
domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = cls.zone.networktype
cls.service_offering_1 = ServiceOffering.create(
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_snapshots.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_snapshots.py b/test/integration/smoke/test_snapshots.py
index 312da45..d475d87 100644
--- a/test/integration/smoke/test_snapshots.py
+++ b/test/integration/smoke/test_snapshots.py
@@ -32,7 +32,7 @@ class TestSnapshotRootDisk(cloudstackTestCase):
# Get Zone, Domain and templates
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = cls.zone.networktype
template = get_template(
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_ssvm.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_ssvm.py b/test/integration/smoke/test_ssvm.py
index d8e9f85..3ba7303 100644
--- a/test/integration/smoke/test_ssvm.py
+++ b/test/integration/smoke/test_ssvm.py
@@ -38,7 +38,7 @@ class TestSSVMs(cloudstackTestCase):
self.apiclient = self.testClient.getApiClient()
self.cleanup = []
self.services = Services().services
- self.zone = get_zone(self.apiclient, self.getZoneForTests())
+ self.zone = get_zone(self.apiclient, self.testClient.getZoneForTests())
return
def tearDown(self):
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_templates.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_templates.py b/test/integration/smoke/test_templates.py
index 71aee48..26bbb55 100644
--- a/test/integration/smoke/test_templates.py
+++ b/test/integration/smoke/test_templates.py
@@ -59,7 +59,7 @@ class TestCreateTemplate(cloudstackTestCase):
# Get Zone, Domain and templates
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = cls.zone.networktype
cls.disk_offering = DiskOffering.create(
cls.apiclient,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_vm_life_cycle.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_vm_life_cycle.py b/test/integration/smoke/test_vm_life_cycle.py
index 31031c8..05ecba5 100644
--- a/test/integration/smoke/test_vm_life_cycle.py
+++ b/test/integration/smoke/test_vm_life_cycle.py
@@ -39,7 +39,7 @@ class TestDeployVM(cloudstackTestCase):
# Get Zone, Domain and templates
domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = cls.zone.networktype
#If local storage is enabled, alter the offerings to use localstorage
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_vm_snapshots.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_vm_snapshots.py b/test/integration/smoke/test_vm_snapshots.py
index 86af013..6f64802 100644
--- a/test/integration/smoke/test_vm_snapshots.py
+++ b/test/integration/smoke/test_vm_snapshots.py
@@ -32,7 +32,7 @@ class TestVmSnapshot(cloudstackTestCase):
cls.services = Services().services
# Get Zone, Domain and templates
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, cls.getClsTestClient().getZoneForTests())
template = get_template(
cls.apiclient,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_volumes.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_volumes.py b/test/integration/smoke/test_volumes.py
index f650dd5..67b986f 100644
--- a/test/integration/smoke/test_volumes.py
+++ b/test/integration/smoke/test_volumes.py
@@ -43,10 +43,10 @@ class TestCreateVolume(cloudstackTestCase):
testClient = super(TestCreateVolume, cls).getClsTestClient()
cls.apiclient = testClient.getApiClient()
cls.services = testClient.getParsedTestDataConfig()
-
+ print "\n***************",testClient.getParsedTestDataConfig()
# Get Zone, Domain and templates
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = cls.zone.networktype
cls.disk_offering = DiskOffering.create(
cls.apiclient,
@@ -224,7 +224,7 @@ class TestVolumes(cloudstackTestCase):
# Get Zone, Domain and templates
cls.domain = get_domain(cls.apiclient)
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.services['mode'] = cls.zone.networktype
cls.disk_offering = DiskOffering.create(
cls.apiclient,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/test/integration/smoke/test_vpc_vpn.py
----------------------------------------------------------------------
diff --git a/test/integration/smoke/test_vpc_vpn.py b/test/integration/smoke/test_vpc_vpn.py
index 56215c1..4ec2da1 100644
--- a/test/integration/smoke/test_vpc_vpn.py
+++ b/test/integration/smoke/test_vpc_vpn.py
@@ -34,7 +34,7 @@ class TestVpcRemoteAccessVpn(cloudstackTestCase):
cls.apiclient = testClient.getApiClient()
cls.services = testClient.getParsedTestDataConfig()
- cls.zone = get_zone(cls.apiclient, cls.getZoneForTests())
+ cls.zone = get_zone(cls.apiclient, testClient.getZoneForTests())
cls.domain = get_domain(cls.apiclient)
cls.service_offering = ServiceOffering.create(
cls.apiclient,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/asyncJobMgr.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/asyncJobMgr.py b/tools/marvin/marvin/asyncJobMgr.py
index dab85ca..ee3ae5a 100644
--- a/tools/marvin/marvin/asyncJobMgr.py
+++ b/tools/marvin/marvin/asyncJobMgr.py
@@ -16,7 +16,7 @@
# under the License.
import threading
-import cloudstackException
+from marvin import cloudstackException
import time
import Queue
import copy
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/cloudstackConnection.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/cloudstackConnection.py b/tools/marvin/marvin/cloudstackConnection.py
index b8d9a38..ee1ff00 100644
--- a/tools/marvin/marvin/cloudstackConnection.py
+++ b/tools/marvin/marvin/cloudstackConnection.py
@@ -38,7 +38,7 @@ from requests import (
Timeout,
RequestException
)
-from cloudstackException import GetDetailExceptionInfo
+from marvin.cloudstackException import GetDetailExceptionInfo
class CSConnection(object):
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/cloudstackTestClient.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/cloudstackTestClient.py b/tools/marvin/marvin/cloudstackTestClient.py
index e8c6ab2..a1b8e19 100644
--- a/tools/marvin/marvin/cloudstackTestClient.py
+++ b/tools/marvin/marvin/cloudstackTestClient.py
@@ -26,26 +26,25 @@ from codes import (FAILED, PASS, ADMIN, DOMAIN_ADMIN,
USER, SUCCESS, XEN_SERVER)
from configGenerator import ConfigManager
from marvin.lib import utils
-from cloudstackException import GetDetailExceptionInfo
+from marvin.cloudstackException import GetDetailExceptionInfo
from marvin.lib.utils import (random_gen, validateList)
from marvin.cloudstackAPI.cloudstackAPIClient import CloudStackAPIClient
-'''
-@Desc : CloudStackTestClient is encapsulated entity for creating and
+class CSTestClient(object):
+ '''
+ @Desc : CloudStackTestClient is encapsulated entity for creating and
getting various clients viz., apiclient,
user api client, dbconnection, test Data parsed
information etc
-@Input : mgmtDetails : Management Server Details
- dbSvrDetails: Database Server details of Management \
+ @Input :
+ mgmt_details : Management Server Details
+ dbsvr_details: Database Server details of Management \
Server. Retrieved from configuration file.
- asyncTimeout : Timeout for Async queries
- defaultWorkerThreads : Number of worker threads
+ async_timeout : Timeout for Async queries
+ default_worker_threads : Number of worker threads
logger : provides logging facilities for this library
zone : The zone on which test suites using this test client will run
-'''
-
-
-class CSTestClient(object):
+ '''
def __init__(self, mgmt_details,
dbsvr_details,
async_timeout=3600,
@@ -133,9 +132,9 @@ class CSTestClient(object):
list_user = listUsers.listUsersCmd()
list_user.account = "admin"
list_user_res = self.__apiClient.listUsers(list_user)
- if list_user_res is None or\
+ if list_user_res == FAILED or list_user_res is None or\
(validateList(list_user_res)[0] != PASS):
- self.__logger.debug("__createApiClient: API "
+ self.__logger.error("__createApiClient: API "
"Client Creation Failed")
return FAILED
@@ -200,7 +199,6 @@ class CSTestClient(object):
register_user.id = userid
register_user_res = \
self.__apiClient.registerUserKeys(register_user)
-
if register_user_res == FAILED:
return FAILED
return (register_user_res.apikey, register_user_res.secretkey)
@@ -232,9 +230,11 @@ class CSTestClient(object):
configuration file. They can overwrite it with
providing their own configuration file as well.
'''
+ print "******************PATH*****************",self.__testDataFilePath
self.__configObj = ConfigManager(self.__testDataFilePath)
- if self.__configObj is not None:
+ if self.__configObj:
self.__parsedTestDataConfig = self.__configObj.getConfig()
+ print "\n**************************************HTTTTTT***",self.__parsedTestDataConfig
else:
self.__logger.error("createTestClient : Not able to create "
"ConfigManager Object")
@@ -246,7 +246,12 @@ class CSTestClient(object):
'''
3. Creates API Client
'''
- return self.__createApiClient()
+ ret = self.__createApiClient()
+ if ret == FAILED:
+ self.__logger.error("********Test Client Creation Failed********")
+ else:
+ self.__logger.debug("********Test Client Creation Successful********")
+ return ret
except Exception, e:
self.__logger.exception("Exception Occurred "
"Under createTestClient "
@@ -368,7 +373,7 @@ class CSTestClient(object):
return self.__configObj
def getApiClient(self):
- if self.__apiClient is not None:
+ if self.__apiClient:
self.__apiClient.id = self.identifier
return self.__apiClient
return None
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/configGenerator.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/configGenerator.py b/tools/marvin/marvin/configGenerator.py
index 245473a..f55b0b4 100644
--- a/tools/marvin/marvin/configGenerator.py
+++ b/tools/marvin/marvin/configGenerator.py
@@ -332,10 +332,7 @@ class ConfigManager(object):
"getConfig" API,once configObj is returned.
'''
def __init__(self, cfg_file=None):
- if cfg_file is None:
- self.__filePath = "config/test_data.cfg"
- else:
- self.__filePath = cfg_file
+ self.__filePath = cfg_file
self.__parsedCfgDict = None
'''
Set the Configuration
@@ -343,8 +340,11 @@ class ConfigManager(object):
self.__setConfig()
def __setConfig(self):
- if self.__verifyFile() is not False:
- self.__parsedCfgDict = self.__parseConfig()
+ if not self.__verifyFile():
+ dirPath = os.path.dirname(__file__)
+ self.__filePath = os.path.join(dirPath,"config/test_data.cfg")
+ self.__parsedCfgDict = self.__parseConfig()
+ print "*************PATH3***************",self.__filePath,self.__parsedCfgDict
def __parseConfig(self):
'''
@@ -382,7 +382,7 @@ class ConfigManager(object):
'''
if self.__filePath is None or self.__filePath == '':
return False
- return False if os.path.exists(self.__filePath) is False else True
+ return os.path.exists(self.__filePath)
def getSectionData(self, section=None):
'''
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/dbConnection.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/dbConnection.py b/tools/marvin/marvin/dbConnection.py
index 422fcfa..ba7bac9 100644
--- a/tools/marvin/marvin/dbConnection.py
+++ b/tools/marvin/marvin/dbConnection.py
@@ -20,7 +20,7 @@ import contextlib
from mysql import connector
from mysql.connector import errors
from contextlib import closing
-import cloudstackException
+from marvin import cloudstackException
import sys
import os
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/deployDataCenter.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/deployDataCenter.py b/tools/marvin/marvin/deployDataCenter.py
index 862a1bf..c8feaaf 100644
--- a/tools/marvin/marvin/deployDataCenter.py
+++ b/tools/marvin/marvin/deployDataCenter.py
@@ -686,7 +686,7 @@ if __name__ == "__main__":
log_check = False
if log_obj is not None:
log_check = True
- ret = log_obj.createLogs("DataCenter",
+ ret = log_obj.createLogs("DeployDataCenter",
cfg.logger)
if ret != FAILED:
log_folder_path = log_obj.getLogFolderPath()
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/lib/utils.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/lib/utils.py b/tools/marvin/marvin/lib/utils.py
index 957807d..440ff77 100644
--- a/tools/marvin/marvin/lib/utils.py
+++ b/tools/marvin/marvin/lib/utils.py
@@ -30,7 +30,7 @@ import urlparse
import datetime
from platform import system
from marvin.cloudstackAPI import cloudstackAPIClient, listHosts
-from cloudstackException import GetDetailExceptionInfo
+from marvin.cloudstackException import GetDetailExceptionInfo
from marvin.sshClient import SshClient
from marvin.codes import (
SUCCESS,
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/marvinInit.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/marvinInit.py b/tools/marvin/marvin/marvinInit.py
index 5218d23..e61c8ec 100644
--- a/tools/marvin/marvin/marvinInit.py
+++ b/tools/marvin/marvin/marvinInit.py
@@ -15,18 +15,17 @@
# specific language governing permissions and limitations
# under the License.
'''
-@Desc: Initializes the marvin and does required prerequisites
+Initializes the marvin and does required prerequisites
for starting it.
1. Parses the configuration file passed to marvin and creates a
- parsed config
+ parsed config.
2. Initializes the logging required for marvin.All logs are
now made available under a single timestamped folder.
- 3. Deploys the Data Center based upon input
+ 3. Deploys the Data Center based upon input.
'''
-from marvin import configGenerator
-from marvin import cloudstackException
+from marvin.configGenerator import getSetupConfig
from marvin.marvinLog import MarvinLog
from marvin.deployDataCenter import DeployDataCenters
from marvin.cloudstackTestClient import CSTestClient
@@ -49,32 +48,30 @@ from marvin.codegenerator import CodeGenerator
class MarvinInit:
- def __init__(self, config_file, load_api_flag=None,
+ def __init__(self, config_file,
deploy_dc_flag=None,
- test_module_name=None,
+ test_mod_name="deploydc",
zone=None):
self.__configFile = config_file
self.__deployFlag = deploy_dc_flag
- self.__loadApiFlag = load_api_flag
self.__parsedConfig = None
self.__logFolderPath = None
self.__tcRunLogger = None
+ self.__testModName = test_mod_name
self.__testClient = None
self.__tcResultFile = None
- self.__testModuleName = test_module_name
self.__testDataFilePath = None
self.__zoneForTests = None
def __parseConfig(self):
'''
+ @Name: __parseConfig
@Desc : Parses the configuration file passed and assigns
the parsed configuration
+ @Output : SUCCESS or FAILED
'''
try:
- if self.__configFile is None:
- return FAILED
- self.__parsedConfig = configGenerator.\
- getSetupConfig(self.__configFile)
+ self.__parsedConfig = getSetupConfig(self.__configFile)
return SUCCESS
except Exception, e:
print "\nException Occurred Under __parseConfig : " \
@@ -93,7 +90,13 @@ class MarvinInit:
def getLogger(self):
return self.__tcRunLogger
- def getDebugFile(self):
+ def getResultFile(self):
+ '''
+ @Name : getDebugFile
+ @Desc : Creates the result file at a given path.
+ @Output : Returns the Result file to be used for writing
+ test outputs
+ '''
if self.__logFolderPath is not None:
self.__tcResultFile = open(self.__logFolderPath +
"/results.txt", "w")
@@ -108,14 +111,14 @@ class MarvinInit:
2. Creates a timestamped log folder and provides all logs
to be dumped there
3. Creates the DataCenter based upon configuration provided
+ @Output : SUCCESS or FAILED
'''
try:
if ((self.__parseConfig() != FAILED) and
(self.__setTestDataPath() != FAILED) and
(self.__initLogging() != FAILED) and
(self.__createTestClient() != FAILED) and
- (self.__deployDC() != FAILED) and
- (self.__loadNewApiFromXml() != FAILED)):
+ (self.__deployDC() != FAILED)):
return SUCCESS
else:
return FAILED
@@ -125,9 +128,9 @@ class MarvinInit:
return FAILED
def __initLogging(self):
- try:
- '''
- @Desc : 1. Initializes the logging for marvin and so provides
+ '''
+ @Name : __initLogging
+ @Desc : 1. Initializes the logging for marvin and so provides
various log features for automation run.
2. Initializes all logs to be available under
given Folder Path,where all test run logs
@@ -135,18 +138,19 @@ class MarvinInit:
3. All logging like exception log,results, run info etc
for a given test run are available under a given
timestamped folder
- '''
+ @Output : SUCCESS or FAILED
+ '''
+ try:
log_obj = MarvinLog("CSLog")
- if log_obj is None:
- return FAILED
- else:
+ if log_obj:
ret = log_obj.\
- getLogs(self.__testModuleName,
+ createLogs(self.__testModName,
self.__parsedConfig.logger)
if ret != FAILED:
self.__logFolderPath = log_obj.getLogFolderPath()
self.__tcRunLogger = log_obj.getLogger()
- return SUCCESS
+ return SUCCESS
+ return FAILED
except Exception, e:
print "\n Exception Occurred Under __initLogging " \
":%s" % GetDetailExceptionInfo(e)
@@ -157,6 +161,7 @@ class MarvinInit:
@Name : __createTestClient
@Desc : Creates the TestClient during init
based upon the parameters provided
+ @Output: Returns SUCCESS or FAILED
'''
try:
mgt_details = self.__parsedConfig.mgtSvr[0]
@@ -166,7 +171,7 @@ class MarvinInit:
test_data_filepath=
self.__testDataFilePath,
zone=self.__zoneForTests)
- if self.__testClient is not None:
+ if self.__testClient:
return self.__testClient.createTestClient()
else:
return FAILED
@@ -175,37 +180,12 @@ class MarvinInit:
GetDetailExceptionInfo(e)
return FAILED
- def __loadNewApiFromXml(self):
- try:
- if self.__loadApiFlag:
- apiLoadCfg = self.__parsedConfig.apiLoadCfg
- api_dst_dir = apiLoadCfg.ParsedApiDestFolder + "/cloudstackAPI"
- api_spec_file = apiLoadCfg.ApiSpecFile
-
- if not os.path.exists(api_dst_dir):
- try:
- os.mkdir(api_dst_dir)
- except Exception, e:
- print "Failed to create folder %s, " \
- "due to %s" % (api_dst_dir,
- GetDetailExceptionInfo(e))
- exit(1)
- mgt_details = self.__parsedConfig.mgtSvr[0]
- cg = CodeGenerator(api_dst_dir)
- if os.path.exists(api_spec_file):
- cg.generateCodeFromXML(api_spec_file)
- elif mgt_details is not None:
- endpoint_url = 'http://%s:8096/client/api?' \
- 'command=listApis&response=json' \
- % mgt_details.mgtSvrIp
- cg.generateCodeFromJSON(endpoint_url)
- return SUCCESS
- except Exception, e:
- print "\n Exception Occurred Under __loadNewApiFromXml : %s" \
- % GetDetailExceptionInfo(e)
- return FAILED
-
def __setTestDataPath(self):
+ '''
+ @Name : __setTestDataPath
+ @Desc : Sets the TestData Path for tests to run
+ @Output:Returns SUCCESS or FAILED
+ '''
try:
if ((self.__parsedConfig.TestData is not None) and
(self.__parsedConfig.TestData.Path is not None)):
@@ -217,14 +197,23 @@ class MarvinInit:
return FAILED
def __deployDC(self):
+ '''
+ @Name : __deployDC
+ @Desc : Deploy the DataCenter and returns accordingly.
+ @Output: SUCCESS or FAILED
+ '''
try:
- '''
- Deploy the DataCenter and retrieves test client.
- '''
- deploy_obj = DeployDataCenters(self.__testClient,
+ ret = SUCCESS
+ if self.__deployFlag:
+ deploy_obj = DeployDataCenters(self.__testClient,
self.__parsedConfig,
self.__tcRunLogger)
- return deploy_obj.deploy() if self.__deployFlag else FAILED
+ ret = deploy_obj.deploy()
+ if ret == SUCCESS:
+ print "Deploy DC Successful"
+ else:
+ print "Deploy DC Failed"
+ return ret
except Exception, e:
print "\n Exception Occurred Under __deployDC : %s" % \
GetDetailExceptionInfo(e)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/marvinLog.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/marvinLog.py b/tools/marvin/marvin/marvinLog.py
index 4161eca..933a271 100644
--- a/tools/marvin/marvin/marvinLog.py
+++ b/tools/marvin/marvin/marvinLog.py
@@ -65,9 +65,11 @@ class MarvinLog:
self.__logger = logging.getLogger(self.__loggerName)
self.__logger.setLevel(logging.DEBUG)
- def __setLogHandler(self, log_file_path, log_format=None,
+ def __setLogHandler(self, log_file_path,
+ log_format=None,
log_level=logging.DEBUG):
'''
+ @Name : __setLogHandler
@Desc: Adds the given Log handler to the current logger
@Input: log_file_path: Log File Path as where to store the logs
log_format : Format of log messages to be dumped
@@ -100,7 +102,8 @@ class MarvinLog:
@Input: logfolder_to_remove: Path of Log to remove
'''
try:
- os.rmdir(logfolder_to_remove)
+ if os.path.isdir(logfolder_to_remove):
+ os.rmdir(logfolder_to_remove)
except Exception, e:
print "\n Exception Occurred Under __cleanPreviousLogs :%s" % \
GetDetailExceptionInfo(e)
@@ -120,7 +123,9 @@ class MarvinLog:
'''
return self.__logFolderDir
- def createLogs(self, test_module_name=None, log_cfg=None):
+ def createLogs(self,
+ test_module_name=None,
+ log_cfg=None):
'''
@Name : createLogs
@Desc : Gets the Logger with file paths initialized and created
@@ -131,21 +136,15 @@ class MarvinLog:
@Output : SUCCESS\FAILED
'''
try:
- if log_cfg is None:
- print "\nInvalid Log Folder Configuration." \
- "Please Check Config File"
- return FAILED
- if test_module_name is None:
- temp_path = time.strftime("%b_%d_%Y_%H_%M_%S",
+ temp_ts = time.strftime("%b_%d_%Y_%H_%M_%S",
time.localtime())
+ if test_module_name is None:
+ temp_path = temp_ts
else:
- temp_path = str(test_module_name.split(".py")[0])
+ temp_path = str(test_module_name) + "__" + str(temp_ts)
- if (('LogFolderPath' in log_cfg.__dict__.keys()) and
+ if ((log_cfg is not None) and ('LogFolderPath' in log_cfg.__dict__.keys()) and
(log_cfg.__dict__.get('LogFolderPath') is not None)):
- self.__cleanPreviousLogs(log_cfg.
- __dict__.
- get('LogFolderPath') + "/MarvinLogs")
temp_dir = \
log_cfg.__dict__.get('LogFolderPath') + "/MarvinLogs"
else:
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/marvinPlugin.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/marvinPlugin.py b/tools/marvin/marvin/marvinPlugin.py
index f36bca8..f69366b 100644
--- a/tools/marvin/marvin/marvinPlugin.py
+++ b/tools/marvin/marvin/marvinPlugin.py
@@ -14,10 +14,11 @@
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
-
import marvin
import sys
import logging
+import time
+import os
import nose.core
from marvin.cloudstackTestCase import cloudstackTestCase
from marvin.marvinInit import MarvinInit
@@ -25,9 +26,7 @@ from nose.plugins.base import Plugin
from marvin.codes import (SUCCESS,
FAILED,
EXCEPTION)
-from marvin.cloudstackException import GetDetailExceptionInfo
-import time
-import os
+from marvin.cloudstackException import GetDetailExceptionInfo
class MarvinPlugin(Plugin):
@@ -38,32 +37,28 @@ class MarvinPlugin(Plugin):
name = "marvin"
def __init__(self):
- self.identifier = None
- self.testClient = None
- self.parsedConfig = None
+ self.__identifier = None
+ self.__testClient = None
+ self.__parsedConfig = None
'''
Contains Config File
'''
self.__configFile = None
'''
- Signifies the flag whether to load new API Information
- '''
- self.__loadNewApiFlag = None
- '''
Signifies the Zone against which all tests will be Run
'''
self.__zoneForTests = None
'''
Signifies the flag whether to deploy the New DC or Not
'''
- self.__deployDcFlag
+ self.__deployDcFlag = None
self.conf = None
- self.debugStream = sys.stdout
- self.testRunner = None
- self.testResult = SUCCESS
- self.startTime = None
- self.testName = None
- self.tcRunLogger = None
+ self.__debugStream = sys.stdout
+ self.__testRunner = None
+ self.__testResult = SUCCESS
+ self.__startTime = None
+ self.__testName = None
+ self.__tcRunLogger = None
Plugin.__init__(self)
def configure(self, options, conf):
@@ -78,12 +73,11 @@ class MarvinPlugin(Plugin):
return
else:
self.enabled = True
-
- self.__configFile = options.config_file
- self.__loadNewApiFlag = options.loadNewApiFlag
+ self.__configFile = options.configFile
self.__deployDcFlag = options.deployDc
self.__zoneForTests = options.zone
self.conf = conf
+ self.startMarvin()
def options(self, parser, env):
"""
@@ -92,32 +86,20 @@ class MarvinPlugin(Plugin):
parser.add_option("--marvin-config", action="store",
default=env.get('MARVIN_CONFIG',
'./datacenter.cfg'),
- dest="config_file",
+ dest="configFile",
help="Marvin's configuration file is required."
"The config file containing the datacenter and "
"other management server "
"information is specified")
- parser.add_option("--deploy-dc", action="store_true",
+ parser.add_option("--deploy", action="store_true",
default=False,
dest="deployDc",
help="Deploys the DC with Given Configuration."
"Requires only when DC needs to be deployed")
- parser.add_option("--zone", action="zone_tests",
+ parser.add_option("--zone", action="store_true",
default=None,
dest="zone",
help="Runs all tests against this specified zone")
- parser.add_option("--load-new-apis", action="store_true",
- default=False,
- dest="loadNewApiFlag",
- help="Loads the New Apis with Given Api Xml File."
- "Creates the new Api's from commands.xml File")
- '''
- Check if the configuration file is not valid,print and exit
- '''
- (options, args) = parser.parse_args()
- if options.config_file is None:
- parser.print_usage()
- sys.exit(1)
Plugin.options(self, parser, env)
def wantClass(self, cls):
@@ -127,17 +109,9 @@ class MarvinPlugin(Plugin):
return True
return None
- def prepareTest(self, test):
- '''
- @Desc : Initializes the marvin with required settings
- '''
- test_module_name = test.__str__()
- if self.startMarvin(test_module_name) == FAILED:
- print "Starting Marvin FAILED. Please Check Config and " \
- "Arguments Supplied"
-
def __checkImport(self, filename):
'''
+ @Name : __checkImport
@Desc : Verifies to Import the test Module before running and check
whether if it is importable.
This will check for test modules which has some issues to be
@@ -145,94 +119,125 @@ class MarvinPlugin(Plugin):
Returns False or True based upon the result.
'''
try:
- __import__(filename)
- return True
+ if os.path.isfile(filename):
+ ret = os.path.splitext(filename)
+ if ret[1] == ".py":
+ os.system("python "+ filename)
+ return True
+ return False
except ImportError, e:
- self.tcRunLogger.exception("Module : %s Import "
- "Failed Reason :%s"
- % (filename, GetDetailExceptionInfo(e)))
+ print "FileName :%s : Error : %s"%(filename,GetDetailExceptionInfo(e))
return False
def wantFile(self, filename):
'''
@Desc : Only python files will be used as test modules
'''
- if filename is None or filename == '':
- return False
- parts = filename.split(os.path.sep)
- base, ext = os.path.splitext(parts[-1])
- if ext != '.py':
- return False
- else:
- return self.__checkImport(filename)
+ return self.__checkImport(filename)
def loadTestsFromTestCase(self, cls):
if cls.__name__ != 'cloudstackTestCase':
- self.identifier = cls.__name__
+ self.__identifier = cls.__name__
self._injectClients(cls)
def beforeTest(self, test):
- self.testName = test.__str__().split()[0]
- self.testClient.identifier = '-'.join([self.identifier, self.testName])
- self.tcRunLogger.name = test.__str__()
-
- def prepareTestRunner(self, runner):
- return self.testRunner
+ self.__testName = test.__str__().split()[0]
+ self.__testClient.identifier = '-'.join([self.__identifier, self.__testName])
+ if self.__tcRunLogger:
+ self.__tcRunLogger.name = test.__str__()
def startTest(self, test):
"""
Currently used to record start time for tests
Dump Start Msg of TestCase to Log
"""
- self.tcRunLogger.debug("\n\n::::::::::::STARTED : TC: " +
- str(self.testName) + " :::::::::::")
- self.startTime = time.time()
+ if self.__tcRunLogger:
+ self.__tcRunLogger.debug("\n\n::::::::::::STARTED : TC: " +
+ str(self.__testName) + " :::::::::::")
+ self.__startTime = time.time()
def handleError(self, test, err):
'''
Adds Exception throwing test cases and information to log.
'''
- err_msg = GetDetailExceptionInfo(err)
- self.tcRunLogger.fatal("%s: %s: %s" %
- (EXCEPTION, self.testName, err_msg))
- self.testResult = EXCEPTION
+ if self.__tcRunLogger:
+ self.__tcRunLogger.fatal("%s: %s: %s" %
+ (EXCEPTION, self.__testName, GetDetailExceptionInfo(err)))
+ self.__testResult = EXCEPTION
def handleFailure(self, test, err):
'''
Adds Failing test cases and information to log.
'''
- err_msg = GetDetailExceptionInfo(err)
- self.tcRunLogger.fatal("%s: %s: %s" %
- (FAILED, self.testName, err_msg))
- self.testResult = FAILED
+ if self.__tcRunLogger:
+ self.__tcRunLogger.fatal("%s: %s: %s" %
+ (FAILED, self.__testName, GetDetailExceptionInfo(err)))
+ self.__testResult = FAILED
+
+ def __getModName(self,inp, type='file'):
+ '''
+ @Desc : Returns the module name from the path
+ @Output: trimmed down module name, used for logging
+ @Input: type:Whether the type is file or dir
+ inp:input element
+ '''
+ if type == 'file':
+ temp = os.path.splitext(inp)[0]
+ return os.path.split(temp)[-1]
+ if type == 'dir':
+ return os.path.split(inp)[-1]
+
+ def __runSuite(self, test_suite=None):
+ try:
+ if test_suite:
+ if self.wantFile(test_suite) == True:
+ test_mod_name = self.__getModName(test_suite)
+ temp_obj = MarvinInit(self.__configFile,
+ None,
+ test_mod_name,
+ self.__zoneForTests)
+ if temp_obj and temp_obj.init() == SUCCESS:
+ self.__testClient = temp_obj.getTestClient()
+ self.__tcRunLogger = temp_obj.getLogger()
+ self.__parsedConfig = temp_obj.getParsedConfig()
+ self.__debugStream = temp_obj.getResultFile()
+ self.__testRunner = nose.core.TextTestRunner(stream=self.__debugStream,
+ descriptions=True,
+ verbosity=2)
+ #if self.__testRunner:
+ # self.__testRunner.run(test_suite)
+ return SUCCESS
+ except Exception,e:
+ print "\n Exception Occurred when running suite :%s Error : %s" % (test_suite, GetDetailExceptionInfo(e))
+ return FAILED
+
+ def __runSuites(self, suites):
+ for suite in suites:
+ self.__runSuite(suite)
- def startMarvin(self, test_module_name):
+ def startMarvin(self):
'''
- Initializes the Marvin
- creates the test Client
- creates the runlogger for logging
- Parses the config and creates a parsedconfig
- Creates a debugstream for tc debug log
+ @Name : startMarvin
+ @Desc : Initializes the Marvin
+ creates the test Client
+ creates the runlogger for logging
+ Parses the config and creates a parsedconfig
+ Creates a debugstream for tc debug log
'''
try:
obj_marvininit = MarvinInit(self.__configFile,
- self.__loadNewApiFlag,
self.__deployDcFlag,
- test_module_name,
- self.__zoneForoTests)
- if obj_marvininit.init() == SUCCESS:
- self.testClient = obj_marvininit.getTestClient()
- self.tcRunLogger = obj_marvininit.getLogger()
- self.parsedConfig = obj_marvininit.getParsedConfig()
- self.debugStream = obj_marvininit.getDebugFile()
- self.testRunner = nose.core.TextTestRunner(stream=
- self.debugStream,
- descriptions=True,
- verbosity=2,
- config=self.conf)
+ self.__zoneForTests)
+ if obj_marvininit and obj_marvininit.init() == SUCCESS:
+ print "\nMarvin Initialization Successful"
+ for suites in self.conf.testNames:
+ if os.path.isdir(suites):
+ self.__runSuites(suites)
+ if os.path.isfile(suites):
+ self.__runSuite(suites)
return SUCCESS
- else:
- return FAILED
+ print "\nMarvin Initialization Failed"
+ return FAILED
except Exception, e:
print "Exception Occurred under startMarvin: %s" % \
GetDetailExceptionInfo(e)
@@ -243,28 +248,29 @@ class MarvinPlugin(Plugin):
Currently used to record end time for tests
"""
endTime = time.time()
- if self.startTime is not None:
- totTime = int(endTime - self.startTime)
- self.tcRunLogger.debug("TestCaseName: %s; Time Taken: "
+ if self.__startTime:
+ totTime = int(endTime - self.__startTime)
+ if self.__tcRunLogger:
+ self.__tcRunLogger.debug("TestCaseName: %s; Time Taken: "
"%s Seconds; "
"StartTime: %s; EndTime: %s; Result: %s"
- % (self.testName, str(totTime),
- str(time.ctime(self.startTime)),
+ % (self.__testName, str(totTime),
+ str(time.ctime(self.__startTime)),
str(time.ctime(endTime)),
- self.testResult))
+ self.__testResult))
def _injectClients(self, test):
- setattr(test, "debug", self.tcRunLogger.debug)
- setattr(test, "info", self.tcRunLogger.info)
- setattr(test, "warn", self.tcRunLogger.warning)
- setattr(test, "error", self.tcRunLogger.error)
- setattr(test, "testClient", self.testClient)
- setattr(test, "config", self.parsedConfig)
- if self.testClient.identifier is None:
- self.testClient.identifier = self.identifier
- setattr(test, "clstestclient", self.testClient)
+ setattr(test, "debug", self.__tcRunLogger.debug)
+ setattr(test, "info", self.__tcRunLogger.info)
+ setattr(test, "warn", self.__tcRunLogger.warning)
+ setattr(test, "error", self.__tcRunLogger.error)
+ setattr(test, "testClient", self.__testClient)
+ setattr(test, "config", self.__parsedConfig)
+ if self.__testClient.identifier is None:
+ self.__testClient.identifier = self.__identifier
+ setattr(test, "clstestclient", self.__testClient)
if hasattr(test, "user"):
# when the class-level attr applied. all test runs as 'user'
- self.testClient.getUserApiClient(test.UserName,
+ self.__testClient.getUserApiClient(test.UserName,
test.DomainName,
test.AcctType)
http://git-wip-us.apache.org/repos/asf/cloudstack/blob/3493f17b/tools/marvin/marvin/sshClient.py
----------------------------------------------------------------------
diff --git a/tools/marvin/marvin/sshClient.py b/tools/marvin/marvin/sshClient.py
index 9b5bca2..c24477c 100644
--- a/tools/marvin/marvin/sshClient.py
+++ b/tools/marvin/marvin/sshClient.py
@@ -25,7 +25,7 @@ from paramiko import (BadHostKeyException,
SFTPClient)
import socket
import time
-from cloudstackException import (
+from marvin.cloudstackException import (
internalError,
GetDetailExceptionInfo
)