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

133 lines
3.2 KiB
C++

#include <memory>
#include <iostream>
#include <gtest/gtest.h>
#include <di/Json.h>
#include <di/rpc/Class.h>
#include <di/rpc/Reader.h>
using namespace std;
using namespace Di;
using namespace Di::Rpc;
TEST(Msg, MsgType) {
Msg msg;
unique_ptr<Json> json;
// Unknown (initial)
EXPECT_EQ(msg.getMsgType(), Msg::Type::UNKNOWN);
// Unknown
json = unique_ptr<Json>(new Json("{\"test\":\"connection:disconnect\"}", 1));
msg.decodeHeader(move(json));
EXPECT_EQ(msg.getMsgType(), Msg::Type::UNKNOWN);
// Request
json = unique_ptr<Json>(new Json("{\"req\":\"test\"}", 1));
msg.decodeHeader(move(json));
EXPECT_EQ(msg.getMsgType(), Msg::Type::REQUEST);
// Reply
json = unique_ptr<Json>(new Json("{\"rep\":\"test\"}", 1));
msg.decodeHeader(move(json));
EXPECT_EQ(msg.getMsgType(), Msg::Type::REPLY);
// Publish
json = unique_ptr<Json>(new Json("{\"pub\":\"test\"}", 1));
msg.decodeHeader(move(json));
EXPECT_EQ(msg.getMsgType(), Msg::Type::PUBLISH);
}
TEST(Msg, RpcVersion) {
Msg msg;
unique_ptr<Json> json;
EXPECT_EQ(msg.getRpcVersion(), 0U);
json = unique_ptr<Json>(new Json("{\"dinetrpc\": 1}", 1));
msg.decodeHeader(move(json));
EXPECT_EQ(msg.getRpcVersion(), 1U);
json = unique_ptr<Json>(new Json("{\"dinetrpc\": 1234}", 1));
msg.decodeHeader(move(json));
EXPECT_EQ(msg.getRpcVersion(), 1234U);
}
TEST(Msg, ProjectId) {
Msg msg;
shared_ptr<Json> json;
EXPECT_EQ(msg.getProjectId(), 0U);
json = make_shared<Json>("{\"project:id\": 1234}", 0);
msg.decodeHeader(json);
EXPECT_EQ(msg.getProjectId(), 1234U);
}
TEST(Msg, DeviceUid) {
Msg msg;
shared_ptr<Json> json;
EXPECT_EQ(msg.getDeviceUid(), "");
json = make_shared<Json>("{\"device:uid\": \"1234\"}", 0);
msg.decodeHeader(json);
EXPECT_EQ(msg.getDeviceUid(), "1234");
json = make_shared<Json>("{\"device:uid\": \"5f5f64695f73696d756c61746f725f5f\"}");
msg.decodeHeader(json);
EXPECT_EQ(msg.getDeviceUid(), "5f5f64695f73696d756c61746f725f5f");
}
// The device:uid and project:id may coexist
TEST(Msg, DeviceUidAndProjectID) {
Msg msg;
shared_ptr<Json> json;
EXPECT_EQ(msg.getDeviceUid(), "");
json = make_shared<Json>("{\"device:uid\": \"1234\", \"project:id\": 666}", 0);
msg.decodeHeader(json);
EXPECT_EQ(msg.getDeviceUid(), "1234");
EXPECT_EQ(msg.getProjectId(), 666);
}
TEST(Msg, Id) {
Msg msg;
shared_ptr<Json> json;
EXPECT_EQ(msg.getId(), 0);
json = make_shared<Json>("{\"rep\":\"boem:bats\", \"id\": 1234}", 0);
msg.decodeHeader(move(json));
EXPECT_EQ(msg.getId(), 1234U);
}
TEST(Msg, ClassMethod) {
Msg msg;
shared_ptr<Json> json;
// Published connection disconnect event
json = make_shared<Json>("{\"pub\":\"connection:disconnect\"}", 0);
msg.decodeHeader(move(json));
EXPECT_EQ(msg.getMsgType(), Msg::Type::PUBLISH);
EXPECT_EQ(msg.getClass(), "connection");
EXPECT_EQ(msg.getMethod(), "disconnect");
}
TEST(Msg, getMsgType_StringFromEnum) {
Msg msg;
msg._msgType = Msg::Type::REQUEST;
EXPECT_EQ("req", msg.getMsgTypeString());
msg._msgType = Msg::Type::REPLY;
EXPECT_EQ("rep", msg.getMsgTypeString());
msg._msgType = Msg::Type::PUBLISH;
EXPECT_EQ("pub", msg.getMsgTypeString());
msg._msgType = Msg::Type::UNKNOWN;
EXPECT_EQ("<unknown>", msg.getMsgTypeString());
}