gitee.com/leisunstar/runtime@v0.0.0-20200521203717-5cef3e7b53f9/virtcontainers/persist_test.go (about)

     1  // Copyright (c) 2019 Huawei Corporation
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  //
     5  
     6  package virtcontainers
     7  
     8  import (
     9  	"context"
    10  	"os"
    11  	"testing"
    12  
    13  	"github.com/stretchr/testify/assert"
    14  
    15  	"github.com/kata-containers/runtime/virtcontainers/device/manager"
    16  	exp "github.com/kata-containers/runtime/virtcontainers/experimental"
    17  	"github.com/kata-containers/runtime/virtcontainers/persist"
    18  	"github.com/kata-containers/runtime/virtcontainers/types"
    19  )
    20  
    21  func TestSandboxRestore(t *testing.T) {
    22  	var err error
    23  	assert := assert.New(t)
    24  	sconfig := SandboxConfig{
    25  		ID:           "test-exp",
    26  		Experimental: []exp.Feature{persist.NewStoreFeature},
    27  	}
    28  	container := make(map[string]*Container)
    29  	container["test-exp"] = &Container{}
    30  
    31  	sandbox := Sandbox{
    32  		id:         "test-exp",
    33  		containers: container,
    34  		devManager: manager.NewDeviceManager(manager.VirtioSCSI, false, "", nil),
    35  		hypervisor: &mockHypervisor{},
    36  		ctx:        context.Background(),
    37  		config:     &sconfig,
    38  		state:      types.SandboxState{BlockIndexMap: make(map[int]struct{})},
    39  	}
    40  
    41  	sandbox.newStore, err = persist.GetDriver()
    42  	assert.NoError(err)
    43  	assert.NotNil(sandbox.newStore)
    44  
    45  	// if we don't call Save(), we can get nothing from disk
    46  	err = sandbox.Restore()
    47  	assert.NotNil(t, err)
    48  	assert.True(os.IsNotExist(err))
    49  
    50  	// disk data are empty
    51  	err = sandbox.Save()
    52  	assert.NoError(err)
    53  
    54  	err = sandbox.Restore()
    55  	assert.NoError(err)
    56  	assert.Equal(sandbox.state.State, types.StateString(""))
    57  	assert.Equal(sandbox.state.GuestMemoryBlockSizeMB, uint32(0))
    58  	assert.Equal(len(sandbox.state.BlockIndexMap), 0)
    59  
    60  	// set state data and save again
    61  	sandbox.state.State = types.StateString("running")
    62  	sandbox.state.GuestMemoryBlockSizeMB = uint32(1024)
    63  	sandbox.state.BlockIndexMap[2] = struct{}{}
    64  	// flush data to disk
    65  	err = sandbox.Save()
    66  	assert.Nil(err)
    67  
    68  	// empty the sandbox
    69  	sandbox.state = types.SandboxState{}
    70  	if sandbox.newStore, err = persist.GetDriver(); err != nil || sandbox.newStore == nil {
    71  		t.Fatal("failed to get persist driver")
    72  	}
    73  
    74  	// restore data from disk
    75  	err = sandbox.Restore()
    76  	assert.NoError(err)
    77  	assert.Equal(sandbox.state.State, types.StateString("running"))
    78  	assert.Equal(sandbox.state.GuestMemoryBlockSizeMB, uint32(1024))
    79  	assert.Equal(len(sandbox.state.BlockIndexMap), 1)
    80  	assert.Equal(sandbox.state.BlockIndexMap[2], struct{}{})
    81  }