]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
rpcgen: add test case for XDR serialization
authorDaniel P. Berrangé <berrange@redhat.com>
Tue, 31 Jan 2023 18:10:43 +0000 (13:10 -0500)
committerDaniel P. Berrangé <berrange@redhat.com>
Fri, 3 Nov 2023 18:06:35 +0000 (14:06 -0400)
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>
41 files changed:
build-aux/syntax-check.mk
scripts/rpcgen/tests/demo.x
scripts/rpcgen/tests/meson.build
scripts/rpcgen/tests/test_demo.c [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_enum.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_enum_fixed_array.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_enum_pointer_null.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_enum_pointer_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_enum_scalar.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_enum_variable_array_empty.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_enum_variable_array_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_int_fixed_array.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_int_pointer_null.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_int_pointer_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_int_scalar.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_int_variable_array_empty.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_int_variable_array_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_opaque_fixed_array.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_opaque_variable_array_empty.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_opaque_variable_array_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_string_variable_array_empty.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_string_variable_array_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_struct.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_struct_fixed_array.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_struct_pointer_null.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_struct_pointer_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_struct_scalar.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_struct_variable_array_empty.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_struct_variable_array_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_test_struct_all_types.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_case.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_default.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_fixed_array.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_no_default_case.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_pointer_null.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_pointer_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_scalar.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_variable_array_empty.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_variable_array_set.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_void_default_case.bin [new file with mode: 0644]
scripts/rpcgen/tests/test_demo_union_void_default_default.bin [new file with mode: 0644]

index 1fa8bc6a90d56e6dfd31cb94ce0eb1658a70b53d..17cae3f23e1167c062184d78491398ab092d3859 100644 (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 ##
 ## -------------- ##
index ec69913f3d3429be8b6842b096bc649ddb2c9407..7260ad08df3b7ab4c085e4c708e473da05d9fc65 100644 (file)
@@ -74,7 +74,6 @@ struct TestStructAllTypes {
   bool sb;
   float sf;
   double sd;
-/*  quadruple sq; */
 
   int *ip;
   int ifa[TestConstDec];
index 953a3dbede9c6b969a9efb2a0a7475888d1432e1..075b5a82cfd0059c19442c46aca0a01af82d8a17 100644 (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(),
+)
diff --git a/scripts/rpcgen/tests/test_demo.c b/scripts/rpcgen/tests/test_demo.c
new file mode 100644 (file)
index 0000000..e423748
--- /dev/null
@@ -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();
+}
diff --git a/scripts/rpcgen/tests/test_demo_enum.bin b/scripts/rpcgen/tests/test_demo_enum.bin
new file mode 100644 (file)
index 0000000..b6a8ef3
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_enum.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_enum_fixed_array.bin b/scripts/rpcgen/tests/test_demo_enum_fixed_array.bin
new file mode 100644 (file)
index 0000000..869e813
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_enum_fixed_array.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_enum_pointer_null.bin b/scripts/rpcgen/tests/test_demo_enum_pointer_null.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_enum_pointer_null.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_enum_pointer_set.bin b/scripts/rpcgen/tests/test_demo_enum_pointer_set.bin
new file mode 100644 (file)
index 0000000..dc4fb37
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_enum_pointer_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_enum_scalar.bin b/scripts/rpcgen/tests/test_demo_enum_scalar.bin
new file mode 100644 (file)
index 0000000..b6a8ef3
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_enum_scalar.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_enum_variable_array_empty.bin b/scripts/rpcgen/tests/test_demo_enum_variable_array_empty.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_enum_variable_array_empty.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_enum_variable_array_set.bin b/scripts/rpcgen/tests/test_demo_enum_variable_array_set.bin
new file mode 100644 (file)
index 0000000..63c1429
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_enum_variable_array_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_int_fixed_array.bin b/scripts/rpcgen/tests/test_demo_int_fixed_array.bin
new file mode 100644 (file)
index 0000000..4e19f58
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_int_fixed_array.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_int_pointer_null.bin b/scripts/rpcgen/tests/test_demo_int_pointer_null.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_int_pointer_null.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_int_pointer_set.bin b/scripts/rpcgen/tests/test_demo_int_pointer_set.bin
new file mode 100644 (file)
index 0000000..7574dc8
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_int_pointer_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_int_scalar.bin b/scripts/rpcgen/tests/test_demo_int_scalar.bin
new file mode 100644 (file)
index 0000000..53ae788
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_int_scalar.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_int_variable_array_empty.bin b/scripts/rpcgen/tests/test_demo_int_variable_array_empty.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_int_variable_array_empty.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_int_variable_array_set.bin b/scripts/rpcgen/tests/test_demo_int_variable_array_set.bin
new file mode 100644 (file)
index 0000000..2ef627b
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_int_variable_array_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_opaque_fixed_array.bin b/scripts/rpcgen/tests/test_demo_opaque_fixed_array.bin
new file mode 100644 (file)
index 0000000..c60ee06
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_opaque_fixed_array.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_opaque_variable_array_empty.bin b/scripts/rpcgen/tests/test_demo_opaque_variable_array_empty.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_opaque_variable_array_empty.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_opaque_variable_array_set.bin b/scripts/rpcgen/tests/test_demo_opaque_variable_array_set.bin
new file mode 100644 (file)
index 0000000..6970f11
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_opaque_variable_array_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_string_variable_array_empty.bin b/scripts/rpcgen/tests/test_demo_string_variable_array_empty.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_string_variable_array_empty.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_string_variable_array_set.bin b/scripts/rpcgen/tests/test_demo_string_variable_array_set.bin
new file mode 100644 (file)
index 0000000..78e2905
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_string_variable_array_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_struct.bin b/scripts/rpcgen/tests/test_demo_struct.bin
new file mode 100644 (file)
index 0000000..17d90c3
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_struct.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_struct_fixed_array.bin b/scripts/rpcgen/tests/test_demo_struct_fixed_array.bin
new file mode 100644 (file)
index 0000000..f0e786d
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_struct_fixed_array.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_struct_pointer_null.bin b/scripts/rpcgen/tests/test_demo_struct_pointer_null.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_struct_pointer_null.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_struct_pointer_set.bin b/scripts/rpcgen/tests/test_demo_struct_pointer_set.bin
new file mode 100644 (file)
index 0000000..5728147
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_struct_pointer_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_struct_scalar.bin b/scripts/rpcgen/tests/test_demo_struct_scalar.bin
new file mode 100644 (file)
index 0000000..0e6959d
--- /dev/null
@@ -0,0 +1 @@
+ÿÿÿÊÿÿÿþ
\ No newline at end of file
diff --git a/scripts/rpcgen/tests/test_demo_struct_variable_array_empty.bin b/scripts/rpcgen/tests/test_demo_struct_variable_array_empty.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_struct_variable_array_empty.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_struct_variable_array_set.bin b/scripts/rpcgen/tests/test_demo_struct_variable_array_set.bin
new file mode 100644 (file)
index 0000000..a9406a2
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_struct_variable_array_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_test_struct_all_types.bin b/scripts/rpcgen/tests/test_demo_test_struct_all_types.bin
new file mode 100644 (file)
index 0000000..5ee4ee5
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_test_struct_all_types.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_case.bin b/scripts/rpcgen/tests/test_demo_union_case.bin
new file mode 100644 (file)
index 0000000..b7ca515
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_case.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_default.bin b/scripts/rpcgen/tests/test_demo_union_default.bin
new file mode 100644 (file)
index 0000000..7acf7d7
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_default.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_fixed_array.bin b/scripts/rpcgen/tests/test_demo_union_fixed_array.bin
new file mode 100644 (file)
index 0000000..c666f3a
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_fixed_array.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_no_default_case.bin b/scripts/rpcgen/tests/test_demo_union_no_default_case.bin
new file mode 100644 (file)
index 0000000..6dbd9a9
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_no_default_case.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_pointer_null.bin b/scripts/rpcgen/tests/test_demo_union_pointer_null.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_pointer_null.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_pointer_set.bin b/scripts/rpcgen/tests/test_demo_union_pointer_set.bin
new file mode 100644 (file)
index 0000000..01dc9da
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_pointer_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_scalar.bin b/scripts/rpcgen/tests/test_demo_union_scalar.bin
new file mode 100644 (file)
index 0000000..b7ca515
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_scalar.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_variable_array_empty.bin b/scripts/rpcgen/tests/test_demo_union_variable_array_empty.bin
new file mode 100644 (file)
index 0000000..593f470
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_variable_array_empty.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_variable_array_set.bin b/scripts/rpcgen/tests/test_demo_union_variable_array_set.bin
new file mode 100644 (file)
index 0000000..3edd18c
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_variable_array_set.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_void_default_case.bin b/scripts/rpcgen/tests/test_demo_union_void_default_case.bin
new file mode 100644 (file)
index 0000000..b5f6c99
Binary files /dev/null and b/scripts/rpcgen/tests/test_demo_union_void_default_case.bin differ
diff --git a/scripts/rpcgen/tests/test_demo_union_void_default_default.bin b/scripts/rpcgen/tests/test_demo_union_void_default_default.bin
new file mode 100644 (file)
index 0000000..d7e8f43
--- /dev/null
@@ -0,0 +1 @@
+\ 57¾w
\ No newline at end of file