| |
| /* |
| * Copyright (C) 2018 CESNET, https://photonics.cesnet.cz/ |
| * Copyright (C) 2018 FIT CVUT, https://fit.cvut.cz/ |
| * |
| * Written by Václav Kubernát <kubervac@fit.cvut.cz> |
| * |
| */ |
| |
| #include "trompeloeil_doctest.hpp" |
| #include "parser.hpp" |
| #include "pretty_printers.hpp" |
| #include "static_schema.hpp" |
| |
| TEST_CASE("rpc") |
| { |
| auto schema = std::make_shared<StaticSchema>(); |
| schema->addModule("example"); |
| schema->addRpc("/", "example:fire"); |
| schema->addRpc("/", "example:shutdown"); |
| schema->addLeaf("/example:shutdown/input", "example:interface", yang::String{}); |
| schema->addList("/", "example:port", {"name"}); |
| schema->addLeaf("/example:port", "example:name", yang::String{}); |
| schema->addAction("/example:port", "example:shutdown"); |
| Parser parser(schema); |
| std::string input; |
| std::ostringstream errorStream; |
| SECTION("with prepare") |
| { |
| prepare_ prepExpected; |
| prepExpected.m_path.m_scope = Scope::Relative; |
| SECTION("rpc") |
| { |
| input = "prepare example:fire"; |
| prepExpected.m_path.m_nodes.emplace_back(module_{"example"}, rpcNode_{"fire"}); |
| } |
| |
| SECTION("action") |
| { |
| input = "prepare example:port[name='eth0']/shutdown"; |
| prepExpected.m_path.m_nodes.emplace_back(module_{"example"}, listElement_{"port", {{"name", std::string{"eth0"}}}}); |
| prepExpected.m_path.m_nodes.emplace_back(actionNode_{"shutdown"}); |
| } |
| |
| command_ command = parser.parseCommand(input, errorStream); |
| auto lol = boost::get<prepare_>(command); |
| REQUIRE(boost::get<prepare_>(command) == prepExpected); |
| } |
| |
| SECTION("direct exec") |
| { |
| exec_ execExpected; |
| execExpected.m_path = dataPath_{}; |
| execExpected.m_path->m_scope = Scope::Relative; |
| SECTION("the rpc has no arguments") |
| { |
| input = "exec example:fire"; |
| execExpected.m_path->m_nodes.emplace_back(module_{"example"}, rpcNode_{"fire"}); |
| command_ command = parser.parseCommand(input, errorStream); |
| auto lol = boost::get<exec_>(command); |
| REQUIRE(boost::get<exec_>(command) == execExpected); |
| } |
| |
| SECTION("the rpc has arguments") |
| { |
| input = "exec example:shutdown"; |
| REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException); |
| } |
| |
| SECTION("require space between arguments") |
| { |
| input = "execexample:fire"; |
| REQUIRE_THROWS_AS(parser.parseCommand(input, errorStream), InvalidCommandException); |
| } |
| } |
| |
| SECTION("exec with no arguments") |
| { |
| exec_ execExpected; |
| |
| SECTION("without space") |
| { |
| input = "exec"; |
| } |
| |
| SECTION("with space") |
| { |
| input = "exec "; |
| } |
| command_ command = parser.parseCommand(input, errorStream); |
| auto lol = boost::get<exec_>(command); |
| REQUIRE(boost::get<exec_>(command) == execExpected); |
| } |
| } |