/** * @file classes_Sensor.cpp * @brief * @date Sep 28, 2015 * @author rheijden * @copyright 2015 Dual Inventive Technology Centre B.V. * * */ #include #include #include #include #include using namespace std; using namespace Di::Rpc; TEST(RPC_Classes_Sensor, no_result) { shared_ptr 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 p = make_shared(m); EXPECT_EQ(0U, p->sensorDataList.size()); p.reset(); m.reset(); } TEST(RPC_Classes_Sensor, empty_result) { shared_ptr 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 p = make_shared(m); EXPECT_EQ(0U, p->sensorDataList.size()); p.reset(); m.reset(); } TEST(RPC_Classes_Sensor, empty_result2) { shared_ptr 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 p = make_shared(m); EXPECT_EQ(0U, p->sensorDataList.size()); p.reset(); m.reset(); } TEST(RPC_Classes_Sensor, single_string_sensorvalue) { shared_ptr 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 p = make_shared(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 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 p = make_shared(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 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 p = make_shared(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("", 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 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 p = make_shared(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 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 p = make_shared(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 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 p = make_shared(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 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 p = make_shared(m); EXPECT_EQ(0U, p->sensorDataList.size()); p.reset(); m.reset(); } TEST(RPC_Classes_Sensor, invalid_sensorvalue2) { shared_ptr 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 p = make_shared(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(); }