diff --git a/testsuite/drivers/alr.py b/testsuite/drivers/alr.py index 6ddc8dee0..942051c02 100644 --- a/testsuite/drivers/alr.py +++ b/testsuite/drivers/alr.py @@ -4,6 +4,7 @@ import os import os.path +import pexpect import re from shutil import copytree @@ -127,6 +128,31 @@ def run_alr(*args, **kwargs): return ProcessResult(p.status, p.out.replace('\r\n', '\n')) +def run_alr_interactive(args: [str], input: [str], timeout=5): + """ + Run "alr" with the given arguments, feeding it the given input. No other + arguments like -q or -d are added. + + :param args: List of arguments to pass to "alr". + :param input: String to feed to the subprocess's standard input. + :param timeout: Timeout in seconds for the subprocess to complete. + """ + # Run interactively using pexpect (run with input fails as it is not + # detected as tty and input is closed prematurely) + child = pexpect.spawn('alr', args=args, timeout=timeout) + for line in input: + child.sendline(line) + + # Wait for the process to finish + child.expect(pexpect.EOF) + child.close() + + # Assert proper output code + assert child.exitstatus == 0, \ + f"Unexpected exit status: {child.exitstatus}\n" + \ + f"Output: {child.before.decode('utf-8')}" + + def fixtures_path(*args): """ Return a path under the testsuite `fixtures` directory. diff --git a/testsuite/requirements.txt b/testsuite/requirements.txt index b0fd578d0..dcaf78ee3 100644 --- a/testsuite/requirements.txt +++ b/testsuite/requirements.txt @@ -1,2 +1,3 @@ docker e3-testsuite +pexpect diff --git a/testsuite/tests/init/default-licenses/test.py b/testsuite/tests/init/default-licenses/test.py new file mode 100644 index 000000000..741472f11 --- /dev/null +++ b/testsuite/tests/init/default-licenses/test.py @@ -0,0 +1,32 @@ +""" +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'], + 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') diff --git a/testsuite/tests/init/default-licenses/test.yaml b/testsuite/tests/init/default-licenses/test.yaml new file mode 100644 index 000000000..187c05aa3 --- /dev/null +++ b/testsuite/tests/init/default-licenses/test.yaml @@ -0,0 +1,2 @@ +driver: python-script +indexes: {}