func testRootfsPropagationHost(linuxSpec *specs.LinuxSpec, guestfilename string) (string, error) { // configFile := "./config.json" propagationmode := linuxSpec.Linux.RootfsPropagation cmd := exec.Command("bash", "-c", "touch rootfs_rootconfig/fspropagationtest/fromhost.txt") _, err := cmd.Output() if err != nil { log.Fatalf("[Specstest] linux rootfs propagation test : touch test file in host error, %v", err) } // set the config parameters relative to this case result := os.Getenv("GOPATH") if result == "" { log.Fatalf("utils.setBind error GOPATH == nil") } resource := result + "/src/github.com/huawei-openlab/oct/tools/specsValidator/containerend" utils.SetRight(resource, linuxSpec.Process.User.UID, linuxSpec.Process.User.GID) linuxSpec.Spec.Process.Args = []string{"/bin/bash", "-c", "/testtool/" + guestfilename} testtoolfolder := specs.Mount{"bind", resource, "/testtool", "bind"} linuxSpec.Spec.Mounts = append(linuxSpec.Spec.Mounts, testtoolfolder) linuxSpec.Linux.Capabilities = []string{"AUDIT_WRITE", "KILL", "NET_BIND_SERVICE", "SYS_ADMIN"} linuxSpec.Spec.Root.Readonly = false err = configconvert.LinuxSpecToConfig(configFile, linuxSpec) out_container, err := adaptor.StartRunc(configFile) cmd = exec.Command("/bin/bash", "-c", "ls rootfs_rootconfig/fspropagationtest") out_host, err := cmd.Output() if err != nil { log.Fatalf("[Specstest] linux rootfs propagation test : read test file from container (in host) error, %v", err) return manager.UNKNOWNERR, nil } var flag_container, flag_host bool if strings.Contains(strings.TrimSpace(out_container), "fromhost.txt") { flag_container = true } else { flag_container = false } if strings.Contains(strings.TrimSpace(string(out_host)), "fromcontainer.txt") { flag_host = true } else { flag_container = false } switch propagationmode { case "slave": if flag_container == true && flag_host == false { return manager.PASSED, nil } case "private": if flag_container == false && flag_host == false { return manager.PASSED, nil } case "share": if flag_container && flag_host { return manager.PASSED, nil } } return manager.FAILED, nil }
func setProcess(process specs.Process) specs.LinuxSpec { linuxSpec.Spec.Process = process //linuxSpec.Spec.Process.Args = append(linuxSpec.Spec.Process.Args, "/specprocess") //linuxSpec.Spec.Process.Args[0] = "./specprocess" result := os.Getenv("GOPATH") if result == "" { log.Fatalf("utils.setBind error GOPATH == nil") } resource := result + "/src/github.com/huawei-openlab/oct/tools/specsValidator/containerend" utils.SetRight(resource, process.User.UID, process.User.GID) //linuxSpec.Spec.Mounts[0].Source = resource utils.SetBind(&linuxSpec, resource) //setBind(&linuxSpec) return linuxSpec }