github.com/opencontainers/runtime-tools@v0.9.0/validation/config_updates_without_affect/config_updates_without_affect.go (about)

     1  package main
     2  
     3  import (
     4  	"fmt"
     5  	"os"
     6  	"path/filepath"
     7  	"time"
     8  
     9  	tap "github.com/mndrix/tap-go"
    10  	"github.com/mrunalp/fileutils"
    11  	rspec "github.com/opencontainers/runtime-spec/specs-go"
    12  	"github.com/opencontainers/runtime-tools/generate"
    13  	"github.com/opencontainers/runtime-tools/specerror"
    14  	"github.com/opencontainers/runtime-tools/validation/util"
    15  	uuid "github.com/satori/go.uuid"
    16  )
    17  
    18  func main() {
    19  	t := tap.New()
    20  	t.Header(0)
    21  
    22  	bundleDir, err := util.PrepareBundle()
    23  	if err != nil {
    24  		util.Fatal(err)
    25  	}
    26  	defer os.RemoveAll(bundleDir)
    27  
    28  	r, err := util.NewRuntime(util.RuntimeCommand, bundleDir)
    29  	if err != nil {
    30  		util.Fatal(err)
    31  	}
    32  
    33  	testPath := filepath.Join(bundleDir, "test.json")
    34  	r.SetID(uuid.NewV4().String())
    35  	// generate a config has all the testing properties
    36  	g, err := util.GetDefaultGenerator()
    37  	if err != nil {
    38  		util.Fatal(err)
    39  	}
    40  	g.SetProcessArgs([]string{"/runtimetest", "--path=/test.json"})
    41  	g.AddLinuxMaskedPaths("/proc/kcore")
    42  	g.AddLinuxReadonlyPaths("/proc/fs")
    43  	g.AddLinuxSysctl("net.ipv4.ip_forward", "1")
    44  	g.SetProcessOOMScoreAdj(100)
    45  	g.AddProcessRlimits("RLIMIT_NOFILE", 1024, 1024)
    46  	g.SetLinuxRootPropagation("shared")
    47  
    48  	err = r.SetConfig(g)
    49  	if err != nil {
    50  		util.Fatal(err)
    51  	}
    52  
    53  	err = g.SaveToFile(testPath, generate.ExportOptions{})
    54  	if err != nil {
    55  		util.Fatal(err)
    56  	}
    57  
    58  	err = fileutils.CopyFile("runtimetest", filepath.Join(r.BundleDir, "runtimetest"))
    59  	if err != nil {
    60  		util.Fatal(err)
    61  	}
    62  
    63  	err = r.Create()
    64  	if err != nil {
    65  		util.Fatal(err)
    66  	}
    67  
    68  	spec := &rspec.Spec{
    69  		Version: "1.0.0",
    70  	}
    71  	g.SetSpec(spec)
    72  	err = r.SetConfig(g)
    73  	if err != nil {
    74  		util.Fatal(err)
    75  	}
    76  
    77  	err = r.Start()
    78  	util.SpecErrorOK(t, err == nil, specerror.NewError(specerror.ConfigUpdatesWithoutAffect, fmt.Errorf("Any updates to config.json after this step MUST NOT affect the container"), rspec.Version), nil)
    79  
    80  	err = util.WaitingForStatus(r, util.LifecycleStatusStopped, time.Second*10, time.Second*1)
    81  	if err == nil {
    82  		err = r.Delete()
    83  	}
    84  	if err != nil {
    85  		t.Fail(err.Error())
    86  	}
    87  
    88  	t.AutoPlan()
    89  }