Ejemplo n.º 1
0
def harness(p):
    psh.init(p)

    header_seen = False
    expected_tasks = ['[idle]', 'init', 'psh']
    ps_header = 'PID PPID PR STATE %CPU WAIT TIME VMEM THR CMD'.split()

    p.sendline('ps')
    p.expect(r'ps(\r+)\n')

    while True:
        # Get prompt or new line
        idx = p.expect([r'\(psh\)\% ', r'(.*?)(\r+)\n'])
        if idx == 0:
            break

        line = p.match.group(0)

        if line.split() == ps_header and not header_seen:
            header_seen = True
        else:
            try:
                pid, ppid, pr, state, cpu, wait, time, vmem, thr, task = line.split(
                )
            except ValueError:
                assert False, f'wrong ps output: {line}'

            if task in expected_tasks:
                expected_tasks.remove(task)

    assert header_seen, 'ps header not seen'
    assert not expected_tasks, f'not seen expected task: {", ".join(expected_tasks)}'
def harness(p):
    psh.init(p)

    mkdir(p, 'etc')

    # Create test environment
    mkdir(p, 'testenv')
    mkdir(p, 'testenv/ipsum')
    mkdir(p, 'testenv/lorem')
    mkdir(p, 'testenv/loremipsum')
    touch(p, 'testenv/loremipsum/dolor.txt')
    touch(p, 'testenv/loremipsum/sit.jpg')
    touch(p, 'testenv/loremipsum/amet.exe')

    # Check autocompletion in command
    assert_completion(p, [['ls e', 'tc/']])
    assert_completion(p, [['ls /e', 'tc/']])
    assert_completion(p, [['ls /etc', '/']])

    assert_completion(p, [['ls testen', 'v/']])
    assert_completion(p, [['ls /testen', 'v/']])
    assert_completion(p, [['ls testenv/i', 'psum/']])

    longpath = 'ls testenv/lorem/./../lorem/../../testenv/ip'
    assert_completion(p, [[longpath, 'sum']])
    assert_completion(p, [['ls ../testenv/ip', 'sum']])

    # Check multiple autocompletion in one
    assert_completion(p, [['ls testen', 'v/'], ['loremi', 'psum/'], ['dol', 'or.txt']])

    # Check hints
    assert_hints(p, path='ls testenv/', hints=['ipsum', 'lorem', 'loremipsum'])
    assert_hints(p, path='ls testenv/lorem/../', hints=['ipsum', 'lorem', 'loremipsum'])
    assert_hints(p, path='ls testenv/loremipsum/', hints=['amet', 'dolor', 'sit'])
Ejemplo n.º 3
0
def harness(p):
    psh.init(p)
    psh.assert_prompt(p)

    # Simple check
    psh.assert_cmd(p, 'echo', '\r+\n', 'empty echo fail', is_regex=True)
    psh.assert_cmd(p, 'echo loremipsum', 'loremipsum', 'simple text not echoed back')
    psh.assert_cmd(p, 'echo lorem ipsum dolor ales', 'lorem ipsum dolor ales', 'multiple argument not echoed back')

    # Return value check
    psh.assert_cmd(p, 'echo $?', '0', 'last exit status was not zero')
    p.sendline("exec")  # force execution of bad command
    psh.assert_cmd(p, 'echo $?', '-22', 'last exit status was not expected -22')

    # Mingle checks
    psh.assert_cmd(p, 'echo $ lorem ipsum', ' lorem ipsum', 'bad empty $ interpretation')
    psh.assert_cmd(p, 'echo ? lorem', '? lorem', 'bad empty ? interpretation')
    psh.assert_cmd(p, 'echo lorem $? $? ipsum $?', 'lorem 0 0 ipsum 0', 'multiple return values print fail')
    psh.assert_cmd(p, 'echo lorem $ $ ipsum', 'lorem   ipsum', 'echo bad $ interpretation')
    psh.assert_cmd(p, 'echo lorem $ipsum dolor$ales', 'lorem  dolor', 'echo bad $ interpretation')
    psh.assert_cmd(p, 'echo $lorem$? ipsum', '0 ipsum', 'echo can`t print two variables consecutively')

    # Eating '"' check
    psh.assert_cmd(p, 'echo "lorem ipsum"', 'lorem ipsum', 'bad \'"\' eating')
    psh.assert_cmd(p, 'echo "lorem ""$lorem $?"', 'lorem  0', 'bad \'"\' eating')
