mirror of
https://github.com/kevingruesser/bootstrap-vz.git
synced 2025-10-08 01:40:31 +00:00
Fix lock handling for virtualbox tests
This commit is contained in:
parent
ef37cd257f
commit
5b48ce58c5
1 changed files with 24 additions and 10 deletions
|
@ -1,6 +1,7 @@
|
||||||
from instance import Instance
|
from instance import Instance
|
||||||
import virtualbox
|
import virtualbox
|
||||||
from contextlib import contextmanager
|
from contextlib import contextmanager
|
||||||
|
from ..tools import waituntil
|
||||||
import logging
|
import logging
|
||||||
log = logging.getLogger(__name__)
|
log = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -84,7 +85,8 @@ class VirtualBoxInstance(Instance):
|
||||||
def shutdown(self):
|
def shutdown(self):
|
||||||
log.debug('Shutting down vbox machine `{name}\''.format(name=self.name))
|
log.debug('Shutting down vbox machine `{name}\''.format(name=self.name))
|
||||||
self.session.console.power_down().wait_for_completion(-1)
|
self.session.console.power_down().wait_for_completion(-1)
|
||||||
lock(self.machine, self.session).unlock()
|
if not waituntil(lambda: self.machine.session_state == virtualbox.library.SessionState.unlocked):
|
||||||
|
raise LockingException('Timeout while waiting for the machine to become unlocked')
|
||||||
|
|
||||||
def destroy(self):
|
def destroy(self):
|
||||||
log.debug('Destroying vbox machine `{name}\''.format(name=self.name))
|
log.debug('Destroying vbox machine `{name}\''.format(name=self.name))
|
||||||
|
@ -105,15 +107,27 @@ class VirtualBoxInstance(Instance):
|
||||||
|
|
||||||
@contextmanager
|
@contextmanager
|
||||||
def lock(machine, session):
|
def lock(machine, session):
|
||||||
|
if machine.session_state != virtualbox.library.SessionState.unlocked:
|
||||||
|
msg = ('Acquiring lock on machine failed, state was `{state}\' '
|
||||||
|
'instead of `Unlocked\'.'.format(state=str(machine.session_state)))
|
||||||
|
raise LockingException(msg)
|
||||||
|
|
||||||
machine.lock_machine(session, virtualbox.library.LockType.write)
|
machine.lock_machine(session, virtualbox.library.LockType.write)
|
||||||
yield session.machine
|
yield session.machine
|
||||||
from ..tools import waituntil
|
|
||||||
if machine.session_state == virtualbox.library.SessionState.unlocked:
|
if machine.session_state != virtualbox.library.SessionState.locked:
|
||||||
return
|
if not waituntil(lambda: machine.session_state == virtualbox.library.SessionState.unlocked):
|
||||||
if machine.session_state == virtualbox.library.SessionState.unlocking:
|
msg = ('Error before trying to release lock on machine, state was `{state}\' '
|
||||||
waituntil(lambda: machine.session_state == virtualbox.library.SessionState.unlocked)
|
'instead of `Locked\'.'.format(state=str(machine.session_state)))
|
||||||
return
|
raise LockingException(msg)
|
||||||
if machine.session_state == virtualbox.library.SessionState.spawning:
|
|
||||||
waituntil(lambda: machine.session_state == virtualbox.library.SessionState.locked)
|
|
||||||
session.unlock_machine()
|
session.unlock_machine()
|
||||||
waituntil(lambda: machine.session_state == virtualbox.library.SessionState.unlocked)
|
|
||||||
|
if not waituntil(lambda: machine.session_state == virtualbox.library.SessionState.unlocked):
|
||||||
|
msg = ('Timeout while trying to release lock on machine, '
|
||||||
|
'last state was `{state}\''.format(state=str(machine.session_state)))
|
||||||
|
raise LockingException(msg)
|
||||||
|
|
||||||
|
|
||||||
|
class LockingException(Exception):
|
||||||
|
pass
|
||||||
|
|
Loading…
Add table
Reference in a new issue