mirror of
https://github.com/NixOS/nix.git
synced 2025-11-09 03:56:01 +01:00
JSON alongside proto serialization test data
This makes the proto serializer characterisation test data be accompanied by JSON data. This is useful because the JSON data is human-readable while the binary data is not.
This commit is contained in:
parent
8dfab7c2dd
commit
8026dd1ba4
57 changed files with 1054 additions and 34 deletions
|
|
@ -6,6 +6,7 @@
|
||||||
|
|
||||||
#include "nix/store/tests/libstore.hh"
|
#include "nix/store/tests/libstore.hh"
|
||||||
#include "nix/util/tests/characterization.hh"
|
#include "nix/util/tests/characterization.hh"
|
||||||
|
#include "nix/util/tests/json-characterization.hh"
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
|
@ -16,12 +17,30 @@ class ProtoTest : public CharacterizationTest
|
||||||
|
|
||||||
std::filesystem::path goldenMaster(std::string_view testStem) const override
|
std::filesystem::path goldenMaster(std::string_view testStem) const override
|
||||||
{
|
{
|
||||||
return unitTestData / (std::string{testStem + ".bin"});
|
return unitTestData / testStem;
|
||||||
}
|
}
|
||||||
|
|
||||||
public:
|
public:
|
||||||
Path storeDir = "/nix/store";
|
Path storeDir = "/nix/store";
|
||||||
StoreDirConfig store{storeDir};
|
StoreDirConfig store{storeDir};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Golden test for `T` JSON reading
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
void readJsonTest(PathView testStem, const T & expected)
|
||||||
|
{
|
||||||
|
nix::readJsonTest(*this, testStem, expected);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Golden test for `T` JSON write
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
void writeJsonTest(PathView testStem, const T & decoded)
|
||||||
|
{
|
||||||
|
nix::writeJsonTest(*this, testStem, decoded);
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
template<class Proto, const char * protocolDir>
|
template<class Proto, const char * protocolDir>
|
||||||
|
|
@ -34,7 +53,7 @@ public:
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void readProtoTest(PathView testStem, typename Proto::Version version, T expected)
|
void readProtoTest(PathView testStem, typename Proto::Version version, T expected)
|
||||||
{
|
{
|
||||||
CharacterizationTest::readTest(testStem, [&](const auto & encoded) {
|
CharacterizationTest::readTest(std::string{testStem + ".bin"}, [&](const auto & encoded) {
|
||||||
T got = ({
|
T got = ({
|
||||||
StringSource from{encoded};
|
StringSource from{encoded};
|
||||||
Proto::template Serialise<T>::read(
|
Proto::template Serialise<T>::read(
|
||||||
|
|
@ -55,7 +74,7 @@ public:
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void writeProtoTest(PathView testStem, typename Proto::Version version, const T & decoded)
|
void writeProtoTest(PathView testStem, typename Proto::Version version, const T & decoded)
|
||||||
{
|
{
|
||||||
CharacterizationTest::writeTest(testStem, [&]() {
|
CharacterizationTest::writeTest(std::string{testStem + ".bin"}, [&]() {
|
||||||
StringSink to;
|
StringSink to;
|
||||||
Proto::template Serialise<T>::write(
|
Proto::template Serialise<T>::write(
|
||||||
this->store,
|
this->store,
|
||||||
|
|
@ -69,14 +88,25 @@ public:
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
#define VERSIONED_CHARACTERIZATION_TEST(FIXTURE, NAME, STEM, VERSION, VALUE) \
|
#define VERSIONED_CHARACTERIZATION_TEST_NO_JSON(FIXTURE, NAME, STEM, VERSION, VALUE) \
|
||||||
TEST_F(FIXTURE, NAME##_read) \
|
TEST_F(FIXTURE, NAME##_read) \
|
||||||
{ \
|
{ \
|
||||||
readProtoTest(STEM, VERSION, VALUE); \
|
readProtoTest(STEM, VERSION, VALUE); \
|
||||||
} \
|
} \
|
||||||
TEST_F(FIXTURE, NAME##_write) \
|
TEST_F(FIXTURE, NAME##_write) \
|
||||||
{ \
|
{ \
|
||||||
writeProtoTest(STEM, VERSION, VALUE); \
|
writeProtoTest(STEM, VERSION, VALUE); \
|
||||||
|
}
|
||||||
|
|
||||||
|
#define VERSIONED_CHARACTERIZATION_TEST(FIXTURE, NAME, STEM, VERSION, VALUE) \
|
||||||
|
VERSIONED_CHARACTERIZATION_TEST_NO_JSON(FIXTURE, NAME, STEM, VERSION, VALUE) \
|
||||||
|
TEST_F(FIXTURE, NAME##_json_read) \
|
||||||
|
{ \
|
||||||
|
readJsonTest(STEM, VALUE); \
|
||||||
|
} \
|
||||||
|
TEST_F(FIXTURE, NAME##_json_write) \
|
||||||
|
{ \
|
||||||
|
writeJsonTest(STEM, VALUE); \
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
|
|
|
||||||
|
|
@ -3,6 +3,7 @@
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "nix/util/json-utils.hh"
|
||||||
#include "nix/store/common-protocol.hh"
|
#include "nix/store/common-protocol.hh"
|
||||||
#include "nix/store/common-protocol-impl.hh"
|
#include "nix/store/common-protocol-impl.hh"
|
||||||
#include "nix/store/build-result.hh"
|
#include "nix/store/build-result.hh"
|
||||||
|
|
@ -22,7 +23,7 @@ public:
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void readProtoTest(PathView testStem, const T & expected)
|
void readProtoTest(PathView testStem, const T & expected)
|
||||||
{
|
{
|
||||||
CharacterizationTest::readTest(testStem, [&](const auto & encoded) {
|
CharacterizationTest::readTest(std::string{testStem + ".bin"}, [&](const auto & encoded) {
|
||||||
T got = ({
|
T got = ({
|
||||||
StringSource from{encoded};
|
StringSource from{encoded};
|
||||||
CommonProto::Serialise<T>::read(store, CommonProto::ReadConn{.from = from});
|
CommonProto::Serialise<T>::read(store, CommonProto::ReadConn{.from = from});
|
||||||
|
|
@ -38,7 +39,7 @@ public:
|
||||||
template<typename T>
|
template<typename T>
|
||||||
void writeProtoTest(PathView testStem, const T & decoded)
|
void writeProtoTest(PathView testStem, const T & decoded)
|
||||||
{
|
{
|
||||||
CharacterizationTest::writeTest(testStem, [&]() -> std::string {
|
CharacterizationTest::writeTest(std::string{testStem + ".bin"}, [&]() -> std::string {
|
||||||
StringSink to;
|
StringSink to;
|
||||||
CommonProto::Serialise<T>::write(store, CommonProto::WriteConn{.to = to}, decoded);
|
CommonProto::Serialise<T>::write(store, CommonProto::WriteConn{.to = to}, decoded);
|
||||||
return to.s;
|
return to.s;
|
||||||
|
|
@ -54,6 +55,14 @@ public:
|
||||||
TEST_F(CommonProtoTest, NAME##_write) \
|
TEST_F(CommonProtoTest, NAME##_write) \
|
||||||
{ \
|
{ \
|
||||||
writeProtoTest(STEM, VALUE); \
|
writeProtoTest(STEM, VALUE); \
|
||||||
|
} \
|
||||||
|
TEST_F(CommonProtoTest, NAME##_json_read) \
|
||||||
|
{ \
|
||||||
|
readJsonTest(STEM, VALUE); \
|
||||||
|
} \
|
||||||
|
TEST_F(CommonProtoTest, NAME##_json_write) \
|
||||||
|
{ \
|
||||||
|
writeJsonTest(STEM, VALUE); \
|
||||||
}
|
}
|
||||||
|
|
||||||
CHARACTERIZATION_TEST(
|
CHARACTERIZATION_TEST(
|
||||||
|
|
|
||||||
26
src/libstore-tests/data/common-protocol/content-address.json
Normal file
26
src/libstore-tests/data/common-protocol/content-address.json
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "+Xc9Ll6mcPltwaewrk/BAQ56Y3G5T//wzhKUc0zrYu0="
|
||||||
|
},
|
||||||
|
"method": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha1",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "gGemBoenViNZM3hiwqns/Fgzqwo="
|
||||||
|
},
|
||||||
|
"method": "flat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "EMIJ+giQ/gLIWoxmPKjno3zHZrxbGymgzGGyZvZBIdM="
|
||||||
|
},
|
||||||
|
"method": "nar"
|
||||||
|
}
|
||||||
|
]
|
||||||
4
src/libstore-tests/data/common-protocol/drv-output.json
Normal file
4
src/libstore-tests/data/common-protocol/drv-output.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
"sha256:15e3c560894cbb27085cf65b5a2ecb18488c999497f4531b6907a7581ce6d527!baz",
|
||||||
|
"sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!quux"
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha1",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "gGemBoenViNZM3hiwqns/Fgzqwo="
|
||||||
|
},
|
||||||
|
"method": "flat"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo-bar"
|
||||||
|
]
|
||||||
22
src/libstore-tests/data/common-protocol/realisation.json
Normal file
22
src/libstore-tests/data/common-protocol/realisation.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:15e3c560894cbb27085cf65b5a2ecb18488c999497f4531b6907a7581ce6d527!baz",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": [
|
||||||
|
"asdf",
|
||||||
|
"qwer"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dependentRealisations": {
|
||||||
|
"sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!quux": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo"
|
||||||
|
},
|
||||||
|
"id": "sha256:15e3c560894cbb27085cf65b5a2ecb18488c999497f4531b6907a7581ce6d527!baz",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": [
|
||||||
|
"asdf",
|
||||||
|
"qwer"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
22
src/libstore-tests/data/common-protocol/set.json
Normal file
22
src/libstore-tests/data/common-protocol/set.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"bar",
|
||||||
|
"foo"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
4
src/libstore-tests/data/common-protocol/store-path.json
Normal file
4
src/libstore-tests/data/common-protocol/store-path.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo-bar"
|
||||||
|
]
|
||||||
7
src/libstore-tests/data/common-protocol/string.json
Normal file
7
src/libstore-tests/data/common-protocol/string.json
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"hi",
|
||||||
|
"white rabbit",
|
||||||
|
"大白兔",
|
||||||
|
"oh no "
|
||||||
|
]
|
||||||
22
src/libstore-tests/data/common-protocol/vector.json
Normal file
22
src/libstore-tests/data/common-protocol/vector.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"foo",
|
||||||
|
"bar"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
28
src/libstore-tests/data/serve-protocol/build-result-2.2.json
Normal file
28
src/libstore-tests/data/serve-protocol/build-result-2.2.json
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "output rejected",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "not deterministic",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"builtOutputs": {},
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "built",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": true,
|
||||||
|
"timesBuilt": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
28
src/libstore-tests/data/serve-protocol/build-result-2.3.json
Normal file
28
src/libstore-tests/data/serve-protocol/build-result-2.3.json
Normal file
|
|
@ -0,0 +1,28 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "output rejected",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": true,
|
||||||
|
"startTime": 30,
|
||||||
|
"status": "not deterministic",
|
||||||
|
"stopTime": 50,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"builtOutputs": {},
|
||||||
|
"startTime": 30,
|
||||||
|
"status": "built",
|
||||||
|
"stopTime": 50,
|
||||||
|
"success": true,
|
||||||
|
"timesBuilt": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
41
src/libstore-tests/data/serve-protocol/build-result-2.6.json
Normal file
41
src/libstore-tests/data/serve-protocol/build-result-2.6.json
Normal file
|
|
@ -0,0 +1,41 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "output rejected",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": true,
|
||||||
|
"startTime": 30,
|
||||||
|
"status": "not deterministic",
|
||||||
|
"stopTime": 50,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"builtOutputs": {
|
||||||
|
"bar": {
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!bar",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"signatures": []
|
||||||
|
},
|
||||||
|
"foo": {
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!foo",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"startTime": 30,
|
||||||
|
"status": "built",
|
||||||
|
"stopTime": 50,
|
||||||
|
"success": true,
|
||||||
|
"timesBuilt": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
26
src/libstore-tests/data/serve-protocol/content-address.json
Normal file
26
src/libstore-tests/data/serve-protocol/content-address.json
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "+Xc9Ll6mcPltwaewrk/BAQ56Y3G5T//wzhKUc0zrYu0="
|
||||||
|
},
|
||||||
|
"method": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha1",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "gGemBoenViNZM3hiwqns/Fgzqwo="
|
||||||
|
},
|
||||||
|
"method": "flat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "EMIJ+giQ/gLIWoxmPKjno3zHZrxbGymgzGGyZvZBIdM="
|
||||||
|
},
|
||||||
|
"method": "nar"
|
||||||
|
}
|
||||||
|
]
|
||||||
4
src/libstore-tests/data/serve-protocol/drv-output.json
Normal file
4
src/libstore-tests/data/serve-protocol/drv-output.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
"sha256:15e3c560894cbb27085cf65b5a2ecb18488c999497f4531b6907a7581ce6d527!baz",
|
||||||
|
"sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!quux"
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha1",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "gGemBoenViNZM3hiwqns/Fgzqwo="
|
||||||
|
},
|
||||||
|
"method": "flat"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo-bar"
|
||||||
|
]
|
||||||
22
src/libstore-tests/data/serve-protocol/realisation.json
Normal file
22
src/libstore-tests/data/serve-protocol/realisation.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:15e3c560894cbb27085cf65b5a2ecb18488c999497f4531b6907a7581ce6d527!baz",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": [
|
||||||
|
"asdf",
|
||||||
|
"qwer"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dependentRealisations": {
|
||||||
|
"sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!quux": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo"
|
||||||
|
},
|
||||||
|
"id": "sha256:15e3c560894cbb27085cf65b5a2ecb18488c999497f4531b6907a7581ce6d527!baz",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": [
|
||||||
|
"asdf",
|
||||||
|
"qwer"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
22
src/libstore-tests/data/serve-protocol/set.json
Normal file
22
src/libstore-tests/data/serve-protocol/set.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"bar",
|
||||||
|
"foo"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
4
src/libstore-tests/data/serve-protocol/store-path.json
Normal file
4
src/libstore-tests/data/serve-protocol/store-path.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo-bar"
|
||||||
|
]
|
||||||
7
src/libstore-tests/data/serve-protocol/string.json
Normal file
7
src/libstore-tests/data/serve-protocol/string.json
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"hi",
|
||||||
|
"white rabbit",
|
||||||
|
"大白兔",
|
||||||
|
"oh no "
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"ca": null,
|
||||||
|
"deriver": null,
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"references": [],
|
||||||
|
"registrationTime": null,
|
||||||
|
"signatures": [],
|
||||||
|
"ultimate": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ca": null,
|
||||||
|
"deriver": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"references": [
|
||||||
|
"g1w7hyyyy1w7hy3qg1w7hy3qgqqqqy3q-foo.drv"
|
||||||
|
],
|
||||||
|
"registrationTime": null,
|
||||||
|
"signatures": [],
|
||||||
|
"ultimate": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,45 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"ca": null,
|
||||||
|
"deriver": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"references": [
|
||||||
|
"g1w7hyyyy1w7hy3qg1w7hy3qgqqqqy3q-foo.drv"
|
||||||
|
],
|
||||||
|
"registrationTime": null,
|
||||||
|
"signatures": [],
|
||||||
|
"ultimate": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ca": {
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "EMIJ+giQ/gLIWoxmPKjno3zHZrxbGymgzGGyZvZBIdM="
|
||||||
|
},
|
||||||
|
"method": "nar"
|
||||||
|
},
|
||||||
|
"deriver": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"references": [
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"n5wkd9frr45pa74if5gpz9j7mifg27fh-foo"
|
||||||
|
],
|
||||||
|
"registrationTime": null,
|
||||||
|
"signatures": [
|
||||||
|
"fake-sig-1",
|
||||||
|
"fake-sig-2"
|
||||||
|
],
|
||||||
|
"ultimate": false
|
||||||
|
}
|
||||||
|
]
|
||||||
22
src/libstore-tests/data/serve-protocol/vector.json
Normal file
22
src/libstore-tests/data/serve-protocol/vector.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"foo",
|
||||||
|
"bar"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
5
src/libstore-tests/data/worker-protocol/build-mode.json
Normal file
5
src/libstore-tests/data/worker-protocol/build-mode.json
Normal file
|
|
@ -0,0 +1,5 @@
|
||||||
|
[
|
||||||
|
0,
|
||||||
|
1,
|
||||||
|
2
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "output rejected",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "not deterministic",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"builtOutputs": {},
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "built",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": true,
|
||||||
|
"timesBuilt": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "output rejected",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "not deterministic",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"builtOutputs": {
|
||||||
|
"bar": {
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!bar",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"signatures": []
|
||||||
|
},
|
||||||
|
"foo": {
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!foo",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "built",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": true,
|
||||||
|
"timesBuilt": 0
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "output rejected",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": true,
|
||||||
|
"startTime": 30,
|
||||||
|
"status": "not deterministic",
|
||||||
|
"stopTime": 50,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"builtOutputs": {
|
||||||
|
"bar": {
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!bar",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"signatures": []
|
||||||
|
},
|
||||||
|
"foo": {
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!foo",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"startTime": 30,
|
||||||
|
"status": "built",
|
||||||
|
"stopTime": 50,
|
||||||
|
"success": true,
|
||||||
|
"timesBuilt": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,43 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "output rejected",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": true,
|
||||||
|
"startTime": 30,
|
||||||
|
"status": "not deterministic",
|
||||||
|
"stopTime": 50,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 3
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"builtOutputs": {
|
||||||
|
"bar": {
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!bar",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"signatures": []
|
||||||
|
},
|
||||||
|
"foo": {
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!foo",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": []
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"cpuSystem": 604000000,
|
||||||
|
"cpuUser": 500000000,
|
||||||
|
"startTime": 30,
|
||||||
|
"status": "built",
|
||||||
|
"stopTime": 50,
|
||||||
|
"success": true,
|
||||||
|
"timesBuilt": 1
|
||||||
|
}
|
||||||
|
]
|
||||||
26
src/libstore-tests/data/worker-protocol/content-address.json
Normal file
26
src/libstore-tests/data/worker-protocol/content-address.json
Normal file
|
|
@ -0,0 +1,26 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "+Xc9Ll6mcPltwaewrk/BAQ56Y3G5T//wzhKUc0zrYu0="
|
||||||
|
},
|
||||||
|
"method": "text"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha1",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "gGemBoenViNZM3hiwqns/Fgzqwo="
|
||||||
|
},
|
||||||
|
"method": "flat"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "EMIJ+giQ/gLIWoxmPKjno3zHZrxbGymgzGGyZvZBIdM="
|
||||||
|
},
|
||||||
|
"method": "nar"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,16 @@
|
||||||
|
[
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
{
|
||||||
|
"drvPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"outputs": [
|
||||||
|
"*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"drvPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"outputs": [
|
||||||
|
"x",
|
||||||
|
"y"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,17 @@
|
||||||
|
[
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo.drv",
|
||||||
|
{
|
||||||
|
"drvPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"outputs": [
|
||||||
|
"*"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"drvPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"outputs": [
|
||||||
|
"x",
|
||||||
|
"y"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
4
src/libstore-tests/data/worker-protocol/drv-output.json
Normal file
4
src/libstore-tests/data/worker-protocol/drv-output.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
"sha256:15e3c560894cbb27085cf65b5a2ecb18488c999497f4531b6907a7581ce6d527!baz",
|
||||||
|
"sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!quux"
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,27 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": false,
|
||||||
|
"path": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-xxx",
|
||||||
|
"startTime": 0,
|
||||||
|
"status": "output rejected",
|
||||||
|
"stopTime": 0,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 0
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"errorMsg": "no idea why",
|
||||||
|
"isNonDeterministic": true,
|
||||||
|
"path": {
|
||||||
|
"drvPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"outputs": [
|
||||||
|
"out"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"startTime": 30,
|
||||||
|
"status": "not deterministic",
|
||||||
|
"stopTime": 50,
|
||||||
|
"success": false,
|
||||||
|
"timesBuilt": 3
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
{
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha1",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "gGemBoenViNZM3hiwqns/Fgzqwo="
|
||||||
|
},
|
||||||
|
"method": "flat"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo-bar"
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,5 @@
|
||||||
|
[
|
||||||
|
null,
|
||||||
|
true,
|
||||||
|
false
|
||||||
|
]
|
||||||
22
src/libstore-tests/data/worker-protocol/realisation.json
Normal file
22
src/libstore-tests/data/worker-protocol/realisation.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"dependentRealisations": {},
|
||||||
|
"id": "sha256:15e3c560894cbb27085cf65b5a2ecb18488c999497f4531b6907a7581ce6d527!baz",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": [
|
||||||
|
"asdf",
|
||||||
|
"qwer"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"dependentRealisations": {
|
||||||
|
"sha256:6f869f9ea2823bda165e06076fd0de4366dead2c0e8d2dbbad277d4f15c373f5!quux": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo"
|
||||||
|
},
|
||||||
|
"id": "sha256:15e3c560894cbb27085cf65b5a2ecb18488c999497f4531b6907a7581ce6d527!baz",
|
||||||
|
"outPath": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"signatures": [
|
||||||
|
"asdf",
|
||||||
|
"qwer"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
22
src/libstore-tests/data/worker-protocol/set.json
Normal file
22
src/libstore-tests/data/worker-protocol/set.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"bar",
|
||||||
|
"foo"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
4
src/libstore-tests/data/worker-protocol/store-path.json
Normal file
4
src/libstore-tests/data/worker-protocol/store-path.json
Normal file
|
|
@ -0,0 +1,4 @@
|
||||||
|
[
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo",
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-foo-bar"
|
||||||
|
]
|
||||||
7
src/libstore-tests/data/worker-protocol/string.json
Normal file
7
src/libstore-tests/data/worker-protocol/string.json
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"hi",
|
||||||
|
"white rabbit",
|
||||||
|
"大白兔",
|
||||||
|
"oh no "
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,32 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"ca": null,
|
||||||
|
"deriver": null,
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"references": [],
|
||||||
|
"registrationTime": 23423,
|
||||||
|
"signatures": [],
|
||||||
|
"ultimate": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ca": null,
|
||||||
|
"deriver": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"references": [
|
||||||
|
"g1w7hyyyy1w7hy3qg1w7hy3qgqqqqy3q-foo.drv"
|
||||||
|
],
|
||||||
|
"registrationTime": 23423,
|
||||||
|
"signatures": [],
|
||||||
|
"ultimate": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,35 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"ca": null,
|
||||||
|
"deriver": null,
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"path": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"references": [],
|
||||||
|
"registrationTime": 23423,
|
||||||
|
"signatures": [],
|
||||||
|
"ultimate": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ca": null,
|
||||||
|
"deriver": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"path": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"references": [
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"g1w7hyyyy1w7hy3qg1w7hy3qgqqqqy3q-foo"
|
||||||
|
],
|
||||||
|
"registrationTime": 23423,
|
||||||
|
"signatures": [],
|
||||||
|
"ultimate": false
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -0,0 +1,63 @@
|
||||||
|
[
|
||||||
|
{
|
||||||
|
"ca": null,
|
||||||
|
"deriver": null,
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"path": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"references": [],
|
||||||
|
"registrationTime": 23423,
|
||||||
|
"signatures": [],
|
||||||
|
"ultimate": true
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ca": null,
|
||||||
|
"deriver": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar.drv",
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"path": "g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"references": [
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"g1w7hyyyy1w7hy3qg1w7hy3qgqqqqy3q-foo"
|
||||||
|
],
|
||||||
|
"registrationTime": 23423,
|
||||||
|
"signatures": [
|
||||||
|
"fake-sig-1",
|
||||||
|
"fake-sig-2"
|
||||||
|
],
|
||||||
|
"ultimate": false
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"ca": {
|
||||||
|
"hash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "EMIJ+giQ/gLIWoxmPKjno3zHZrxbGymgzGGyZvZBIdM="
|
||||||
|
},
|
||||||
|
"method": "nar"
|
||||||
|
},
|
||||||
|
"deriver": null,
|
||||||
|
"narHash": {
|
||||||
|
"algorithm": "sha256",
|
||||||
|
"format": "base64",
|
||||||
|
"hash": "FePFYIlMuycIXPZbWi7LGEiMmZSX9FMbaQenWBzm1Sc="
|
||||||
|
},
|
||||||
|
"narSize": 34878,
|
||||||
|
"path": "n5wkd9frr45pa74if5gpz9j7mifg27fh-foo",
|
||||||
|
"references": [
|
||||||
|
"g1w7hy3qg1w7hy3qg1w7hy3qg1w7hy3q-bar",
|
||||||
|
"n5wkd9frr45pa74if5gpz9j7mifg27fh-foo"
|
||||||
|
],
|
||||||
|
"registrationTime": 23423,
|
||||||
|
"signatures": [],
|
||||||
|
"ultimate": false
|
||||||
|
}
|
||||||
|
]
|
||||||
22
src/libstore-tests/data/worker-protocol/vector.json
Normal file
22
src/libstore-tests/data/worker-protocol/vector.json
Normal file
|
|
@ -0,0 +1,22 @@
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"foo",
|
||||||
|
"bar"
|
||||||
|
],
|
||||||
|
[
|
||||||
|
[],
|
||||||
|
[
|
||||||
|
""
|
||||||
|
],
|
||||||
|
[
|
||||||
|
"",
|
||||||
|
"1",
|
||||||
|
"2"
|
||||||
|
]
|
||||||
|
]
|
||||||
|
]
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "nix/util/json-utils.hh"
|
||||||
#include "nix/store/serve-protocol.hh"
|
#include "nix/store/serve-protocol.hh"
|
||||||
#include "nix/store/serve-protocol-impl.hh"
|
#include "nix/store/serve-protocol-impl.hh"
|
||||||
#include "nix/store/serve-protocol-connection.hh"
|
#include "nix/store/serve-protocol-connection.hh"
|
||||||
|
|
@ -334,7 +335,7 @@ VERSIONED_CHARACTERIZATION_TEST(
|
||||||
}),
|
}),
|
||||||
}))
|
}))
|
||||||
|
|
||||||
VERSIONED_CHARACTERIZATION_TEST(
|
VERSIONED_CHARACTERIZATION_TEST_NO_JSON(
|
||||||
ServeProtoTest,
|
ServeProtoTest,
|
||||||
build_options_2_1,
|
build_options_2_1,
|
||||||
"build-options-2.1",
|
"build-options-2.1",
|
||||||
|
|
@ -344,7 +345,7 @@ VERSIONED_CHARACTERIZATION_TEST(
|
||||||
.buildTimeout = 6,
|
.buildTimeout = 6,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
VERSIONED_CHARACTERIZATION_TEST(
|
VERSIONED_CHARACTERIZATION_TEST_NO_JSON(
|
||||||
ServeProtoTest,
|
ServeProtoTest,
|
||||||
build_options_2_2,
|
build_options_2_2,
|
||||||
"build-options-2.2",
|
"build-options-2.2",
|
||||||
|
|
@ -355,7 +356,7 @@ VERSIONED_CHARACTERIZATION_TEST(
|
||||||
.maxLogSize = 7,
|
.maxLogSize = 7,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
VERSIONED_CHARACTERIZATION_TEST(
|
VERSIONED_CHARACTERIZATION_TEST_NO_JSON(
|
||||||
ServeProtoTest,
|
ServeProtoTest,
|
||||||
build_options_2_3,
|
build_options_2_3,
|
||||||
"build-options-2.3",
|
"build-options-2.3",
|
||||||
|
|
@ -368,7 +369,7 @@ VERSIONED_CHARACTERIZATION_TEST(
|
||||||
.enforceDeterminism = true,
|
.enforceDeterminism = true,
|
||||||
}))
|
}))
|
||||||
|
|
||||||
VERSIONED_CHARACTERIZATION_TEST(
|
VERSIONED_CHARACTERIZATION_TEST_NO_JSON(
|
||||||
ServeProtoTest,
|
ServeProtoTest,
|
||||||
build_options_2_7,
|
build_options_2_7,
|
||||||
"build-options-2.7",
|
"build-options-2.7",
|
||||||
|
|
|
||||||
|
|
@ -4,6 +4,7 @@
|
||||||
#include <nlohmann/json.hpp>
|
#include <nlohmann/json.hpp>
|
||||||
#include <gtest/gtest.h>
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#include "nix/util/json-utils.hh"
|
||||||
#include "nix/store/worker-protocol.hh"
|
#include "nix/store/worker-protocol.hh"
|
||||||
#include "nix/store/worker-protocol-connection.hh"
|
#include "nix/store/worker-protocol-connection.hh"
|
||||||
#include "nix/store/worker-protocol-impl.hh"
|
#include "nix/store/worker-protocol-impl.hh"
|
||||||
|
|
@ -649,7 +650,7 @@ VERSIONED_CHARACTERIZATION_TEST(
|
||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
|
|
||||||
VERSIONED_CHARACTERIZATION_TEST(
|
VERSIONED_CHARACTERIZATION_TEST_NO_JSON(
|
||||||
WorkerProtoTest,
|
WorkerProtoTest,
|
||||||
clientHandshakeInfo_1_30,
|
clientHandshakeInfo_1_30,
|
||||||
"client-handshake-info_1_30",
|
"client-handshake-info_1_30",
|
||||||
|
|
@ -658,7 +659,7 @@ VERSIONED_CHARACTERIZATION_TEST(
|
||||||
{},
|
{},
|
||||||
}))
|
}))
|
||||||
|
|
||||||
VERSIONED_CHARACTERIZATION_TEST(
|
VERSIONED_CHARACTERIZATION_TEST_NO_JSON(
|
||||||
WorkerProtoTest,
|
WorkerProtoTest,
|
||||||
clientHandshakeInfo_1_33,
|
clientHandshakeInfo_1_33,
|
||||||
"client-handshake-info_1_33",
|
"client-handshake-info_1_33",
|
||||||
|
|
@ -672,7 +673,7 @@ VERSIONED_CHARACTERIZATION_TEST(
|
||||||
},
|
},
|
||||||
}))
|
}))
|
||||||
|
|
||||||
VERSIONED_CHARACTERIZATION_TEST(
|
VERSIONED_CHARACTERIZATION_TEST_NO_JSON(
|
||||||
WorkerProtoTest,
|
WorkerProtoTest,
|
||||||
clientHandshakeInfo_1_35,
|
clientHandshakeInfo_1_35,
|
||||||
"client-handshake-info_1_35",
|
"client-handshake-info_1_35",
|
||||||
|
|
|
||||||
|
|
@ -153,4 +153,20 @@ BuildResult adl_serializer<BuildResult>::from_json(const json & _json)
|
||||||
return br;
|
return br;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
KeyedBuildResult adl_serializer<KeyedBuildResult>::from_json(const json & json0)
|
||||||
|
{
|
||||||
|
auto json = getObject(json0);
|
||||||
|
|
||||||
|
return KeyedBuildResult{
|
||||||
|
adl_serializer<BuildResult>::from_json(json0),
|
||||||
|
valueAt(json, "path"),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void adl_serializer<KeyedBuildResult>::to_json(json & json, const KeyedBuildResult & kbr)
|
||||||
|
{
|
||||||
|
adl_serializer<BuildResult>::to_json(json, kbr);
|
||||||
|
json["path"] = kbr.path;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace nlohmann
|
} // namespace nlohmann
|
||||||
|
|
|
||||||
|
|
@ -178,3 +178,4 @@ struct KeyedBuildResult : BuildResult
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
|
|
||||||
JSON_IMPL(nix::BuildResult)
|
JSON_IMPL(nix::BuildResult)
|
||||||
|
JSON_IMPL(nix::KeyedBuildResult)
|
||||||
|
|
|
||||||
|
|
@ -197,3 +197,4 @@ using ValidPathInfos = std::map<StorePath, ValidPathInfo>;
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
|
|
||||||
JSON_IMPL(nix::UnkeyedValidPathInfo)
|
JSON_IMPL(nix::UnkeyedValidPathInfo)
|
||||||
|
JSON_IMPL(nix::ValidPathInfo)
|
||||||
|
|
|
||||||
|
|
@ -182,5 +182,6 @@ public:
|
||||||
|
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
|
|
||||||
|
JSON_IMPL(nix::DrvOutput)
|
||||||
JSON_IMPL(nix::UnkeyedRealisation)
|
JSON_IMPL(nix::UnkeyedRealisation)
|
||||||
JSON_IMPL(nix::Realisation)
|
JSON_IMPL(nix::Realisation)
|
||||||
|
|
|
||||||
|
|
@ -1004,4 +1004,10 @@ const ContentAddress * getDerivationCA(const BasicDerivation & drv);
|
||||||
std::map<DrvOutput, StorePath>
|
std::map<DrvOutput, StorePath>
|
||||||
drvOutputReferences(Store & store, const Derivation & drv, const StorePath & outputPath, Store * evalStore = nullptr);
|
drvOutputReferences(Store & store, const Derivation & drv, const StorePath & outputPath, Store * evalStore = nullptr);
|
||||||
|
|
||||||
|
template<>
|
||||||
|
struct json_avoids_null<TrustedFlag> : std::true_type
|
||||||
|
{};
|
||||||
|
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
|
|
||||||
|
JSON_IMPL(nix::TrustedFlag)
|
||||||
|
|
|
||||||
|
|
@ -10,6 +10,7 @@
|
||||||
#include "nix/util/closure.hh"
|
#include "nix/util/closure.hh"
|
||||||
#include "nix/store/filetransfer.hh"
|
#include "nix/store/filetransfer.hh"
|
||||||
#include "nix/util/strings.hh"
|
#include "nix/util/strings.hh"
|
||||||
|
#include "nix/util/json-utils.hh"
|
||||||
|
|
||||||
#include <boost/unordered/unordered_flat_set.hpp>
|
#include <boost/unordered/unordered_flat_set.hpp>
|
||||||
|
|
||||||
|
|
@ -479,3 +480,19 @@ OutputPathMap resolveDerivedPath(Store & store, const DerivedPath::Built & bfd)
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace nix
|
} // namespace nix
|
||||||
|
|
||||||
|
namespace nlohmann {
|
||||||
|
|
||||||
|
using namespace nix;
|
||||||
|
|
||||||
|
TrustedFlag adl_serializer<TrustedFlag>::from_json(const json & json)
|
||||||
|
{
|
||||||
|
return getBoolean(json) ? TrustedFlag::Trusted : TrustedFlag::NotTrusted;
|
||||||
|
}
|
||||||
|
|
||||||
|
void adl_serializer<TrustedFlag>::to_json(json & json, const TrustedFlag & trustedFlag)
|
||||||
|
{
|
||||||
|
json = static_cast<bool>(trustedFlag);
|
||||||
|
}
|
||||||
|
|
||||||
|
} // namespace nlohmann
|
||||||
|
|
|
||||||
|
|
@ -249,4 +249,20 @@ void adl_serializer<UnkeyedValidPathInfo>::to_json(json & json, const UnkeyedVal
|
||||||
json = c.toJSON(nullptr, true);
|
json = c.toJSON(nullptr, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
ValidPathInfo adl_serializer<ValidPathInfo>::from_json(const json & json0)
|
||||||
|
{
|
||||||
|
auto json = getObject(json0);
|
||||||
|
|
||||||
|
return ValidPathInfo{
|
||||||
|
valueAt(json, "path"),
|
||||||
|
adl_serializer<UnkeyedValidPathInfo>::from_json(json0),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
void adl_serializer<ValidPathInfo>::to_json(json & json, const ValidPathInfo & v)
|
||||||
|
{
|
||||||
|
adl_serializer<UnkeyedValidPathInfo>::to_json(json, v);
|
||||||
|
json["path"] = v.path;
|
||||||
|
}
|
||||||
|
|
||||||
} // namespace nlohmann
|
} // namespace nlohmann
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,16 @@ namespace nlohmann {
|
||||||
|
|
||||||
using namespace nix;
|
using namespace nix;
|
||||||
|
|
||||||
|
DrvOutput adl_serializer<DrvOutput>::from_json(const json & json)
|
||||||
|
{
|
||||||
|
return DrvOutput::parse(getString(json));
|
||||||
|
}
|
||||||
|
|
||||||
|
void adl_serializer<DrvOutput>::to_json(json & json, const DrvOutput & drvOutput)
|
||||||
|
{
|
||||||
|
json = drvOutput.to_string();
|
||||||
|
}
|
||||||
|
|
||||||
UnkeyedRealisation adl_serializer<UnkeyedRealisation>::from_json(const json & json0)
|
UnkeyedRealisation adl_serializer<UnkeyedRealisation>::from_json(const json & json0)
|
||||||
{
|
{
|
||||||
auto json = getObject(json0);
|
auto json = getObject(json0);
|
||||||
|
|
@ -182,14 +192,14 @@ Realisation adl_serializer<Realisation>::from_json(const json & json0)
|
||||||
|
|
||||||
return Realisation{
|
return Realisation{
|
||||||
static_cast<UnkeyedRealisation>(json0),
|
static_cast<UnkeyedRealisation>(json0),
|
||||||
DrvOutput::parse(valueAt(json, "id")),
|
valueAt(json, "id"),
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
void adl_serializer<Realisation>::to_json(json & json, const Realisation & r)
|
void adl_serializer<Realisation>::to_json(json & json, const Realisation & r)
|
||||||
{
|
{
|
||||||
json = static_cast<const UnkeyedRealisation &>(r);
|
json = static_cast<const UnkeyedRealisation &>(r);
|
||||||
json["id"] = r.id.to_string();
|
json["id"] = r.id;
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace nlohmann
|
} // namespace nlohmann
|
||||||
|
|
|
||||||
|
|
@ -11,6 +11,34 @@
|
||||||
|
|
||||||
namespace nix {
|
namespace nix {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Golden test for JSON reading
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
void readJsonTest(CharacterizationTest & test, PathView testStem, const T & expected, auto... args)
|
||||||
|
{
|
||||||
|
using namespace nlohmann;
|
||||||
|
test.readTest(Path{testStem} + ".json", [&](const auto & encodedRaw) {
|
||||||
|
auto encoded = json::parse(encodedRaw);
|
||||||
|
T decoded = adl_serializer<T>::from_json(encoded, args...);
|
||||||
|
ASSERT_EQ(decoded, expected);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Golden test for JSON writing
|
||||||
|
*/
|
||||||
|
template<typename T>
|
||||||
|
void writeJsonTest(CharacterizationTest & test, PathView testStem, const T & value)
|
||||||
|
{
|
||||||
|
using namespace nlohmann;
|
||||||
|
test.writeTest(
|
||||||
|
Path{testStem} + ".json",
|
||||||
|
[&]() -> json { return static_cast<json>(value); },
|
||||||
|
[](const auto & file) { return json::parse(readFile(file)); },
|
||||||
|
[](const auto & file, const auto & got) { return writeFile(file, got.dump(2) + "\n"); });
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Mixin class for writing characterization tests for `nlohmann::json`
|
* Mixin class for writing characterization tests for `nlohmann::json`
|
||||||
* conversions for a given type.
|
* conversions for a given type.
|
||||||
|
|
@ -26,12 +54,7 @@ struct JsonCharacterizationTest : virtual CharacterizationTest
|
||||||
*/
|
*/
|
||||||
void readJsonTest(PathView testStem, const T & expected, auto... args)
|
void readJsonTest(PathView testStem, const T & expected, auto... args)
|
||||||
{
|
{
|
||||||
using namespace nlohmann;
|
nix::readJsonTest(*this, testStem, expected, args...);
|
||||||
readTest(Path{testStem} + ".json", [&](const auto & encodedRaw) {
|
|
||||||
auto encoded = json::parse(encodedRaw);
|
|
||||||
T decoded = adl_serializer<T>::from_json(encoded, args...);
|
|
||||||
ASSERT_EQ(decoded, expected);
|
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -42,12 +65,7 @@ struct JsonCharacterizationTest : virtual CharacterizationTest
|
||||||
*/
|
*/
|
||||||
void writeJsonTest(PathView testStem, const T & value)
|
void writeJsonTest(PathView testStem, const T & value)
|
||||||
{
|
{
|
||||||
using namespace nlohmann;
|
nix::writeJsonTest(*this, testStem, value);
|
||||||
writeTest(
|
|
||||||
Path{testStem} + ".json",
|
|
||||||
[&]() -> json { return static_cast<json>(value); },
|
|
||||||
[](const auto & file) { return json::parse(readFile(file)); },
|
|
||||||
[](const auto & file, const auto & got) { return writeFile(file, got.dump(2) + "\n"); });
|
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue