Skip to content

intermittent failure in _zkapauthorizer.tests.test_recover.StatefulRecoverTests.test_recover

[FAIL]
Traceback (most recent call last):
Failure: testtools.testresult.real._StringException: Traceback (most recent call last):
  File "C:\hostedtoolcache\windows\Python\3.9.10\x64\lib\site-packages\_zkapauthorizer\tests\test_recover.py", line 150, in test_recover
    run_state_machine_as_test(
  File "C:\hostedtoolcache\windows\Python\3.9.10\x64\lib\site-packages\hypothesis\stateful.py", line 222, in run_state_machine_as_test
    run_state_machine(state_machine_factory)
  File "C:\hostedtoolcache\windows\Python\3.9.10\x64\lib\site-packages\hypothesis\stateful.py", line 107, in run_state_machine
    @given(st.data())
  File "C:\hostedtoolcache\windows\Python\3.9.10\x64\lib\site-packages\hypothesis\core.py", line 1190, in wrapped_test
    raise the_error_hypothesis_found
  File "C:\hostedtoolcache\windows\Python\3.9.10\x64\lib\site-packages\_zkapauthorizer\tests\test_recover.py", line 90, in snapshot_equals_database
    self.case.assertThat(
  File "C:\hostedtoolcache\windows\Python\3.9.10\x64\lib\site-packages\testtools\testcase.py", line 480, in assertThat
    raise mismatch_error
testtools.matchers._impl.MismatchError: !=:
reference = ['BEGIN TRANSACTION;',
 'CREATE TABLE [0] ([0] REAL);',
 'INSERT INTO "0" VALUES(1.12589990684262408748e+15);',
 'CREATE TABLE [1] ([0] INT);',
 'COMMIT;']
actual    = ['BEGIN TRANSACTION;',
 'CREATE TABLE [0] ([0] REAL);',
 'INSERT INTO "0" VALUES(1.12589990684262430953e+15);',
 'CREATE TABLE [1] ([0] INT);',
 'COMMIT;']
: after <function <lambda>> on <sqlite3.Connection object at 0x0000019744DC7E40>: source (reference) database iterdump does not equal sink (actual) database iterdump


_zkapauthorizer.tests.test_recover.StatefulRecoverTests.test_recover

This would be deterministic if CI had a Hypothesis database. Since it doesn't, it's down to luck whether Hypothesis finds a floating point value that doesn't round-trip or not.

We don't really care about floating point round-tripping right now because there are no REALs in ZKAPAuthorizer's schema anywhere. However, it would be nice if it just worked right so we don't have to be careful to stay within some arbitrarily constrained version of SQL to be sure the replica/recovery system will work.