diff mbox

[115/124] vmstate: Test for VMSTATE_STRUCT_POINTER

Message ID 1398091304-10677-116-git-send-email-quintela@redhat.com
State New
Headers show

Commit Message

Juan Quintela April 21, 2014, 2:41 p.m. UTC
Signed-off-by: Juan Quintela <quintela@redhat.com>
---
 tests/test-vmstate.c | 27 ++++++++++++++++++++++++++-
 1 file changed, 26 insertions(+), 1 deletion(-)
diff mbox

Patch

diff --git a/tests/test-vmstate.c b/tests/test-vmstate.c
index 93537f7..c7ecaeb 100644
--- a/tests/test-vmstate.c
+++ b/tests/test-vmstate.c
@@ -1415,6 +1415,7 @@  static const VMStateDescription vmstate_sub_struct = {
 typedef struct TestStruct {
     SubStruct sub;
     SubStruct sub2;
+    SubStruct *subp;
 } TestStruct;

 static const VMStateDescription vmstate_struct_simple = {
@@ -1424,10 +1425,17 @@  static const VMStateDescription vmstate_struct_simple = {
     .minimum_version_id_old = 1,
     .fields = (VMStateField[]) {
         VMSTATE_STRUCT(sub, TestStruct, vmstate_sub_struct, SubStruct),
+        VMSTATE_STRUCT_POINTER(subp, TestStruct, vmstate_sub_struct, SubStruct),
         VMSTATE_END_OF_LIST()
     }
 };

+SubStruct sub_struct = {
+    .i32 = 22,
+    .i64 = 44,
+    .buffer = "hello field!",
+};
+
 TestStruct obj_struct = {
     .sub = {
         .i32 = 33,
@@ -1439,14 +1447,21 @@  TestStruct obj_struct = {
         .i64 = 99,
         .buffer = "bye   world!",
     },
+    .subp = &sub_struct,
 };

 /* This is the binary representation on the wire of that struct */
 uint8_t wire_struct_simple[] = {
+    /* sub */
     /* i32 */       0x00, 0x00, 0x00, 0x21,
     /* i64 */       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x4d,
     /* buffer */    0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x77, 0x6f,
                     0x72, 0x6c, 0x64, 0x21, 0x00,
+    /* subp */
+    /* i32 */       0x00, 0x00, 0x00, 0x16,
+    /* i64 */       0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x2c,
+    /* buffer */    0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x20, 0x66, 0x69,
+                    0x65, 0x6c, 0x64, 0x21, 0x00,
     QEMU_VM_EOF, /* just to ensure we won't get EOF reported prematurely */
 };

@@ -1462,15 +1477,21 @@  static void obj_struct_copy(void *arg1, void *arg2)
     target->sub2.i32 = source->sub2.i32;
     target->sub2.i64 = source->sub2.i64;
     memcpy(target->sub2.buffer, source->sub2.buffer, 13);
+
+    target->subp->i32 = source->subp->i32;
+    target->subp->i64 = source->subp->i64;
+    memcpy(target->subp->buffer, source->subp->buffer, 13);
 }

 static void test_struct_simple(void)
 {
     TestStruct obj, obj_clone;

-
     memset(&obj, 0, sizeof(obj));

+    obj.subp = g_malloc0(sizeof(SubStruct));
+    obj_clone.subp = g_malloc0(sizeof(SubStruct));
+
     save_vmstate(&vmstate_struct_simple, &obj_struct);

     compare_vmstate(wire_struct_simple, sizeof(wire_struct_simple));
@@ -1497,6 +1518,7 @@  static void test_struct_simple(void)

     STRUCT_EQUAL((&obj.sub), (&obj_struct.sub));
     STRUCT_NOT_EQUAL((&obj.sub2), (&obj_struct.sub2));
+    STRUCT_EQUAL(obj.subp, obj_struct.subp);
 }

 static const VMStateDescription vmstate_struct_test = {
@@ -1525,6 +1547,9 @@  static void test_struct_test(void)

     memset(&obj, 0, sizeof(obj));

+    obj.subp = g_malloc0(sizeof(SubStruct));
+    obj_clone.subp = g_malloc0(sizeof(SubStruct));
+
     save_vmstate(&vmstate_struct_test, &obj_struct);

     compare_vmstate(wire_struct_test, sizeof(wire_struct_test));