src.dualinventive.com/dinet/libdipp/tests/rpc/reader.cpp

147 lines
5.1 KiB
C++

#include <memory>
#include <iostream>
#include <di/errno.h>
#include <di/rpc/Class.h>
#include <di/rpc/Reader.h>
#include <gtest/gtest.h>
using namespace std;
using namespace Di::Rpc;
int DiRpcReaderCallbackDevice(Device *msg) {
cout << "hello from " << __func__ << endl;
cout << "msgtype: " << msg->getMsgType() << endl;
return 1;
}
int DiRpcReaderCallbackSensor(Sensor *msg) {
cout << "hello from " << __func__ << endl;
cout << "msgtype: " << msg->getMsgType() << endl;
return 2;
}
int DiRpcReaderCallbackConnectionConnect(Connection *msg) {
cout << "hello from " << __func__ << endl;
cout << "msgtype: " << msg->getMsgType() << endl;
return 3;
}
int DiRpcReaderCallbackConnectionDisconnect(Connection *msg) {
cout << "hello from " << __func__ << endl;
cout << "msgtype: " << msg->getMsgType() << endl;
return 4;
}
int DiRpcReaderCallbackDNCMPing(DNCM *msg) {
cout << "hello from " << __func__ << endl;
cout << "msgtype: " << msg->getMsgType() << endl;
return 5;
}
TEST(Reader, Read) {
Reader r;
string json = "{}";
shared_ptr<Msg> msg;
// EXPECT_EQ(-1, r.read("invalid", msg));
// EXPECT_EQ(-1, r.read(json, msg));
// EXPECT_EQ(-1, r.read(json, msg, false));
// EXPECT_EQ(0, r.read(json, msg, true));
}
TEST(Reader, testFaultyCallback) {
Reader r = Reader();
string temp;
EXPECT_FALSE(r.registerCallback(nullptr, "sensor"));
EXPECT_FALSE(r.registerCallback(nullptr, nullptr));
EXPECT_FALSE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackSensor), "aap"));
EXPECT_FALSE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackSensor), nullptr));
EXPECT_TRUE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackSensor), "*"));
EXPECT_TRUE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackSensor), "sensor", nullptr));
temp = "sensor";
EXPECT_TRUE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackSensor), temp));
EXPECT_TRUE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackSensor), temp, temp));
EXPECT_TRUE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackSensor), "sensor", ""));
}
TEST(Reader, classCreate) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_TRUE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackSensor), "sensor"));
EXPECT_TRUE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackDevice), "device"));
EXPECT_TRUE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackConnectionConnect), "connection", "connect"));
EXPECT_TRUE(
r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackConnectionDisconnect), "connection", "disconnect"));
EXPECT_TRUE(r.registerCallback(DiRpcMsgCallback(DiRpcReaderCallbackDNCMPing), "dncm", "ping"));
EXPECT_EQ(
r.read("{ \"dinetrpc\" : 1, \"time\" : 1, \"device:uid\" : \"5f5f64695f73696d756c61746f725f5f\", \"id\" : 1234, \"req\" : \"device:aap\" }",
nullptr), DNE_PARAM);
EXPECT_EQ(r.read("{\"dinetrpc\":1, \"time\" : 1, \"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"peer\":\"127.0.0.1:51394\",\"time\":20218668}],\"pub\":\"connection:disconnect\"}",
&m), DNOK);
EXPECT_EQ(m->runCallback(), 4);
m = nullptr;
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"time\" : 0, \"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"peer\":\"127.0.0.1:51394\",\"time\":202181668}],\"pub\":\"connection:connect\"}",
&m), DNOK);
EXPECT_EQ(m->runCallback(), 3);
m = nullptr;
EXPECT_EQ(
r.read("{ \"dinetrpc\" : 1, \"time\":1, \"device:uid\" : \"5f5f64695f73696d756c61746f725f5ff\", \"id\" : 1234, \"req\" : \"device:aap\" }",
&m), DNE_PROTO);
EXPECT_EQ(
r.read("{ \"dinetrpc\" : 1, \"time\":1, \"device:uid\" : \"5f5f64695f73696d756c61746f725f5\", \"id\" : 1234, \"req\" : \"device:aap\" }",
&m), DNE_PROTO);
EXPECT_EQ(
r.read("{ \"dinetrpc\" : 1, \"time\":1, \"id\" : 1234, \"req\" : \"device:aap\" }",
&m), DNE_PROTO);
EXPECT_EQ(
r.read("{ \"dinetrpc\" : 1, \"device:uid\":\"012d2d2d4c45474143592d2d0000026f\", \"id\" : 1234, \"req\" : \"device:aap\" }",
&m), DNE_PROTO);
EXPECT_EQ(
r.read("{ \"time\" : 1, \"device:uid\":\"012d2d2d4c45474143592d2d0000026f\", \"id\" : 1234, \"req\" : \"device:aap\" }",
&m), DNE_PROTO);
EXPECT_EQ(
r.read("{ \"dinetrpc\" : 1, \"time\":1, \"device:uid\" : \"5f5f64695f73696d756c61746f725f5f\", \"id\" : 1234, \"req\" : \"device:aap\" }",
&m), 0);
EXPECT_EQ(m->runCallback(), 1);
m = nullptr;
EXPECT_EQ(r.read("{ \"dinetrpc\" : 1, \"time\":1, \"device:uid\" : \"5f5f64695f73696d756c61746f725f5f\", \"id\" : 1234, \"req\" : \"nonexisting:info\" }",
&m, true), 0);
EXPECT_EQ(m->runCallback(), DNE_NOTFOUND);
m = nullptr;
EXPECT_EQ(r.read("{ \"dinetrpc\" : 1, \"time\":1, \"device:uid\" : \"5f5f64695f73696d756c61746f725f5f\", \"id\" : 1234, \"req\" : \"sensor:info\" }",
&m), 0);
EXPECT_EQ(m->runCallback(), 2);
m = nullptr;
EXPECT_EQ(r.read("{ \"dinetrpc\" : 1, \"time\":1, \"device:uid\" : \"5f5f64695f73696d756c61746f725f5f\", \"id\" : 5678, \"req\" : \"sensor:aap\" }",
&m), 0);
EXPECT_EQ(m->runCallback(), 2);
m = nullptr;
EXPECT_EQ(r.read("{ \"dinetrpc\" : 1, \"time\":1, \"device:uid\" : \"5f5f64695f73696d756c61746f725f5f\", \"id\" : 234, \"req\" : \"dncm:ping\" }",
&m), 0);
EXPECT_EQ(m->runCallback(), 5);
m = nullptr;
}