File: test_baseVagrantSetup.py

package info (click to toggle)
kiwi 10.2.33-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,528 kB
  • sloc: python: 67,299; sh: 3,980; xml: 3,379; ansic: 391; makefile: 354
file content (92 lines) | stat: -rw-r--r-- 3,135 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
from pytest_container.container import DerivedContainer
from .conftest import (
    CONTAINERS_WITH_ZYPPER,
    CONTAINERS_WITH_DNF
)
import pytest


VAGRANT_SETUP_CONTAINERFILE = r"""RUN groupadd vagrant && useradd -g vagrant vagrant
RUN echo $'#!/bin/bash \n\
printf "%s " "$@" >> /systemctl_params \n\
echo >> /systemctl_params \n\
'> /usr/bin/systemctl && chmod +x /usr/bin/systemctl
"""

ZYPPER_IN_CMD_CONTAINERFILE = (
    """RUN zypper -n in openssh sudo && /usr/sbin/sshd-gen-keys-start
""" + VAGRANT_SETUP_CONTAINERFILE
)


DNF_IN_CMD_CONTAINERFILE = (
    """RUN dnf -y install openssh-server && /usr/libexec/openssh/sshd-keygen ed25519
""" + VAGRANT_SETUP_CONTAINERFILE
)


@pytest.mark.parametrize(
    "container_per_test",
    [
        DerivedContainer(base=cont, containerfile=ZYPPER_IN_CMD_CONTAINERFILE)
        for cont in CONTAINERS_WITH_ZYPPER
    ] + [
        DerivedContainer(base=cont, containerfile=DNF_IN_CMD_CONTAINERFILE)
        for cont in CONTAINERS_WITH_DNF
    ],
    indirect=["container_per_test"],
)
def test_configures_system_for_vagrant(container_per_test):
    container_per_test.connection.run_expect(
        [0], ". /bin/functions.sh && baseVagrantSetup"
    )

    # check vagrant user's ssh config
    dot_ssh = container_per_test.connection.file("/home/vagrant/.ssh")
    assert dot_ssh.is_directory
    assert dot_ssh.group == "vagrant"
    assert dot_ssh.user == "vagrant"
    assert dot_ssh.mode == 0o700

    authorized_keys = container_per_test.connection.file(
        "/home/vagrant/.ssh/authorized_keys"
    )
    assert authorized_keys.is_file
    assert authorized_keys.group == "vagrant"
    assert authorized_keys.user == "vagrant"
    assert authorized_keys.mode == 0o600
    assert "vagrant insecure public key" in authorized_keys.content_string

    # check the sshd config
    sshd_config = container_per_test.connection.run_expect([0], "sshd -T").stdout
    assert "UseDNS no".lower() in sshd_config
    assert "GSSAPIAuthentication no".lower() in sshd_config

    # check that the shared /vagrant folder is present and has the correct permissions
    vagrant_shared_dir = container_per_test.connection.file("/vagrant")
    assert vagrant_shared_dir.is_directory
    assert vagrant_shared_dir.group == "vagrant"
    assert vagrant_shared_dir.user == "vagrant"

    vagrant_sudoers = container_per_test.connection.file(
        "/etc/sudoers.d/vagrant"
    )
    if vagrant_sudoers.exists and vagrant_sudoers.is_file:
        assert (
            vagrant_sudoers.content_string.strip() == "vagrant ALL=(ALL) NOPASSWD: ALL"
        )
        assert vagrant_sudoers.mode == 0o440
        assert vagrant_sudoers.user == "root"
        assert vagrant_sudoers.group == "root"
    else:
        sudoers = container_per_test.connection.file("/etc/sudoers")
        assert sudoers.exists and sudoers.is_file
        assert "vagrant ALL=(ALL) NOPASSWD: ALL" in sudoers.content_string

    # check that systemctl was called enabling sshd
    assert (
        "enable sshd"
        in container_per_test.connection.file(
            "/systemctl_params"
        ).content_string
    )