Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

tests/pkg_libschc: Failing test_reassemble_success_ack_always #19445

Open
MrKevinWeiss opened this issue Apr 3, 2023 · 3 comments
Open

tests/pkg_libschc: Failing test_reassemble_success_ack_always #19445

MrKevinWeiss opened this issue Apr 3, 2023 · 3 comments
Labels
Type: bug The issue reports a bug / The PR fixes a bug (including spelling errors)

Comments

@MrKevinWeiss
Copy link
Contributor

Description

Some of the test cases in tests/pkg_libschc seem to be failing

Steps to reproduce the issue

BOARD=nucleo-g474re make flash test -C tests/pkg_libschc

Expected results

...pass

Actual results

first run with nucleo-g474re
====================================================================================================================================== FAILURES ======================================================================================================================================
__________________________________________________________________________________________________________________ TestSelfTest.test_reassemble_success_ack_always ___________________________________________________________________________________________________________________

self = <01-run.TestSelfTest testMethod=test_reassemble_success_ack_always>

    def test_reassemble_success_ack_always(self):
        self.input(
            b"\x17\x66\x00\x00\x00\x00\x00\xc1\x14\x0f\xe8\x00\x00\x00\x00\x00\x00\x00"
            b"\x00\x00\x00\x00\x00\x00\x00"
        )
        self.spawn.sendline("reassemble init")
        self.spawn.sendline("reassemble 1 100")
        self.input_reset()
        self.input(
            b"\x17\x51\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02"
            b"\x1f\x41\x1f\x42\x00\x0c\x84"
        )
        self.spawn.sendline("reassemble 1 100")
        self.input_reset()
>       self.input(b"\x17\x73\x14\xc8\x77\xf4\xe4\x00\x00\x00\x00")

tests/01-run.py:657: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/01-run.py:42: in input
    self.expect_od_dump_of(input_hex[:self.MAX])
tests/01-run.py:64: in expect_od_dump_of
    self.spawn.expect_exact("{:08x}{}".format(i * 16, od_bytes))
/home/weiss/.local/lib/python3.8/site-packages/pexpect/spawnbase.py:421: in expect_exact
    return exp.expect_loop(timeout)
/home/weiss/.local/lib/python3.8/site-packages/pexpect/expect.py:181: in expect_loop
    return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.expect.Expecter object at 0x7fa3673ffa00>, err = TIMEOUT('Timeout exceeded.')

    def timeout(self, err=None):
        spawn = self.spawn
    
        spawn.before = spawn._before.getvalue()
        spawn.after = TIMEOUT
        index = self.searcher.timeout_index
        if index >= 0:
            spawn.match = TIMEOUT
            spawn.match_index = index
            return index
        else:
            spawn.match = None
            spawn.match_index = None
            msg = str(spawn)
            msg += '\nsearcher: %s' % self.searcher
            if err is not None:
                msg = str(err) + '\n' + msg
    
            exc = TIMEOUT(msg)
            exc.__cause__ = None    # in Python 3.x we can use "raise exc from None"
>           raise exc
E           pexpect.exceptions.TIMEOUT: Timeout exceeded.
E           <pexpect.pty_spawn.spawn object at 0x7fa3673ffb80>
E           command: /usr/bin/make
E           args: [b'/usr/bin/make', b'cleanterm']
E           buffer (last 100 chars): '00  17  73  14  C8  7F  4E  40  00\r\n\r\n> '
E           before (last 100 chars): '\r\n00000000  17  73  14  C8  7F  4E  40  00\r\n\r\n> '
E           after: <class 'pexpect.exceptions.TIMEOUT'>
E           match: None
E           match_index: None
E           exitstatus: None
E           flag_eof: False
E           pid: 1902253
E           child_fd: 13
E           closed: False
E           timeout: 10
E           delimiter: <class 'pexpect.exceptions.EOF'>
E           logfile: None
E           logfile_read: None
E           logfile_send: None
E           maxread: 2000
E           ignorecase: False
E           searchwindowsize: None
E           delaybeforesend: 0.05
E           delayafterclose: 0.1
E           delayafterterminate: 0.1
E           searcher: searcher_string:
E               0: '00000000  17  73  14  C8  77  F4  E4  00'

/home/weiss/.local/lib/python3.8/site-packages/pexpect/expect.py:144: TIMEOUT
============================================================================================================================== short test summary info ===============================================================================================================================
FAILED tests/01-run.py::TestSelfTest::test_reassemble_success_ack_always - pexpect.exceptions.TIMEOUT: Timeout exceeded.
second run
__________________________________________________________________________________________________________________ TestSelfTest.test_reassemble_success_ack_always ___________________________________________________________________________________________________________________

