rpcgen: add test case for XDR serialization

Test the serialization done by libtirpc, so that when we later
switch to our own code, we can prove wire compatibility.

Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
This commit is contained in:
Daniel P. Berrangé 2023-01-31 13:10:43 -05:00
parent 8ec79e5e14
commit 40cbaa8fbe
41 changed files with 815 additions and 5 deletions

View File

@ -1362,7 +1362,7 @@ exclude_file_name_regexp--sc_avoid_strcase = ^tools/(vsh\.h|nss/libvirt_nss_(lea
exclude_file_name_regexp--sc_avoid_write = ^src/libvirt-stream\.c$$
exclude_file_name_regexp--sc_gettext_init = \
^((tests|examples)/|tools/virt-login-shell.c)
^((tests|examples)/|tools/virt-login-shell\.c$$|scripts/rpcgen/tests/test_demo\.c$$)
exclude_file_name_regexp--sc_copyright_usage = \
^COPYING(|\.LESSER)$$
@ -1391,7 +1391,7 @@ exclude_file_name_regexp--sc_prohibit_close = \
(\.p[yl]$$|\.spec\.in$$|^docs/|^(src/util/vir(file|event)\.c|src/libvirt-stream\.c|tests/(vir.+mock\.c|commandhelper\.c|qemusecuritymock\.c)|tools/nss/libvirt_nss_(leases|macs)\.c)|tools/virt-qemu-qmp-proxy$$)
exclude_file_name_regexp--sc_prohibit_empty_lines_at_EOF = \
(^tests/(nodedevmdevctl|viracpi|virhostcpu|virpcitest|virstoragetest|qemunbdkit)data/|docs/js/.*\.js|docs/fonts/.*\.woff|\.diff|tests/virconfdata/no-newline\.conf$$)
((^tests/(nodedevmdevctl|viracpi|virhostcpu|virpcitest|virstoragetest|qemunbdkit)data/|docs/js/.*\.js|docs/fonts/.*\.woff|\.diff|tests/virconfdata/no-newline\.conf$$)|\.bin)
exclude_file_name_regexp--sc_prohibit_fork_wrappers = \
(^(src/(util/(vircommand|virdaemon)|lxc/lxc_controller)|tests/testutils)\.c$$)
@ -1436,10 +1436,10 @@ exclude_file_name_regexp--sc_prohibit_xmlURI = ^src/util/viruri\.c$$
exclude_file_name_regexp--sc_prohibit_return_as_function = \.py$$
exclude_file_name_regexp--sc_require_config_h = \
^(examples/c/.*/.*\.c|tools/virsh-edit\.c|tests/virmockstathelpers\.c|scripts/rpcgen/tests/demo\.c)$$
^(examples/c/.*/.*\.c|tools/virsh-edit\.c|tests/virmockstathelpers\.c|scripts/rpcgen/tests/(test_)?demo\.c)$$
exclude_file_name_regexp--sc_require_config_h_first = \
^(examples/|tools/virsh-edit\.c$$|tests/virmockstathelpers.c)
^(examples/|tools/virsh-edit\.c$$|tests/virmockstathelpers\.c$$|scripts/rpcgen/tests/test_demo\.c$$)
exclude_file_name_regexp--sc_trailing_blank = \
/sysinfodata/.*\.data|/virhostcpudata/.*\.cpuinfo$$
@ -1506,6 +1506,9 @@ exclude_file_name_regexp--sc_header-ifdef = \
exclude_file_name_regexp--sc_black = \
^tools/|src/|tests/|ci/|run\.in|scripts/[^/]*\.py
exclude_file_name_regexp--sc_spacing-check = \
^scripts/rpcgen/tests/test_demo\.[ch]$$
## -------------- ##
## Implementation ##
## -------------- ##

View File

@ -74,7 +74,6 @@ struct TestStructAllTypes {
bool sb;
float sf;
double sd;
/* quadruple sq; */
int *ip;
int ifa[TestConstDec];

View File

@ -3,3 +3,19 @@ rpcgen_tests = files([
'test_lexer.py',
'test_parser.py',
])
test_demo = executable(
'test_demo',
[ 'test_demo.c' ],
c_args: cc_flags_relaxed_frame_limit,
dependencies: [
xdr_dep, glib_dep
],
)
test(
'test_demo',
test_demo,
workdir: meson.current_source_dir(),
)

View File

@ -0,0 +1,790 @@
#include <glib.h>
#include <rpc/types.h>
#include <rpc/xdr.h>
#include <stdbool.h>
#include "demo.h"
#include "demo.c"
static void test_xdr(xdrproc_t proc, void *vorig, void *vnew, const char *testname, bool fail)
{
XDR xdr;
/* 128kb is big enough for any of our test data */
size_t buflen = 128 * 1000;
g_autofree char *buf = g_new0(char, buflen);
g_autofree char *expfile = g_strdup_printf("test_demo_%s.bin", testname);
g_autofree char *expected = NULL;
size_t explen;
size_t actlen;
g_autoptr(GError) err = NULL;
bool_t ret;
/* Step 1: serialize the vorig and compare to the data in test .bin files */
xdrmem_create(&xdr, buf, buflen, XDR_ENCODE);
ret = !!proc(&xdr, vorig);
g_assert_cmpint(ret, ==, !fail);
if (fail)
goto cleanup;
actlen = xdr_getpos(&xdr);
if (getenv("VIR_TEST_REGENERATE_OUTPUT")) {
g_file_set_contents(expfile, buf, actlen, NULL);
}
g_file_get_contents(expfile, &expected, &explen, &err);
if (err != NULL) {
g_printerr("%s\n", err->message);
abort();
}
g_assert_cmpint(explen, ==, actlen);
g_assert_cmpint(memcmp(buf, expected, actlen), ==, 0);
xdr_destroy(&xdr);
/* Step 2: de-serialize the state to create a new object */
xdrmem_create(&xdr, buf, buflen, XDR_DECODE);
ret = !!proc(&xdr, vnew);
g_assert_cmpint(ret, ==, true);
actlen = xdr_getpos(&xdr);
g_assert_cmpint(explen, ==, actlen);
xdr_destroy(&xdr);
/* Step 3: serialize the new object again to prove we
* round-tripped the original object */
memset(buf, 0, buflen);
xdrmem_create(&xdr, buf, buflen, XDR_ENCODE);
ret = !!proc(&xdr, vnew);
g_assert_cmpint(ret, ==, true);
actlen = xdr_getpos(&xdr);
g_assert_cmpint(explen, ==, actlen);
g_assert_cmpint(memcmp(buf, expected, actlen), ==, 0);
xdr_destroy(&xdr);
/* Step 4: free mem from the new object only; the orig
* was on the stack so leave untouched */
xdrmem_create(&xdr, buf, buflen, XDR_FREE);
ret = !!proc(&xdr, vnew);
g_assert_cmpint(ret, ==, true);
cleanup:
xdr_destroy(&xdr);
}
static void test_enum(void)
{
TestEnum vorig = TEST_ENUM_TWO;
TestEnum vnew = 0;
test_xdr((xdrproc_t)xdr_TestEnum, &vorig, &vnew, "enum", false);
}
static void test_struct(void)
{
TestStruct vorig = {
.c1 = 'a', .c2 = 'b',
};
TestStruct vnew = {0};
test_xdr((xdrproc_t)xdr_TestStruct, &vorig, &vnew, "struct", false);
}
static void test_union_case(void)
{
TestUnion vorig = {
.type = 20, .TestUnion_u = { .i1 = 1729 },
};
TestUnion vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnion, &vorig, &vnew, "union_case", false);
}
static void test_union_default(void)
{
TestUnion vorig = {
.type = 87539319, .TestUnion_u = { .i3 = 1729 },
};
TestUnion vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnion, &vorig, &vnew, "union_default", false);
}
static void test_union_void_default_case(void)
{
TestUnionVoidDefault vorig = {
.type = 21, .TestUnionVoidDefault_u = { .i1 = 1729 },
};
TestUnionVoidDefault vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnionVoidDefault, &vorig, &vnew, "union_void_default_case", false);
}
static void test_union_void_default_default(void)
{
TestUnionVoidDefault vorig = {
.type = 87539319
};
TestUnionVoidDefault vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnionVoidDefault, &vorig, &vnew, "union_void_default_default", false);
}
static void test_union_no_default_case(void)
{
TestUnionNoDefault vorig = {
.type = 22, .TestUnionNoDefault_u = { .i1 = 1729 },
};
TestUnionNoDefault vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnionNoDefault, &vorig, &vnew, "union_no_default_case", false);
}
static void test_union_no_default_default(void)
{
TestUnionNoDefault vorig = {
.type = 87539319,
};
TestUnionNoDefault vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnionNoDefault, &vorig, &vnew, "union_no_default_default", true);
}
static void test_int_scalar(void)
{
TestIntScalar vorig = 1729;
TestIntScalar vnew = 0;
test_xdr((xdrproc_t)xdr_TestIntScalar, &vorig, &vnew, "int_scalar", false);
}
static void test_int_pointer_set(void)
{
int vorigp = 1729;
TestIntPointer vorig = &vorigp;
TestIntPointer vnew = NULL;
test_xdr((xdrproc_t)xdr_TestIntPointer, &vorig, &vnew, "int_pointer_set", false);
}
static void test_int_pointer_null(void)
{
TestIntPointer vorig = NULL;
TestIntPointer vnew = NULL;
test_xdr((xdrproc_t)xdr_TestIntPointer, &vorig, &vnew, "int_pointer_null", false);
}
static void test_int_fixed_array(void)
{
TestIntFixedArray vorig = { 1729, 0, 87539319 };
TestIntFixedArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestIntFixedArray,
vorig, vnew, "int_fixed_array", false);
}
static void test_int_variable_array_set(void)
{
TestIntVariableArray vorig = {
.TestIntVariableArray_len = 3,
.TestIntVariableArray_val = (int[]) { 1729, 0, 87539319 }
};
TestIntVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestIntVariableArray,
&vorig, &vnew, "int_variable_array_set", false);
}
static void test_int_variable_array_overflow(void)
{
TestIntVariableArray vorig = {
.TestIntVariableArray_len = 6,
.TestIntVariableArray_val = (int[]) { 1729, 0, 87539319, 0, 1729 }
};
TestIntVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestIntVariableArray,
&vorig, &vnew, "int_variable_array_overflow", true);
}
static void test_int_variable_array_empty(void)
{
TestIntVariableArray vorig = {
.TestIntVariableArray_len = 0,
.TestIntVariableArray_val = (int[]) {0},
};
TestIntVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestIntVariableArray,
&vorig, &vnew, "int_variable_array_empty", false);
}
static void test_string_variable_array_set(void)
{
TestStringVariableArray vorig = (TestStringVariableArray) "taxis";
TestStringVariableArray vnew = NULL;
test_xdr((xdrproc_t)xdr_TestStringVariableArray,
&vorig, &vnew, "string_variable_array_set", false);
}
static void test_string_variable_array_empty(void)
{
TestStringVariableArray vorig = (TestStringVariableArray)"";
TestStringVariableArray vnew = NULL;
test_xdr((xdrproc_t)xdr_TestStringVariableArray,
&vorig, &vnew, "string_variable_array_empty", false);
}
static void test_opaque_fixed_array(void)
{
TestOpaqueFixedArray vorig = { 0xca, 0xfe, 0x12, 0x23, 0x34, 0x45, 0x56, 0x67, 0x78 };
TestOpaqueFixedArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestOpaqueFixedArray, vorig, vnew, "opaque_fixed_array", false);
}
static void test_opaque_variable_array_set(void)
{
TestOpaqueVariableArray vorig = {
.TestOpaqueVariableArray_len = 3,
.TestOpaqueVariableArray_val = (char[]) { 0xca, 0xfe, 0x12 },
};
TestOpaqueVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestOpaqueVariableArray,
&vorig, &vnew, "opaque_variable_array_set", false);
}
static void test_opaque_variable_array_overflow(void)
{
TestOpaqueVariableArray vorig = {
.TestOpaqueVariableArray_len = 12,
.TestOpaqueVariableArray_val = (char[]) {
0xca, 0xfe, 0x12, 0xca, 0xfe, 0x12,
0xca, 0xfe, 0x12, 0xca, 0xfe, 0x12,
},
};
TestOpaqueVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestOpaqueVariableArray,
&vorig, &vnew, "opaque_variable_array_overflow", true);
}
static void test_opaque_variable_array_empty(void)
{
TestOpaqueVariableArray vorig = {
.TestOpaqueVariableArray_len = 0,
.TestOpaqueVariableArray_val = (char[]) {0},
};
TestOpaqueVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestOpaqueVariableArray,
&vorig, &vnew, "opaque_variable_array_empty", false);
}
static void test_enum_scalar(void)
{
TestEnumScalar vorig = TEST_ENUM_TWO;
TestEnumScalar vnew = 0;
test_xdr((xdrproc_t)xdr_TestEnumScalar,
&vorig, &vnew, "enum_scalar", false);
}
static void test_enum_pointer_set(void)
{
TestEnum vorigp = TEST_ENUM_TWO;
TestEnumPointer vorig = &vorigp;
TestEnumPointer vnew = NULL;
test_xdr((xdrproc_t)xdr_TestEnumPointer,
&vorig, &vnew, "enum_pointer_set", false);
}
static void test_enum_pointer_null(void)
{
TestEnumPointer vorig = NULL;
TestEnumPointer vnew = NULL;
test_xdr((xdrproc_t)xdr_TestEnumPointer,
&vorig, &vnew, "enum_pointer_null", false);
}
static void test_enum_fixed_array(void)
{
TestEnumFixedArray vorig = {
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE
};
TestEnumFixedArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestEnumFixedArray, vorig, vnew, "enum_fixed_array", false);
}
static void test_enum_variable_array_set(void)
{
TestEnumVariableArray vorig = {
.TestEnumVariableArray_len = 3,
.TestEnumVariableArray_val = (TestEnum[]) {
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE,
},
};
TestEnumVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestEnumVariableArray,
&vorig, &vnew, "enum_variable_array_set", false);
}
static void test_enum_variable_array_overflow(void)
{
TestEnumVariableArray vorig = {
.TestEnumVariableArray_len = 16,
.TestEnumVariableArray_val = (TestEnum[]) {
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
}
};
TestEnumVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestEnumVariableArray,
&vorig, &vnew, "enum_variable_array_overflow", true);
}
static void test_enum_variable_array_empty(void)
{
TestEnumVariableArray vorig = {
.TestEnumVariableArray_len = 0,
.TestEnumVariableArray_val = (TestEnum[]) {0},
};
TestEnumVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestEnumVariableArray,
&vorig, &vnew, "enum_variable_array_empty", false);
}
#define TEST_STRUCT_INIT (TestStruct) { .c1 = 0xca, .c2 = 0xfe }
#define TEST_STRUCT_INIT_ALT (TestStruct) { .c1 = 0x09, .c2 = 0x07 }
static void test_struct_scalar(void)
{
TestStructScalar vorig = TEST_STRUCT_INIT;
TestStructScalar vnew = {0};
test_xdr((xdrproc_t)xdr_TestStructScalar,
&vorig, &vnew, "struct_scalar", false);
}
static void test_struct_pointer_set(void)
{
TestStruct vorigp = TEST_STRUCT_INIT;
TestStructPointer vorig = &vorigp;
TestStructPointer vnew = NULL;
test_xdr((xdrproc_t)xdr_TestStructPointer,
&vorig, &vnew, "struct_pointer_set", false);
}
static void test_struct_pointer_null(void)
{
TestStructPointer vorig = NULL;
TestStructPointer vnew = NULL;
test_xdr((xdrproc_t)xdr_TestStructPointer,
&vorig, &vnew, "struct_pointer_null", false);
}
static void test_struct_fixed_array(void)
{
TestStructFixedArray vorig = {
TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT,
TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT_ALT
};
TestStructFixedArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestStructFixedArray, vorig, vnew, "struct_fixed_array", false);
}
static void test_struct_variable_array_set(void)
{
TestStructVariableArray vorig = {
.TestStructVariableArray_len = 3,
.TestStructVariableArray_val = (TestStruct[]) {
TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT_ALT,
},
};
TestStructVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestStructVariableArray,
&vorig, &vnew, "struct_variable_array_set", false);
}
static void test_struct_variable_array_overflow(void)
{
TestStructVariableArray vorig = {
.TestStructVariableArray_len = 20,
.TestStructVariableArray_val = (TestStruct[]) {
TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
}
};
TestStructVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestStructVariableArray,
&vorig, &vnew, "struct_variable_array_overflow", true);
}
static void test_struct_variable_array_empty(void)
{
TestStructVariableArray vorig = {
.TestStructVariableArray_len = 0,
.TestStructVariableArray_val = (TestStruct[]) {},
};
TestStructVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestStructVariableArray,
&vorig, &vnew, "struct_variable_array_empty", false);
}
#define TEST_UNION_INIT (TestUnion) { .type = 20, .TestUnion_u = { .i1 = 1729 } }
#define TEST_UNION_INIT_ALT (TestUnion) { .type = 1729, .TestUnion_u = { .i3 = 87539319 } }
static void test_union_scalar(void)
{
TestUnionScalar vorig = TEST_UNION_INIT;
TestUnionScalar vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnionScalar,
&vorig, &vnew, "union_scalar", false);
}
static void test_union_pointer_set(void)
{
TestUnion vorigp = TEST_UNION_INIT;
TestUnionPointer vorig = &vorigp;
TestUnionPointer vnew = NULL;
test_xdr((xdrproc_t)xdr_TestUnionPointer,
&vorig, &vnew, "union_pointer_set", false);
}
static void test_union_pointer_null(void)
{
TestUnionPointer vorig = NULL;
TestUnionPointer vnew = NULL;
test_xdr((xdrproc_t)xdr_TestUnionPointer,
&vorig, &vnew, "union_pointer_null", false);
}
static void test_union_fixed_array(void)
{
TestUnionFixedArray vorig = {
TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT,
TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT_ALT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT_ALT
};
TestUnionFixedArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnionFixedArray, vorig, vnew, "union_fixed_array", false);
}
static void test_union_variable_array_set(void)
{
TestUnionVariableArray vorig = {
.TestUnionVariableArray_len = 3,
.TestUnionVariableArray_val = (TestUnion[]) {
TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT_ALT,
},
};
TestUnionVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnionVariableArray,
&vorig, &vnew, "union_variable_array_set", false);
}
static void test_union_variable_array_overflow(void)
{
TestUnionVariableArray vorig = {
.TestUnionVariableArray_len = 24,
.TestUnionVariableArray_val = (TestUnion[]) {
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
}
};
TestUnionVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnionVariableArray,
&vorig, &vnew, "union_variable_array_overflow", true);
}
static void test_union_variable_array_empty(void)
{
TestUnionVariableArray vorig = {
.TestUnionVariableArray_len = 0,
.TestUnionVariableArray_val = (TestUnion[]) {},
};
TestUnionVariableArray vnew = {0};
test_xdr((xdrproc_t)xdr_TestUnionVariableArray,
&vorig, &vnew, "union_variable_array_empty", false);
}
static void test_struct_all_types(void)
{
int ip = 1729;
TestEnum ep = TEST_ENUM_TWO;
TestStruct sp = TEST_STRUCT_INIT;
TestUnion up = TEST_UNION_INIT;
TestStructAllTypes vorig = {
.sc = 'x',
.suc = 'y',
.ss = -7,
.sus = 14,
.si = -1729,
.sui = 1729,
.sh = -87539319,
.suh = -87539319,
.sb = true,
.sf = 0.1729,
.sd = 8753.9319,
.ip = &ip,
.ifa = { 1, 2, 3 },
.iva = {
.iva_len = 3,
.iva_val = (int[]) { 7, 8, 9 },
},
.stva = (char *)"hello",
.ofa = {
0x1, 0x2, 0x3, 0xff, 0xff, 0xff, 0xff, 0x1,
0x1, 0x2, 0x3, 0xff, 0xff, 0xff, 0xff, 0x1,
0x1, 0x2, 0x3, 0xff, 0xff, 0xff, 0xff, 0x1,
0x1, 0x2, 0x3, 0xff, 0xff, 0xff, 0xff, 0x1,
0xff,
},
.ova = {
.ova_len = 3,
.ova_val = (char[]) { 0x1, 0xca, 0xfe },
},
.e1 = TEST_ENUM_ONE,
.e2 = TEST_ENUM_TWO,
.ep = &ep,
.efa = {
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE,
},
.eva = {
.eva_len = 3,
.eva_val = (TestEnum[]) {
TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
},
},
.s = TEST_STRUCT_INIT,
.sp = &sp,
.sfa = {
TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT,
TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT,
TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT,
TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT,
},
.sva = {
.sva_len = 3,
.sva_val = (TestStruct[]) {
TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT,
},
},
.u = TEST_UNION_INIT,
.up = &up,
.ufa = {
TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT,
TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT_ALT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT,
TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT_ALT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT,
TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT_ALT,
},
.uva = {
.uva_len = 3,
.uva_val = (TestUnion[]) {
TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT_ALT,
},
},
.tis = 1729,
.tip = &ip,
.tifa = { 1, 2, 3 },
.tiva = {
.TestIntVariableArray_len = 3,
.TestIntVariableArray_val = (int[]) { 7, 8, 9 },
},
.tstva = (char *)"hello",
.tofa = {
0x1, 0x2, 0x3, 0xff, 0xff, 0xff, 0xff, 0x1,
0xff,
},
.tova = {
.TestOpaqueVariableArray_len = 3,
.TestOpaqueVariableArray_val = (char[]) { 0x1, 0xca, 0xfe },
},
.tes = TEST_ENUM_ONE,
.tep = &ep,
.tefa = {
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE, TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
TEST_ENUM_ONE,
},
.teva = {
.TestEnumVariableArray_len = 3,
.TestEnumVariableArray_val = (TestEnum[]) {
TEST_ENUM_TWO, TEST_ENUM_ONE, TEST_ENUM_TWO,
},
},
.tss = TEST_STRUCT_INIT,
.tsp = &sp,
.tsfa = {
TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT,
TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT, TEST_STRUCT_INIT,
TEST_STRUCT_INIT,
},
.tsva = {
.TestStructVariableArray_len = 3,
.TestStructVariableArray_val = (TestStruct[]) {
TEST_STRUCT_INIT, TEST_STRUCT_INIT_ALT, TEST_STRUCT_INIT,
},
},
.tu = TEST_UNION_INIT,
.tup = &up,
.tufa = {
TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT,
TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT_ALT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT,
TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT, TEST_UNION_INIT_ALT,
TEST_UNION_INIT_ALT,
},
.tuva = {
.TestUnionVariableArray_len = 3,
.TestUnionVariableArray_val = (TestUnion[]) {
TEST_UNION_INIT, TEST_UNION_INIT_ALT, TEST_UNION_INIT_ALT,
},
},
};
TestStructAllTypes vnew = {0};
test_xdr((xdrproc_t)xdr_TestStructAllTypes,
&vorig, &vnew, "test_struct_all_types", false);
}
int main(int argc, char **argv)
{
g_test_init(&argc, &argv, NULL);
g_test_set_nonfatal_assertions();
g_test_add_func("/xdr/enum", test_enum);
g_test_add_func("/xdr/struct", test_struct);
g_test_add_func("/xdr/union/case", test_union_case);
g_test_add_func("/xdr/union/default", test_union_default);
g_test_add_func("/xdr/union-void-default/case", test_union_void_default_case);
g_test_add_func("/xdr/union-void-default/default", test_union_void_default_default);
g_test_add_func("/xdr/union-no-default/case", test_union_no_default_case);
g_test_add_func("/xdr/union-no-default/default", test_union_no_default_default);
g_test_add_func("/xdr/int-scalar", test_int_scalar);
g_test_add_func("/xdr/int-pointer/set", test_int_pointer_set);
g_test_add_func("/xdr/int-pointer/null", test_int_pointer_null);
g_test_add_func("/xdr/int-fixed-array", test_int_fixed_array);
g_test_add_func("/xdr/int-variable-array/set", test_int_variable_array_set);
g_test_add_func("/xdr/int-variable-array/overflow", test_int_variable_array_overflow);
g_test_add_func("/xdr/int-variable-array/empty", test_int_variable_array_empty);
g_test_add_func("/xdr/string-variable-array/set", test_string_variable_array_set);
g_test_add_func("/xdr/string-variable-array/empty", test_string_variable_array_empty);
g_test_add_func("/xdr/opaque-fixed-array", test_opaque_fixed_array);
g_test_add_func("/xdr/opaque-variable-array/set", test_opaque_variable_array_set);
g_test_add_func("/xdr/opaque-variable-array/overflow", test_opaque_variable_array_overflow);
g_test_add_func("/xdr/opaque-variable-array/empty", test_opaque_variable_array_empty);
g_test_add_func("/xdr/enum-scalar", test_enum_scalar);
g_test_add_func("/xdr/enum-pointer/set", test_enum_pointer_set);
g_test_add_func("/xdr/enum-pointer/null", test_enum_pointer_null);
g_test_add_func("/xdr/enum-fixed-array", test_enum_fixed_array);
g_test_add_func("/xdr/enum-variable-array/set", test_enum_variable_array_set);
g_test_add_func("/xdr/enum-variable-array/overflow", test_enum_variable_array_overflow);
g_test_add_func("/xdr/enum-variable-array/empty", test_enum_variable_array_empty);
g_test_add_func("/xdr/struct-scalar", test_struct_scalar);
g_test_add_func("/xdr/struct-pointer/set", test_struct_pointer_set);
g_test_add_func("/xdr/struct-pointer/null", test_struct_pointer_null);
g_test_add_func("/xdr/struct-fixed-array", test_struct_fixed_array);
g_test_add_func("/xdr/struct-variable-array/set", test_struct_variable_array_set);
g_test_add_func("/xdr/struct-variable-array/overflow", test_struct_variable_array_overflow);
g_test_add_func("/xdr/struct-variable-array/empty", test_struct_variable_array_empty);
g_test_add_func("/xdr/union-scalar", test_union_scalar);
g_test_add_func("/xdr/union-pointer/set", test_union_pointer_set);
g_test_add_func("/xdr/union-pointer/null", test_union_pointer_null);
g_test_add_func("/xdr/union-fixed-array", test_union_fixed_array);
g_test_add_func("/xdr/union-variable-array/set", test_union_variable_array_set);
g_test_add_func("/xdr/union-variable-array/overflow", test_union_variable_array_overflow);
g_test_add_func("/xdr/union-variable-array/empty", test_union_variable_array_empty);
g_test_add_func("/xdr/struct-all-types", test_struct_all_types);
return g_test_run();
}

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

Binary file not shown.

View File

@ -0,0 +1 @@
7セw