aboutsummaryrefslogtreecommitdiff
path: root/tests/unit/libstore/worker-protocol.cc
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 /tests/unit/libstore/worker-protocol.cc
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
Diffstat (limited to 'tests/unit/libstore/worker-protocol.cc')
-rw-r--r--tests/unit/libstore/worker-protocol.cc189
1 files changed, 189 insertions, 0 deletions
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..."),
+ },
+ },
+ }))
+
}