| #!/usr/bin/env python |
| # Licensed to the Apache Software Foundation (ASF) under one |
| # or more contributor license agreements. See the NOTICE file |
| # distributed with this work for additional information |
| # regarding copyright ownership. The ASF licenses this file |
| # to you under the Apache License, Version 2.0 (the |
| # "License"); you may not use this file except in compliance |
| # with the License. You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, |
| # software distributed under the License is distributed on an |
| # "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| # KIND, either express or implied. See the License for the |
| # specific language governing permissions and limitations |
| # under the License. |
| import unittest2 as unittest |
| except ImportError: |
| import unittest |
| |
| import random |
| import hashlib |
| from cloudstackTestCase import * |
| |
| class Provision(cloudstackTestCase): |
| ''' |
| ''' |
| def setUp(self): |
| pass |
| |
| |
| def tearDown(self): |
| pass |
| |
| |
| def test_1_createAccounts(self, numberOfAccounts=5): |
| ''' |
| Create a bunch of user accounts |
| ''' |
| mdf = hashlib.md5() |
| mdf.update('password') |
| mdf_pass = mdf.hexdigest() |
| api = self.testClient.getApiClient() |
| for i in range(1, numberOfAccounts + 1): |
| acct = createAccount.createAccountCmd() |
| acct.accounttype = 0 |
| acct.firstname = 'user' + str(i) |
| acct.lastname = 'user' + str(i) |
| acct.password = mdf_pass |
| acct.username = 'user' + str(i) |
| acct.email = 'user@example.com' |
| acct.account = 'user' + str(i) |
| acct.domainid = 1 |
| acctResponse = api.createAccount(acct) |
| self.debug("successfully created account: %s, user: %s, id: %s"%(acctResponse.account, acctResponse.username, acctResponse.id)) |
| |
| |
| def test_2_createServiceOffering(self): |
| apiClient = self.testClient.getApiClient() |
| createSOcmd=createServiceOffering.createServiceOfferingCmd() |
| createSOcmd.name='Sample SO' |
| createSOcmd.displaytext='Sample SO' |
| createSOcmd.storagetype='shared' |
| createSOcmd.cpunumber=1 |
| createSOcmd.cpuspeed=100 |
| createSOcmd.memory=128 |
| createSOcmd.offerha='false' |
| createSOresponse = apiClient.createServiceOffering(createSOcmd) |
| return createSOresponse.id |
| |
| def deployCmd(self, account, service): |
| deployVmCmd = deployVirtualMachine.deployVirtualMachineCmd() |
| deployVmCmd.zoneid = 1 |
| deployVmCmd.hypervisor='Simulator' |
| deployVmCmd.account=account |
| deployVmCmd.domainid=1 |
| deployVmCmd.templateid=10 |
| deployVmCmd.serviceofferingid=service |
| return deployVmCmd |
| |
| def listVmsInAccountCmd(self, acct): |
| api = self.testClient.getApiClient() |
| listVmCmd = listVirtualMachines.listVirtualMachinesCmd() |
| listVmCmd.account = acct |
| listVmCmd.zoneid = 1 |
| listVmCmd.domainid = 1 |
| listVmResponse = api.listVirtualMachines(listVmCmd) |
| return listVmResponse |
| |
| |
| def destroyVmCmd(self, key): |
| api = self.testClient.getApiClient() |
| destroyVmCmd = destroyVirtualMachine.destroyVirtualMachineCmd() |
| destroyVmCmd.id = key |
| api.destroyVirtualMachine(destroyVmCmd) |
| |
| |
| def test_3_stressDeploy(self): |
| ''' |
| Deploy 20 Vms in each account |
| ''' |
| service_id = self.test_2_createServiceOffering() |
| api = self.testClient.getApiClient() |
| for acct in range(1, 5): |
| [api.deployVirtualMachine(self.deployCmd('user'+str(acct), service_id)) for x in range(0,20)] |
| |
| def test_4_stressDestroy(self): |
| ''' |
| Cleanup all Vms in every account |
| ''' |
| api = self.testClient.getApiClient() |
| for acct in range(1, 6): |
| for vm in self.listVmsInAccountCmd('user'+str(acct)): |
| if vm is not None: |
| self.destroyVmCmd(vm.id) |
| |
| def test_5_combineStress(self): |
| for i in range(0, 5): |
| self.test_3_stressDeploy() |
| self.test_4_stressDestroy() |
| |
| def deployN(self,nargs=300,batchsize=0): |
| ''' |
| Deploy Nargs number of VMs concurrently in batches of size {batchsize}. |
| When batchsize is 0 all Vms are deployed in one batch |
| VMs will be deployed in 5:2:6 ratio |
| ''' |
| cmds = [] |
| |
| if batchsize == 0: |
| self.testClient.submitCmdsAndWait(cmds) |
| else: |
| while len(z) > 0: |
| try: |
| newbatch = [cmds.pop() for b in range(batchsize)] #pop batchsize items |
| self.testClient.submitCmdsAndWait(newbatch) |
| except IndexError: |
| break |