Repository navigation
Cover the custom-resolver rows of the SOG resolver matrix with a gstest: URI resolver - #46
Merged
Merged
Conversation
The resolver matrix still had three rows only the injected-loader seams covered: a URI-style primary identifier, companions served by a custom ArResolver, and an asset that serves a stream without GetBuffer(). No real resolver plugin ever exercised them. Add a test-only URI resolver for the `gstest:` scheme. CTest builds it into its own build directory beside a generated plugInfo.json and registers it through PXR_PLUGINPATH_NAME for one new suite, gaussianSog_python_uri_resolver; it is never installed or packaged. It maps `gstest:<path>` onto a store directory, serves every asset as a stream only, and logs each OpenAsset and GetBuffer call so the suite can assert what the plugin asked for. The suite opens an unbundled meta.json and a bundled .sog by URI, directly, by reference from a filesystem layer, and metadata-only; checks that every companion was resolved and served under the URI's directory and decoded through ArAsset::Read() after GetBuffer() returned null; that a plane missing from the store is GSSOG-E008 even with valid same-named planes elsewhere in the store and in the current directory; and that a filesystem meta.json never reaches the URI resolver. Run locally on Linux against the usd-core 26.8 wheel, all five gaussian-sog suites pass. Two mutations confirm the new suite bites where the default-resolver suite does not: dropping the ArAsset::Read() fallback for companions fails only the new suite, and reading the primary asset from the filesystem fails both. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQZ6z8Eiz2bDo8bofd5xCV
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQZ6z8Eiz2bDo8bofd5xCV
gaussianSog_python_uri_resolver passed in all three workspace-ctest-pr-* cells (Windows MSVC, macOS arm64, Linux; 16 of 16 suites each), so the resolver-matrix item is done apart from the Windows-only separator row. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01JQZ6z8Eiz2bDo8bofd5xCV
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
gstest:URI resolver plugin (plugins/gaussian-sog/tests/uri_resolver/GsTestUriResolver.cpp). CTest builds it into its own build directory next to a generatedplugInfo.jsonand registers it throughPXR_PLUGINPATH_NAMEfor one new suite only. It is never installed or packaged.gstest:<path>onto a store directory. It serves every asset as a stream only (GetBuffer()returns null) and logs eachOpenAsset/GetBuffercall.gaussianSog_python_uri_resolver(test_gaussian_sog_uri_resolver.py), which checks:meta.jsonand a.sogby URI, directly, by reference from a filesystem layer, and metadata-only;ArAsset::Read();GSSOG-E008, even when valid planes with the same name exist elsewhere;meta.jsonnever reaches the URI resolver.RESOLVER_MATRIX.mdbecome ✅, plus two new rows. Also updatescurrent.md,BUILDING.md(16 suites) andCHANGELOG.md.Why?
docs/roadmap/current.mdlists the remaining work on the resolver test matrix: "a test resolver plugin for URI-style identifiers and resolver-served companions". Three rows were covered only by the injected-loader seams, never by a real resolver plugin: a URI-style primary identifier, companions served by a customArResolver, and a stream withoutGetBuffer().Validation
usd-core26.8 wheel'slibusd_msand the OpenUSD v26.08 headers. All fivegaussianSog_*CTest suites pass. (gaussianUsd_testsdoes not link in that setup because the wheel expects libpython to be loaded already. That is a local artifact, unrelated to this change.)ArAsset::Read()fallback for companions fails only the new suite;python scripts/check_clang_format.pyis clean.workspace-ctest-pr-*cells in this PR are the Windows/macOS/Linux check.Checklist
Reviewer notes
No plugin code changes. Only tests, a test-only plugin, and docs. Windows (MSVC, DLL in a multi-config output dir) has not been built locally, so that first build happens in the hosted cell.
Generated by Claude Code