src.dualinventive.com/dinet/libdi-php/libdi/tests/rpc_param.cpp

107 lines
2.7 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_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);
}
}
}