Skip to content

Add searchMeta stage tests#638

Open
danielfrankcom wants to merge 20 commits into
documentdb:mainfrom
danielfrankcom:pr/searchMeta-copy
Open

Add searchMeta stage tests#638
danielfrankcom wants to merge 20 commits into
documentdb:mainfrom
danielfrankcom:pr/searchMeta-copy

Conversation

@danielfrankcom

@danielfrankcom danielfrankcom commented Jun 23, 2026

Copy link
Copy Markdown
Collaborator

This change adds tests for the $searchMeta aggregation stage.

This is the first operator which uses the external mongot topology to provide a required search index. I defined a number of file-scoped pytest fixtures to define the necessary indexed collections for these tests, as an index of this type is far more expensive to set up than the ones we use elsewhere (on the order of 30-60 secs). Using a module scoped fixture allows us to amortize this cost across the test cases rather than taking the hit each time.

Note: The CI runs for this change will fail until #617 is merged, as it is heavily dependent. If you want to see the change in its correct (working) context, see the pr/searchMeta branch for now. This is resolved now.

Closes #375

@danielfrankcom danielfrankcom requested a review from a team as a code owner June 23, 2026 17:07
@documentdb-triage-tool documentdb-triage-tool Bot added compatibility test Compatibility test related enhancement New feature or request labels Jun 23, 2026
@documentdb-triage-tool

Copy link
Copy Markdown

🤖 Auto-triaged by documentdb-triage-tool.

Applied: compatibility test, enhancement
Project fields suggested: Component test-coverage · Priority P2 · Effort XL · Status Needs Review
Confidence: 0.85 (mixed)

Reasoning

component from path globs (test-coverage, test-framework); effort from diff stats (3308+7 LOC, 18 files); LLM: Adds new test coverage for the $searchMeta aggregation stage, including a new external topology fixture pattern; self-contained within the test-coverage component.

If a label is wrong, remove it manually and ping @patty-chow so the rules can be tuned. The bot will not re-label items that already have component labels.

Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
@tonglyu

tonglyu commented Jun 29, 2026

Copy link
Copy Markdown

It seems all path field tested with $searchMeta only has one format from string. Can we also test other conditions even though it's not supported?

(array of strings, {value} document, {wildcard} document, {value, multi} multi-analyzer)
https://www.mongodb.com/docs/search/query/path-construction/

Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
@danielfrankcom

Copy link
Copy Markdown
Collaborator Author

Latest 3 commits are borrowed from #645 to provide some better diagnostics for mongot failures

…Source auth schema

Signed-off-by: Daniel Frankcom <frankcom@amazon.com>
@danielfrankcom danielfrankcom requested a review from tonglyu July 1, 2026 17:56
Signed-off-by: Daniel Frankcom <frankcom@amazon.com>


@pytest.fixture(scope="module")
def search_collection(engine_client, worker_id) -> Iterator[Collection]:

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

  1. searchMeta/utils/ — the plain search_collection module fixture is copy-pasted verbatim across ~8 test files. 🟡 Minor (reuse)

Roughly eight files each define the identical:
@pytest.fixture(scope="module")
def search_collection(engine_client, worker_id) -> Iterator[Collection]:
with open_search_collection(engine_client, worker_id, f"{name}::search_collection") as coll:
yield coll
(The other ~19 module fixtures — empty_search_collection, no_index_collection, date_facet_collection, geo_collection, autocomplete_collection, etc. — are genuinely distinct recipes and are not the target here.) The repeated default one could live once in searchMeta/utils/ (or a conftest.py) and be imported. Note the honest
caveat: module scope means it still instantiates per module at runtime, so this is a maintainability/DRY win (one place to change the default index recipe), not a performance one. Worth doing given the count.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

compatibility test Compatibility test related enhancement New feature or request

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Add compatibility test for $searchMeta

3 participants