diff --git a/daggy/src/Server.cpp b/daggy/src/Server.cpp index 6115d72..201bb51 100644 --- a/daggy/src/Server.cpp +++ b/daggy/src/Server.cpp @@ -101,13 +101,6 @@ namespace daggy { if (!doc.HasMember("tasks")) { REQ_ERROR(Bad_Request, "DAG Run has no tasks."); } std::string runName = doc["name"].GetString(); - std::vector tasks; - try { - auto parsedTasks = tasksFromJSON(doc["tasks"].GetArray()); - tasks.swap(parsedTasks); - } catch (std::exception &e) { - REQ_ERROR(Bad_Request, e.what()); - } // Get parameters if there are any ParameterValues parameters; @@ -120,6 +113,16 @@ namespace daggy { } } + // Get the tasks + std::vector tasks; + try { + auto parsedTasks = tasksFromJSON(doc["tasks"].GetArray(), parameters); + tasks.swap(parsedTasks); + } catch (std::exception &e) { + REQ_ERROR(Bad_Request, e.what()); + } + + // Get a run ID auto runID = logger_.startDAGRun(runName, tasks); auto dag = buildDAGFromTasks(tasks); diff --git a/daggy/src/loggers/dag_run/OStreamLogger.cpp b/daggy/src/loggers/dag_run/OStreamLogger.cpp index 3b0a425..a6ff5d0 100644 --- a/daggy/src/loggers/dag_run/OStreamLogger.cpp +++ b/daggy/src/loggers/dag_run/OStreamLogger.cpp @@ -1,3 +1,5 @@ +#include + #include #include @@ -13,6 +15,11 @@ namespace daggy { size_t runID = nextRunID_++; os_ << "Starting new DAGRun named " << name << " with ID " << runID << " and " << tasks.size() << " tasks" << std::endl; + for (const auto &task : tasks) { + os_ << "TASK (" << task.name << "): "; + std::copy(task.command.begin(), task.command.end(), std::ostream_iterator(os_, " ")); + os_ << std::endl; + } return runID; } diff --git a/tests/unit_server.cpp b/tests/unit_server.cpp index 2e39db3..f6bfe46 100644 --- a/tests/unit_server.cpp +++ b/tests/unit_server.cpp @@ -62,29 +62,34 @@ TEST_CASE("Server Basic Endpoints", "[server_basic]") { const std::string host = "localhost:"; const std::string baseURL = host + std::to_string(server.getPort()); - { + SECTION ("Ready Endpoint") { auto response = REQUEST(baseURL + "/ready"); REQUIRE(response.code() == Pistache::Http::Code::Ok); } - std::string dagRun = R"({ - "name": "unit_server", - "parameters": { "DIRS": [ "A", "B" ] }, - "tasks": [ - { "name": "touch", - "command": [ "/usr/bin/touch", "/tmp/{{DIRS}}" ] - }, - { - "name": "cat", - "command": [ "/usr/bin/cat", "/tmp/A", "/tmp/B" ] - "parents": [ "touch" ] - } - ] - })"; + SECTION("Simple DAGRun Submission") { + std::string dagRun = R"({ + "name": "unit_server", + "parameters": { "FILE": [ "A", "B" ] }, + "tasks": [ + { "name": "touch", + "command": [ "/usr/bin/touch", "/tmp/{{FILE}}" ] + }, + { + "name": "cat", + "command": [ "/usr/bin/cat", "/tmp/A", "/tmp/B" ], + "parents": [ "touch" ] + } + ] + })"; - { auto response = REQUEST(baseURL + "/v1/dagrun/", dagRun); REQUIRE(response.code() == Pistache::Http::Code::Ok); + + for (const auto &pth : std::vector{"/tmp/A", "/tmp/B"}) { + REQUIRE(fs::exists(pth)); + fs::remove(pth); + } } server.shutdown();