self = <01-run.TestSelfTest testMethod=test_reassemble_success_ack_always>

    def test_reassemble_success_ack_always(self):
        self.input(
            b"\x17\x66\x00\x00\x00\x00\x00\xc1\x14\x0f\xe8\x00\x00\x00\x00\x00\x00\x00"
            b"\x00\x00\x00\x00\x00\x00\x00"
        )
        self.spawn.sendline("reassemble init")
        self.spawn.sendline("reassemble 1 100")
        self.input_reset()
        self.input(
            b"\x17\x51\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02"
            b"\x1f\x41\x1f\x42\x00\x0c\x84"
        )
        self.spawn.sendline("reassemble 1 100")
        self.input_reset()
>       self.input(b"\x17\x73\x14\xc8\x77\xf4\xe4\x00\x00\x00\x00")

tests/01-run.py:657: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/01-run.py:42: in input
    self.expect_od_dump_of(input_hex[:self.MAX])
tests/01-run.py:64: in expect_od_dump_of
    self.spawn.expect_exact("{:08x}{}".format(i * 16, od_bytes))
/home/weiss/.local/lib/python3.8/site-packages/pexpect/spawnbase.py:421: in expect_exact
    return exp.expect_loop(timeout)
/home/weiss/.local/lib/python3.8/site-packages/pexpect/expect.py:181: in expect_loop
    return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.expect.Expecter object at 0x7f165391f2b0>, err = TIMEOUT('Timeout exceeded.')

    def timeout(self, err=None):
        spawn = self.spawn
    
        spawn.before = spawn._before.getvalue()
        spawn.after = TIMEOUT
        index = self.searcher.timeout_index
        if index >= 0:
            spawn.match = TIMEOUT
            spawn.match_index = index
            return index
        else:
            spawn.match = None
            spawn.match_index = None
            msg = str(spawn)
            msg += '\nsearcher: %s' % self.searcher
            if err is not None:
                msg = str(err) + '\n' + msg
    
            exc = TIMEOUT(msg)
            exc.__cause__ = None    # in Python 3.x we can use "raise exc from None"
>           raise exc
E           pexpect.exceptions.TIMEOUT: Timeout exceeded.
E           <pexpect.pty_spawn.spawn object at 0x7f165391f430>
E           command: /usr/bin/make
E           args: [b'/usr/bin/make', b'cleanterm']
E           buffer (last 100 chars): '00  17  73  14  C8  7F  4E  40  00\r\n\r\n> '
E           before (last 100 chars): '\r\n00000000  17  73  14  C8  7F  4E  40  00\r\n\r\n> '
E           after: <class 'pexpect.exceptions.TIMEOUT'>
E           match: None
E           match_index: None
E           exitstatus: None
E           flag_eof: False
E           pid: 1913359
E           child_fd: 13
E           closed: False
E           timeout: 10
E           delimiter: <class 'pexpect.exceptions.EOF'>
E           logfile: None
E           logfile_read: None
E           logfile_send: None
E           maxread: 2000
E           ignorecase: False
E           searchwindowsize: None
E           delaybeforesend: 0.05
E           delayafterclose: 0.1
E           delayafterterminate: 0.1
E           searcher: searcher_string:
E               0: '00000000  17  73  14  C8  77  F4  E4  00'

/home/weiss/.local/lib/python3.8/site-packages/pexpect/expect.py:144: TIMEOUT
with dumb sleeps
__________________________________________________________________________________________________________________ TestSelfTest.test_reassemble_success_ack_always ___________________________________________________________________________________________________________________

self = <01-run.TestSelfTest testMethod=test_reassemble_success_ack_always>

    def test_reassemble_success_ack_always(self):
        self.input(
            b"\x17\x66\x00\x00\x00\x00\x00\xc1\x14\x0f\xe8\x00\x00\x00\x00\x00\x00\x00"
            b"\x00\x00\x00\x00\x00\x00\x00"
        )
    
        # input add 17660000000000c1140fe80000000000000000000000000000
        self.spawn.sendline("reassemble init")
        self.spawn.sendline("reassemble 1 100")
        self.input_reset()
        self.input(
            b"\x17\x51\xfe\x80\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02"
            b"\x1f\x41\x1f\x42\x00\x0c\x84"
        )
        # input add 1751fe8000000000000000000000000000021f411f42000c84
        self.spawn.sendline("reassemble 1 100")
        from time import sleep
        sleep(0.5)
        self.input_reset()
        from time import sleep
        sleep(0.5)
        self.input(b"\x17\x73\x14\xc8\x77\xf4\xe4\x00\x00\x00\x00")
        # input add 177314c877f4e400000000
        sleep(0.5)
        self.spawn.sendline("reassemble 1 100")
        sleep(0.5)
        self.spawn.expect_exact("Packet sent on dev 0x1")
        sleep(0.5)
