Skip to content

Commit 579d70e

Browse files
authored
Merge pull request #113 from apatard/provider1
Fixes non-virtualbox provider
2 parents 86933da + 59df8fd commit 579d70e

File tree

3 files changed

+35
-3
lines changed

3 files changed

+35
-3
lines changed

tests/test_vagrant.py

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,20 @@
3030
import vagrant
3131
from vagrant import compat
3232

33+
34+
# must be defined before TEST_PROVIDER.
35+
def get_provider() -> str:
36+
"""
37+
Return the provider to use for testing and allow to set it
38+
with PYTHON_VAGRANT_TEST_PROVIDER environment variable is set.
39+
Defauts to virtualbox
40+
"""
41+
my_prov = "virtualbox"
42+
if "PYTHON_VAGRANT_TEST_PROVIDER" in os.environ:
43+
my_prov = os.environ["PYTHON_VAGRANT_TEST_PROVIDER"]
44+
return my_prov
45+
46+
3347
# location of Vagrant executable
3448
VAGRANT_EXE = vagrant.get_vagrant_executable()
3549

@@ -53,7 +67,7 @@
5367
# name of the base box used for testing
5468
TEST_BOX_URL = "generic/alpine315"
5569
TEST_BOX_NAME = TEST_BOX_URL
56-
TEST_PROVIDER = "virtualbox"
70+
TEST_PROVIDER = get_provider()
5771
TEST_DUMMY_BOX_URL = os.path.join(
5872
os.path.dirname(os.path.abspath(__file__)), "tools", f"dummy-{TEST_PROVIDER}.box"
5973
)
@@ -458,7 +472,7 @@ def test_boxesvm(test_dir):
458472
"""
459473
v = vagrant.Vagrant(test_dir)
460474
box_name = "python-vagrant-dummy-box"
461-
provider = "virtualbox"
475+
provider = f"{TEST_PROVIDER}"
462476

463477
# Start fresh with no dummy box
464478
if box_name in list_box_names():

tox.ini

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ commands =
2626
--no-cov-on-fail \
2727
}
2828
passenv =
29+
PYTHON_VAGRANT_TEST_PROVIDER
2930
# Pass HOME to the test environment as it is required by
3031
# vagrant. Otherwise error happens due to missing HOME env variable.
3132
HOME

vagrant/__init__.py

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -524,6 +524,22 @@ def status(self, vm_name=None):
524524
output = self._run_vagrant_command(["status", "--machine-readable", vm_name])
525525
return self._parse_status(output)
526526

527+
def _normalize_status(self, status, provider):
528+
"""
529+
Normalise VM status to cope with state name being different
530+
between providers
531+
"""
532+
if provider == "virtualbox":
533+
return status
534+
535+
if provider == "libvirt":
536+
if status == "shutoff":
537+
return self.POWEROFF
538+
if status == "paused":
539+
return self.SAVED
540+
541+
return status
542+
527543
def _parse_status(self, output):
528544
"""
529545
Unit testing is so much easier when Vagrant is removed from the
@@ -537,8 +553,9 @@ def _parse_status(self, output):
537553
for target, tuples in itertools.groupby(parsed, lambda tup: tup[1]):
538554
# transform tuples into a dict mapping "type" to "data"
539555
info = {kind: data for timestamp, _, kind, data in tuples}
556+
state = self._normalize_status(info.get("state"), info.get("provider-name"))
540557
status = Status(
541-
name=target, state=info.get("state"), provider=info.get("provider-name")
558+
name=target, state=state, provider=info.get("provider-name")
542559
)
543560
statuses.append(status)
544561

0 commit comments

Comments
 (0)