@ -30,6 +30,7 @@
# include "../migration/savevm.h"
# include "qemu/module.h"
# include "io/channel-file.h"
# include "qapi/error.h"
static int temp_fd ;
@ -108,14 +109,16 @@ static int load_vmstate_one(const VMStateDescription *desc, void *obj,
{
QEMUFile * f ;
int ret ;
Error * local_err = NULL ;
f = open_test_file ( true ) ;
qemu_put_buffer ( f , wire , size ) ;
qemu_fclose ( f ) ;
f = open_test_file ( false ) ;
ret = vmstate_load_state ( f , desc , obj , version ) ;
ret = vmstate_load_state ( f , desc , obj , version , & local_err ) ;
if ( ret ) {
error_report_err ( local_err ) ;
g_assert ( qemu_file_get_error ( f ) ) ;
} else {
g_assert ( ! qemu_file_get_error ( f ) ) ;
@ -355,6 +358,8 @@ static const VMStateDescription vmstate_versioned = {
static void test_load_v1 ( void )
{
Error * local_err = NULL ;
int ret ;
uint8_t buf [ ] = {
0 , 0 , 0 , 10 , /* a */
0 , 0 , 0 , 30 , /* c */
@ -365,7 +370,10 @@ static void test_load_v1(void)
QEMUFile * loading = open_test_file ( false ) ;
TestStruct obj = { . b = 200 , . e = 500 , . f = 600 } ;
vmstate_load_state ( loading , & vmstate_versioned , & obj , 1 ) ;
ret = vmstate_load_state ( loading , & vmstate_versioned , & obj , 1 , & local_err ) ;
if ( ret < 0 ) {
error_report_err ( local_err ) ;
}
g_assert ( ! qemu_file_get_error ( loading ) ) ;
g_assert_cmpint ( obj . a , = = , 10 ) ;
g_assert_cmpint ( obj . b , = = , 200 ) ;
@ -378,6 +386,8 @@ static void test_load_v1(void)
static void test_load_v2 ( void )
{
Error * local_err = NULL ;
int ret ;
uint8_t buf [ ] = {
0 , 0 , 0 , 10 , /* a */
0 , 0 , 0 , 20 , /* b */
@ -391,7 +401,10 @@ static void test_load_v2(void)
QEMUFile * loading = open_test_file ( false ) ;
TestStruct obj ;
vmstate_load_state ( loading , & vmstate_versioned , & obj , 2 ) ;
ret = vmstate_load_state ( loading , & vmstate_versioned , & obj , 2 , & local_err ) ;
if ( ret < 0 ) {
error_report_err ( local_err ) ;
}
g_assert_cmpint ( obj . a , = = , 10 ) ;
g_assert_cmpint ( obj . b , = = , 20 ) ;
g_assert_cmpint ( obj . c , = = , 30 ) ;
@ -467,6 +480,8 @@ static void test_save_skip(void)
static void test_load_noskip ( void )
{
Error * local_err = NULL ;
int ret ;
uint8_t buf [ ] = {
0 , 0 , 0 , 10 , /* a */
0 , 0 , 0 , 20 , /* b */
@ -480,7 +495,10 @@ static void test_load_noskip(void)
QEMUFile * loading = open_test_file ( false ) ;
TestStruct obj = { . skip_c_e = false } ;
vmstate_load_state ( loading , & vmstate_skipping , & obj , 2 ) ;
ret = vmstate_load_state ( loading , & vmstate_skipping , & obj , 2 , & local_err ) ;
if ( ret < 0 ) {
error_report_err ( local_err ) ;
}
g_assert ( ! qemu_file_get_error ( loading ) ) ;
g_assert_cmpint ( obj . a , = = , 10 ) ;
g_assert_cmpint ( obj . b , = = , 20 ) ;
@ -493,6 +511,8 @@ static void test_load_noskip(void)
static void test_load_skip ( void )
{
Error * local_err = NULL ;
int ret ;
uint8_t buf [ ] = {
0 , 0 , 0 , 10 , /* a */
0 , 0 , 0 , 20 , /* b */
@ -504,7 +524,10 @@ static void test_load_skip(void)
QEMUFile * loading = open_test_file ( false ) ;
TestStruct obj = { . skip_c_e = true , . c = 300 , . e = 500 } ;
vmstate_load_state ( loading , & vmstate_skipping , & obj , 2 ) ;
ret = vmstate_load_state ( loading , & vmstate_skipping , & obj , 2 , & local_err ) ;
if ( ret < 0 ) {
error_report_err ( local_err ) ;
}
g_assert ( ! qemu_file_get_error ( loading ) ) ;
g_assert_cmpint ( obj . a , = = , 10 ) ;
g_assert_cmpint ( obj . b , = = , 20 ) ;
@ -744,6 +767,8 @@ static void test_save_q(void)
static void test_load_q ( void )
{
int ret ;
Error * local_err = NULL ;
TestQtailq obj_q = {
. i16 = - 512 ,
. i32 = 70000 ,
@ -773,7 +798,10 @@ static void test_load_q(void)
TestQtailq tgt ;
QTAILQ_INIT ( & tgt . q ) ;
vmstate_load_state ( fload , & vmstate_q , & tgt , 1 ) ;
ret = vmstate_load_state ( fload , & vmstate_q , & tgt , 1 , & local_err ) ;
if ( ret < 0 ) {
error_report_err ( local_err ) ;
}
char eof = qemu_get_byte ( fload ) ;
g_assert ( ! qemu_file_get_error ( fload ) ) ;
g_assert_cmpint ( tgt . i16 , = = , obj_q . i16 ) ;
@ -1115,6 +1143,8 @@ static void diff_iommu(TestGTreeIOMMU *iommu1, TestGTreeIOMMU *iommu2)
static void test_gtree_load_domain ( void )
{
Error * local_err = NULL ;
int ret ;
TestGTreeDomain * dest_domain = g_new0 ( TestGTreeDomain , 1 ) ;
TestGTreeDomain * orig_domain = create_first_domain ( ) ;
QEMUFile * fload , * fsave ;
@ -1127,7 +1157,11 @@ static void test_gtree_load_domain(void)
fload = open_test_file ( false ) ;
vmstate_load_state ( fload , & vmstate_domain , dest_domain , 1 ) ;
ret = vmstate_load_state ( fload , & vmstate_domain , dest_domain , 1 ,
& local_err ) ;
if ( ret < 0 ) {
error_report_err ( local_err ) ;
}
eof = qemu_get_byte ( fload ) ;
g_assert ( ! qemu_file_get_error ( fload ) ) ;
g_assert_cmpint ( orig_domain - > id , = = , dest_domain - > id ) ;
@ -1230,6 +1264,8 @@ static void test_gtree_save_iommu(void)
static void test_gtree_load_iommu ( void )
{
Error * local_err = NULL ;
int ret ;
TestGTreeIOMMU * dest_iommu = g_new0 ( TestGTreeIOMMU , 1 ) ;
TestGTreeIOMMU * orig_iommu = create_iommu ( ) ;
QEMUFile * fsave , * fload ;
@ -1241,7 +1277,10 @@ static void test_gtree_load_iommu(void)
qemu_fclose ( fsave ) ;
fload = open_test_file ( false ) ;
vmstate_load_state ( fload , & vmstate_iommu , dest_iommu , 1 ) ;
ret = vmstate_load_state ( fload , & vmstate_iommu , dest_iommu , 1 , & local_err ) ;
if ( ret < 0 ) {
error_report_err ( local_err ) ;
}
eof = qemu_get_byte ( fload ) ;
g_assert ( ! qemu_file_get_error ( fload ) ) ;
g_assert_cmpint ( orig_iommu - > id , = = , dest_iommu - > id ) ;
@ -1363,6 +1402,8 @@ static void test_save_qlist(void)
static void test_load_qlist ( void )
{
Error * local_err = NULL ;
int ret ;
QEMUFile * fsave , * fload ;
TestQListContainer * orig_container = alloc_container ( ) ;
TestQListContainer * dest_container = g_new0 ( TestQListContainer , 1 ) ;
@ -1376,7 +1417,11 @@ static void test_load_qlist(void)
qemu_fclose ( fsave ) ;
fload = open_test_file ( false ) ;
vmstate_load_state ( fload , & vmstate_container , dest_container , 1 ) ;
ret = vmstate_load_state ( fload , & vmstate_container , dest_container , 1 ,
& local_err ) ;
if ( ret < 0 ) {
error_report_err ( local_err ) ;
}
eof = qemu_get_byte ( fload ) ;
g_assert ( ! qemu_file_get_error ( fload ) ) ;
g_assert_cmpint ( eof , = = , QEMU_VM_EOF ) ;