284 lines
9.9 KiB
C++
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();
|
|
}
|