Skip to content

Commit

Permalink
New test for default licenses
Browse files Browse the repository at this point in the history
  • Loading branch information
mosteo committed Nov 4, 2023
1 parent fcb8f38 commit 6449143
Show file tree
Hide file tree
Showing 6 changed files with 89 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/ci-toolchain.yml
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,7 @@ jobs:
python-version: '3.x'

- name: Install e3
run: pip install --upgrade e3-testsuite
run: pip install --upgrade -r testsuite/requirements.txt

- name: Run testsuite
run: cd testsuite; ./run.py -E
Expand Down
5 changes: 4 additions & 1 deletion testsuite/Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,10 @@ RUN apt-get update && apt-get install -y \
sudo \
util-linux # for `unshare`

RUN pip3 install e3-testsuite
# Use parent testsuite python packages here too, as they are potential imports
# of the drivers and helpers that may be needed in the wrapped test.
COPY ./testsuite/requirements.txt /testsuite/requirements.txt
RUN pip3 install -r /testsuite/requirements.txt

WORKDIR /testsuite
USER user
49 changes: 48 additions & 1 deletion testsuite/drivers/alr.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,15 @@

import os
import os.path
import platform
import pexpect
import re
from shutil import copytree
import sys

from e3.fs import mkdir
from e3.os.process import Run, quote_arg
from e3.testsuite.driver.classic import ProcessResult
from shutil import copytree

TESTSUITE_ROOT = os.path.dirname(os.path.dirname(
os.path.abspath(__file__)))
Expand Down Expand Up @@ -127,6 +130,50 @@ def run_alr(*args, **kwargs):
return ProcessResult(p.status, p.out.replace('\r\n', '\n'))


def run_alr_interactive(args: [str], output: [str], input: [str], timeout=5) -> str:
"""
NON-WINDOWS-ONLY
Run "alr" with the given arguments, feeding it the given input. No other
arguments like -q or -d are added (except --no-color).
:param args: List of arguments to pass to "alr".
:param output: List of strings expected to be output by the subprocess.
:param input: List of strings to feed to the subprocess's standard input.
:param timeout: Timeout in seconds for the subprocess to complete.
"""
# Check whether on Windows to fail early (revisit if pexpect is updated?)
if platform.system() == "Windows":
print('SKIP: pexpect unavailable on Windows')
sys.exit(0)

# Run interactively using pexpect (run with input fails as it is not
# detected as tty and input is closed prematurely)
args.insert(0, "--no-color")
child = pexpect.spawn('alr', args=args, timeout=timeout)

try:
# Alternate between expected output and given input
for out, inp in zip(output, input):
child.expect(out)
child.sendline(inp)

# Wait for the process to finish
child.expect(pexpect.EOF) # Match all output before ending
child.wait()
child.close()
except pexpect.exceptions.TIMEOUT:
raise RuntimeError(f"pexpect timeout with alr output:\n"
f"{child.before.decode('utf-8')}")

# Assert proper output code
assert child.exitstatus == 0, \
f"Unexpected exit status: {child.exitstatus}\n" + \
f"Output: {child.before.decode('utf-8')}"

# Return command output with CRLF replaced by LF (as does run_alr)
return child.before.decode('utf-8').replace('\r\n', '\n')


def fixtures_path(*args):
"""
Return a path under the testsuite `fixtures` directory.
Expand Down
1 change: 1 addition & 0 deletions testsuite/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
docker
e3-testsuite
pexpect
33 changes: 33 additions & 0 deletions testsuite/tests/init/default-licenses/test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
"""
Check that offered default licenses are all valid
"""

import os
import shutil

from drivers.alr import run_alr, run_alr_interactive

# iterate over values 1..8
for i in range(1, 9):

# Run interactively
run_alr_interactive(['init', '--bin', 'xxx'],
output=['> ' for _ in range(7)],
input=['', # Description
'', # Full user name
'', # Github login
'', # Email
f'{i}', # License
'', # Tags
''], # Website
timeout=3)

# Check that it can be shown, which will load the manifest
os.chdir("xxx")
p = run_alr("show")

# Prepare for next iteration
os.chdir("..")
shutil.rmtree("xxx")

print('SUCCESS')
2 changes: 2 additions & 0 deletions testsuite/tests/init/default-licenses/test.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
driver: python-script
indexes: {}

0 comments on commit 6449143

Please sign in to comment.