/** Verify if the params map is correctly extracted */ #include #include #include #include #include #include #include #include /* Used because serialize message header loads di_time_get_stamp */ TEST(time, init) { di_time_init(); } TEST(rpc, param_value_bool) { mpack_reader_t r; struct di_rpc_data d; mpack_reader_init_file(&r, "data/rpc_deserialize_rpc_data_1.mp"); di_rpc_deserialize_rpc_data(&r, &d, NULL, 0); bool value = true; ASSERT_FALSE(d.value.b); ASSERT_EQ(DNOK, di_rpc_param_value_bool(&value, &d)); ASSERT_EQ(false, value); mpack_reader_destroy(&r); } TEST(rpc, param_value_u32) { struct di_rpc_data d; struct { enum di_rpc_data_field field; di_errno_t error_code; double value; } tvss[] = { { DI_RPC_DATA_FIELD_UNKNOWN, DNE_PARAM, -1 }, { DI_RPC_DATA_FIELD_INT8, DNOK, 10 }, { DI_RPC_DATA_FIELD_INT16, DNOK, 10 }, { DI_RPC_DATA_FIELD_INT32, DNOK, 10 }, { DI_RPC_DATA_FIELD_INT64, DNE_RANGE, -1 }, { DI_RPC_DATA_FIELD_INT64, DNOK, 50 }, { DI_RPC_DATA_FIELD_INT64, DNE_RANGE, 99999999999 }, { DI_RPC_DATA_FIELD_UINT8, DNOK, 10 }, { DI_RPC_DATA_FIELD_UINT16, DNOK, 10 }, { DI_RPC_DATA_FIELD_UINT32, DNOK, 10 }, { DI_RPC_DATA_FIELD_UINT64, DNE_RANGE, 99999999999 }, { DI_RPC_DATA_FIELD_UINT64, DNOK, 100 }, { DI_RPC_DATA_FIELD_FLOAT, DNOK, 100.1 }, { DI_RPC_DATA_FIELD_DOUBLE, DNOK, 101.1 }, { DI_RPC_DATA_FIELD_DOUBLE, DNE_RANGE, -1000.3834 } }; for (size_t x = 0; x < DI_ARRAY_SIZE(tvss); x++) { d.field = tvss[x].field; switch (tvss[x].field) { case DI_RPC_DATA_FIELD_INT8: d.value.s8 = (int8_t)tvss[x].value; break; case DI_RPC_DATA_FIELD_INT16: d.value.s16 = (int16_t)tvss[x].value; break; case DI_RPC_DATA_FIELD_INT32: d.value.s32 = (int32_t)tvss[x].value; break; case DI_RPC_DATA_FIELD_INT64: d.value.s64 = (int64_t)tvss[x].value; break; case DI_RPC_DATA_FIELD_UINT8: d.value.u8 = (uint8_t)tvss[x].value; break; case DI_RPC_DATA_FIELD_UINT16: d.value.u16 = (uint16_t)tvss[x].value; break; case DI_RPC_DATA_FIELD_UINT32: d.value.u32 = (uint32_t)tvss[x].value; break; case DI_RPC_DATA_FIELD_UINT64: d.value.u64 = (uint64_t)tvss[x].value; break; case DI_RPC_DATA_FIELD_FLOAT: d.value.f = (float)tvss[x].value; break; case DI_RPC_DATA_FIELD_DOUBLE: d.value.d = (double)tvss[x].value; break; case DI_RPC_DATA_FIELD_UNKNOWN: case DI_RPC_DATA_FIELD_STRING: case DI_RPC_DATA_FIELD_BOOL: default: break; } uint32_t value; ASSERT_EQ(tvss[x].error_code, di_rpc_param_value_u32(&value, &d)); if (tvss[x].error_code == DNOK) { ASSERT_EQ((uint32_t)tvss[x].value, value); } } }