Skip to content

Commit 874b523

Browse files
Merge pull request #173 from pytest-dev/ronny/fix-vagrant-test
fix vagrant tests
2 parents f62afad + 22c3217 commit 874b523

File tree

3 files changed

+98
-11
lines changed

3 files changed

+98
-11
lines changed

.gitignore

+5
Original file line numberDiff line numberDiff line change
@@ -16,3 +16,8 @@ bin/
1616
include/
1717
.Python
1818
.env/
19+
.cache/
20+
.vagrant/
21+
.vagrant.d/
22+
.config/
23+
.local/

Vagrantfile

+70
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,70 @@
1+
# -*- mode: ruby -*-
2+
# vi: set ft=ruby :
3+
4+
# All Vagrant configuration is done below. The "2" in Vagrant.configure
5+
# configures the configuration version (we support older styles for
6+
# backwards compatibility). Please don't change it unless you know what
7+
# you're doing.
8+
Vagrant.configure("2") do |config|
9+
# The most common configuration options are documented and commented below.
10+
# For a complete reference, please see the online documentation at
11+
# https://docs.vagrantup.com.
12+
13+
# Every Vagrant development environment requires a box. You can search for
14+
# boxes at https://vagrantcloud.com/search.
15+
config.vm.box = "generic/debian11"
16+
17+
# Disable automatic box update checking. If you disable this, then
18+
# boxes will only be checked for updates when the user runs
19+
# `vagrant box outdated`. This is not recommended.
20+
# config.vm.box_check_update = false
21+
22+
# Create a forwarded port mapping which allows access to a specific port
23+
# within the machine from a port on the host machine. In the example below,
24+
# accessing "localhost:8080" will access port 80 on the guest machine.
25+
# NOTE: This will enable public access to the opened port
26+
# config.vm.network "forwarded_port", guest: 80, host: 8080
27+
28+
# Create a forwarded port mapping which allows access to a specific port
29+
# within the machine from a port on the host machine and only allow access
30+
# via 127.0.0.1 to disable public access
31+
# config.vm.network "forwarded_port", guest: 80, host: 8080, host_ip: "127.0.0.1"
32+
33+
# Create a private network, which allows host-only access to the machine
34+
# using a specific IP.
35+
# config.vm.network "private_network", ip: "192.168.33.10"
36+
37+
# Create a public network, which generally matched to bridged network.
38+
# Bridged networks make the machine appear as another physical device on
39+
# your network.
40+
# config.vm.network "public_network"
41+
42+
# Share an additional folder to the guest VM. The first argument is
43+
# the path on the host to the actual folder. The second argument is
44+
# the path on the guest to mount the folder. And the optional third
45+
# argument is a set of non-required options.
46+
# config.vm.synced_folder "../data", "/vagrant_data"
47+
48+
# Provider-specific configuration so you can fine-tune various
49+
# backing providers for Vagrant. These expose provider-specific options.
50+
# Example for VirtualBox:
51+
#
52+
# config.vm.provider "virtualbox" do |vb|
53+
# # Display the VirtualBox GUI when booting the machine
54+
# vb.gui = true
55+
#
56+
# # Customize the amount of memory on the VM:
57+
# vb.memory = "1024"
58+
# end
59+
#
60+
# View the documentation for the provider you are using for more
61+
# information on available options.
62+
63+
# Enable provisioning with a shell script. Additional provisioners such as
64+
# Ansible, Chef, Docker, Puppet and Salt are also available. Please see the
65+
# documentation for more information about their specific syntax and use.
66+
# config.vm.provision "shell", inline: <<-SHELL
67+
# apt-get update
68+
# apt-get install -y apache2
69+
# SHELL
70+
end

testing/test_xspec.py

+23-11
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,7 @@
1+
from __future__ import annotations
2+
13
import os
4+
import shutil
25
import subprocess
36
import sys
47

@@ -21,10 +24,10 @@
2124
class TestXSpec:
2225
def test_norm_attributes(self):
2326
spec = XSpec(
24-
r"socket=192.168.102.2:8888//python=c:/this/python2.5" r"//chdir=d:\hello"
27+
r"socket=192.168.102.2:8888//python=c:/this/python3.8//chdir=d:\hello"
2528
)
2629
assert spec.socket == "192.168.102.2:8888"
27-
assert spec.python == "c:/this/python2.5"
30+
assert spec.python == "c:/this/python3.8"
2831
assert spec.chdir == r"d:\hello"
2932
assert spec.nice is None
3033
assert not hasattr(spec, "_xyz")
@@ -195,19 +198,28 @@ def test_ssh(self, specssh, makegateway):
195198
assert rinfo.cwd == rinfo2.cwd
196199
assert rinfo.version_info == rinfo2.version_info
197200

198-
@pytest.mark.xfail(reason="bad image name", run=False)
199-
def test_vagrant(self, makegateway, tmpdir, monkeypatch):
200-
vagrant = py.path.local.sysfind("vagrant")
201-
if vagrant is None:
201+
def test_vagrant(self, makegateway):
202+
vagrant_bin = shutil.which("vagrant")
203+
if vagrant_bin is None:
202204
pytest.skip("Vagrant binary not in PATH")
203-
monkeypatch.chdir(tmpdir)
204-
subprocess.check_call("vagrant init hashicorp/precise32", shell=True)
205-
subprocess.check_call("vagrant up --provider virtualbox", shell=True)
206-
gw = makegateway("vagrant_ssh=default")
205+
res = subprocess.run(
206+
[vagrant_bin, "status", "default", "--machine-readable"],
207+
capture_output=True,
208+
encoding="utf-8",
209+
errors="replace",
210+
).stdout
211+
print(res)
212+
if ",default,state,shutoff\n" in res:
213+
pytest.xfail("vm shutoff, run `vagrant up` first")
214+
if ",default,state,not_created\n" in res:
215+
pytest.xfail("vm not created, run `vagrant up` first")
216+
if ",default,state,running\n" not in res:
217+
pytest.fail("unknown vm state")
218+
219+
gw = makegateway("vagrant_ssh=default//python=python3")
207220
rinfo = gw._rinfo()
208221
rinfo.cwd == "/home/vagrant"
209222
rinfo.executable == "/usr/bin/python"
210-
subprocess.check_call("vagrant halt", shell=True)
211223

212224
def test_socket(self, specsocket, makegateway):
213225
gw = makegateway("socket=%s//id=sock1" % specsocket.socket)

0 commit comments

Comments
 (0)