def test_16_move_across_subdomain_volume_and_account_limit(self): """Test as domain admin, stop a VM from subdomain1 and attempt to move it to subdomain2 volumes are attached and limit reached """ # Validate the following: # 1. deploy VM in sub subdomain1 when account limit is reached. # 3. assignVirtualMachine to subdomain2 if self.hypervisor.lower() in ['hyperv', 'lxc']: self.skipTest("Snapshots feature is not supported on %s" % self.hypervisor) update_resource_limit( self.apiclient, 0, # VM Instances account=self.sdomain_account_user2['account'].name, domainid=self.sdomain_account_user2['domain'].id, max=0) userapiclient = self.testClient.getUserApiClient( UserName=self.sdomain_account_user1['account'].name, DomainName=self.sdomain_account_user1['domain'].name, type=2) self.create_vm(self.sdomain_account_user1['account'], self.sdomain_account_user1['domain'], snapshot=True, volume=self.sdomain_account_user1['volume']) self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, userapiclient, self.sdomain_account_user2['account'].name, self.sdomain_account_user2['domain'].id) self.virtual_machine.detach_volume( self.apiclient, self.sdomain_account_user1['volume'])
def setupNormalAccount(self): """Setup the account required for the test""" try: self.domain = Domain.create(self.apiclient, services=self.services["domain"], parentdomainid=self.domain.id) self.account = Account.create(self.apiclient, self.services["account"], domainid=self.domain.id, admin=False) self.cleanup.append(self.account) self.cleanup.append(self.domain) self.virtualMachine = VirtualMachine.create(self.api_client, self.services["virtual_machine"], accountid=self.account.name, domainid=self.account.domainid, diskofferingid=self.disk_offering.id, serviceofferingid=self.service_offering.id) accounts = Account.list(self.apiclient, id=self.account.id) self.assertEqual(validateList(accounts)[0], PASS, "accounts list validation failed") self.initialResourceCount = int(accounts[0].primarystoragetotal) primarystoragelimit = self.initialResourceCount update_resource_limit(self.api_client, RESOURCE_PRIMARY_STORAGE, account=self.account.name, domainid=self.account.domainid, max=primarystoragelimit) except Exception as e: return [FAIL, e] return [PASS, None]
def test_03_vm_per_project(self): """Test VM limit per project """ # Validate the following # 1. Set max VM per project to 2 # 2. Create account and start 2 VMs. Verify VM state is Up and Running # 3. Try to create 3rd VM instance. The appropriate error or alert # should be raised self.debug( "Updating instance resource limits for project: %s" % self.project.id) # Set usage_vm=1 for Account 1 update_resource_limit( self.apiclient, 0, # Instance max=2, projectid=self.project.id ) self.debug("Deploying VM for project: %s" % self.project.id) virtual_machine_1 = VirtualMachine.create( self.apiclient, self.services["server"], templateid=self.template.id, serviceofferingid=self.service_offering.id, projectid=self.project.id ) self.cleanup.append(virtual_machine_1) # Verify VM state self.assertEqual( virtual_machine_1.state, 'Running', "Check VM state is Running or not" ) self.debug("Deploying VM for project: %s" % self.project.id) virtual_machine_2 = VirtualMachine.create( self.apiclient, self.services["server"], templateid=self.template.id, serviceofferingid=self.service_offering.id, projectid=self.project.id ) self.cleanup.append(virtual_machine_2) # Verify VM state self.assertEqual( virtual_machine_2.state, 'Running', "Check VM state is Running or not" ) # Exception should be raised for second instance with self.assertRaises(Exception): VirtualMachine.create( self.apiclient, self.services["server"], templateid=self.template.id, serviceofferingid=self.service_offering.id, projectid=self.project.id ) return
def test_06_volumes_per_project(self): """Test Volumes limit per project """ # Validate the following # 1. set max no of volume per project to 1. # 2. Create 1 VM in this project # 4. Try to Create another VM in the project. It should give the user # an appropriate error that Volume limit is exhausted and an alert # should be generated. if self.hypervisor.lower() == 'lxc': if not find_storage_pool_type(self.apiclient, storagetype='rbd'): self.skipTest("RBD storage type is required for data volumes for LXC") self.project_1 = Project.create( self.api_client, self.services["project"], account=self.account.name, domainid=self.account.domainid ) self.cleanup.append(self.project_1) self.debug( "Updating volume resource limits for project: %s" % self.project_1.id) # Set usage_vm=1 for Account 1 update_resource_limit( self.apiclient, 2, # Volume max=1, projectid=self.project_1.id ) self.debug("Deploying VM for project: %s" % self.project_1.id) virtual_machine_1 = VirtualMachine.create( self.apiclient, self.services["server"], templateid=self.template.id, serviceofferingid=self.service_offering.id, projectid=self.project_1.id ) # Verify VM state self.assertEqual( virtual_machine_1.state, 'Running', "Check VM state is Running or not" ) # Exception should be raised for second volume with self.assertRaises(Exception): Volume.create( self.apiclient, self.services["volume"], zoneid=self.zone.id, diskofferingid=self.disk_offering.id, projectid=self.project_1.id ) return
def test_04_publicip_per_project(self): """Test Public IP limit per project """ # Validate the following # 1. set max no of IPs per project to 2. # 2. Create an account in this domain # 3. Create 1 VM in this domain # 4. Acquire 1 IP in the domain. IP should be successfully acquired # 5. Try to acquire 3rd IP in this domain. It should give the user an # appropriate error and an alert should be generated. self.debug("Updating public IP resource limits for project: %s" % self.project.id) # Set usage_vm=1 for Account 1 update_resource_limit(self.apiclient, 1, max=2, projectid=self.project.id) # Public Ip self.debug("Deploying VM for Project: %s" % self.project.id) virtual_machine_1 = VirtualMachine.create( self.apiclient, self.services["server"], templateid=self.template.id, serviceofferingid=self.service_offering.id, projectid=self.project.id, ) self.cleanup.append(virtual_machine_1) # Verify VM state self.assertEqual(virtual_machine_1.state, "Running", "Check VM state is Running or not") networks = Network.list(self.apiclient, projectid=self.project.id, listall=True) self.assertEqual(isinstance(networks, list), True, "Check list networks response returns a valid response") self.assertNotEqual(len(networks), 0, "Check list networks response returns a valid network") network = networks[0] self.debug("Associating public IP for project: %s" % self.project.id) public_ip_1 = PublicIPAddress.create( self.apiclient, zoneid=virtual_machine_1.zoneid, services=self.services["server"], networkid=network.id, projectid=self.project.id, ) self.cleanup.append(public_ip_1) # Verify Public IP state self.assertEqual( public_ip_1.ipaddress.state in ["Allocated", "Allocating"], True, "Check Public IP state is allocated or not", ) # Exception should be raised for second Public IP with self.assertRaises(Exception): PublicIPAddress.create( self.apiclient, zoneid=virtual_machine_1.zoneid, services=self.services["server"], networkid=network.id, projectid=self.project.id, ) return
def test_04_publicip_per_project(self): """Test Public IP limit per project """ # Validate the following # 1. set max no of IPs per project to 2. # 2. Create an account in this domain # 3. Create 1 VM in this domain # 4. Acquire 1 IP in the domain. IP should be successfully acquired # 5. Try to acquire 3rd IP in this domain. It should give the user an # appropriate error and an alert should be generated. self.debug("Updating public IP resource limits for project: %s" % self.project.id) # Set usage_vm=1 for Account 1 update_resource_limit( self.apiclient, 1, # Public Ip max=2, projectid=self.project.id) self.debug("Deploying VM for Project: %s" % self.project.id) virtual_machine_1 = VirtualMachine.create( self.apiclient, self.services["server"], templateid=self.template.id, serviceofferingid=self.service_offering.id, projectid=self.project.id) self.cleanup.append(virtual_machine_1) # Verify VM state self.assertEqual(virtual_machine_1.state, 'Running', "Check VM state is Running or not") networks = Network.list(self.apiclient, projectid=self.project.id, listall=True) self.assertEqual( isinstance(networks, list), True, "Check list networks response returns a valid response") self.assertNotEqual( len(networks), 0, "Check list networks response returns a valid network") network = networks[0] self.debug("Associating public IP for project: %s" % self.project.id) public_ip_1 = PublicIPAddress.create(self.apiclient, zoneid=virtual_machine_1.zoneid, services=self.services["server"], networkid=network.id, projectid=self.project.id) self.cleanup.append(public_ip_1) # Verify Public IP state self.assertEqual( public_ip_1.ipaddress.state in ['Allocated', 'Allocating'], True, "Check Public IP state is allocated or not") return
def test_05_snapshots_per_project(self): """Test Snapshot limit per project """ # Validate the following # 1. set max no of snapshots per project to 1. # 2. Create one snapshot in the project. Snapshot should be # successfully created # 5. Try to create another snapshot in this project. It should give # user an appropriate error and an alert should be generated. if self.hypervisor.lower() in ["hyperv"]: raise self.skipTest("Snapshots feature is not supported on Hyper-V") self.debug("Updating snapshot resource limits for project: %s" % self.project.id) # Set usage_vm=1 for Account 1 update_resource_limit(self.apiclient, 3, max=1, projectid=self.project.id) # Snapshot self.debug("Deploying VM for account: %s" % self.account.name) virtual_machine_1 = VirtualMachine.create( self.apiclient, self.services["server"], templateid=self.template.id, serviceofferingid=self.service_offering.id, projectid=self.project.id, ) self.cleanup.append(virtual_machine_1) # Verify VM state self.assertEqual(virtual_machine_1.state, "Running", "Check VM state is Running or not") # Get the Root disk of VM volumes = list_volumes( self.apiclient, virtualmachineid=virtual_machine_1.id, projectid=self.project.id, type="ROOT" ) self.assertEqual(isinstance(volumes, list), True, "Check for list volume response return valid data") self.debug("Creating snapshot from volume: %s" % volumes[0].id) # Create a snapshot from the ROOTDISK snapshot_1 = Snapshot.create(self.apiclient, volumes[0].id, projectid=self.project.id) self.cleanup.append(snapshot_1) # list snapshots snapshots = list_snapshots(self.apiclient, projectid=self.project.id) self.debug("snapshots list: %s" % snapshots) self.assertEqual(validateList(snapshots)[0], PASS, "Snapshots list validation failed") self.assertEqual(len(snapshots), 1, "Snapshots list should have exactly one entity") # Exception should be raised for second snapshot with self.assertRaises(Exception): Snapshot.create(self.apiclient, volumes[0].id, projectid=self.project.id) return
def test_15_move_across_subdomain_account_limit(self): """Test as domain admin, stop a VM from subdomain1 and attempt to move it to subdomain2 when limit reached """ # Validate the following: # 1. deploy VM in sub subdomain1 when account limit is reached. # 3. assignVirtualMachine to subdomain2 update_resource_limit(self.apiclient, 0, # VM Instances account=self.sdomain_account_user2['account'].name, domainid=self.sdomain_account_user2['domain'].id, max=0) userapiclient = self.testClient.getUserApiClient(UserName=self.sdomain_account_user1['account'].name, DomainName=self.sdomain_account_user1['domain'].name, type=2) self.create_vm(self.sdomain_account_user1['account'], self.sdomain_account_user1['domain'], snapshot=True) self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, userapiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id)
def test_vm_per_account(self): """Test VM limit per account """ # Validate the following # 1. Set the resource limit for VM per account. # 2. Deploy VMs more than limit in that account. # 3. AIP should error out self.debug("Updating instance resource limit for account: %s" % self.account.name) # Set usage_vm=1 for Account 1 update_resource_limit( self.apiclient, 0, account=self.account.name, domainid=self.account.domainid, max=1 # Instance ) self.debug("Deploying VM instance in account: %s" % self.account.name) virtual_machine = VirtualMachine.create( self.apiclient, self.services["virtual_machine"], templateid=self.template.id, accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, startvm=False, ) # Verify VM state self.assertEqual(virtual_machine.state, "Stopped", "Check VM state is Running or not") # Exception should be raised for second instance (account_1) with self.assertRaises(Exception): VirtualMachine.create( self.apiclient, self.services["virtual_machine"], templateid=self.template.id, accountid=self.account.name, domainid=self.account.domainid, serviceofferingid=self.service_offering.id, startvm=False, ) return
def test_16_move_across_subdomain_volume_and_account_limit(self): """Test as domain admin, stop a VM from subdomain1 and attempt to move it to subdomain2 volumes are attached and limit reached """ # Validate the following: # 1. deploy VM in sub subdomain1 when account limit is reached. # 3. assignVirtualMachine to subdomain2 if self.hypervisor.lower() in ['hyperv', 'lxc']: self.skipTest("Snapshots feature is not supported on %s" % self.hypervisor) update_resource_limit( self.apiclient, 0, # VM Instances account=self.sdomain_account_user2['account'].name, domainid=self.sdomain_account_user2['domain'].id, max=0) userapiclient = self.testClient.getUserApiClient(UserName=self.sdomain_account_user1['account'].name, DomainName=self.sdomain_account_user1['domain'].name, type=2) self.create_vm(self.sdomain_account_user1['account'], self.sdomain_account_user1['domain'], snapshot=True, volume=self.sdomain_account_user1['volume']) self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, userapiclient, self.sdomain_account_user2['account'].name ,self.sdomain_account_user2['domain'].id) self.virtual_machine.detach_volume(self.apiclient, self.sdomain_account_user1['volume'])
def setupNormalAccount(self): """Setup the account required for the test""" try: self.domain = Domain.create(self.apiclient, services=self.services["domain"], parentdomainid=self.domain.id) self.account = Account.create( self.apiclient, self.services["account"], domainid=self.domain.id, admin=False ) self.cleanup.append(self.account) self.cleanup.append(self.domain) self.virtualMachine = VirtualMachine.create( self.api_client, self.services["virtual_machine"], accountid=self.account.name, domainid=self.account.domainid, diskofferingid=self.disk_offering.id, serviceofferingid=self.service_offering.id, ) accounts = Account.list(self.apiclient, id=self.account.id) self.assertEqual(validateList(accounts)[0], PASS, "accounts list validation failed") self.initialResourceCount = int(accounts[0].primarystoragetotal) primarystoragelimit = self.initialResourceCount update_resource_limit( self.api_client, RESOURCE_PRIMARY_STORAGE, account=self.account.name, domainid=self.account.domainid, max=primarystoragelimit, ) except Exception as e: return [FAIL, e] return [PASS, None]
def test_15_move_across_subdomain_account_limit(self): """Test as domain admin, stop a VM from subdomain1 and attempt to move it to subdomain2 when limit reached """ # Validate the following: # 1. deploy VM in sub subdomain1 when account limit is reached. # 3. assignVirtualMachine to subdomain2 update_resource_limit( self.apiclient, 0, # VM Instances account=self.sdomain_account_user2['account'].name, domainid=self.sdomain_account_user2['domain'].id, max=0) userapiclient = self.testClient.getUserApiClient( UserName=self.sdomain_account_user1['account'].name, DomainName=self.sdomain_account_user1['domain'].name, type=2) self.create_vm(self.sdomain_account_user1['account'], self.sdomain_account_user1['domain'], snapshot=True) self.assertRaises(Exception, self.virtual_machine.assign_virtual_machine, userapiclient, self.sdomain_account_user2['account'].name, self.sdomain_account_user2['domain'].id)
def test_02_project_limits_normal_user(self): """ Test project limits for normal user """ # Validate the following # 1. Create a Project # 2. Reduce the projects limits as a domain admin. Verify resource # count is updated # 3. Reduce the projects limits as a project user owner who is not a # domain admin. Resource count should fail # Create project as a domain admin project = Project.create( self.apiclient, self.services["project"], account=self.admin.name, domainid=self.admin.domainid ) # Cleanup created project at end of test self.cleanup.append(project) self.debug("Created project with domain admin with ID: %s" % project.id) list_projects_reponse = Project.list( self.apiclient, id=project.id, listall=True ) self.assertEqual( isinstance(list_projects_reponse, list), True, "Check for a valid list projects response" ) list_project = list_projects_reponse[0] self.assertNotEqual( len(list_projects_reponse), 0, "Check list project response returns a valid project" ) self.assertEqual( project.name, list_project.name, "Check project name from list response" ) # Get the resource limits for ROOT domain resource_limits = list_resource_limits(self.apiclient) self.assertEqual( isinstance(resource_limits, list), True, "List resource API should return a valid list" ) self.assertNotEqual( len(resource_limits), 0, "List resource API response should not be empty" ) # Reduce resource limits for project # Resource: 0 - Instance. Number of instances a user can create. # Resource: 1 - IP. Number of public IP addresses a user can own. # Resource: 2 - Volume. Number of disk volumes a user can create. # Resource: 3 - Snapshot. Number of snapshots a user can create. # Resource: 4 - Template. Number of templates that a user can # register/create for resource in resource_limits: update_resource_limit( self.apiclient, resource.resourcetype, max=1, projectid=project.id ) self.debug( "Updating resource (ID: %s) limit for project: %s" % ( resource, project.id )) resource_limits = list_resource_limits( self.apiclient, projectid=project.id ) self.assertEqual( isinstance(resource_limits, list), True, "List resource API should return a valid list" ) self.assertNotEqual( len(resource_limits), 0, "List resource API response should not be empty" ) for resource in resource_limits: self.assertEqual( resource.max, 1, "Resource limit should be updated to 1" ) self.debug("Adding %s user to project: %s" % ( self.user.name, project.name )) # Add user to the project project.addAccount( self.apiclient, self.user.name, ) # Get the resource limits for domain resource_limits = list_resource_limits( self.apiclient, domainid=self.domain.id ) self.assertEqual( isinstance(resource_limits, list), True, "List resource API should return a valid list" ) self.assertNotEqual( len(resource_limits), 0, "List resource API response should not be empty" ) for resource in resource_limits: #with self.assertRaises(Exception): self.debug( "Attempting to update resource limit by user: %s" % ( self.user.name )) # Update project resource limits to 3 update_resource_limit( self.apiclient, resource.resourcetype, account=self.user.name, domainid=self.user.domainid, max=3, projectid=project.id ) return
def test_01_project_limits(self): """ Test project limits for domain admin """ # Validate the following # 1. Create a Project. Verify once projects are created, they inherit # a default set of resource limits as configured by the Cloud Stack # ROOT admin. # 2. Reduce Project resources limits. Verify limits can be reduced by # the Project Owner of each project and project limit applies to # number of virtual instances, disk volumes, snapshots, IP address. # Also, verify resource limits for the project are independent of # account resource limits # 3. Increase Projects Resources limits above domains limit. Verify # project can't have more resources than domain level limit allows. # 4. Create Resource more than its set limit for the parent domain. # Verify resource allocation should fail giving proper message # Create project as a domain admin project = Project.create( self.apiclient, self.services["project"], account=self.admin.name, domainid=self.admin.domainid ) # Cleanup created project at end of test self.cleanup.append(project) self.debug("Created project with domain admin with ID: %s" % project.id) list_projects_reponse = Project.list( self.apiclient, id=project.id, listall=True ) self.assertEqual( isinstance(list_projects_reponse, list), True, "Check for a valid list projects response" ) list_project = list_projects_reponse[0] self.assertNotEqual( len(list_projects_reponse), 0, "Check list project response returns a valid project" ) self.assertEqual( project.name, list_project.name, "Check project name from list response" ) # Get the resource limits for ROOT domain resource_limits = list_resource_limits(self.apiclient) self.assertEqual( isinstance(resource_limits, list), True, "List resource API should return a valid list" ) self.assertNotEqual( len(resource_limits), 0, "List resource API response should not be empty" ) # Reduce resource limits for project # Resource: 0 - Instance. Number of instances a user can create. # Resource: 1 - IP. Number of public IP addresses a user can own. # Resource: 2 - Volume. Number of disk volumes a user can create. # Resource: 3 - Snapshot. Number of snapshots a user can create. # Resource: 4 - Template. Number of templates that a user can # register/create for resource in resource_limits: update_resource_limit( self.apiclient, resource.resourcetype, max=1, projectid=project.id ) self.debug( "Updating resource (ID: %s) limit for project: %s" % ( resource, project.id )) resource_limits = list_resource_limits( self.apiclient, projectid=project.id ) self.assertEqual( isinstance(resource_limits, list), True, "List resource API should return a valid list" ) self.assertNotEqual( len(resource_limits), 0, "List resource API response should not be empty" ) for resource in resource_limits: self.assertEqual( resource.max, 1, "Resource limit should be updated to 1" ) # Get the resource limits for domain resource_limits = list_resource_limits( self.apiclient, domainid=self.domain.id ) self.assertEqual( isinstance(resource_limits, list), True, "List resource API should return a valid list" ) self.assertNotEqual( len(resource_limits), 0, "List resource API response should not be empty" ) for resource in resource_limits: # Update domain resource limits to 2 update_resource_limit( self.apiclient, resource.resourcetype, domainid=self.domain.id, max=1 ) max_value = 2 self.debug( "Attempting to update project: %s resource limit to: %s" % ( project.id, max_value )) # Update project resource limits to 3 update_resource_limit( self.apiclient, resource.resourcetype, max=max_value, projectid=project.id ) # Verify project can't have more resources then limit set for domain by adding volumes. volume = Volume.create( self.apiclient, self.services["volume"], zoneid=self.zone.id, diskofferingid=self.disk_offering.id, projectid=project.id ) # Exception should be raised for second volume with self.assertRaises(Exception): Volume.create( self.apiclient, self.services["volume"], zoneid=self.zone.id, diskofferingid=self.disk_offering.id, projectid=project.id ) volume.delete(self.apiclient); return
def test_07_templates_per_project(self): """Test Templates limit per project """ # 1. set max no of templates per project to 1. # 2. Create a template in this project. Both template should be in # ready state # 3. Try create 2nd template in the project. It should give the user # appropriate error and an alert should be generated. # Reset the volume limits update_resource_limit( self.apiclient, 2, # Volume max=5, projectid=self.project.id ) self.debug( "Updating template resource limits for domain: %s" % self.account.domainid) # Set usage_vm=1 for Account 1 update_resource_limit( self.apiclient, 4, # Template max=1, projectid=self.project.id ) # Register the First Template in the project self.debug("Register the First Template in the project") builtin_info = get_builtin_template_info(self.apiclient, self.zone.id) self.services["template"]["url"] = builtin_info[0] self.services["template"]["hypervisor"] = builtin_info[1] self.services["template"]["format"] = builtin_info[2] # Register new template template = Template.register( self.userapiclient, self.services["template"], zoneid=self.zone.id, projectid=self.project.id ) self.debug( "Registered a template of format: %s with ID: %s" % ( self.services["template"]["format"], template.id )) self.cleanup.append(template) # Wait for template status to be changed across time.sleep(self.services["sleep"]) timeout = self.services["timeout"] while True: list_template_response = Template.list( self.apiclient, templatefilter='all', id=template.id, zoneid=self.zone.id, projectid=self.project.id, ) if list_template_response[0].isready is True: break elif timeout == 0: raise Exception("Template state is not ready, it is %s" % list_template_response[0].isready) time.sleep(self.services["sleep"]) timeout = timeout - 1 #Verify template response to check whether template added successfully self.assertEqual( isinstance(list_template_response, list), True, "Check for list template response return valid data" ) self.assertNotEqual( len(list_template_response), 0, "Check template available in List Templates" ) template_response = list_template_response[0] self.assertEqual( template_response.isready, True, "Template state is not ready, it is %s" % template_response.isready ) # Exception should be raised for second template with self.assertRaises(Exception): Template.register( self.userapiclient, self.services["template"], zoneid=self.zone.id, projectid=self.project.id ) return
def test_01_CS40139_listtemplate_with_different_pagesize(self): """ @Desc verify list template gives same result with pagesize=500&page=(1,2) and pagesize=1000 when there are around 1000 templates @steps: 1: register around 850 templates 2. call list template api with pagesize=500&page=1 and then page=2 3.call list template api with pagesize=1000 & page=1 4. Verify list template returns same list of template in both step 2 and 3 """ if self.hypervisor.lower() not in ['xenserver']: raise unittest.SkipTest("hypervisor in not xenserver") return self.updateConfigurAndRestart("default.page.size", "1000") self.debug("Updating template resource limit for account: %s" % self.account.name) # Set usage_template=1000 for Account 1 update_resource_limit( self.apiclient, 4, # Template account=self.account.name, domainid=self.domain.id, max=1000 ) for i in range(0, 850): template_created = Template.register( self.apiclient, self.testdata["templateregister"], zoneid=self.zone.id, hypervisor=self.hypervisor, account=self.account.name, domainid=self.domain.id ) self.assertIsNotNone( template_created, "Template creation failed" ) listfirst500template = Template.list( self.apiclient, templatefilter="executable", pagesize=500, page=1, account=self.account.name, domainid=self.account.domainid) status = validateList(listfirst500template) self.assertEquals( PASS, status[0], "First 500 template list is empty") listremainingtemplate = Template.list( self.apiclient, templatefilter="executable", pagesize=500, page=2, account=self.account.name, domainid=self.account.domainid) status = validateList(listremainingtemplate) self.assertEquals( PASS, status[0], "Next 500 template list is empty") listalltemplate = Template.list( self.apiclient, templatefilter="executable", pagesize=1000, page=1, account=self.account.name, domainid=self.account.domainid) status = validateList(listalltemplate) self.assertEquals( PASS, status[0], "entire template list is empty") listfirst500template.extend(listremainingtemplate) for i, j in zip(listalltemplate,listfirst500template): self.assertNotEqual( i, j, "Check template listed are not same" ) return
def test_05_snapshots_per_project(self): """Test Snapshot limit per project """ # Validate the following # 1. set max no of snapshots per project to 1. # 2. Create one snapshot in the project. Snapshot should be # successfully created # 5. Try to create another snapshot in this project. It should give # user an appropriate error and an alert should be generated. if self.hypervisor.lower() in ['hyperv']: raise self.skipTest("Snapshots feature is not supported on Hyper-V") self.debug( "Updating snapshot resource limits for project: %s" % self.project.id) # Set usage_vm=1 for Account 1 update_resource_limit( self.apiclient, 3, # Snapshot max=1, projectid=self.project.id ) self.debug("Deploying VM for account: %s" % self.account.name) virtual_machine_1 = VirtualMachine.create( self.apiclient, self.services["server"], templateid=self.template.id, serviceofferingid=self.service_offering.id, projectid=self.project.id ) self.cleanup.append(virtual_machine_1) # Verify VM state self.assertEqual( virtual_machine_1.state, 'Running', "Check VM state is Running or not" ) # Get the Root disk of VM volumes = list_volumes( self.apiclient, virtualmachineid=virtual_machine_1.id, projectid=self.project.id, type='ROOT' ) self.assertEqual( isinstance(volumes, list), True, "Check for list volume response return valid data" ) self.debug("Creating snapshot from volume: %s" % volumes[0].id) # Create a snapshot from the ROOTDISK snapshot_1 = Snapshot.create(self.apiclient, volumes[0].id, projectid=self.project.id ) self.cleanup.append(snapshot_1) #list snapshots snapshots = list_snapshots(self.apiclient, projectid=self.project.id) self.debug("snapshots list: %s" % snapshots) self.assertEqual(validateList(snapshots)[0], PASS, "Snapshots list validation failed") self.assertEqual(len(snapshots), 1, "Snapshots list should have exactly one entity") # Exception should be raised for second snapshot with self.assertRaises(Exception): Snapshot.create(self.apiclient, volumes[0].id, projectid=self.project.id ) return
def test_01_CS40139_listtemplate_with_different_pagesize(self): """ @Desc verify list template gives same result with pagesize=500&page=(1,2) and pagesize=1000 when there are around 1000 templates @steps: 1: register around 850 templates 2. call list template api with pagesize=500&page=1 and then page=2 3.call list template api with pagesize=1000 & page=1 4. Verify list template returns same list of template in both step 2 and 3 """ if self.hypervisor.lower() not in ['xenserver']: raise unittest.SkipTest("hypervisor in not xenserver") return self.updateConfigurAndRestart("default.page.size", "1000") self.debug("Updating template resource limit for account: %s" % self.account.name) # Set usage_template=1000 for Account 1 update_resource_limit( self.apiclient, 4, # Template account=self.account.name, domainid=self.domain.id, max=1000) for i in range(0, 850): template_created = Template.register( self.apiclient, self.testdata["templateregister"], zoneid=self.zone.id, hypervisor=self.hypervisor, account=self.account.name, domainid=self.domain.id) self.assertIsNotNone(template_created, "Template creation failed") listfirst500template = Template.list(self.apiclient, templatefilter="executable", pagesize=500, page=1, account=self.account.name, domainid=self.account.domainid) status = validateList(listfirst500template) self.assertEqual(PASS, status[0], "First 500 template list is empty") listremainingtemplate = Template.list(self.apiclient, templatefilter="executable", pagesize=500, page=2, account=self.account.name, domainid=self.account.domainid) status = validateList(listremainingtemplate) self.assertEqual(PASS, status[0], "Next 500 template list is empty") listalltemplate = Template.list(self.apiclient, templatefilter="executable", pagesize=1000, page=1, account=self.account.name, domainid=self.account.domainid) status = validateList(listalltemplate) self.assertEqual(PASS, status[0], "entire template list is empty") listfirst500template.extend(listremainingtemplate) for i, j in zip(listalltemplate, listfirst500template): self.assertNotEqual(i, j, "Check template listed are not same") return
def test_07_templates_per_project(self): """Test Templates limit per project """ # 1. set max no of templates per project to 1. # 2. Create a template in this project. Both template should be in # ready state # 3. Try create 2nd template in the project. It should give the user # appropriate error and an alert should be generated. # Reset the volume limits update_resource_limit( self.apiclient, 2, # Volume max=5, projectid=self.project.id ) self.debug( "Updating template resource limits for domain: %s" % self.account.domainid) # Set usage_vm=1 for Account 1 update_resource_limit( self.apiclient, 4, # Template max=1, projectid=self.project.id ) self.debug("Deploying VM for account: %s" % self.account.name) virtual_machine_1 = VirtualMachine.create( self.apiclient, self.services["server"], templateid=self.template.id, serviceofferingid=self.service_offering.id, projectid=self.project.id ) self.cleanup.append(virtual_machine_1) # Verify VM state self.assertEqual( virtual_machine_1.state, 'Running', "Check VM state is Running or not" ) virtual_machine_1.stop(self.apiclient) # Get the Root disk of VM volumes = list_volumes( self.apiclient, virtualmachineid=virtual_machine_1.id, projectid=self.project.id, type='ROOT' ) self.assertEqual( isinstance(volumes, list), True, "Check for list volume response return valid data" ) volume = volumes[0] self.debug("Creating template from volume: %s" % volume.id) # Create a template from the ROOTDISK template_1 = Template.create( self.userapiclient, self.services["template"], volumeid=volume.id, projectid=self.project.id ) self.cleanup.append(template_1) # Verify Template state self.assertEqual( template_1.isready, True, "Check Template is in ready state or not" ) # Exception should be raised for second template with self.assertRaises(Exception): Template.create( self.userapiclient, self.services["template"], volumeid=volume.id, projectid=self.project.id ) return