http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_escalations_templates.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_escalations_templates.py 
b/test/integration/component/test_escalations_templates.py
index b869bde..c497e71 100644
--- a/test/integration/component/test_escalations_templates.py
+++ b/test/integration/component/test_escalations_templates.py
@@ -111,7 +111,7 @@ class TestTemplates(cloudstackTestCase):
                                                                                
           ))
         return return_flag
 
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_01_list_templates_pagination(self):
         """
         @Desc: Test to List Templates pagination
@@ -267,7 +267,7 @@ class TestTemplates(cloudstackTestCase):
         del self.services["templateregister"]["ostype"]
         return
 
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_02_download_template(self):
         """
         @Desc: Test to Download Template
@@ -384,7 +384,7 @@ class TestTemplates(cloudstackTestCase):
         del self.services["templateregister"]["isextractable"]
         return
 
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_03_edit_template_details(self):
         """
         @Desc: Test to Edit Template name, displaytext, OSType
@@ -696,7 +696,7 @@ class TestTemplates(cloudstackTestCase):
         del self.services["templateregister"]["ostype"]
         return
 
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_04_copy_template(self):
         """
         @Desc: Test to copy Template from one zone to another

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_escalations_volumes.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_escalations_volumes.py 
b/test/integration/component/test_escalations_volumes.py
index 9442ebc..db4c3d8 100644
--- a/test/integration/component/test_escalations_volumes.py
+++ b/test/integration/component/test_escalations_volumes.py
@@ -141,7 +141,7 @@ class TestVolumes(cloudstackTestCase):
                                                                                
           ))
         return return_flag
 
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_01_list_volumes_pagination(self):
         """  
         @summary: Test List Volumes pagination
@@ -268,7 +268,7 @@ class TestVolumes(cloudstackTestCase):
                     )
         return
 
-    @attr(tags=["advanced", "basic", "provisioning"]) 
+    @attr(tags=["advanced", "basic"], required_hardware="true") 
     def test_02_list_volume_byid(self):
         """       
         @summary: Test List Volumes with Id
@@ -431,7 +431,7 @@ class TestVolumes(cloudstackTestCase):
                          )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_03_data_volume_resize(self):
         """  
         @summary: Test to verify creation and resize of data volume
@@ -545,7 +545,7 @@ class TestVolumes(cloudstackTestCase):
                           )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_04_custom_volume_resize(self):
         """  
         @summary: Test to verify creation and resize of custom volume
@@ -664,7 +664,7 @@ class TestVolumes(cloudstackTestCase):
                           )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_05_volume_snapshot(self):
         """  
         @summary: Test to verify creation of snapshot from volume and creation 
of template, volume from snapshot
@@ -874,7 +874,7 @@ class TestVolumes(cloudstackTestCase):
                           )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_06_volume_snapshot_policy_hourly(self):
         """  
         @summary: Test to verify creation of Hourly Snapshot policies from 
volume
@@ -998,7 +998,7 @@ class TestVolumes(cloudstackTestCase):
                           )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_07_volume_snapshot_policy_daily(self):
         """  
         @summary: Test to verify creation of Daily Snapshot policies from 
volume
@@ -1121,7 +1121,7 @@ class TestVolumes(cloudstackTestCase):
                           )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_08_volume_snapshot_policy_weekly(self):
         """  
         @summary: Test to verify creation of Weekly Snapshot policies from 
volume
@@ -1244,7 +1244,7 @@ class TestVolumes(cloudstackTestCase):
                           )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_09_volume_snapshot_policy_monthly(self):
         """  
         @summary: Test to verify creation of Monthly Snapshot policies from 
volume
@@ -1375,7 +1375,7 @@ class TestVolumes(cloudstackTestCase):
                           )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_10_volume_snapshots_pagination(self):
         """  
         @summary: Test to verify pagination of snapshots for Volume
@@ -1551,7 +1551,7 @@ class TestVolumes(cloudstackTestCase):
                          )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_11_volume_extract(self):
         """  
         @summary: Test to verify extract/download a Volume
@@ -1659,7 +1659,7 @@ class TestVolumes(cloudstackTestCase):
                           )
         return
  
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_12_volume_upload(self):
         """  
         @summary: Test to verify upload volume

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_escalations_vpncustomergateways.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_escalations_vpncustomergateways.py 
b/test/integration/component/test_escalations_vpncustomergateways.py
index 091a7c1..b09930a 100644
--- a/test/integration/component/test_escalations_vpncustomergateways.py
+++ b/test/integration/component/test_escalations_vpncustomergateways.py
@@ -134,7 +134,7 @@ class TestVpnCustomerGateways(cloudstackTestCase):
                                                                                
           ))
         return return_flag
 
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_01_list_vpncustomergateways_pagination(self):
         """
         @Desc: Test to List VPN Customer Gateways pagination
@@ -255,7 +255,7 @@ class TestVpnCustomerGateways(cloudstackTestCase):
                           )
         return
 
-    @attr(tags=["advanced", "basic", "provisioning"])
+    @attr(tags=["advanced", "basic"], required_hardware="true")
     def test_02_update_vpncustomergateways(self):
         """
         @Desc: Test to update VPN Customer Gateways pagination

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_explicit_dedication.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_explicit_dedication.py 
b/test/integration/component/test_explicit_dedication.py
index 4ce5c15..71c4141 100644
--- a/test/integration/component/test_explicit_dedication.py
+++ b/test/integration/component/test_explicit_dedication.py
@@ -153,7 +153,7 @@ class TestExplicitDedication(cloudstackTestCase):
     # This test requires multi host and at least one host which is empty (no 
vms should
     # be running on that host). It explicitly dedicates empty host to an 
account, deploys
     # a vm for that account and verifies that the vm gets deployed to the 
