Skip to content

test: add comprehensive unit tests for SML caching mechanism #6750

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

Closed
wants to merge 10 commits into from

Conversation

knst
Copy link
Collaborator

@knst knst commented Jul 11, 2025

DEPENDS ON #6738

Issue being fixed or feature implemented

Unit tests for caching mechanism from #6738

What was done?

- Test basic cache functionality and cache hits
- Test cache invalidation on AddMN operations
- Test cache invalidation on RemoveMN operations
- Test conditional cache invalidation on UpdateMN operations
- Test cache behavior with copy constructor and assignment operator

kudos to pasta to make draft of these tests

How Has This Been Tested?

see src/test/evo_deterministicmns_tests.cpp

Breaking Changes

N/A

Checklist:

  • I have performed a self-review of my own code
  • I have commented my code, particularly in hard-to-understand areas
  • I have added or updated relevant unit/integration/functional/e2e tests
  • I have made corresponding changes to the documentation
  • I have assigned this pull request to a milestone

knst and others added 9 commits July 11, 2025 01:00
… evo/smldiff

This commit is to prevent multiple circular dependencies over llmq/ module because
evo/simplifiedmns depends on llmq/blockprocessor, llmq/commitment, llmq/quorums, but they
includes evo/deterministicmns.

Once evo/deterministicmns knows about simplifiedmns it causes 10 more loops over llmq/* and evo/deterministicmns
Shared_ptr to SML is preserved between multiple CDeterministicMNList and
it helps to avoid building SML from a scratch; also it helps to avoid comparision
of SML item-by-item.
Add private helper methods InvalidateSMLCache() and InvalidateSMLCacheIfChanged()
to centralize cache invalidation logic and reduce code duplication.

This improves maintainability by:
- Centralizing cache invalidation logic in dedicated methods
- Reducing code duplication across AddMN, RemoveMN, UpdateMN, and Unserialize
- Making cache invalidation patterns consistent and easier to maintain
- Providing both unconditional and conditional invalidation helpers

The conditional invalidation method preserves the optimization in UpdateMN
where cache is only invalidated if the SML entry actually changed.
@knst knst added this to the 23 milestone Jul 11, 2025
Add extensive unit tests to verify the SML caching functionality:

- Test basic cache functionality and cache hits
- Test cache invalidation on AddMN operations
- Test cache invalidation on RemoveMN operations
- Test conditional cache invalidation on UpdateMN operations
- Test cache behavior with copy constructor and assignment operator

These tests ensure the cache works correctly and efficiently, validating:
- Cache is properly shared when no changes occur
- Cache is invalidated when MN list changes
- Cache preserves optimization in UpdateMN when SML entry doesn't change
- Cache is properly copied/shared during object copying

This provides comprehensive coverage of the caching mechanism's
correctness.
Copy link

This pull request has conflicts, please rebase.

@knst
Copy link
Collaborator Author

knst commented Jul 22, 2025

Already merged as #6738

@knst knst closed this Jul 22, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants