aboutsummaryrefslogtreecommitdiff
path: root/src/libstore
diff options
context:
space:
mode:
authorJohn Ericson <John.Ericson@Obsidian.Systems>2023-09-05 11:16:39 -0400
committerJohn Ericson <John.Ericson@Obsidian.Systems>2023-09-05 11:16:39 -0400
commit880d9cabedf7ef1707dd64c44a0a76d61d0ca79a (patch)
treef5e643b9526d5afd3547dc7b4820454ec5e4fc29 /src/libstore
parentf878b422b0b245d62593a909173b10b2b0588eaf (diff)
Test and begin documentation of the ATerm format for derivations
Wanted to do this before the last dynamic derivations PR when I introduce a variation, to make sure I wasn't changing the old version by mistake.
Diffstat (limited to 'src/libstore')
-rw-r--r--src/libstore/tests/derivation.cc119
1 files changed, 73 insertions, 46 deletions
diff --git a/src/libstore/tests/derivation.cc b/src/libstore/tests/derivation.cc
index 0e28c1f08..7fd7f9278 100644
--- a/src/libstore/tests/derivation.cc
+++ b/src/libstore/tests/derivation.cc
@@ -143,26 +143,76 @@ TEST_JSON(ImpureDerivationTest, impure,
#undef TEST_JSON
-#define TEST_JSON(NAME, STR, VAL, DRV_NAME) \
- TEST_F(DerivationTest, Derivation_ ## NAME ## _to_json) { \
- using nlohmann::literals::operator "" _json; \
- ASSERT_EQ( \
- STR ## _json, \
- (Derivation { VAL }).toJSON(*store)); \
- } \
- \
- TEST_F(DerivationTest, Derivation_ ## NAME ## _from_json) { \
- using nlohmann::literals::operator "" _json; \
- ASSERT_EQ( \
- Derivation { VAL }, \
- Derivation::fromJSON( \
- *store, \
- STR ## _json)); \
+#define TEST_JSON(NAME, STR, VAL) \
+ TEST_F(DerivationTest, Derivation_ ## NAME ## _to_json) { \
+ using nlohmann::literals::operator "" _json; \
+ ASSERT_EQ( \
+ STR ## _json, \
+ (VAL).toJSON(*store)); \
+ } \
+ \
+ TEST_F(DerivationTest, Derivation_ ## NAME ## _from_json) { \
+ using nlohmann::literals::operator "" _json; \
+ ASSERT_EQ( \
+ (VAL), \
+ Derivation::fromJSON( \
+ *store, \
+ STR ## _json)); \
}
+#define TEST_ATERM(NAME, STR, VAL, DRV_NAME) \
+ TEST_F(DerivationTest, Derivation_ ## NAME ## _to_aterm) { \
+ ASSERT_EQ( \
+ STR, \
+ (VAL).unparse(*store, false)); \
+ } \
+ \
+ TEST_F(DerivationTest, Derivation_ ## NAME ## _from_aterm) { \
+ auto parsed = parseDerivation( \
+ *store, \
+ STR, \
+ DRV_NAME); \
+ ASSERT_EQ( \
+ (VAL).toJSON(*store), \
+ parsed.toJSON(*store)); \
+ ASSERT_EQ( \
+ (VAL), \
+ parsed); \
+ }
+
+Derivation makeSimpleDrv(const Store & store) {
+ Derivation drv;
+ drv.name = "simple-derivation";
+ drv.inputSrcs = {
+ store.parseStorePath("/nix/store/c015dhfh5l0lp6wxyvdn7bmwhbbr6hr9-dep1"),
+ };
+ drv.inputDrvs = {
+ {
+ store.parseStorePath("/nix/store/c015dhfh5l0lp6wxyvdn7bmwhbbr6hr9-dep2.drv"),
+ {
+ "cat",
+ "dog",
+ },
+ },
+ };
+ drv.platform = "wasm-sel4";
+ drv.builder = "foo";
+ drv.args = {
+ "bar",
+ "baz",
+ };
+ drv.env = {
+ {
+ "BIG_BAD",
+ "WOLF",
+ },
+ };
+ return drv;
+}
+
TEST_JSON(simple,
R"({
- "name": "my-derivation",
+ "name": "simple-derivation",
"inputSrcs": [
"/nix/store/c015dhfh5l0lp6wxyvdn7bmwhbbr6hr9-dep1"
],
@@ -183,37 +233,14 @@ TEST_JSON(simple,
},
"outputs": {}
})",
- ({
- Derivation drv;
- drv.name = "my-derivation";
- drv.inputSrcs = {
- store->parseStorePath("/nix/store/c015dhfh5l0lp6wxyvdn7bmwhbbr6hr9-dep1"),
- };
- drv.inputDrvs = {
- {
- store->parseStorePath("/nix/store/c015dhfh5l0lp6wxyvdn7bmwhbbr6hr9-dep2.drv"),
- {
- "cat",
- "dog",
- },
- }
- };
- drv.platform = "wasm-sel4";
- drv.builder = "foo";
- drv.args = {
- "bar",
- "baz",
- };
- drv.env = {
- {
- "BIG_BAD",
- "WOLF",
- },
- };
- drv;
- }),
- "drv-name")
+ makeSimpleDrv(*store))
+
+TEST_ATERM(simple,
+ R"(Derive([],[("/nix/store/c015dhfh5l0lp6wxyvdn7bmwhbbr6hr9-dep2.drv",["cat","dog"])],["/nix/store/c015dhfh5l0lp6wxyvdn7bmwhbbr6hr9-dep1"],"wasm-sel4","foo",["bar","baz"],[("BIG_BAD","WOLF")]))",
+ makeSimpleDrv(*store),
+ "simple-derivation")
#undef TEST_JSON
+#undef TEST_ATERM
}