dedicated host.
-    @attr(tags=["advanced", "basic", "multihosts", "explicitdedication", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "multihosts", "explicitdedication"], 
required_hardware="false")
     def test_01_deploy_vm_with_explicit_dedication(self):
         """Test explicit dedication is placing vms of an account on dedicated 
hosts.
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_haproxy.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_haproxy.py 
b/test/integration/component/test_haproxy.py
index e3b45b5..2778902 100644
--- a/test/integration/component/test_haproxy.py
+++ b/test/integration/component/test_haproxy.py
@@ -695,7 +695,7 @@ class TestHAProxyStickyness(cloudstackTestCase):
                                                      listall=True)
         return
 
-    @attr(tags=["advanced", "advancedns", "provisioning"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="true")
     def test_07_delete_account(self):
         """Test Delete account  and check the router and its rules"""
 
@@ -736,7 +736,7 @@ class TestHAProxyStickyness(cloudstackTestCase):
                                        listall=True)
         return
 
-    @attr(tags=["advanced", "advancedns", "provisioning"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="true")
     def test_08_create_policy_router_stopped(self):
         """Test verify create stickiness policy when router is stopped state"""
 
@@ -769,7 +769,7 @@ class TestHAProxyStickyness(cloudstackTestCase):
         self.validate_Stickiness_Policy(lb_rule, "LbCookie", 
self.public_ip.ipaddress.ipaddress)
         return
 
-    @attr(tags=["advanced", "advancedns", "provisioning"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="true")
     def test_09_create_policy_router_destroy(self):
         """Test check the stickiness policy rules after destroying router"""
 
@@ -800,7 +800,7 @@ class TestHAProxyStickyness(cloudstackTestCase):
 
         return
 
-    @attr(tags=["advanced", "advancedns", "provisioning"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="true")
     def test_10_create_policy_enable_disable_vpn(self):
         """Test enable/disable the VPN after applying sticky policy rules"""
 
@@ -831,7 +831,7 @@ class TestHAProxyStickyness(cloudstackTestCase):
         self.validate_Stickiness_Policy(lb_rule, "LbCookie", 
self.public_ip.ipaddress.ipaddress)
         return
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_11_invalid_params(self):
         """Test verfify functionality syncronous and asyncronous validations"""
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_implicit_planner.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_implicit_planner.py 
b/test/integration/component/test_implicit_planner.py
index 9cbd73c..b538a3d 100644
--- a/test/integration/component/test_implicit_planner.py
+++ b/test/integration/component/test_implicit_planner.py
@@ -145,7 +145,7 @@ class TestImplicitPlanner(cloudstackTestCase):
     # be running on that host). It uses an implicit planner to deploy 
instances and the
     # instances of a new account should go to an host that doesn't have vms of 
any other
     # account.
-    @attr(tags=["advanced", "basic", "multihosts", "implicitplanner", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "multihosts", "implicitplanner"], 
required_hardware="false")
     def test_01_deploy_vm_with_implicit_planner(self):
         """Test implicit planner is placing vms of an account on implicitly 