Ejemplo n.º 4
0
def harness(p):
    psh.init(p)

    assert_errors(p)

    pid_list = create_psh_processes(p, 3)
    assert_kill_procs(p, pid_list)
Ejemplo n.º 5
0
def harness(p):
    psh.init(p)

    assert_execve_env_changed(p)
    assert_execve_env_unchanged(p)
    assert_execve_path_searched(p)
    assert_execvpe_env_changed(p)
    assert_execvpe_env_unchanged(p)
    assert_execvpe_path_searched(p)
    assert_execvp_env_unchanged(p)
    assert_execvp_path_searched(p)
def harness(p):
    psh.init(p)
    create_testdir(p, ROOT_TEST_DIR)

    # these cases may not work on non-rootfs targets, because of too many internal directories
    assert_multi(p)
    assert_extralong(p)

    psh_cmds = psh.get_commands(p)
    assert_ls_t(p)
    assert_ls_S(p)
    assert_ls_pshcmds(p, psh_cmds)
Ejemplo n.º 7
0
def harness(p):
    psh.init(p)

    fname = 'etc/shells'
    expected = r'# /etc/shells: valid login shells(\r+)\n/bin/sh(\r+)\n'
    cmd = f'cat {fname}'

    psh.assert_cmd(p,
                   cmd,
                   expected,
                   msg='The /etc/shells/ file content is invalid',
                   is_regex=True)
Ejemplo n.º 8
0
def harness(p):
    chars = list(set(string.printable) - set(string.whitespace) - set('/'))

    psh.init(p)

    assert_dir_created(p, 'example_dir')
    files = ls(p)
    assert files == ls(p, 'example_dir/..')

    assert_dir_created(p, 'example_dir/another_dir')
    assert_dir_created(p, ''.join(chars))

    assert_random_dirs(p, chars)

    assert not mkdir(p, '/')
    assert not mkdir(p, '/example_dir')
Ejemplo n.º 9
0
def harness(p):
    listed_files = ('test1', 'test0', 'dir')
    to_create_files = ('.hidden', ) + listed_files
    all_files = ('.', '..') + to_create_files

    psh.init(p)

    create_testdir(p, ROOT_TEST_DIR)
    prepare_testdir(p, to_create_files)
    assert_ls_err(p)
    assert_ls_noarg(p, listed_files)
    assert_ls_1(p, listed_files)
    assert_ls_a(p, all_files)
    assert_ls_d(p)
    assert_ls_f(p, listed_files)
    assert_ls_h(p)
    assert_ls_l(p, listed_files)
    assert_ls_r(p, listed_files)
Ejemplo n.º 10
0
def harness(p):
    chars = list(set(string.printable) - set(string.whitespace) - set('/'))

    psh.init(p)

    assert_dir_created(p, 'example_dir')
    files = ls(p)
    assert files == ls(p, 'example_dir/..')

    assert_dir_created(p, 'example_dir/another_dir')
    # there are some targets, where max fname length equals 64
    assert_dir_created(p, ''.join(chars[:50]))
    assert_dir_created(p, ''.join(chars[50:]))

    assert_random_dirs(p, chars)

    assert not mkdir(p, '/')
    assert not mkdir(p, '/example_dir')
