File: test_disasm.py

package info (click to toggle)
ceccomp 4.0-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 1,632 kB
  • sloc: ansic: 6,474; python: 1,039; makefile: 248; sh: 145
file content (48 lines) | stat: -rw-r--r-- 1,573 bytes parent folder | download | duplicates (2)
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
import pytest
from shared_vars import *

@pytest.mark.parametrize('filename', FILENAMES)
def test_disasm(filename: str, errns: SimpleNamespace):
    maybe_skip(filename)
    input_file = BPF_DIR / f'{filename}.bpf'
    expect_file = TXT_DIR / filename
    _, stdout, stderr = run_process(
        [CECCOMP, 'disasm', *COMMON_OPTS, str(input_file)],
    )
    errns.stderr = stderr

    with expect_file.open('r') as expect:
        assert stdout == expect.read()

def test_s390x_disasm(errns: SimpleNamespace):
    input_file = BE_DIR / 's390x.bpf'
    expect_file = BE_DIR / 's390x.disasm'
    _, stdout, stderr = run_process(
        [CECCOMP, 'disasm', str(input_file), '-a', 's390x'],
    )
    errns.stderr = stderr

    with expect_file.open() as expect:
        assert stdout == expect.read()

ERROR_IDS = sorted([p.stem[1:] for p in ERR_CASE_DIR.glob('b*')])

@pytest.mark.parametrize('errorid', ERROR_IDS)
def test_error_cases(errorid: str):
    chunk_file = ERR_CASE_DIR / f'b{errorid}'
    with chunk_file.open() as f:
        blob = f.read()
    in_idx = blob.find('STDIN')
    out_idx = blob.find('STDOUT')
    err_idx = blob.find('STDERR')
    assert in_idx != -1 and err_idx != -1

    stdin = bytes.fromhex(blob[in_idx + 6 : err_idx])
    _, stdout, stderr = run_process(
        [CECCOMP, 'disasm', '-', '-a', 'x86_64'], stdin=stdin, is_binary=True,
    )
    if out_idx == -1:
        assert stderr.decode() == blob[err_idx + 7:]
    else:
        assert stderr.decode() == blob[err_idx + 7 : out_idx]
        assert stdout.decode() == blob[out_idx + 7:]