dedicated hosts.
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_ip_reservation.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_ip_reservation.py 
b/test/integration/component/test_ip_reservation.py
index 157b7dd..37b783f 100644
--- a/test/integration/component/test_ip_reservation.py
+++ b/test/integration/component/test_ip_reservation.py
@@ -1062,7 +1062,7 @@ class TestFailureScnarios(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_network_not_implemented(self):
         # steps
         # 1. update guestvmcidr of isolated network (non persistent)
@@ -1081,7 +1081,7 @@ class TestFailureScnarios(cloudstackTestCase):
             isolated_network.update(self.apiclient, guestvmcidr="10.1.1.0/26")
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_vm_create_after_reservation(self):
         # steps
         # 1. create vm in persistent isolated network with ip in guestvmcidr
@@ -1140,7 +1140,7 @@ class TestFailureScnarios(cloudstackTestCase):
             self.skipTest("VM creation fails, cannot validate the condition: 
%s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_reservation_after_router_restart(self):
         # steps
         # 1. update guestvmcidr of persistent isolated network
@@ -1193,7 +1193,7 @@ class TestFailureScnarios(cloudstackTestCase):
         self.assertEqual(networks[0].cidr, guest_vm_cidr, "guestvmcidr should 
match after router reboot")
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_vm_create_outside_cidr_after_reservation(self):
         # steps
         # 1. update guestvmcidr of persistent isolated network

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_ldap.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_ldap.py 
b/test/integration/component/test_ldap.py
index 5dd9692..647e5b5 100644
--- a/test/integration/component/test_ldap.py
+++ b/test/integration/component/test_ldap.py
@@ -128,7 +128,7 @@ class TestLdap(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "selfservice"])
+    @attr(tags=["advanced", "basic"], required_hardware="false")
     def test_01_addLdapConfiguration(self):
         """
         This test configures LDAP and attempts to authenticate as a user.

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_memory_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_memory_limits.py 
b/test/integration/component/test_memory_limits.py
index 5dd3ba0..33236a7 100644
--- a/test/integration/component/test_memory_limits.py
+++ b/test/integration/component/test_memory_limits.py
@@ -177,7 +177,7 @@ class TestMemoryLimits(cloudstackTestCase):
         except Exception as e:
             self.fail("Failed to deploy an instance: %s" % e)
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_01_stop_start_instance(self):
         """Test Deploy VM with specified RAM & verify the usage"""
 
@@ -229,7 +229,7 @@ class TestMemoryLimits(cloudstackTestCase):
                          "Resource count should be same after stopping the 
instance")
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "provisioning"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="true")
     def test_02_migrate_instance(self):
         """Test Deploy VM with specified RAM & verify the usage"""
 
@@ -270,7 +270,7 @@ class TestMemoryLimits(cloudstackTestCase):
                          "Resource count should be same after stopping the 
instance")
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_03_delete_instance(self):
         """Test Deploy VM with specified GB RAM & verify the usage"""
 
@@ -309,7 +309,7 @@ class TestMemoryLimits(cloudstackTestCase):
         self.assertEqual(resource_count_after_delete, 0 , "Resource count for 
%s should be 0" % get_resource_type(resource_id=9))#RAM
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_04_deploy_multiple_vm(self):
         """Test Deploy multiple VM with specified RAM & verify the usage"""
 
@@ -481,7 +481,7 @@ class 
TestDomainMemoryLimitsConfiguration(cloudstackTestCase):
 
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_01_stop_start_instance(self):
         """Test Deploy VM with 5 GB memory & verify the usage"""
 
@@ -553,7 +553,7 @@ class 
TestDomainMemoryLimitsConfiguration(cloudstackTestCase):
                          "Resource count should be same after starting the 
instance")
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "provisioning"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="true")
     def test_02_migrate_instance(self):
         """Test Deploy VM with specified memory & verify the usage"""
 
@@ -613,7 +613,7 @@ class 
TestDomainMemoryLimitsConfiguration(cloudstackTestCase):
                          "Resource count should be same after starting the 
instance")
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_03_delete_instance(self):
         """Test Deploy VM with specified RAM & verify the usage"""
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_mm_domain_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_mm_domain_limits.py 
b/test/integration/component/test_mm_domain_limits.py
index bc8c9ea..a6d64d5 100644
--- a/test/integration/component/test_mm_domain_limits.py
+++ b/test/integration/component/test_mm_domain_limits.py
@@ -210,7 +210,7 @@ class TestDomainMemoryLimits(cloudstackTestCase):
                               domainid=self.child_do_admin_2.domainid)
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_01_change_service_offering(self):
         """Test Deploy VM with specified RAM & verify the usage"""
 
@@ -349,7 +349,7 @@ class TestDomainMemoryLimits(cloudstackTestCase):
 
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "provisioning"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="true")
     def test_02_migrate_vm(self):
         """Test Deploy VM with specified RAM & verify the usage"""
 
@@ -410,7 +410,7 @@ class TestDomainMemoryLimits(cloudstackTestCase):
                             "Resource count should be same after migrating the 
instance")
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_03_delete_vm(self):
         """Test Deploy VM with specified RAM & verify the usage"""
 
@@ -469,7 +469,7 @@ class TestDomainMemoryLimits(cloudstackTestCase):
             self.assertEqual(resource_count_after_delete, 0 , "Resource count 
for %s should be 0" % get_resource_type(resource_id=9))#RAM
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_04_deploy_multiple_vm(self):
         """Test Deploy multiple VM with specified RAM & verify the usage"""
 
@@ -684,7 +684,7 @@ class TestMultipleChildDomainsMemory(cloudstackTestCase):
                  }
         return users
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_01_multiple_child_domains(self):
         """Test memory limits with multiple child domains"""
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_mm_max_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_mm_max_limits.py 
b/test/integration/component/test_mm_max_limits.py
index 34d4147..e08052b 100644
--- a/test/integration/component/test_mm_max_limits.py
+++ b/test/integration/component/test_mm_max_limits.py
@@ -240,7 +240,7 @@ class TestMaxMemoryLimits(cloudstackTestCase):
                     (responses.domain, responses.domainid, responses.max))
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_01_deploy_vm_domain_limit_reached(self):
         """Test Try to deploy VM with admin account where account has not used
            the resources but @ domain they are not available"""
@@ -267,7 +267,7 @@ class TestMaxMemoryLimits(cloudstackTestCase):
                               service_off=self.service_offering, 
api_client=api_client)
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_02_deploy_vm_account_limit_reached(self):
         """Test Try to deploy VM with admin account where account has used
            the resources but @ domain they are available"""
@@ -297,7 +297,7 @@ class TestMaxMemoryLimits(cloudstackTestCase):
                               service_off=self.service_offering, 
api_client=api_client)
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_03_deploy_vm_project_limit_reached(self):
         """Test TTry to deploy VM with admin account where account has not used
         the resources but @ project they are not available"""
@@ -321,7 +321,7 @@ class TestMaxMemoryLimits(cloudstackTestCase):
                             service_off=self.service_offering, 
api_client=api_client)
         return
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_04_deployVm__account_limit_reached(self):
         """Test Try to deploy VM with admin account where account has used
            the resources but @ project they are available"""

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_mm_project_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_mm_project_limits.py 
b/test/integration/component/test_mm_project_limits.py
index 593b2b6..9f0ecfe 100644
--- a/test/integration/component/test_mm_project_limits.py
+++ b/test/integration/component/test_mm_project_limits.py
@@ -217,7 +217,7 @@ class TestProjectsMemoryLimits(cloudstackTestCase):
                         "Check project name from list response")
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_01_project_vmlifecycle_start_stop_instance(self):
 
         # Validate the following
@@ -274,7 +274,7 @@ class TestProjectsMemoryLimits(cloudstackTestCase):
                          "Resource count should be same after starting the 
instance")
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "provisioning"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="true")
     def test_02_project_vmlifecycle_migrate_instance(self):
 
         # Validate the following
@@ -315,7 +315,7 @@ class TestProjectsMemoryLimits(cloudstackTestCase):
                          "Resource count should be same after migrating the 
instance")
         return
 
-    @attr(tags=["advanced", "advancedns","simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns","simulator"], 
required_hardware="false")
     def test_03_project_vmlifecycle_delete_instance(self):
 
         # Validate the following

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_netscaler_configs.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_netscaler_configs.py 
b/test/integration/component/test_netscaler_configs.py
index 6d85609..b94e42d 100644
--- a/test/integration/component/test_netscaler_configs.py
+++ b/test/integration/component/test_netscaler_configs.py
@@ -204,7 +204,7 @@ class TestAddNetScaler(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advancedns", "provisioning"])
+    @attr(tags=["advancedns"], required_hardware="true")
     def test_add_netscaler_device(self):
         """Test add netscaler device
         """
@@ -329,7 +329,7 @@ class TestInvalidParametersNetscaler(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advancedns", "provisioning"])
+    @attr(tags=["advancedns"], required_hardware="true")
     def test_invalid_cred(self):
         """Test add netscaler device with invalid credential
         """
@@ -398,7 +398,7 @@ class TestInvalidParametersNetscaler(cloudstackTestCase):
                                   )
         return
 
-    @attr(tags=["advancedns", "provisioning"])
+    @attr(tags=["advancedns"], required_hardware="true")
     def test_invalid_public_interface(self):
         """Test add netscaler device with invalid public interface
         """
@@ -465,7 +465,7 @@ class TestInvalidParametersNetscaler(cloudstackTestCase):
                                   )
         return
 
-    @attr(tags=["advancedns", "provisioning"])
+    @attr(tags=["advancedns"], required_hardware="true")
     def test_invalid_private_interface(self):
         """Test add netscaler device with invalid private interface
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_netscaler_nw_off.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_netscaler_nw_off.py 
b/test/integration/component/test_netscaler_nw_off.py
index af53eb7..301c866 100644
--- a/test/integration/component/test_netscaler_nw_off.py
+++ b/test/integration/component/test_netscaler_nw_off.py
@@ -243,7 +243,7 @@ class TestAddMultipleNetScaler(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advancedns", "provisioning"])
+    @attr(tags=["advancedns"], required_hardware="true")
     def test_add_netscaler_device(self):
         """Test add netscaler device
         """
@@ -401,7 +401,7 @@ class TestAddMultipleNSDiffZone(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advancedns", "multizone", "provisioning"])
+    @attr(tags=["advancedns", "multizone"], required_hardware="true")
     def test_add_mul_netscaler_diff_zone(self):
         """Test add netscaler devices in different zones
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_network_offering.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_network_offering.py 
b/test/integration/component/test_network_offering.py
index 9a7c786..9d35721 100644
--- a/test/integration/component/test_network_offering.py
+++ b/test/integration/component/test_network_offering.py
@@ -238,7 +238,7 @@ class TestNOVirtualRouter(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_01_network_off_without_conserve_mode(self):
         """Test Network offering with Conserve mode off and VR - All services
         """
@@ -483,7 +483,7 @@ class TestNOVirtualRouter(cloudstackTestCase):
                             )
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_02_network_off_with_conserve_mode(self):
         """Test Network offering with Conserve mode ON and VR - All services
         """
@@ -750,7 +750,7 @@ class TestNOVirtualRouter(cloudstackTestCase):
                             )
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_03_network_off_CS5332(self):
         """
         @Desc: Test Network offering with Custom system offering for VR
@@ -864,7 +864,7 @@ class TestNOVirtualRouter(cloudstackTestCase):
         self.debug("Deployed VM in network: %s" % self.network.id)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_04_network_without_domain_CS19303(self):
         """
         @Desc: Errors editing a network without a network domain specified
@@ -983,7 +983,7 @@ class TestNetworkUpgrade(cloudstackTestCase):
         return
 
     @attr(speed = "slow")
-    @attr(tags=["advancedns", "provisioning"])
+    @attr(tags=["advancedns"], required_hardware="true")
     def test_01_nwupgrade_netscaler_conserve_on(self):
         """Test Nw upgrade to netscaler lb service and conserve mode ON
         """
@@ -1183,7 +1183,7 @@ class TestNetworkUpgrade(cloudstackTestCase):
         return
 
     @attr(speed = "slow")
-    @attr(tags=["advancedns", "provisioning"])
+    @attr(tags=["advancedns"], required_hardware="true")
     def test_02_nwupgrade_netscaler_conserve_off(self):
         """Test Nw upgrade to netscaler lb service and conserve mode OFF
         """
@@ -1402,7 +1402,7 @@ class TestNOWithOnlySourceNAT(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_create_network_with_snat(self):
         """Test to create a network with SourceNAT service only"""
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_persistent_networks.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_persistent_networks.py 
b/test/integration/component/test_persistent_networks.py
index 971edce..02f6229 100644
--- a/test/integration/component/test_persistent_networks.py
+++ b/test/integration/component/test_persistent_networks.py
@@ -196,7 +196,7 @@ class TestPersistentNetworks(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_network_state_after_destroying_vms(self):
         # steps
         # 1. Create an isolated persistent network
@@ -247,7 +247,7 @@ class TestPersistentNetworks(cloudstackTestCase):
                 self.fail(exceptionMessage)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_shared_network_offering_with_persistent(self):
         # steps
         # 1. create shared network offering with persistent field enabled

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_portable_ip.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_portable_ip.py 
b/test/integration/component/test_portable_ip.py
index 73aa7c0..cf0cb3b 100644
--- a/test/integration/component/test_portable_ip.py
+++ b/test/integration/component/test_portable_ip.py
@@ -194,7 +194,7 @@ class TestCreatePortablePublicIpRanges(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_create_portable_ip_range(self):
         """Test create new portable ip range
         """
@@ -217,7 +217,7 @@ class TestCreatePortablePublicIpRanges(cloudstackTestCase):
             self.fail("Failed to create portable IP range: %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_create_portable_ip_range_non_root_admin(self):
         """Test create new portable ip range with non admin root account
         """
@@ -254,7 +254,7 @@ class TestCreatePortablePublicIpRanges(cloudstackTestCase):
 
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_create_portable_ip_range_invalid_region(self):
         """Test create portable ip range with invalid region id"""
 
@@ -337,7 +337,7 @@ class TestDeletePortablePublicIpRanges(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_delete_portable_ip_range(self):
         """Test delete ip range
         """
@@ -347,7 +347,7 @@ class TestDeletePortablePublicIpRanges(cloudstackTestCase):
         self.portable_ip_range.delete(self.apiclient)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_delete_portable_ip_range_non_root_admin(self):
         """Test delete ip range - non admin root
         """
@@ -379,7 +379,7 @@ class TestDeletePortablePublicIpRanges(cloudstackTestCase):
             self.portable_ip_range.delete(self.apiclient)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_delete_portable_ip_range_in_use(self):
         """Test delete ip range
         """
@@ -505,7 +505,7 @@ class TestListPortablePublicIpRanges(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_list_portable_ip_range(self):
         """Test list portable ip ranges
         """
@@ -537,7 +537,7 @@ class TestListPortablePublicIpRanges(cloudstackTestCase):
                          "Listed netmask not matching with the netmask of 
created public ip range")
         return
 
-    @attr(tags=["advanced","swamy", "selfservice"])
+    @attr(tags=["advanced","swamy"], required_hardware="false")
     def test_list_portable_ip_range_non_root_admin(self):
         """Test list portable ip ranges with non admin root account
         """
@@ -658,7 +658,7 @@ class TestAssociatePublicIp(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_associate_ip_address(self):
         """ Test assocoate public ip address
         """
@@ -707,7 +707,7 @@ class TestAssociatePublicIp(cloudstackTestCase):
 
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_associate_ip_address_invalid_zone(self):
         """ Test Associate IP with invalid zone id
         """
@@ -729,7 +729,7 @@ class TestAssociatePublicIp(cloudstackTestCase):
             publicipaddress.delete(self.apiclient)
         return
 
-    @attr(tags=["advanced", "provisioning"])
+    @attr(tags=["advanced"], required_hardware="true")
     def test_associate_ip_address_services_enable_disable(self):
         """ Test enabling and disabling NAT, Firewall services on portable ip
         """
@@ -828,7 +828,7 @@ class TestAssociatePublicIp(cloudstackTestCase):
             portableip.delete(self.apiclient)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_associate_ip_address_no_free_ip(self):
         """ Test assocoate public ip address
         """
@@ -991,7 +991,7 @@ class TestDisassociatePublicIp(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_disassociate_ip_address_no_services(self):
         """ Test disassociating portable ip
         """
@@ -1014,7 +1014,7 @@ class TestDisassociatePublicIp(cloudstackTestCase):
             raise Exception("Exception occured: %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_disassociate_ip_address_services_enabled(self):
         """ Test disassociating portable ip
         """
@@ -1071,7 +1071,7 @@ class TestDisassociatePublicIp(cloudstackTestCase):
             raise Exception("Exception while disassociating portable ip: %s" % 
e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_disassociate_ip_address_other_account(self):
         """ Test disassociating portable IP with non-owner account
         """
@@ -1210,7 +1210,7 @@ class TestDeleteAccount(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_delete_account_services_disabled(self):
         """ test delete account with portable ip with no services enabled
         """
@@ -1232,7 +1232,7 @@ class TestDeleteAccount(cloudstackTestCase):
         self.assertEqual(list_publicips, None, "List of ip addresses should be 
empty")
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_delete_account_services_enabled(self):
         """ test delete account with portable ip with PF and firewall services 
enabled
         """
@@ -1443,7 +1443,7 @@ class 
TestPortableIpTransferAcrossNetworks(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced","swamy", "selfservice"])
+    @attr(tags=["advanced","swamy"], required_hardware="false")
     def test_list_portable_ip_range_non_root_admin(self):
         """Test list portable ip ranges with non admin root account
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_project_configs.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_project_configs.py 
b/test/integration/component/test_project_configs.py
index 4b777fe..1a560cc 100644
--- a/test/integration/component/test_project_configs.py
+++ b/test/integration/component/test_project_configs.py
@@ -173,7 +173,7 @@ class TestUserProjectCreation(cloudstackTestCase):
         return
 
     @attr(configuration = "allow.user.create.projects")
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_admin_project_creation(self):
         """Test create project as a domain admin and domain user
         """
@@ -477,7 +477,7 @@ class TestProjectInviteRequired(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns"], 
required_hardware="false")
     def test_add_user_to_project(self):
         """Add user to project when 'project.invite.required' is false"""
 
@@ -628,7 +628,7 @@ class TestProjectInviteRequiredTrue(cloudstackTestCase):
         return
 
     @attr(configuration = "project.invite.required")
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns"], 
required_hardware="false")
     def test_add_user_to_project(self):
         """Add user to project when 'project.invite.required' is true"""
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_project_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_project_limits.py 
b/test/integration/component/test_project_limits.py
index 7941313..5f33ad8 100644
--- a/test/integration/component/test_project_limits.py
+++ b/test/integration/component/test_project_limits.py
@@ -183,7 +183,7 @@ class TestProjectLimits(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_project_limits(self):
         """ Test project limits for domain admin
         """
@@ -350,7 +350,7 @@ class TestProjectLimits(cloudstackTestCase):
 
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_02_project_limits_normal_user(self):
         """ Test project limits for normal user
         """
@@ -575,7 +575,7 @@ class TestResourceLimitsProject(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_03_vm_per_project(self):
         """Test VM limit per project
         """
@@ -637,7 +637,7 @@ class TestResourceLimitsProject(cloudstackTestCase):
                                 )
         return
 
-    @attr(tags=["advanced", "eip", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_04_publicip_per_project(self):
         """Test Public IP limit per project
         """
@@ -722,7 +722,7 @@ class TestResourceLimitsProject(cloudstackTestCase):
                                            )
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_05_snapshots_per_project(self):
         """Test Snapshot limit per project
         """
@@ -798,7 +798,7 @@ class TestResourceLimitsProject(cloudstackTestCase):
                             )
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_06_volumes_per_project(self):
         """Test Volumes limit per project
         """
@@ -854,7 +854,7 @@ class TestResourceLimitsProject(cloudstackTestCase):
                         )
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns"], 
required_hardware="false")
     def test_07_templates_per_project(self):
         """Test Templates limit per project
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_project_resources.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_project_resources.py 
b/test/integration/component/test_project_resources.py
index e533ca3..e769860 100644
--- a/test/integration/component/test_project_resources.py
+++ b/test/integration/component/test_project_resources.py
@@ -225,7 +225,7 @@ class TestOfferings(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_service_offerings(self):
         """ Test service offerings in a project
         """
@@ -267,7 +267,7 @@ class TestOfferings(cloudstackTestCase):
 
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_02_project_disk_offerings(self):
         """ Test project disk offerings
         """
@@ -399,7 +399,7 @@ class TestNetwork(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_03_network_create(self):
         """ Test create network in project
         """
@@ -618,7 +618,7 @@ class TestTemplates(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns"], 
required_hardware="false")
     def test_04_public_template_use_in_project(self):
         """Test Templates creation in projects
         """
@@ -679,7 +679,7 @@ class TestTemplates(cloudstackTestCase):
             self.fail("Exception occured: %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns"], 
required_hardware="false")
     def test_05_use_private_template_in_project(self):
         """Test use of private template in a project
         """
@@ -843,7 +843,7 @@ class TestSnapshots(cloudstackTestCase):
         return
 
     @attr(speed = "slow")
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_06_create_snapshots_in_project(self):
         """Test create snapshots in project
         """
@@ -996,7 +996,7 @@ class TestPublicIpAddress(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_07_associate_public_ip(self):
         """Test associate public IP within the project
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_project_usage.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_project_usage.py 
b/test/integration/component/test_project_usage.py
index 512156d..3262e40 100644
--- a/test/integration/component/test_project_usage.py
+++ b/test/integration/component/test_project_usage.py
@@ -204,7 +204,7 @@ class TestVmUsage(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_vm_usage(self):
         """Test Create/Destroy VM and verify usage calculation
         """
@@ -420,7 +420,7 @@ class TestPublicIPUsage(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "eip", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_public_ip_usage(self):
         """Test Assign new IP and verify usage calculation
         """
@@ -578,7 +578,7 @@ class TestVolumeUsage(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_volume_usage(self):
         """Test Create/delete a volume and verify correct usage is recorded
         """
@@ -774,7 +774,7 @@ class TestTemplateUsage(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns"], 
required_hardware="false")
     def test_01_template_usage(self):
         """Test Upload/ delete a template and verify correct usage is generated
             for the template uploaded
@@ -929,7 +929,7 @@ class TestISOUsage(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns"], 
required_hardware="false")
     def test_01_ISO_usage(self):
         """Test Create/Delete a ISO and verify its usage is generated correctly
         """
@@ -1102,7 +1102,7 @@ class TestLBRuleUsage(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "eip", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_lb_usage(self):
         """Test Create/Delete a LB rule and verify correct usage is recorded
         """
@@ -1269,7 +1269,7 @@ class TestSnapshotUsage(cloudstackTestCase):
         return
 
     @attr(speed = "slow")
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_snapshot_usage(self):
         """Test Create/Delete a manual snap shot and verify
         correct usage is recorded
@@ -1459,7 +1459,7 @@ class TestNatRuleUsage(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_nat_usage(self):
         """Test Create/Delete a PF rule and verify correct usage is recorded
         """
@@ -1642,7 +1642,7 @@ class TestVpnUsage(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_vpn_usage(self):
         """Test Create/Delete a VPN and verify correct usage is recorded
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_projects.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_projects.py 
b/test/integration/component/test_projects.py
index 241dab8..cacb5a4 100644
--- a/test/integration/component/test_projects.py
+++ b/test/integration/component/test_projects.py
@@ -162,7 +162,7 @@ class TestMultipleProjectCreation(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_create_multiple_projects_by_account(self):
         """ Verify an account can own multiple projects and can belong to 
multiple projects
         """
@@ -379,7 +379,7 @@ class TestCrossDomainAccountAdd(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_02_cross_domain_account_add(self):
         """ Verify No cross domain projects
         """
@@ -496,7 +496,7 @@ class TestDeleteAccountWithProject(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_03_delete_account_with_project(self):
         """ Test As long as the project exists, its owner can't be removed
         """
@@ -609,7 +609,7 @@ class TestDeleteDomainWithProject(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_04_delete_domain_with_project(self):
         """ Test Verify delete domain with cleanup=true should delete projects
             belonging to the domain
@@ -751,7 +751,7 @@ class TestProjectOwners(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_05_user_project_owner_promotion(self):
         """ Test Verify a project user can be later promoted to become a
             owner
@@ -893,7 +893,7 @@ class TestProjectOwners(cloudstackTestCase):
                             )
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_06_max_one_project_owner(self):
         """ Test Verify there can only be one owner of a project at a time
         """
@@ -1180,7 +1180,7 @@ class TestProjectResources(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_07_project_resources_account_delete(self):
         """ Test Verify after an account is removed from the project, all its 
resources stay with the project.
         """
@@ -1294,7 +1294,7 @@ class TestProjectResources(cloudstackTestCase):
                         )
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_08_cleanup_after_project_delete(self):
         """ Test accounts are unassigned from project after project deletion
         """
@@ -1503,7 +1503,7 @@ class TestProjectSuspendActivate(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_09_project_suspend(self):
         """ Test Verify after an account is removed from the project, all his
             resources stay with the project.
@@ -1640,7 +1640,7 @@ class TestProjectSuspendActivate(cloudstackTestCase):
                     )
         return
 
-    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator", 
"selfservice"])
+    @attr(tags=["advanced", "basic", "sg", "eip", "advancedns", "simulator"], 
required_hardware="false")
     def test_10_project_activation(self):
         """ Test project activation after suspension
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_ps_domain_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_ps_domain_limits.py 
b/test/integration/component/test_ps_domain_limits.py
index 39add1e..268174f 100644
--- a/test/integration/component/test_ps_domain_limits.py
+++ b/test/integration/component/test_ps_domain_limits.py
@@ -299,7 +299,7 @@ class TestMultipleChildDomain(cloudstackTestCase):
         self.assertTrue(result[2], "Resource count does not match")
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_02_multiple_domains_primary_storage_limits(self):
         """Test primary storage counts in multiple child domains
         # Steps
@@ -378,7 +378,7 @@ class TestMultipleChildDomain(cloudstackTestCase):
                 self.fail("Failure: %s" % e)
            return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_03_multiple_domains_multiple_volumes(self):
         """Test primary storage counts in multiple child domains
         # Steps
@@ -482,7 +482,7 @@ class TestMultipleChildDomain(cloudstackTestCase):
                 self.fail("Failure: %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_04_create_template_snapshot(self):
         """Test create snapshot and templates from volume
 
@@ -571,7 +571,7 @@ class TestMultipleChildDomain(cloudstackTestCase):
                 self.fail("Failed with exception : %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_05_assign_virtual_machine_different_domain(self):
        """Test assign virtual machine to account belonging to different domain
 
@@ -631,7 +631,7 @@ class TestMultipleChildDomain(cloudstackTestCase):
             self.fail("Failed with exception: %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_06_destroy_recover_vm(self):
        """Test primary storage counts while destroying and recovering VM
         # Steps

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_ps_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_ps_limits.py 
b/test/integration/component/test_ps_limits.py
index cbedfe7..e557249 100644
--- a/test/integration/component/test_ps_limits.py
+++ b/test/integration/component/test_ps_limits.py
@@ -145,7 +145,7 @@ class TestVolumeLimits(cloudstackTestCase):
         return [PASS, None]
 
     @data(ROOT_DOMAIN_ADMIN, CHILD_DOMAIN_ADMIN)
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_stop_start_vm(self, value):
         """Test Deploy VM with 5 GB volume & verify the usage
 
@@ -184,7 +184,7 @@ class TestVolumeLimits(cloudstackTestCase):
 
     @unittest.skip("skip")
     @data(ROOT_DOMAIN_ADMIN, CHILD_DOMAIN_ADMIN)
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_destroy_recover_vm(self, value):
         """Test delete and recover instance
 
@@ -222,7 +222,7 @@ class TestVolumeLimits(cloudstackTestCase):
         return
 
     @data(ROOT_DOMAIN_ADMIN, CHILD_DOMAIN_ADMIN)
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_attach_detach_volume(self, value):
         """Stop attach and detach volume from VM
 
@@ -291,7 +291,7 @@ class TestVolumeLimits(cloudstackTestCase):
         return
 
     @data(ROOT_DOMAIN_ADMIN, CHILD_DOMAIN_ADMIN)
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_create_multiple_volumes(self, value):
         """Test create multiple volumes
 
@@ -385,7 +385,7 @@ class TestVolumeLimits(cloudstackTestCase):
         return
 
     @data(ROOT_DOMAIN_ADMIN, CHILD_DOMAIN_ADMIN)
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_deploy_multiple_vm(self, value):
         """Test Deploy multiple VMs with & verify the usage
         # Validate the following
@@ -494,7 +494,7 @@ class TestVolumeLimits(cloudstackTestCase):
        return
 
     @data(ROOT_DOMAIN_ADMIN, CHILD_DOMAIN_ADMIN)
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_create_template_snapshot(self, value):
         """Test create snapshot and templates from volume
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_ps_project_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_ps_project_limits.py 
b/test/integration/component/test_ps_project_limits.py
index 471b4a1..9420e30 100644
--- a/test/integration/component/test_ps_project_limits.py
+++ b/test/integration/component/test_ps_project_limits.py
@@ -138,7 +138,7 @@ class TestProjectsVolumeLimits(cloudstackTestCase):
             return [FAIL, e]
         return [PASS, None]
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_01_VM_start_stop(self):
         """Test project primary storage count with VM stop/start operation
 
@@ -173,7 +173,7 @@ class TestProjectsVolumeLimits(cloudstackTestCase):
         self.assertEqual(response[0], PASS, response[1])
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_02_migrate_vm(self):
         """Test migrate VM in project
 
@@ -200,7 +200,7 @@ class TestProjectsVolumeLimits(cloudstackTestCase):
         self.assertEqual(response[0], PASS, response[1])
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_03_delete_vm(self):
         """Test delete VM belonging to project
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_ps_resize_volume.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_ps_resize_volume.py 
b/test/integration/component/test_ps_resize_volume.py
index 737f910..5df4a62 100644
--- a/test/integration/component/test_ps_resize_volume.py
+++ b/test/integration/component/test_ps_resize_volume.py
@@ -159,7 +159,7 @@ class TestResizeVolume(cloudstackTestCase):
             return [FAIL, e]
         return [PASS, None]
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_01_increase_volume_size_within_account_limit(self):
        """Test increasing volume size within the account limit and verify 
primary storage usage
 
@@ -223,7 +223,7 @@ class TestResizeVolume(cloudstackTestCase):
             self.fail("Failed with exception: %s" % e)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_02_increase_volume_size_above_account_limit(self):
        """Test increasing volume size above the account limit
 
@@ -281,7 +281,7 @@ class TestResizeVolume(cloudstackTestCase):
             volume.resize(apiclient, 
diskofferingid=self.disk_offering_20_GB.id)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_03_increase_volume_size_above_domain_limit(self):
        """Test increasing volume size above the domain limit
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_recurring_snapshots.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_recurring_snapshots.py 
b/test/integration/component/test_recurring_snapshots.py
index 2ef2bc3..faa6787 100644
--- a/test/integration/component/test_recurring_snapshots.py
+++ b/test/integration/component/test_recurring_snapshots.py
@@ -218,7 +218,7 @@ class TestRecurringSnapshots(cloudstackTestCase):
         return
 
     @attr(speed = "slow")
-    @attr(tags=["advanced", "advancedns", "smoke", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="false")
     def test_recurring_snapshot_root_disk(self):
         """Test Recurring Snapshot Root Disk
         """
@@ -311,7 +311,7 @@ class TestRecurringSnapshots(cloudstackTestCase):
         return
 
     @attr(speed = "slow")
-    @attr(tags=["advanced", "advancedns", "smoke", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "smoke"], required_hardware="false")
     def test_recurring_snapshot_data_disk(self):
         """Test Recurring Snapshot data Disk
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_redundant_router_cleanups.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_redundant_router_cleanups.py 
b/test/integration/component/test_redundant_router_cleanups.py
index 47e60c8..295ce08 100644
--- a/test/integration/component/test_redundant_router_cleanups.py
+++ b/test/integration/component/test_redundant_router_cleanups.py
@@ -209,7 +209,7 @@ class 
TestRedundantRouterNetworkCleanups(cloudstackTestCase):
             #raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "ssh", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "ssh"], required_hardware="false")
     def test_restart_ntwk_no_cleanup(self):
         """Test restarting RvR network without cleanup
         """
@@ -343,7 +343,7 @@ class 
TestRedundantRouterNetworkCleanups(cloudstackTestCase):
                              )
         return
 
-    @attr(tags=["advanced", "advancedns", "ssh", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "ssh"], required_hardware="false")
     def test_restart_ntwk_with_cleanup(self):
         """Test restart RvR network with cleanup
         """
@@ -477,7 +477,7 @@ class 
TestRedundantRouterNetworkCleanups(cloudstackTestCase):
                              )
         return
 
-    @attr(tags=["advanced", "advancedns", "ssh", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "ssh"], required_hardware="false")
     def test_network_gc(self):
         """Test network garbage collection with RVR
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_redundant_router_services.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_redundant_router_services.py 
b/test/integration/component/test_redundant_router_services.py
index 707b673..ba282b2 100644
--- a/test/integration/component/test_redundant_router_services.py
+++ b/test/integration/component/test_redundant_router_services.py
@@ -200,7 +200,7 @@ class TestEnableVPNOverRvR(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "ssh", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "ssh"], required_hardware="false")
     def test_enableVPNOverRvR(self):
         """Test redundant router internals
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_redundant_router_upgrades.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_redundant_router_upgrades.py 
b/test/integration/component/test_redundant_router_upgrades.py
index 6c177ef..7be1eff 100644
--- a/test/integration/component/test_redundant_router_upgrades.py
+++ b/test/integration/component/test_redundant_router_upgrades.py
@@ -199,7 +199,7 @@ class TestRvRUpgradeDowngrade(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "ssh", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "ssh"], required_hardware="false")
     def test_upgradeVR_to_redundantVR(self):
         """Test upgrade virtual router to redundant virtual router
         """
@@ -344,7 +344,7 @@ class TestRvRUpgradeDowngrade(cloudstackTestCase):
                     )
         return
 
-    @attr(tags=["advanced", "advancedns", "ssh", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "ssh"], required_hardware="false")
     def test_downgradeRvR_to_VR(self):
         """Test downgrade redundant virtual router to virtual router
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_regions.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_regions.py 
b/test/integration/component/test_regions.py
index 40e65cf..38b96d5 100644
--- a/test/integration/component/test_regions.py
+++ b/test/integration/component/test_regions.py
@@ -67,14 +67,14 @@ class TestRegions(cloudstackTestCase):
             msg="Region creation failed"
         )
 
-    @attr(tags=["simulator", "basic", "advanced", "selfservice"])
+    @attr(tags=["simulator", "basic", "advanced"], required_hardware="false")
     def test_createRegionWithExistingRegionId(self):
         """Test for duplicate checks on region id
         """
         self.services["region"]["regionname"] = random_gen() #alter region 
name but not id
         self.assertRaises(Exception, Region.create, self.api_client, 
self.services["region"])
 
-    @attr(tags=["simulator", "basic", "advanced", "selfservice"])
+    @attr(tags=["simulator", "basic", "advanced"], required_hardware="false")
     def test_createRegionWithExistingRegionName(self):
         """Test for duplicate checks on region name
         """
@@ -83,7 +83,7 @@ class TestRegions(cloudstackTestCase):
         self.services["region"]["regionendpoint"] = "http://region"; + 
str(random_int) + ":8080/client"
         self.assertRaises(Exception, Region.create, self.api_client, 
self.services["region"])
 
-    @attr(tags=["simulator", "basic", "advanced", "selfservice"])
+    @attr(tags=["simulator", "basic", "advanced"], required_hardware="false")
     def test_updateRegion(self):
        """ Test for update Region
        """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_regions_accounts.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_regions_accounts.py 
b/test/integration/component/test_regions_accounts.py
index a554893..28b64db 100644
--- a/test/integration/component/test_regions_accounts.py
+++ b/test/integration/component/test_regions_accounts.py
@@ -61,7 +61,7 @@ class TestRegionsAccounts(cloudstackTestCase):
         cls.cleanup = []
         return
 
-    @attr(tags=["simulator", "basic", "advanced", "selfservice"])
+    @attr(tags=["simulator", "basic", "advanced"], required_hardware="false")
     def test_createAccountWithUUID(self):
         """Test for creating account by passing id parameter
 
@@ -101,7 +101,7 @@ class TestRegionsAccounts(cloudstackTestCase):
         self.cleanup.append(account)
         return
 
-    @attr(tags=["simulator", "basic", "advanced", "selfservice"])
+    @attr(tags=["simulator", "basic", "advanced"], required_hardware="false")
     def test_createUserWithUUID(self):
         """Test for creating User by passing id parameter
 
@@ -152,7 +152,7 @@ class TestRegionsAccounts(cloudstackTestCase):
         )
         return
 
-    @attr(tags=["simulator", "basic", "advanced", "selfservice"])
+    @attr(tags=["simulator", "basic", "advanced"], required_hardware="false")
     def test_createdomainWithUUID(self):
         """Test for creating Domain by passing id parameter
 

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_resource_limits.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_resource_limits.py 
b/test/integration/component/test_resource_limits.py
index 9f9cdfa..b4ef4dc 100644
--- a/test/integration/component/test_resource_limits.py
+++ b/test/integration/component/test_resource_limits.py
@@ -197,7 +197,7 @@ class TestResourceLimitsAccount(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_vm_per_account(self):
         """Test VM limit per account
         """
@@ -290,7 +290,7 @@ class TestResourceLimitsAccount(cloudstackTestCase):
                         )
         return
 
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_02_publicip_per_account(self):
         """Test Public IP limit per account
         """
@@ -434,7 +434,7 @@ class TestResourceLimitsAccount(cloudstackTestCase):
         return
 
     @attr(speed="slow")
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_03_snapshots_per_account(self):
         """Test Snapshot limit per account
         """
@@ -593,7 +593,7 @@ class TestResourceLimitsAccount(cloudstackTestCase):
                         )
         return
 
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_04_volumes_per_account(self):
         """Test Volumes limit per account
         """
@@ -735,7 +735,7 @@ class TestResourceLimitsAccount(cloudstackTestCase):
                         )
         return
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_05_templates_per_account(self):
         """Test Templates limit per account
         """
@@ -975,7 +975,7 @@ class TestResourceLimitsDomain(cloudstackTestCase):
             raise Exception("Warning: Exception during cleanup : %s" % e)
         return
 
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_vm_per_domain(self):
         """Test VM limit per domain
         """
@@ -1041,7 +1041,7 @@ class TestResourceLimitsDomain(cloudstackTestCase):
                                 )
         return
 
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_01_publicip_per_domain(self):
         """Test Public IP limit per domain
         """
@@ -1112,7 +1112,7 @@ class TestResourceLimitsDomain(cloudstackTestCase):
         return
 
     @attr(speed="slow")
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_03_snapshots_per_domain(self):
         """Test Snapshot limit per domain
         """
@@ -1196,7 +1196,7 @@ class TestResourceLimitsDomain(cloudstackTestCase):
                             )
         return
 
-    @attr(tags=["advanced", "advancedns", "simulator", "selfservice"])
+    @attr(tags=["advanced", "advancedns", "simulator"], 
required_hardware="false")
     def test_04_volumes_per_domain(self):
         """Test Volumes limit per domain
         """
@@ -1249,7 +1249,7 @@ class TestResourceLimitsDomain(cloudstackTestCase):
                         )
         return
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_05_templates_per_domain(self):
         """Test Templates limit per domain
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_routers.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_routers.py 
b/test/integration/component/test_routers.py
index d729a07..24f44b3 100644
--- a/test/integration/component/test_routers.py
+++ b/test/integration/component/test_routers.py
@@ -169,7 +169,7 @@ class TestRouterServices(cloudstackTestCase):
         self.cleanup = []
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_01_AdvancedZoneRouterServices(self):
         """Test advanced zone router services
         """
@@ -320,7 +320,7 @@ class TestRouterServices(cloudstackTestCase):
         return
 
     @attr(configuration = "network.gc")
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_02_NetworkGarbageCollection(self):
         """Test network garbage collection
         """
@@ -498,7 +498,7 @@ class TestRouterServices(cloudstackTestCase):
         self.cleanup.append(self.vm_2)
         return
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_03_RouterStartOnVmDeploy(self):
         """Test router start on VM deploy
         """
@@ -707,7 +707,7 @@ class TestRouterStopCreatePF(cloudstackTestCase):
         self.cleanup = []
         return
 
-    @attr(tags=["advanced", "advancedns", "provisioning"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="true")
     def test_01_RouterStopCreatePF(self):
         """Test router stop create port forwarding
         """
@@ -920,7 +920,7 @@ class TestRouterStopCreateLB(cloudstackTestCase):
         self.cleanup = []
         return
 
-    @attr(tags=["advanced", "advancedns", "provisioning"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="true")
     def test_01_RouterStopCreateLB(self):
         """Test router stop create Load balancing
         """
@@ -1134,7 +1134,7 @@ class TestRouterStopCreateFW(cloudstackTestCase):
         self.cleanup = []
         return
 
-    @attr(tags=["advanced", "advancedns", "provisioning"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="true")
     def test_01_RouterStopCreateFW(self):
         """Test router stop create Firewall rule
         """

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_shared_networks.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_shared_networks.py 
b/test/integration/component/test_shared_networks.py
index ffc3609..4d71ed3 100644
--- a/test/integration/component/test_shared_networks.py
+++ b/test/integration/component/test_shared_networks.py
@@ -258,7 +258,7 @@ class TestSharedNetworks(cloudstackTestCase):
 
         return
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_sharedNetworkOffering_01(self):
         """  Test shared network Offering 01 """
 
@@ -394,7 +394,7 @@ class TestSharedNetworks(cloudstackTestCase):
             )
         self.debug("NetworkOffering created and enabled: %s" % 
self.shared_network_offering.id)
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_sharedNetworkOffering_02(self):
         """ Test Shared Network Offering 02 """
 
@@ -483,7 +483,7 @@ class TestSharedNetworks(cloudstackTestCase):
             self.debug("Network Offering creation failed with vlan as False in 
advance mode and shared guest type. Exception: %s" %
                         e)
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_sharedNetworkOffering_03(self):
         """ Test Shared Network Offering 03 """
 
@@ -573,7 +573,7 @@ class TestSharedNetworks(cloudstackTestCase):
             self.debug("Network Offering creation failed with vlan as true and 
ip ranges as False in advance mode and with shared guest type.\
                         Exception : %s" % e)
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_createSharedNetwork_All(self):
         """ Test Shared Network ALL  """
 
@@ -844,7 +844,7 @@ class TestSharedNetworks(cloudstackTestCase):
         if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
             self.fail("Virtual machine ip should be from the ip range assigned 
to network created.")
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_createSharedNetwork_accountSpecific(self):
         """ Test Shared Network with scope account """
 
@@ -1093,7 +1093,7 @@ class TestSharedNetworks(cloudstackTestCase):
         if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
             self.fail("Virtual machine ip should be from the ip range assigned 
to network created.")
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_createSharedNetwork_domainSpecific(self):
         """ Test Shared Network with scope domain """
 
@@ -1437,7 +1437,7 @@ class TestSharedNetworks(cloudstackTestCase):
         if netaddr.IPAddress(unicode(vms[0].nic[0].ipaddress)) not in ip_range:
             self.fail("Virtual machine ip should be from the ip range assigned 
to network created.")
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_createSharedNetwork_projectSpecific(self):
         """ Test Shared Network with scope project  """
 
@@ -1858,7 +1858,7 @@ class TestSharedNetworks(cloudstackTestCase):
             self.debug("Network creation failed because the valn id being used 
by another network. Exception: %s" % e)
 
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_createSharedNetwork_usedVlan2(self):
         """ Test Shared Network with used vlan 02 """
 
@@ -2040,7 +2040,7 @@ class TestSharedNetworks(cloudstackTestCase):
         except Exception as e:
             self.debug("Network creation failed because the valn id being used 
by another network. Exception: %s" % e)
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_deployVM_multipleSharedNetwork(self):
         """ Test Vm deployment with multiple shared networks """
 
@@ -2290,7 +2290,7 @@ class TestSharedNetworks(cloudstackTestCase):
 
         
self.assertTrue(self.network1_admin_account_virtual_machine.nic[0].ipaddress is 
not None, "ip should be assigned to running virtual machine")
 
-    @attr(tags=["advanced", "advancedns", "provisioning"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="true")
     def test_deployVM_isolatedAndShared(self):
         """ Test VM deployment in shared and isolated networks """
 
@@ -2629,7 +2629,7 @@ class TestSharedNetworks(cloudstackTestCase):
         except Exception as e:
             self.fail("SSH Access failed for %s: %s" % 
(self.isolated_network_admin_account_virtual_machine.ipaddress, e))
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_networkWithsubdomainaccessTrue(self):
         """ Test Shared Network with subdomainaccess=True """
 
@@ -2760,7 +2760,7 @@ class TestSharedNetworks(cloudstackTestCase):
         except:
             self.debug("Network creation failed because subdomainaccess 
parameter was passed when scope was account.")
 
-    @attr(tags=["advanced", "advancedns", "selfservice"])
+    @attr(tags=["advanced", "advancedns"], required_hardware="false")
     def test_networkWithsubdomainaccessFalse(self):
         """ Test shared Network with subdomainaccess=False """
 
@@ -2890,7 +2890,7 @@ class TestSharedNetworks(cloudstackTestCase):
         except:
             self.debug("Network creation failed because subdomainaccess 
parameter was passed when scope was account.")
 
-    @attr(tags=["advanced", "selfservice"])
+    @attr(tags=["advanced"], required_hardware="false")
     def test_escalation_ES1621(self):
         """
         @summary: ES1621:Allow creating shared networks with overlapping

http://git-wip-us.apache.org/repos/asf/cloudstack/blob/598e9b1c/test/integration/component/test_snapshot_gc.py
----------------------------------------------------------------------
diff --git a/test/integration/component/test_snapshot_gc.py 
b/test/integration/component/test_snapshot_gc.py
index d0491cd..064850e 100644
--- a/test/integration/component/test_snapshot_gc.py
+++ b/test/integration/component/test_snapshot_gc.py
@@ -217,7 +217,7 @@ class TestAccountSnapshotClean(cloudstackTestCase):
         return
 
     @attr(speed = "slow")
-    @attr(tags=["advanced", "advancedns", "basic", "sg", "provisioning"])
+    @attr(tags=["advanced", "advancedns", "basic", "sg"], 
required_hardware="true")
     def test_02_accountSnapshotClean(self):
         """Test snapshot cleanup after account deletion
         """

Reply via email to