Changing up variable interpolation in preparation of supporting interpolation for environments

This commit is contained in:
Ian Roddis
2021-11-12 16:08:57 -04:00
parent ac3928c7f6
commit c0315b4f0b
3 changed files with 121 additions and 34 deletions

View File

@@ -8,6 +8,7 @@
#include "daggy/Serialization.hpp"
#include "daggy/Utilities.hpp"
#include "daggy/executors/task/NoopTaskExecutor.hpp"
TEST_CASE("string_utilities", "[utilities_string]")
{
@@ -16,7 +17,24 @@ TEST_CASE("string_utilities", "[utilities_string]")
REQUIRE(res == "/this/is/hello/test/hello");
}
TEST_CASE("string_expansion", "[utilities_parameter_expansion]")
TEST_CASE("generate_cart_values", "[cartesian_values]")
{
std::string testParams{
R"({"DATE": ["2021-05-06", "2021-05-07" ], "SOURCE": "name", "TYPE": ["a", "b", "c"]})"};
auto params = daggy::configFromJSON(testParams);
auto result = daggy::generateCartesianValues(params);
REQUIRE(result.size() == 6);
for (const auto& valset : result) {
REQUIRE(valset.size() == 3);
REQUIRE(valset.count("DATE") == 1);
REQUIRE(valset.count("SOURCE") == 1);
REQUIRE(valset.count("TYPE") == 1);
}
}
TEST_CASE("string_expansion", "[utilities][parameter_expansion]")
{
SECTION("Basic expansion")
{
@@ -30,6 +48,17 @@ TEST_CASE("string_expansion", "[utilities_parameter_expansion]")
REQUIRE(allCommands.size() == 6);
}
SECTION("No expansion")
{
std::string testParams{
R"({"DATE": ["2021-05-06", "2021-05-07" ], "SOURCE": "name", "TYPE": ["a", "b", "c"]})"};
auto params = daggy::configFromJSON(testParams);
std::vector<std::string> cmd{"/usr/bin/echo"};
auto allCommands = daggy::interpolateValues(cmd, params);
REQUIRE(allCommands.size() == 1);
}
SECTION("Skip over unused parameters")
{
std::string testParams{
@@ -54,3 +83,26 @@ TEST_CASE("string_expansion", "[utilities_parameter_expansion]")
REQUIRE(result.size() == 4);
}
}
TEST_CASE("expand_taskset", "[utilities][expand_taskset]")
{
daggy::executors::task::NoopTaskExecutor ex;
daggy::DAGSpec dagSpec;
std::string testParams{R"({"DATE": ["2021-05-06", "2021-05-07" ]})"};
dagSpec.taskConfig.variables = daggy::configFromJSON(testParams);
std::stringstream jsonTasks;
jsonTasks
<< R"({ "A": { "job": {"command": [ "/usr/bin/cat", "/etc/passwd"]} )"
<< R"(, "children": ["C"], "isGenerator": true},)"
<< R"("C": { "job": {"command": [ "/usr/bin/echo", "hello!"]} } })";
dagSpec.tasks = daggy::tasksFromJSON(jsonTasks.str());
REQUIRE(dagSpec.tasks.size() == 2);
REQUIRE(dagSpec.tasks["A"].children == std::unordered_set<std::string>{"C"});
dagSpec.tasks =
daggy::expandTaskSet(dagSpec.tasks, ex, dagSpec.taskConfig.variables);
REQUIRE(dagSpec.tasks.size() == 2);
REQUIRE(dagSpec.tasks["A_0"].children ==
std::unordered_set<std::string>{"C"});
}