Skip to content

[TESTING] Add BTT tests for diamond module, inspect & upgrade facets/modules #339

Description

@maxnorm

Please look through our documentation, discussions and codebase to ensure your issue is well-researched and not already covered.

Testing Issue

Help us improve our test coverage and quality:

Description

Add behavior-driven tests (BTT/fuzz + edge-case behavior checks) for the diamond internal module and related inspect/upgrade facets.
These files implement core selector import/validation, facet linked-list bookkeeping, add/replace/remove upgrade flows, fallback dispatch, and introspection views. They are security-critical and currently appear to have no dedicated tests.

The new tests should validate happy paths, revert paths, list-link integrity, selectorCount/facetCount invariants, and introspection correctness after multi-step upgrades.

Target File/Function(s) being tested

  • src/diamond/DiamondInspectFacet.sol
  • src/diamond/DiamondMod.sol
  • src/diamond/DiamondUpgradeFacet.sol
  • src/diamond/DiamondUpgradeMod.sol

Suggested coverage focus:

  • invalid selector encoding / no bytecode / no selectors reverts
  • duplicate selector conflicts on add
  • replace with same facet, replace non-existent facet, replace with selector ownership conflicts
  • remove non-existent facet
  • head/tail relinking correctness when replacing/removing first, middle, and last facets
  • selectorCount/facetCount invariants across sequences of add→replace→remove
  • delegatecall bubbling + DiamondDelegateCall and DiamondMetadata event behavior
  • introspection consistency (facetAddresses, facets, facetFunctionSelectors) after each upgrade step

We aim the full coverage when possible

Helpful Information

Have a question? Please check our contribution guide first - your answer might already be there!

Want to discuss something? For general questions, ideas, or brainstorming, please browse our discussions or start a new one.

You can also join our Discord to discuss the testing issue.

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions