Add a new table to track the results of tests. Include Success, failure, timeout, elapsed time, job, gerrit change. This will let us collect statistics on the time certain jobs take to run on certain images or providers, and whether false positives are higher for some providers. Change-Id: I7fde5e04ca4a08ecb76eea08cc930634087f7372
249 lines
11 KiB
Python
249 lines
11 KiB
Python
#!/usr/bin/env python
|
|
|
|
# Update the base image that is used for devstack VMs.
|
|
|
|
# Copyright (C) 2012 OpenStack LLC.
|
|
#
|
|
# Licensed 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 unittest
|
|
import vmdatabase
|
|
import time
|
|
|
|
class testVMDatabase(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
self.db = vmdatabase.VMDatabase(':memory:')
|
|
|
|
def test_add_provider(self):
|
|
provider = vmdatabase.Provider(name='rackspace', driver='rackspace',
|
|
username='testuser', api_key='testapikey',
|
|
giftable=False)
|
|
self.db.session.add(provider)
|
|
self.db.commit()
|
|
provider = vmdatabase.Provider(name='hpcloud', driver='openstack',
|
|
username='testuser', api_key='testapikey',
|
|
giftable=True)
|
|
self.db.session.add(provider)
|
|
self.db.commit()
|
|
|
|
def test_add_base_image(self):
|
|
self.test_add_provider()
|
|
|
|
provider = self.db.getProvider('rackspace')
|
|
base_image1 = provider.newBaseImage('oneiric', 1)
|
|
base_image2 = provider.newBaseImage('precise', 2)
|
|
|
|
provider = self.db.getProvider('hpcloud')
|
|
base_image1 = provider.newBaseImage('oneiric', 1)
|
|
base_image2 = provider.newBaseImage('precise', 2)
|
|
|
|
def test_add_snap_image(self):
|
|
self.test_add_base_image()
|
|
provider = self.db.getProvider('rackspace')
|
|
base_image1 = provider.getBaseImage('oneiric')
|
|
base_image2 = provider.getBaseImage('precise')
|
|
snapshot_image1 = base_image1.newSnapshotImage('oneiric-1331683549', 1331683549, 201, 301)
|
|
snapshot_image2 = base_image2.newSnapshotImage('precise-1331683549', 1331683549, 202, 301)
|
|
|
|
hp_provider = self.db.getProvider('hpcloud')
|
|
hp_base_image1 = hp_provider.getBaseImage('oneiric')
|
|
hp_base_image2 = hp_provider.getBaseImage('precise')
|
|
hp_snapshot_image1 = hp_base_image1.newSnapshotImage('oneiric-1331683549', 1331929410, 211, 311)
|
|
hp_snapshot_image2 = hp_base_image2.newSnapshotImage('precise-1331683549', 1331929410, 212, 311)
|
|
|
|
self.db.print_state()
|
|
assert(not base_image1.current_snapshot)
|
|
assert(not base_image2.current_snapshot)
|
|
|
|
snapshot_image1.state=vmdatabase.READY
|
|
assert(base_image1.current_snapshot)
|
|
assert(not base_image2.current_snapshot)
|
|
assert(snapshot_image1 == base_image1.current_snapshot)
|
|
|
|
snapshot_image2.state=vmdatabase.READY
|
|
assert(base_image1.current_snapshot)
|
|
assert(base_image2.current_snapshot)
|
|
assert(snapshot_image1 == base_image1.current_snapshot)
|
|
assert(snapshot_image2 == base_image2.current_snapshot)
|
|
|
|
snapshot_image2_latest = base_image2.newSnapshotImage('precise-1331683550',
|
|
1331683550, 203, 303)
|
|
assert(base_image1.current_snapshot)
|
|
assert(base_image2.current_snapshot)
|
|
assert(snapshot_image1 == base_image1.current_snapshot)
|
|
assert(snapshot_image2 == base_image2.current_snapshot)
|
|
|
|
snapshot_image2_latest.state=vmdatabase.READY
|
|
assert(base_image1.current_snapshot)
|
|
assert(base_image2.current_snapshot)
|
|
assert(snapshot_image1 == base_image1.current_snapshot)
|
|
assert(snapshot_image2_latest == base_image2.current_snapshot)
|
|
|
|
def test_add_machine(self):
|
|
self.test_add_snap_image()
|
|
provider = self.db.getProvider('rackspace')
|
|
base_image1 = provider.getBaseImage('oneiric')
|
|
base_image2 = provider.getBaseImage('precise')
|
|
snapshot_image1 = base_image1.current_snapshot
|
|
snapshot_image2 = base_image2.current_snapshot
|
|
assert(len(provider.machines) == 0)
|
|
assert(len(provider.ready_machines) == 0)
|
|
assert(len(provider.building_machines) == 0)
|
|
assert(len(base_image1.machines) == 0)
|
|
assert(len(base_image1.ready_machines) == 0)
|
|
assert(len(base_image1.building_machines) == 0)
|
|
assert(len(base_image2.machines) == 0)
|
|
assert(len(base_image2.ready_machines) == 0)
|
|
assert(len(base_image2.building_machines) == 0)
|
|
|
|
machine1 = base_image1.newMachine('%s-1331683760'%base_image1.name,
|
|
'20000021', '1.2.3.4', 'uuid1')
|
|
assert(len(provider.machines) == 1)
|
|
assert(len(provider.ready_machines) == 0)
|
|
assert(len(provider.building_machines) == 1)
|
|
assert(len(base_image1.machines) == 1)
|
|
assert(len(base_image1.ready_machines) == 0)
|
|
assert(len(base_image1.building_machines) == 1)
|
|
assert(len(base_image2.machines) == 0)
|
|
assert(len(base_image2.ready_machines) == 0)
|
|
assert(len(base_image2.building_machines) == 0)
|
|
|
|
machine2 = base_image2.newMachine('%s-1331683761'%base_image1.name,
|
|
'20000022', '1.2.3.5', 'uuid2')
|
|
assert(len(provider.machines) == 2)
|
|
assert(len(provider.ready_machines) == 0)
|
|
assert(len(provider.building_machines) == 2)
|
|
assert(len(base_image1.machines) == 1)
|
|
assert(len(base_image1.ready_machines) == 0)
|
|
assert(len(base_image1.building_machines) == 1)
|
|
assert(len(base_image2.machines) == 1)
|
|
assert(len(base_image2.ready_machines) == 0)
|
|
assert(len(base_image2.building_machines) == 1)
|
|
|
|
machine1.state = vmdatabase.READY
|
|
assert(len(provider.machines) == 2)
|
|
assert(len(provider.ready_machines) == 1)
|
|
assert(len(provider.building_machines) == 1)
|
|
assert(len(base_image1.machines) == 1)
|
|
assert(len(base_image1.ready_machines) == 1)
|
|
assert(len(base_image1.building_machines) == 0)
|
|
assert(len(base_image2.machines) == 1)
|
|
assert(len(base_image2.ready_machines) == 0)
|
|
assert(len(base_image2.building_machines) == 1)
|
|
|
|
machine2.state = vmdatabase.ERROR
|
|
assert(len(provider.machines) == 2)
|
|
assert(len(provider.ready_machines) == 1)
|
|
assert(len(provider.building_machines) == 0)
|
|
assert(len(base_image1.machines) == 1)
|
|
assert(len(base_image1.ready_machines) == 1)
|
|
assert(len(base_image1.building_machines) == 0)
|
|
assert(len(base_image2.machines) == 1)
|
|
assert(len(base_image2.ready_machines) == 0)
|
|
assert(len(base_image2.building_machines) == 0)
|
|
|
|
machine2.state = vmdatabase.READY
|
|
assert(len(provider.machines) == 2)
|
|
assert(len(provider.ready_machines) == 2)
|
|
assert(len(provider.building_machines) == 0)
|
|
assert(len(base_image1.machines) == 1)
|
|
assert(len(base_image1.ready_machines) == 1)
|
|
assert(len(base_image1.building_machines) == 0)
|
|
assert(len(base_image2.machines) == 1)
|
|
assert(len(base_image2.ready_machines) == 1)
|
|
assert(len(base_image2.building_machines) == 0)
|
|
|
|
hp_provider = self.db.getProvider('hpcloud')
|
|
hp_base_image1 = hp_provider.getBaseImage('oneiric')
|
|
hp_base_image2 = hp_provider.getBaseImage('precise')
|
|
hp_snapshot_image1 = hp_base_image1.current_snapshot
|
|
hp_snapshot_image2 = hp_base_image2.current_snapshot
|
|
hp_machine1 = hp_base_image1.newMachine('%s-1331683551'%hp_base_image1.name,
|
|
'21000021', '2.2.3.4', 'hpuuid1')
|
|
hp_machine2 = hp_base_image2.newMachine('%s-1331683552'%hp_base_image2.name,
|
|
'21000022', '2.2.3.5', 'hpuuid2')
|
|
hp_machine1.state = vmdatabase.READY
|
|
hp_machine2.state = vmdatabase.READY
|
|
|
|
return (machine1, machine2, hp_machine1, hp_machine2)
|
|
|
|
def test_get_machine(self):
|
|
(machine1, machine2, hp_machine1, hp_machine2) = self.test_add_machine()
|
|
# order should be rs1, hp1 for oneiric, hp2, rs1 for precise
|
|
hp_machine2.state_time = machine1.state_time-60
|
|
self.db.commit()
|
|
|
|
self.db.print_state()
|
|
|
|
rs_provider = self.db.getProvider('rackspace')
|
|
hp_provider = self.db.getProvider('hpcloud')
|
|
|
|
assert(len(rs_provider.ready_machines)==2)
|
|
assert(len(hp_provider.ready_machines)==2)
|
|
|
|
machine = self.db.getMachineForUse('oneiric')
|
|
print 'got machine', machine.name
|
|
assert(len(rs_provider.ready_machines)==1)
|
|
assert(len(hp_provider.ready_machines)==2)
|
|
assert(machine==machine1)
|
|
|
|
machine = self.db.getMachineForUse('oneiric')
|
|
print 'got machine', machine.name
|
|
assert(len(rs_provider.ready_machines)==1)
|
|
assert(len(hp_provider.ready_machines)==1)
|
|
assert(machine==hp_machine1)
|
|
|
|
machine = self.db.getMachineForUse('precise')
|
|
print 'got machine', machine.name
|
|
assert(len(rs_provider.ready_machines)==1)
|
|
assert(len(hp_provider.ready_machines)==0)
|
|
assert(machine==hp_machine2)
|
|
|
|
machine = self.db.getMachineForUse('precise')
|
|
print 'got machine', machine.name
|
|
assert(len(rs_provider.ready_machines)==0)
|
|
assert(len(hp_provider.ready_machines)==0)
|
|
assert(machine==machine2)
|
|
|
|
def test_result(self):
|
|
(rs_machine1, rs_machine2, hp_machine1, hp_machine2) = self.test_add_machine()
|
|
self.db.print_state()
|
|
|
|
machine = self.db.getMachineForUse('oneiric')
|
|
print 'got machine', machine.name
|
|
result = machine.newResult('test-job', 82, 1234, 1)
|
|
time.sleep(2)
|
|
result.setResult(vmdatabase.RESULT_SUCCESS)
|
|
self.db.commit()
|
|
|
|
orig_result = result
|
|
for provider in self.db.getProviders():
|
|
for base_image in provider.base_images:
|
|
if (base_image.name == orig_result.base_image.name and
|
|
base_image.provider.name == orig_result.base_image.provider.name):
|
|
assert(len(base_image.results)==1)
|
|
for result in base_image.results:
|
|
assert(result.end_time > result.start_time)
|
|
assert(result.result==vmdatabase.RESULT_SUCCESS)
|
|
assert(result.machine_id == machine.id)
|
|
assert(result.jenkins_job_name == 'test-job')
|
|
assert(result.jenkins_build_number == 82)
|
|
assert(result.gerrit_change_number == 1234)
|
|
assert(result.gerrit_patchset_number == 1)
|
|
else:
|
|
assert(len(base_image.results)==0)
|
|
|