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

284 lines
9.9 KiB
C++

/**
* @file classes_Sensor.cpp
* @brief <brief>
* @date Sep 28, 2015
* @author rheijden
* @copyright 2015 Dual Inventive Technology Centre B.V.
*
* <description>
*/
#include <memory>
#include <iostream>
#include <di/rpc/Class.h>
#include <di/rpc/Reader.h>
#include <gtest/gtest.h>
using namespace std;
using namespace Di::Rpc;
TEST(RPC_Classes_Sensor, no_result) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":null,\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(0U, p->sensorDataList.size());
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, empty_result) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(0U, p->sensorDataList.size());
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, empty_result2) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{}],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(0U, p->sensorDataList.size());
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, single_string_sensorvalue) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"uid\":0, \"time\":439843354, \"value\":\"string\"}],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(1U, p->sensorDataList.size());
EXPECT_EQ(0U, p->sensorDataList[0].id);
EXPECT_EQ(439843354U, p->sensorDataList[0].time);
EXPECT_EQ(Sensor::SENSOR_TYPE_STRING, p->sensorDataList[0].type);
EXPECT_EQ("string", p->getStringValue(p->sensorDataList[0]));
// invalid types
EXPECT_FALSE(p->getBoolValue(p->sensorDataList[0]));
EXPECT_EQ(0, p->getNumberValue(p->sensorDataList[0]));
EXPECT_FLOAT_EQ(0, p->getDoubleValue(p->sensorDataList[0]));
EXPECT_EQ(p->sensorDataList[0].value, p->getObjectValue(p->sensorDataList[0]));
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, single_number_sensorvalue) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"uid\":0, \"time\":439843354, \"value\":2}],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(1U, p->sensorDataList.size());
EXPECT_EQ(0U, p->sensorDataList[0].id);
EXPECT_EQ(439843354U, p->sensorDataList[0].time);
EXPECT_EQ(Sensor::SENSOR_TYPE_NUMBER, p->sensorDataList[0].type);
EXPECT_EQ(2, p->getNumberValue(p->sensorDataList[0]));
// invalid types
EXPECT_FALSE(p->getBoolValue(p->sensorDataList[0]));
EXPECT_EQ("2", p->getStringValue(p->sensorDataList[0]));
EXPECT_FLOAT_EQ(2, p->getDoubleValue(p->sensorDataList[0]));
EXPECT_EQ(p->sensorDataList[0].value, p->getObjectValue(p->sensorDataList[0]));
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, single_null_sensorvalue) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"uid\":0, \"time\":439843354, \"value\":null}],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(1U, p->sensorDataList.size());
EXPECT_EQ(0U, p->sensorDataList[0].id);
EXPECT_EQ(439843354U, p->sensorDataList[0].time);
EXPECT_EQ(Sensor::SENSOR_TYPE_UNKNOWN, p->sensorDataList[0].type);
// invalid types
EXPECT_EQ(0, p->getNumberValue(p->sensorDataList[0]));
EXPECT_FALSE(p->getBoolValue(p->sensorDataList[0]));
EXPECT_EQ("<unknown>", p->getStringValue(p->sensorDataList[0]));
EXPECT_FLOAT_EQ(0, p->getDoubleValue(p->sensorDataList[0]));
EXPECT_EQ(nullptr, p->getObjectValue(p->sensorDataList[0]));
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, single_double_sensorvalue) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"uid\":9, \"time\":439843354, \"value\":1.1}],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(1U, p->sensorDataList.size());
EXPECT_EQ(9U, p->sensorDataList[0].id);
EXPECT_EQ(439843354U, p->sensorDataList[0].time);
EXPECT_EQ(Sensor::SENSOR_TYPE_DOUBLE, p->sensorDataList[0].type);
// invalid types
EXPECT_EQ(1, p->getNumberValue(p->sensorDataList[0]));
EXPECT_FALSE(p->getBoolValue(p->sensorDataList[0]));
// We chomp only the first 3 digits here. It makes 1.10000000001 (or equiv. which is not what the test expects)
EXPECT_EQ("1.1", p->getStringValue(p->sensorDataList[0]).substr(0,3));
EXPECT_FLOAT_EQ(1.1, p->getDoubleValue(p->sensorDataList[0]));
EXPECT_EQ(p->sensorDataList[0].value, p->getObjectValue(p->sensorDataList[0]));
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, single_bool_sensorvalue) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"uid\":9, \"time\":439843354, \"value\":true}],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(1U, p->sensorDataList.size());
EXPECT_EQ(9U, p->sensorDataList[0].id);
EXPECT_EQ(439843354U, p->sensorDataList[0].time);
EXPECT_EQ(Sensor::SENSOR_TYPE_BOOL, p->sensorDataList[0].type);
// invalid types
EXPECT_EQ(0, p->getNumberValue(p->sensorDataList[0]));
EXPECT_TRUE(p->getBoolValue(p->sensorDataList[0]));
// We chomp only the first 3 digits here. It makes 1.10000000001 (or equiv. which is not what the test expects)
EXPECT_EQ("true", p->getStringValue(p->sensorDataList[0]));
EXPECT_FLOAT_EQ(0, p->getDoubleValue(p->sensorDataList[0]));
EXPECT_EQ(p->sensorDataList[0].value, p->getObjectValue(p->sensorDataList[0]));
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, single_object_sensorvalue) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"uid\":9, \"time\":439843354, \"value\":{\"test\":100}}],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(1U, p->sensorDataList.size());
EXPECT_EQ(9U, p->sensorDataList[0].id);
EXPECT_EQ(439843354U, p->sensorDataList[0].time);
EXPECT_EQ(Sensor::SENSOR_TYPE_OBJECT, p->sensorDataList[0].type);
// invalid types
EXPECT_EQ(0, p->getNumberValue(p->sensorDataList[0]));
EXPECT_FALSE(p->getBoolValue(p->sensorDataList[0]));
// We chomp only the first 3 digits here. It makes 1.10000000001 (or equiv. which is not what the test expects)
EXPECT_EQ("{\"test\":100}", p->getStringValue(p->sensorDataList[0]));
EXPECT_FLOAT_EQ(0, p->getDoubleValue(p->sensorDataList[0]));
auto x = p->getObjectValue(p->sensorDataList[0]);
EXPECT_EQ(p->sensorDataList[0].value, x);
EXPECT_EQ(100, x->getObject("test")->getNumber());
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, invalid_sensorvalue) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"uid\":9, \"time\":439843354}],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(0U, p->sensorDataList.size());
p.reset();
m.reset();
}
TEST(RPC_Classes_Sensor, invalid_sensorvalue2) {
shared_ptr<Msg> m;
Reader r = Reader();
EXPECT_EQ(r.read("{\"dinetrpc\":1,\"device:uid\":\"012d2d2d4c45474143592d2d0000026f\",\"result\":[{\"uid_invalid\":9, \"time_invalid\":439843354, \"value_invalid\":{\"test\":100}}],\"time\":202181316000,\"pub\":\"sensor:data\"}",
&m), 0);
EXPECT_EQ("sensor:data", m->getClassMethod());
EXPECT_EQ("012d2d2d4c45474143592d2d0000026f", m->getDeviceUid());
EXPECT_EQ(202181316000U, m->getTime());
shared_ptr<Sensor> p = make_shared<Sensor>(m);
EXPECT_EQ(1U, p->sensorDataList.size());
EXPECT_EQ(0U, p->sensorDataList[0].id);
EXPECT_EQ(0U, p->sensorDataList[0].time);
EXPECT_EQ(Sensor::SENSOR_TYPE_UNKNOWN, p->sensorDataList[0].type);
p.reset();
m.reset();
}