253 lines
11 KiB
Python
253 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 time
|
|
|
|
import testtools
|
|
from testtools import content
|
|
|
|
import vmdatabase
|
|
|
|
|
|
class TestVMDatabase(testtools.TestCase):
|
|
|
|
def setUp(self):
|
|
super(TestVMDatabase, self).setUp()
|
|
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')
|
|
self.addDetail('machine name', content.text_content(machine.name))
|
|
assert(len(rs_provider.ready_machines)==1)
|
|
assert(len(hp_provider.ready_machines)==2)
|
|
assert(machine==machine1)
|
|
|
|
machine = self.db.getMachineForUse('oneiric')
|
|
self.addDetail('machine name', content.text_content(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')
|
|
self.addDetail('machine name', content.text_content(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')
|
|
self.addDetail('machine name', content.text_content(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')
|
|
self.addDetail('machine name', content.text_content(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)
|