aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreldritch horrors <pennae@lix.systems>2024-03-04 03:48:50 +0100
committereldritch horrors <pennae@lix.systems>2024-03-04 04:36:23 +0100
commitea0008deea7769541fdbf7629bbeb8e9581d73a7 (patch)
tree603bf030b32f0bb9d39cae9ae345b20678850ecf
parent8867479b2712d244dc3fd3829ba6710a0c14ebab (diff)
Merge pull request #9094 from obsidiansystems/test-proto
Test the rest of the worker protocol serializers (cherry picked from commit 2f1c16dfa2378fd8616bff1b9b7cd0b4d42af69b) Change-Id: Idfd72d32b21d14a260e02f65531d287cef7464d2
-rw-r--r--src/libstore/build-result.cc18
-rw-r--r--src/libstore/build-result.hh3
-rw-r--r--src/libstore/worker-protocol.hh4
-rw-r--r--tests/unit/libstore/worker-protocol.cc189
-rw-r--r--unit-test-data/libstore/worker-protocol/build-result.binbin0 -> 144 bytes
-rw-r--r--unit-test-data/libstore/worker-protocol/drv-output.binbin0 -> 176 bytes
-rw-r--r--unit-test-data/libstore/worker-protocol/keyed-build-result.binbin0 -> 264 bytes
-rw-r--r--unit-test-data/libstore/worker-protocol/optional-content-address.binbin0 -> 64 bytes
-rw-r--r--unit-test-data/libstore/worker-protocol/optional-store-path.binbin0 -> 72 bytes
-rw-r--r--unit-test-data/libstore/worker-protocol/optional-trusted-flag.binbin0 -> 24 bytes
-rw-r--r--unit-test-data/libstore/worker-protocol/realisation.binbin0 -> 520 bytes
-rw-r--r--unit-test-data/libstore/worker-protocol/set.binbin0 -> 152 bytes
-rw-r--r--unit-test-data/libstore/worker-protocol/vector.binbin0 -> 152 bytes
13 files changed, 212 insertions, 2 deletions
diff --git a/src/libstore/build-result.cc b/src/libstore/build-result.cc
new file mode 100644
index 000000000..18f519c5c
--- /dev/null
+++ b/src/libstore/build-result.cc
@@ -0,0 +1,18 @@
+#include "build-result.hh"
+
+namespace nix {
+
+GENERATE_CMP_EXT(
+ ,
+ BuildResult,
+ me->status,
+ me->errorMsg,
+ me->timesBuilt,
+ me->isNonDeterministic,
+ me->builtOutputs,
+ me->startTime,
+ me->stopTime,
+ me->cpuUser,
+ me->cpuSystem);
+
+}
diff --git a/src/libstore/build-result.hh b/src/libstore/build-result.hh
index b7a56e791..8840fa7e3 100644
--- a/src/libstore/build-result.hh
+++ b/src/libstore/build-result.hh
@@ -3,6 +3,7 @@
#include "realisation.hh"
#include "derived-path.hh"
+#include "comparator.hh"
#include <string>
#include <chrono>
@@ -100,6 +101,8 @@ struct BuildResult
*/
std::optional<std::chrono::microseconds> cpuUser, cpuSystem;
+ DECLARE_CMP(BuildResult);
+
bool success()
{
return status == Built || status == Substituted || status == AlreadyValid || status == ResolvesToAlreadyValid;
diff --git a/src/libstore/worker-protocol.hh b/src/libstore/worker-protocol.hh
index 70a5bddb9..b7f42f24d 100644
--- a/src/libstore/worker-protocol.hh
+++ b/src/libstore/worker-protocol.hh
@@ -208,10 +208,10 @@ MAKE_WORKER_PROTO(ContentAddress);
template<>
MAKE_WORKER_PROTO(DerivedPath);
template<>
-MAKE_WORKER_PROTO(Realisation);
-template<>
MAKE_WORKER_PROTO(DrvOutput);
template<>
+MAKE_WORKER_PROTO(Realisation);
+template<>
MAKE_WORKER_PROTO(BuildResult);
template<>
MAKE_WORKER_PROTO(KeyedBuildResult);
diff --git a/tests/unit/libstore/worker-protocol.cc b/tests/unit/libstore/worker-protocol.cc
index 4a6ccf7c0..24a06503c 100644
--- a/tests/unit/libstore/worker-protocol.cc
+++ b/tests/unit/libstore/worker-protocol.cc
@@ -6,6 +6,7 @@
#include "worker-protocol.hh"
#include "worker-protocol-impl.hh"
#include "derived-path.hh"
+#include "build-result.hh"
#include "tests/libstore.hh"
namespace nix {
@@ -136,4 +137,192 @@ CHARACTERIZATION_TEST(
},
}))
+CHARACTERIZATION_TEST(
+ drvOutput,
+ "drv-output",
+ (std::tuple<DrvOutput, DrvOutput> {
+ {
+ .drvHash = Hash::parseSRI("sha256-FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="),
+ .outputName = "baz",
+ },
+ DrvOutput {
+ .drvHash = Hash::parseSRI("sha256-b4afnqKCO9oWXgYHb9DeQ2berSwOjS27rSd9TxXDc/U="),
+ .outputName = "quux",
+ },
+ }))
+
+CHARACTERIZATION_TEST(
+ realisation,
+ "realisation",
+ (std::tuple<Realisation, Realisation> {
+ Realisation {
+ .id = DrvOutput {
+ .drvHash = Hash::parseSRI("sha256-FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="),
+ .outputName = "baz",
+ },
+ .outPath = StorePath { "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo" },
+ .signatures = { "asdf", "qwer" },
+ },
+ Realisation {
+ .id = {
+ .drvHash = Hash::parseSRI("sha256-FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="),
+ .outputName = "baz",
+ },
+ .outPath = StorePath { "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo" },
+ .signatures = { "asdf", "qwer" },
+ .dependentRealisations = {
+ {
+ DrvOutput {
+ .drvHash = Hash::parseSRI("sha256-b4afnqKCO9oWXgYHb9DeQ2berSwOjS27rSd9TxXDc/U="),
+ .outputName = "quux",
+ },
+ StorePath { "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo" },
+ },
+ },
+ },
+ }))
+
+CHARACTERIZATION_TEST(
+ buildResult,
+ "build-result",
+ ({
+ 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,
+ },
+#if 0
+ // This is commented because this test would fail!
+ // FIXME uncomment this and fix the underlying bug.
+ 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,
+ .cpuUser = std::chrono::milliseconds(500s),
+ .cpuSystem = std::chrono::milliseconds(604s),
+ },
+#endif
+ };
+ t;
+ }))
+
+CHARACTERIZATION_TEST(
+ keyedBuildResult,
+ "keyed-build-result",
+ ({
+ using namespace std::literals::chrono_literals;
+ std::tuple<KeyedBuildResult, KeyedBuildResult/*, KeyedBuildResult*/> t {
+ KeyedBuildResult {
+ {
+ .status = KeyedBuildResult::OutputRejected,
+ .errorMsg = "no idea why",
+ },
+ /* .path = */ DerivedPath::Opaque {
+ StorePath { "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-xxx" },
+ },
+ },
+ KeyedBuildResult {
+ {
+ .status = KeyedBuildResult::NotDeterministic,
+ .errorMsg = "no idea why",
+ .timesBuilt = 3,
+ .isNonDeterministic = true,
+ .startTime = 30,
+ .stopTime = 50,
+ },
+ /* .path = */ DerivedPath::Built {
+ .drvPath = makeConstantStorePathRef(StorePath {
+ "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
+ }),
+ .outputs = OutputsSpec::Names { "out" },
+ },
+ },
+ };
+ t;
+ }))
+
+CHARACTERIZATION_TEST(
+ optionalTrustedFlag,
+ "optional-trusted-flag",
+ (std::tuple<std::optional<TrustedFlag>, std::optional<TrustedFlag>, std::optional<TrustedFlag>> {
+ std::nullopt,
+ std::optional { Trusted },
+ std::optional { NotTrusted },
+ }))
+
+CHARACTERIZATION_TEST(
+ vector,
+ "vector",
+ (std::tuple<std::vector<std::string>, std::vector<std::string>, std::vector<std::string>, std::vector<std::vector<std::string>>> {
+ { },
+ { "" },
+ { "", "foo", "bar" },
+ { {}, { "" }, { "", "1", "2" } },
+ }))
+
+CHARACTERIZATION_TEST(
+ set,
+ "set",
+ (std::tuple<std::set<std::string>, std::set<std::string>, std::set<std::string>, std::set<std::set<std::string>>> {
+ { },
+ { "" },
+ { "", "foo", "bar" },
+ { {}, { "" }, { "", "1", "2" } },
+ }))
+
+CHARACTERIZATION_TEST(
+ optionalStorePath,
+ "optional-store-path",
+ (std::tuple<std::optional<StorePath>, std::optional<StorePath>> {
+ std::nullopt,
+ std::optional {
+ StorePath { "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo-bar" },
+ },
+ }))
+
+CHARACTERIZATION_TEST(
+ optionalContentAddress,
+ "optional-content-address",
+ (std::tuple<std::optional<ContentAddress>, std::optional<ContentAddress>> {
+ std::nullopt,
+ std::optional {
+ ContentAddress {
+ .method = FileIngestionMethod::Flat,
+ .hash = hashString(HashType::htSHA1, "blob blob..."),
+ },
+ },
+ }))
+
}
diff --git a/unit-test-data/libstore/worker-protocol/build-result.bin b/unit-test-data/libstore/worker-protocol/build-result.bin
new file mode 100644
index 000000000..f981fd91f
--- /dev/null
+++ b/unit-test-data/libstore/worker-protocol/build-result.bin
Binary files differ
diff --git a/unit-test-data/libstore/worker-protocol/drv-output.bin b/unit-test-data/libstore/worker-protocol/drv-output.bin
new file mode 100644
index 000000000..800a45fd8
--- /dev/null
+++ b/unit-test-data/libstore/worker-protocol/drv-output.bin
Binary files differ
diff --git a/unit-test-data/libstore/worker-protocol/keyed-build-result.bin b/unit-test-data/libstore/worker-protocol/keyed-build-result.bin
new file mode 100644
index 000000000..c5b3c7f36
--- /dev/null
+++ b/unit-test-data/libstore/worker-protocol/keyed-build-result.bin
Binary files differ
diff --git a/unit-test-data/libstore/worker-protocol/optional-content-address.bin b/unit-test-data/libstore/worker-protocol/optional-content-address.bin
new file mode 100644
index 000000000..f8cfe65ba
--- /dev/null
+++ b/unit-test-data/libstore/worker-protocol/optional-content-address.bin
Binary files differ
diff --git a/unit-test-data/libstore/worker-protocol/optional-store-path.bin b/unit-test-data/libstore/worker-protocol/optional-store-path.bin
new file mode 100644
index 000000000..4fbca5576
--- /dev/null
+++ b/unit-test-data/libstore/worker-protocol/optional-store-path.bin
Binary files differ
diff --git a/unit-test-data/libstore/worker-protocol/optional-trusted-flag.bin b/unit-test-data/libstore/worker-protocol/optional-trusted-flag.bin
new file mode 100644
index 000000000..51b239409
--- /dev/null
+++ b/unit-test-data/libstore/worker-protocol/optional-trusted-flag.bin
Binary files differ
diff --git a/unit-test-data/libstore/worker-protocol/realisation.bin b/unit-test-data/libstore/worker-protocol/realisation.bin
new file mode 100644
index 000000000..2176c6c4a
--- /dev/null
+++ b/unit-test-data/libstore/worker-protocol/realisation.bin
Binary files differ
diff --git a/unit-test-data/libstore/worker-protocol/set.bin b/unit-test-data/libstore/worker-protocol/set.bin
new file mode 100644
index 000000000..ce11ede7f
--- /dev/null
+++ b/unit-test-data/libstore/worker-protocol/set.bin
Binary files differ
diff --git a/unit-test-data/libstore/worker-protocol/vector.bin b/unit-test-data/libstore/worker-protocol/vector.bin
new file mode 100644
index 000000000..7a37c8cd1
--- /dev/null
+++ b/unit-test-data/libstore/worker-protocol/vector.bin
Binary files differ