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

     1  // Copyright (c) 2018 HyperHQ Inc.
     2  //
     3  // SPDX-License-Identifier: Apache-2.0
     4  //
     5  
     6  package template
     7  
     8  import (
     9  	"context"
    10  	"os"
    11  	"testing"
    12  	"time"
    13  
    14  	"github.com/stretchr/testify/assert"
    15  
    16  	vc "github.com/kata-containers/runtime/virtcontainers"
    17  	"github.com/kata-containers/runtime/virtcontainers/persist/fs"
    18  )
    19  
    20  const testDisabledAsNonRoot = "Test disabled as requires root privileges"
    21  
    22  func TestTemplateFactory(t *testing.T) {
    23  	if os.Geteuid() != 0 {
    24  		t.Skip(testDisabledAsNonRoot)
    25  	}
    26  
    27  	assert := assert.New(t)
    28  
    29  	templateWaitForAgent = 1 * time.Microsecond
    30  
    31  	testDir := fs.MockStorageRootPath()
    32  	defer fs.MockStorageDestroy()
    33  
    34  	hyperConfig := vc.HypervisorConfig{
    35  		KernelPath: testDir,
    36  		ImagePath:  testDir,
    37  	}
    38  	vmConfig := vc.VMConfig{
    39  		HypervisorType:   vc.MockHypervisor,
    40  		HypervisorConfig: hyperConfig,
    41  		AgentType:        vc.NoopAgentType,
    42  		ProxyType:        vc.NoopProxyType,
    43  	}
    44  
    45  	err := vmConfig.Valid()
    46  	assert.Nil(err)
    47  
    48  	ctx := context.Background()
    49  
    50  	// New
    51  	f, err := New(ctx, vmConfig, testDir)
    52  	assert.Nil(err)
    53  
    54  	// Config
    55  	assert.Equal(f.Config(), vmConfig)
    56  
    57  	// GetBaseVM
    58  	vm, err := f.GetBaseVM(ctx, vmConfig)
    59  	assert.Nil(err)
    60  
    61  	err = vm.Stop()
    62  	assert.Nil(err)
    63  
    64  	// Fetch
    65  	tt := template{
    66  		statePath: testDir,
    67  		config:    vmConfig,
    68  	}
    69  
    70  	assert.Equal(tt.Config(), vmConfig)
    71  
    72  	err = tt.checkTemplateVM()
    73  	assert.Error(err)
    74  
    75  	_, err = os.Create(tt.statePath + "/memory")
    76  	assert.Nil(err)
    77  	err = tt.checkTemplateVM()
    78  	assert.Error(err)
    79  
    80  	_, err = os.Create(tt.statePath + "/state")
    81  	assert.Nil(err)
    82  	err = tt.checkTemplateVM()
    83  	assert.Nil(err)
    84  
    85  	err = tt.createTemplateVM(ctx)
    86  	assert.Nil(err)
    87  
    88  	vm, err = tt.GetBaseVM(ctx, vmConfig)
    89  	assert.Nil(err)
    90  
    91  	err = vm.Stop()
    92  	assert.Nil(err)
    93  
    94  	vm, err = f.GetBaseVM(ctx, vmConfig)
    95  	assert.Nil(err)
    96  
    97  	err = vm.Stop()
    98  	assert.Nil(err)
    99  
   100  	err = tt.createTemplateVM(ctx)
   101  	assert.Nil(err)
   102  
   103  	vm, err = tt.GetBaseVM(ctx, vmConfig)
   104  	assert.Nil(err)
   105  
   106  	err = vm.Stop()
   107  	assert.Nil(err)
   108  
   109  	vm, err = f.GetBaseVM(ctx, vmConfig)
   110  	assert.Nil(err)
   111  
   112  	err = vm.Stop()
   113  	assert.Nil(err)
   114  
   115  	// CloseFactory
   116  	f.CloseFactory(ctx)
   117  	tt.CloseFactory(ctx)
   118  }