#include #include #include //#define private public #include #include #include #include #include #include using namespace mdd; using namespace httplib; void serverThread() { Server svr; json input; json output; std::string status = "ready"; for (int i = 0; i < 5; ++i) { json entity; entity["type"] = "INPUT"; entity["value"] = i; input.push_back(entity); } for (int i = 0; i < 3; ++i) { json entity; entity["type"] = "OUTPUT"; entity["value"] = i*2; output.push_back(entity); } svr.Get("/inputs", [&](const Request& req, Response& res) { res.set_content(input.dump(), "application/json"); }); svr.Get("/outputs", [&](const Request& req, Response& res) { res.set_content(output.dump(), "application/json"); }); svr.Get("/status", [&](const Request& req, Response& res) { try{ json body; body["status"] = status; std::cout << status << std::endl; res.set_content(body.dump(), "application/json"); } catch(std::exception){ std::cout << "Exeption caught"<() + input[1]["value"].get(); output[1]["value"] = input[2]["value"].get() * input[2]["value"].get(); output[2]["value"] = input[3]["value"].get() - input[4]["value"].get(); std::cout << output[0].dump() << std::endl; std::cout << output[1].dump() << std::endl; std::cout << output[2].dump() << std::endl; res.set_content(output.dump(), "application/json"); status = "ready"; } ); svr.Get("/stop", [&](const Request& req, Response& res) { std::cout << "server stoped"<getValue()["value"].get(), i); } auto outputs_types = module.getOutputs(); auto outputs_ids = module.getOutputIDs(); for (int i = 0; i < 3; ++i) { EXPECT_EQ(outputs_types[i], "OUTPUT"); EXPECT_EQ(module.getOutput(outputs_ids[i])->getValue()["value"].get(), i * 2); } } TEST(ModuleHTTP, updateLayout_extern){ ModuleHTTP module("../../../lib/test/server/server.py","localhost",8889); auto inputs_types = module.getInputs(); auto inputs_ids = module.getInputIDs(); for(int i = 0; i < 5; ++i){ EXPECT_EQ(inputs_types[i], "INPUT"); EXPECT_EQ(module.getInput(inputs_ids[i])->getValue()["value"].get(), i); } auto outputs_types = module.getOutputs(); auto outputs_ids = module.getOutputIDs(); for(int i = 0; i < 3; ++i){ EXPECT_EQ(outputs_types[i], "OUTPUT"); EXPECT_EQ(module.getOutput(outputs_ids[i])->getValue()["value"].get(), i*2); } Client cli("localhost",8889); cli.Get("/stop"); } TEST(ModuleHTTP, update_intern){ std::thread server (serverThread); ModuleHTTP module("", "localhost", 8888); std::cout << "WORKED" << std::endl; auto inputs_types = module.getInputs(); auto inputs_ids = module.getInputIDs(); for (int i = 0; i < 5; ++i) { module.getInput(inputs_ids[i])->setDefaultValue()["value"] = 10-i; } module.update(); Client cli("localhost", 8888); cli.Get("/stop"); server.join(); inputs_types = module.getInputs(); inputs_ids = module.getInputIDs(); for (int i = 0; i < 5; ++i) { EXPECT_EQ(inputs_types[i], "INPUT"); EXPECT_EQ(module.getInput(inputs_ids[i])->getValue()["value"].get(), 10-i); } auto outputs_types = module.getOutputs(); auto outputs_ids = module.getOutputIDs(); EXPECT_EQ(module.getOutput(outputs_ids[0])->getValue()["value"].get(), 19); EXPECT_EQ(module.getOutput(outputs_ids[1])->getValue()["value"].get(), 64); EXPECT_EQ(module.getOutput(outputs_ids[2])->getValue()["value"].get(), 1); }