Skip to content

test: feature_governance.py intermittent vote/superblock assertions #7328

@thepastaclaw

Description

@thepastaclaw

feature_governance.py intermittent vote/superblock assertions

Summary

feature_governance.py appears to be intermittently failing around governance
vote propagation / superblock readiness. In #7327 CI, the
linux64_sqlite-test / Test source job failed because one node only had 24
votes when the test expected all nodes to have 25.

Latest CI occurrence

Traceback excerpt:

File "test/functional/feature_governance.py", line 314, in run_test
  assert_equal(node.gobject("count")["votes"], 25)
AssertionError: not(24 == 25)

The log reached:

Should see same YES and NO vote count for both triggers on all nodes now
Should have 25 votes on all nodes

then failed on the raw gobject("count")["votes"] == 25 assertion. This looks
timing/sync-sensitive: the preceding trigger Yes/No count waits had succeeded,
but the aggregate vote count was still one vote short on at least one node.

Scope check for #7327

#7327 only changes:

test/functional/feature_dip3_v19.py
test/functional/test_framework/test_framework.py

The framework change adds an optional spork_sync_timeout parameter to
activate_by_name() while keeping the existing default timeout. Neither
feature_governance.py nor its direct wait_for_sporks_same() call uses this
helper path. The modified feature_dip3_v19.py test passed in the same failing
linux64_sqlite job.

Local reproduction signal

A local develop run also showed feature_governance.py instability, though at
a later assertion:

python3 test/functional/feature_governance.py --timeout-factor=4

failed with:

File "test/functional/feature_governance.py", line 342, in run_test
  self.check_superblock()
File "test/functional/feature_governance.py", line 59, in check_superblock
  assert_equal(payments_found, 2)
AssertionError: not(0 == 2)

That local failure is not the same assertion, but it supports that this test is
not stable independently of #7327's DIP3 v19-only change.

Suggested next steps

  • Add explicit waiting around the final aggregate gobject("count")["votes"]
    check instead of asserting immediately after per-trigger count waits; and/or
  • investigate why the superblock payment assertion can fail after the earlier
    governance vote checks appear to pass.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions