131 lines
3.4 KiB
C++
131 lines
3.4 KiB
C++
/** Verify if the params map is correctly extracted */
|
|
#include <string>
|
|
#include <memory>
|
|
|
|
#include <di/rpc.h>
|
|
#include <di/types.h>
|
|
#include <di/rpc/types.h>
|
|
#include <mpack/mpack.h>
|
|
#include <di/time.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
/* 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_EQ(1234, d.uid);
|
|
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_string) {
|
|
mpack_reader_t r;
|
|
struct di_rpc_data d;
|
|
char strbuf[256];
|
|
const char *value = NULL;
|
|
|
|
// DNE_PARAM because the value is a bool
|
|
mpack_reader_init_file(&r, "data/rpc_deserialize_rpc_data_1.mp");
|
|
di_rpc_deserialize_rpc_data(&r, &d, strbuf, sizeof(strbuf));
|
|
ASSERT_EQ(DNE_PARAM, di_rpc_param_value_string(&value, &d));
|
|
|
|
mpack_reader_destroy(&r);
|
|
|
|
// DNOK
|
|
mpack_reader_init_file(&r, "data/rpc_deserialize_rpc_data_5.mp");
|
|
di_rpc_deserialize_rpc_data(&r, &d, strbuf, sizeof(strbuf));
|
|
|
|
ASSERT_EQ(1234, d.uid);
|
|
ASSERT_EQ(DNOK, di_rpc_param_value_string(&value, &d));
|
|
ASSERT_STREQ("boembats pow tjow trrr poef", 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);
|
|
}
|
|
}
|
|
}
|