>       self.expect_od_dump_of(b"\x17\x20")

tests/01-run.py:679: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 
tests/01-run.py:72: in expect_od_dump_of
    self.spawn.expect_exact("{:08x}{}".format(i * 16, od_bytes), timeout=2)
/home/weiss/.local/lib/python3.8/site-packages/pexpect/spawnbase.py:421: in expect_exact
    return exp.expect_loop(timeout)
/home/weiss/.local/lib/python3.8/site-packages/pexpect/expect.py:181: in expect_loop
    return self.timeout(e)
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ 

self = <pexpect.expect.Expecter object at 0x7f65ed55efd0>, err = TIMEOUT('Timeout exceeded.')

    def timeout(self, err=None):
        spawn = self.spawn
    
        spawn.before = spawn._before.getvalue()
        spawn.after = TIMEOUT
        index = self.searcher.timeout_index
        if index >= 0:
            spawn.match = TIMEOUT
            spawn.match_index = index
            return index
        else:
            spawn.match = None
            spawn.match_index = None
            msg = str(spawn)
            msg += '\nsearcher: %s' % self.searcher
            if err is not None:
                msg = str(err) + '\n' + msg
    
            exc = TIMEOUT(msg)
            exc.__cause__ = None    # in Python 3.x we can use "raise exc from None"
>           raise exc
E           pexpect.exceptions.TIMEOUT: Timeout exceeded.
E           <pexpect.pty_spawn.spawn object at 0x7f65ed55ecd0>
E           command: /usr/bin/make
E           args: [b'/usr/bin/make', b'cleanterm']
E           buffer (last 100 chars): '40  00  00  00\r\n'
E           before (last 100 chars): '00000020  00  00  00  00  00  00  00  02  1F  41  1F  42  00  0C  84  4E\r\n00000030  40  00  00  00\r\n'
E           after: <class 'pexpect.exceptions.TIMEOUT'>
E           match: None
E           match_index: None
E           exitstatus: None
E           flag_eof: False
E           pid: 1919218
E           child_fd: 13
E           closed: False
E           timeout: 10
E           delimiter: <class 'pexpect.exceptions.EOF'>
E           logfile: None
E           logfile_read: None
E           logfile_send: None
E           maxread: 2000
E           ignorecase: False
E           searchwindowsize: None
E           delaybeforesend: 0.05
E           delayafterclose: 0.1
E           delayafterterminate: 0.1
E           searcher: searcher_string:
E               0: '00000000  17  20'

/home/weiss/.local/lib/python3.8/site-packages/pexpect/expect.py:144: TIMEOUT

Versions

docker

@MrKevinWeiss MrKevinWeiss added the Type: bug The issue reports a bug / The PR fixes a bug (including spelling errors) label Apr 4, 2023
@MrKevinWeiss
Copy link
Contributor Author

I did an update of riotctrl and retested resulting in getting:

expected: '00000000  17  51  FE  80  00  00  00  00'
in the before buffer: `'\r\n00000000  17  5F  E8  00  00  00  00  00\r\n\r\n> '

It looks like it missed the hex 1 in 17 51 FE 80 which makes me think it is a bit of a printing issue. This means it is either a problem with the od_hex_dump_ext implementation or the application not respecting the thread requirements/protections needed.

Now, this passes on native and the goal of the test, I suppose, is to test a purely software based module. We could say that the failing is not due to the test itself, but some side effect that we currently lack a test to catch. If this is the case we can keep this issue open and use native in the allowlist.

I know you are a busy woman but maybe @miri64 can take a quick peek to confirm or deny my assumptions.

@miri64
Copy link
Member

miri64 commented Apr 13, 2023

I know you are a busy woman but maybe @miri64 can take a quick peek to confirm or deny my assumptions.

I don't think od is the problem here, but rather some behavior in libschc (it acts on the byte level after all, so 4 bits missing smells suspiciously like libSCHC dropping something), but I agree with the conclusion to only whitelist for native (and maybe one of the LoRaWAN boards in the IoT-LAB so we can make sure it runs at least there?).

@MrKevinWeiss
Copy link
Contributor Author

It also fails on the iotlab-m3 test. I will leave it as a known issue then for the release if we cannot fix it in time. This is a new feature and not a regression.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Type: bug The issue reports a bug / The PR fixes a bug (including spelling errors)
Projects
None yet
Development

No branches or pull requests

2 participants