Move Tsavorite.test.epoch into Tsavorite.slnx and run it in CI - #2044
Merged
Tiago Nápoli (tiagonapoli) merged 1 commit intoAug 8, 2026
Conversation
Tiago Nápoli (tiagonapoli)
requested review from
Ted Hart (TedHartMS) and
Badrish Chandramouli (badrishc)
as code owners
August 7, 2026 23:37
Tiago Nápoli (tiagonapoli)
requested review from
kevin-montrose and
Vasileios Zois (vazois)
as code owners
August 7, 2026 23:37
Contributor
There was a problem hiding this comment.
Pull request overview
This PR moves Tsavorite.test.epoch back into the Tsavorite-only solution (Tsavorite.slnx) by removing its full Garnet.test project dependency and source-linking just TestBase.cs, and then ensures the epoch test project is executed in the Tsavorite CI test matrix.
Changes:
- Add
Tsavorite.test.epochtolibs/storage/Tsavorite/cs/Tsavorite.slnxand remove it fromGarnet.slnx. - Update
Tsavorite.test.epoch.csprojto drop theGarnet.test.csprojProjectReferenceand instead linktest/standalone/Garnet.test/TestBase.cs. - Extend the Tsavorite CI test matrix and directory map to run
Tsavorite.test.epoch, excluding it from Azurite setup since it does not require Azure storage.
Reviewed changes
Copilot reviewed 4 out of 4 changed files in this pull request and generated no comments.
| File | Description |
|---|---|
| libs/storage/Tsavorite/cs/Tsavorite.slnx | Adds Tsavorite.test.epoch to the standalone Tsavorite solution so it can be built/tested in Tsavorite-only CI. |
| libs/storage/Tsavorite/cs/test/test.epoch/Tsavorite.test.epoch.csproj | Removes Garnet.test project dependency; links TestBase.cs directly to keep the project Tsavorite-standalone. |
| Garnet.slnx | Removes Tsavorite.test.epoch from the Garnet solution to avoid “compiled but never run” placement. |
| .github/workflows/ci.yml | Adds Tsavorite.test.epoch to the Tsavorite CI matrix and maps it to its directory; excludes it from Azurite setup steps. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Tsavorite.test.epoch was listed in Garnet.slnx instead of Tsavorite.slnx because it took a ProjectReference on Garnet.test.csproj to reach Garnet.test.TestBase. That reference drags the whole Garnet server stack into the standalone Tsavorite build, so the project could not sit in Tsavorite.slnx alongside the other Tsavorite test projects. Every other Tsavorite test project already gets TestBase the same way: Tsavorite.test.csproj source-links TestBase.cs, and test.hlog, test.recovery, test.recordops, test.session, test.session.context and test.stress reference Tsavorite.test.csproj to pick it up. Follow that convention here and drop the Garnet.test reference. The misplacement also meant the epoch tests ran in no CI matrix at all: the Garnet matrix does not list Tsavorite.test.epoch, and the Tsavorite matrix only covers projects in Tsavorite.slnx. Add Tsavorite.test.epoch to the Tsavorite test matrix and its directory map; it touches no blob storage, so it joins the projects excluded from the Azurite setup steps. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Tiago Nápoli (tiagonapoli)
force-pushed
the
tiagonapoli/move-epoch-tests-to-tsavorite-sln
branch
from
August 7, 2026 23:44
16f4b44 to
7507f45
Compare
Ted Hart (TedHartMS)
approved these changes
Aug 8, 2026
Tiago Nápoli (tiagonapoli)
merged commit Aug 8, 2026
ff611e2
into
microsoft:main
217 of 219 checks passed
Tiago Nápoli (tiagonapoli)
deleted the
tiagonapoli/move-epoch-tests-to-tsavorite-sln
branch
August 8, 2026 00:38
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.
Why did
Tsavorite.test.epochend up inGarnet.slnx?Because it took a
ProjectReferenceonGarnet.test.csproj:The only thing it needs from there is
Garnet.test.TestBase, the ~30-linerunning-test tracker that
EpochTestBasederives from. But that reference pullsthe entire transitive closure of
Garnet.test—Garnet.client,Garnet.common,Garnet.host,Garnet.server,GarnetServer,GarnetJSON,NoOpModule,GarnetRoaringBitmap,Garnet.fuzz, plusStackExchange.Redis,Microsoft.CodeAnalysisanddiskann-garnet— into the project. Landing that inTsavorite.slnxwould make the standalone Tsavorite build (and CI's dedicatedBuild Tsavoritejob, which restores only that solution) compile the whole Garnetserver stack. So the project got parked in
Garnet.slnxinstead.Every other Tsavorite test project already solves this
The
TestBasedependency is not unique to the epoch tests — ~77 files across theTsavorite test tree do
using Garnet.test; class Foo : TestBase. None of themreference
Garnet.test.csproj. The convention is hub-and-spoke:Tsavorite.test.csprojsource-links the single file:<Compile Include="..\..\..\..\..\test\standalone\Garnet.test\TestBase.cs" Link="TestBase.cs" />test.hlog,test.recovery,test.recordops,test.session,test.session.contextandtest.stresseachProjectReferenceTsavorite.test.csprojand inherit it.
Tsavorite.test.epochwas the sole exception, and that single edge is what pinnedit into the wrong solution.
The knock-on bug
The misplacement also meant the epoch tests ran in no CI matrix at all:
Tsavorite.test.epoch;Tsavorite.slnx.Garnet.slnxcompiled the assembly, and nothing ever executed it. The 15 testsadded alongside the
LightEpochslot-claim CAS hardening have never guarded asingle PR.
Changes
Tsavorite.test.epoch.csproj: replace theGarnet.testProjectReferencewith aProjectReferencetoTsavorite.test.csproj, matching every sibling Tsavorite test project.Garnet.slnx/test/folder to theTsavorite.slnx/test/folder.Tsavorite.test.epochto the Tsavorite CI test matrix and its directory map. It touches no blob storage, so it joins the set excluded from the Azurite setup /RunAzureTestssteps.playground/LightEpochLitmusis left where it is — it is a Garnet-side playgroundexecutable and belongs in
Garnet.slnx.Validation
dotnet build libs/storage/Tsavorite/cs/Tsavorite.slnx -c Debug— succeeds, 0 warnings.dotnet test libs/storage/Tsavorite/cs/test/test.epoch -f net10.0 -c Debug— 15/15 pass.dotnet format libs/storage/Tsavorite/cs/Tsavorite.slnx --verify-no-changes— clean.dotnet restore Garnet.slnx— still resolves after the removal; nothing referenced the epoch test project.