Ejemplo n.º 11
0
def harness(p):
    # Run psh
    psh.init(p)

    # Run pshlogin
    assert_pshlogin(p)

    # Wrong credentials
    logintools.assert_login_fail(p, cred_ok_etc.user,
                                 cred_bad.passwd)  # good login, wrong password
    logintools.assert_login_fail(
        p, cred_bad.user, cred_ok_etc.passwd)  # bad login, good password
    logintools.assert_login_fail(p, cred_bad.user,
                                 cred_bad.passwd)  # bad login, bad password

    # Empty Credentials
    logintools.assert_login_fail(
        p, cred_ok_etc.user, cred_empty.passwd)  # good login, empty password
    logintools.assert_login_fail(
        p, cred_bad.user, cred_empty.passwd)  # bad login, empty password
    logintools.assert_login_empty(
        p, cred_empty.user)  # empty login, good password

    # Good login, new psh is created
    logintools.assert_login(p, cred_ok_etc.user, cred_ok_etc.passwd)

    # Exit and try to login again but with defuser:
    p.send(EOT)
    assert_pshlogin(p)
    logintools.assert_login_fail(p, cred_ok.user, cred_bad.passwd)
    logintools.assert_login(p, cred_ok.user, cred_ok.passwd)
    p.send(EOT)

    # Too long credentials
    assert_pshlogin(p)
    p.send(string.printable + '\n')
    assert p.expect_exact(
        ['Login:'******'Long login does not repeat login procedure'
    logintools.assert_login_fail(p, cred_ok.user,
                                 string.printable)  # too long password
Ejemplo n.º 12
0
def harness(p):
    # Run psh
    psh.init(p)

    # Check if auth app is available and login exit
    assert_auth(p)
    p.send(EOT)
    psh.assert_prompt(p,
                      msg='Cannot exit "auth" during login passing',
                      timeout=1)

    # Exiting auth during password
    assert_auth(p)
    p.send(cred_bad.user + '\n')
    p.send(EOT)
    psh.assert_prompt(p, msg='Cannot exit "auth": password passing', timeout=1)

    # Good login
    assert_auth(p)
    logintools.assert_login(p, cred_ok.user, cred_ok.passwd)

    # Wrong credentials
    assert_auth(p)
    logintools.assert_login_fail(p,
                                 cred_ok.user,
                                 cred_bad.passwd,
                                 expect_psh_afterwards=True)

    assert_auth(p)
    logintools.assert_login_fail(p,
                                 cred_bad.user,
                                 cred_ok.passwd,
                                 expect_psh_afterwards=True)
    assert_auth(p)
    logintools.assert_login_fail(p,
                                 cred_bad.user,
                                 cred_bad.passwd,
                                 expect_psh_afterwards=True)

    # Empty Credentials
    assert_auth(p)
    logintools.assert_login_fail(p,
                                 cred_ok.user,
                                 cred_empty.passwd,
                                 expect_psh_afterwards=True)
    assert_auth(p)
    logintools.assert_login_fail(p,
                                 cred_bad.user,
                                 cred_empty.passwd,
                                 expect_psh_afterwards=True)
    assert_auth(p)
    logintools.assert_login_empty(p, cred_empty.user)
    p.send(
        EOT
    )  # assert_login_empty() with empty login does not go back to psh, exit needed

    # Too long credentials
    printables = string.printable
    assert_auth(p)
    p.send(printables + '\n')
    assert p.expect_exact(
        ['Login:'******'Long login does not repeat login procedure'
    logintools.assert_login_fail(p, cred_ok.user,
                                 printables)  # too long password

    # Test backspace
    assert_auth(p)
    p.send(cred_ok.user + cred_ok.user)
    for i in range(len(cred_ok.user) + 1):  # Test just enough backspaces
        p.send(BACKSPACE)
    p.send(cred_ok.user[-1] + '\n')
    assert p.expect_exact(["Password:", pexpect.TIMEOUT]) == 0
    p.send(cred_ok.passwd)
    for i in range(len(cred_ok.passwd) + 9):  # test too many backspaces
        p.send(BACKSPACE)
    p.send(cred_ok.passwd + '\n')
    psh.assert_prompt(p, msg='Login should pass but failed', timeout=1)
Ejemplo n.º 13
0
def harness(p):
    psh.init(p)

    # need to add more test cases when it will be possible to write content to the file
    assert_cat_err(p)
    assert_cat_h(p)
Ejemplo n.º 14
0
def harness(p):
    psh.init(p)