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 }