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
|
import os
import shlex
import pytest
from buildstream import _yaml
from tests.testutils import cli_integration as cli
DATA_DIR = os.path.join(
os.path.dirname(os.path.realpath(__file__)),
"project"
)
def execute_shell(cli, project, string, element='base.bst'):
# Ensure the element is built
result = cli.run(project=project, args=['build', element])
assert result.exit_code == 0
return cli.run(project=project,
args=['shell', element, '--'] + shlex.split(string))
# Test running something through a shell, allowing it to find the
# executable
@pytest.mark.datafiles(DATA_DIR)
def test_shell(cli, tmpdir, datafiles):
project = os.path.join(datafiles.dirname, datafiles.basename)
result = execute_shell(cli, project, "echo Ponies!")
assert result.exit_code == 0
assert result.output == "Ponies!\n"
# Test running an executable directly
@pytest.mark.datafiles(DATA_DIR)
def test_executable(cli, tmpdir, datafiles):
project = os.path.join(datafiles.dirname, datafiles.basename)
result = execute_shell(cli, project, "/bin/echo Horseys!")
assert result.exit_code == 0
assert result.output == "Horseys!\n"
# Test running an executable in a runtime with no shell (i.e., no
# /bin/sh)
@pytest.mark.datafiles(DATA_DIR)
def test_no_shell(cli, tmpdir, datafiles):
project = os.path.join(datafiles.dirname, datafiles.basename)
element_path = os.path.join(project, 'elements')
element_name = 'shell/no-shell.bst'
# Create an element that removes /bin/sh from the base runtime
element = {
'kind': 'script',
'depends': [{
'filename': 'base.bst',
'type': 'build'
}],
'variables': {
'install-root': '/'
},
'config': {
'commands': [
'rm /bin/sh'
]
}
}
os.makedirs(os.path.dirname(os.path.join(element_path, element_name)), exist_ok=True)
_yaml.dump(element, os.path.join(element_path, element_name))
result = cli.run(project=project, args=['build', element_name])
assert result.exit_code == 0
result = execute_shell(cli, project, '/usr/bin/echo Pegasissies!', element=element_name)
assert result.exit_code == 0
assert result.output == "Pegasissies!\n"
|