aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/libstore/serve-protocol.cc
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-04 04:59:31 +0100
committereldritch horrors <pennae@lix.systems>2024-03-04 04:59:31 +0100
commit7f590ea7096d1e1bbbe73697358fef962d0fb494 (patch)
tree379ef50da30c3ff0b49df6ac1c28d3cfac7e0f69 /tests/unit/libstore/serve-protocol.cc
parent4d9dde15efbc05af471acb3efc5b04c087ceeef0 (diff)
Merge pull request #6223 from obsidiansystems/worker-proto-with-version
Give `nix daemon` and `nix-store --serve` protocols separate serializers with version info (cherry picked from commit 8b68bbb77745fda0d14939b6c23d31cc89da41ce) Change-Id: Ia3d3b9fbaf9f0ae62ab225020b7d14790e793655
Diffstat (limited to 'tests/unit/libstore/serve-protocol.cc')
-rw-r--r--tests/unit/libstore/serve-protocol.cc113
1 files changed, 112 insertions, 1 deletions
diff --git a/tests/unit/libstore/serve-protocol.cc b/tests/unit/libstore/serve-protocol.cc
index 8146ea895..b67b19dbf 100644
--- a/tests/unit/libstore/serve-protocol.cc
+++ b/tests/unit/libstore/serve-protocol.cc
@@ -19,7 +19,7 @@ struct ServeProtoTest : VersionedProtoTest<ServeProto, serveProtoDir>
* For serializers that don't care about the minimum version, we
* used the oldest one: 1.0.
*/
- ServeProto::Version defaultVersion = 1 << 8 | 0;
+ ServeProto::Version defaultVersion = 2 << 8 | 0;
};
VERSIONED_CHARACTERIZATION_TEST(
@@ -116,6 +116,117 @@ VERSIONED_CHARACTERIZATION_TEST(
VERSIONED_CHARACTERIZATION_TEST(
ServeProtoTest,
+ buildResult_2_2,
+ "build-result-2.2",
+ 2 << 8 | 2,
+ ({
+ using namespace std::literals::chrono_literals;
+ std::tuple<BuildResult, BuildResult, BuildResult> t {
+ BuildResult {
+ .status = BuildResult::OutputRejected,
+ .errorMsg = "no idea why",
+ },
+ BuildResult {
+ .status = BuildResult::NotDeterministic,
+ .errorMsg = "no idea why",
+ },
+ BuildResult {
+ .status = BuildResult::Built,
+ },
+ };
+ t;
+ }))
+
+VERSIONED_CHARACTERIZATION_TEST(
+ ServeProtoTest,
+ buildResult_2_3,
+ "build-result-2.3",
+ 2 << 8 | 3,
+ ({
+ using namespace std::literals::chrono_literals;
+ std::tuple<BuildResult, BuildResult, BuildResult> t {
+ BuildResult {
+ .status = BuildResult::OutputRejected,
+ .errorMsg = "no idea why",
+ },
+ BuildResult {
+ .status = BuildResult::NotDeterministic,
+ .errorMsg = "no idea why",
+ .timesBuilt = 3,
+ .isNonDeterministic = true,
+ .startTime = 30,
+ .stopTime = 50,
+ },
+ BuildResult {
+ .status = BuildResult::Built,
+ .startTime = 30,
+ .stopTime = 50,
+ },
+ };
+ t;
+ }))
+
+VERSIONED_CHARACTERIZATION_TEST(
+ ServeProtoTest,
+ buildResult_2_6,
+ "build-result-2.6",
+ 2 << 8 | 6,
+ ({
+ using namespace std::literals::chrono_literals;
+ std::tuple<BuildResult, BuildResult, BuildResult> t {
+ BuildResult {
+ .status = BuildResult::OutputRejected,
+ .errorMsg = "no idea why",
+ },
+ BuildResult {
+ .status = BuildResult::NotDeterministic,
+ .errorMsg = "no idea why",
+ .timesBuilt = 3,
+ .isNonDeterministic = true,
+ .startTime = 30,
+ .stopTime = 50,
+ },
+ BuildResult {
+ .status = BuildResult::Built,
+ .timesBuilt = 1,
+ .builtOutputs = {
+ {
+ "foo",
+ {
+ .id = DrvOutput {
+ .drvHash = Hash::parseSRI("sha256-b4afnqKCO9oWXgYHb9DeQ2berSwOjS27rSd9TxXDc/U="),
+ .outputName = "foo",
+ },
+ .outPath = StorePath { "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo" },
+ },
+ },
+ {
+ "bar",
+ {
+ .id = DrvOutput {
+ .drvHash = Hash::parseSRI("sha256-b4afnqKCO9oWXgYHb9DeQ2berSwOjS27rSd9TxXDc/U="),
+ .outputName = "bar",
+ },
+ .outPath = StorePath { "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar" },
+ },
+ },
+ },
+ .startTime = 30,
+ .stopTime = 50,
+#if 0
+ // These fields are not yet serialized.
+ // FIXME Include in next version of protocol or document
+ // why they are skipped.
+ .cpuUser = std::chrono::milliseconds(500s),
+ .cpuSystem = std::chrono::milliseconds(604s),
+#endif
+ },
+ };
+ t;
+ }))
+
+VERSIONED_CHARACTERIZATION_TEST(
+ ServeProtoTest,
vector,
"vector",
defaultVersion,