forked from opencontainers/runtime-tools
-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Signed-off-by: Mrunal Patel <mrunalp@gmail.com>
- Loading branch information
Showing
1 changed file
with
98 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,98 @@ | ||
package validation | ||
|
||
import ( | ||
"fmt" | ||
"io/ioutil" | ||
"os" | ||
"os/exec" | ||
"path/filepath" | ||
"testing" | ||
|
||
"github.com/mrunalp/fileutils" | ||
"github.com/opencontainers/runtime-tools/generate" | ||
"github.com/satori/go.uuid" | ||
) | ||
|
||
var ( | ||
runtime = "runc" | ||
) | ||
|
||
func init() { | ||
runtime = os.Getenv("RUNTIME") | ||
} | ||
|
||
func runtimeValidate(runtime string, g *generate.Generator) error { | ||
// Find the runtime binary in the PATH | ||
runtimePath, err := exec.LookPath(runtime) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
// Setup a temporary test directory | ||
tmpDir, err := ioutil.TempDir("", "ocitest") | ||
if err != nil { | ||
return err | ||
} | ||
defer os.RemoveAll(tmpDir) | ||
|
||
// Create bundle directory for the test container | ||
bundleDir := tmpDir + "/busybox" | ||
if err := os.MkdirAll(bundleDir, 0755); err != nil { | ||
return err | ||
} | ||
|
||
// Untar the root fs | ||
untarCmd := exec.Command("tar", "-xf", "../rootfs.tar.gz", "-C", bundleDir) | ||
output, err := untarCmd.CombinedOutput() | ||
if err != nil { | ||
fmt.Println(string(output)) | ||
return err | ||
} | ||
|
||
// Copy the runtimetest binary to the rootfs | ||
err = fileutils.CopyFile("../runtimetest", filepath.Join(bundleDir, "runtimetest")) | ||
|
||
// Generate test configuration | ||
err = g.SaveToFile(filepath.Join(bundleDir, "config.json"), generate.ExportOptions{}) | ||
if err != nil { | ||
return err | ||
} | ||
|
||
// TODO: Use a library to split run into create/start | ||
// Launch the OCI runtime | ||
containerID := uuid.NewV4() | ||
runtimeCmd := exec.Command(runtimePath, "run", containerID.String()) | ||
runtimeCmd.Dir = bundleDir | ||
runtimeCmd.Stdin = os.Stdin | ||
runtimeCmd.Stdout = os.Stdout | ||
runtimeCmd.Stderr = os.Stderr | ||
if err = runtimeCmd.Run(); err != nil { | ||
return err | ||
} | ||
|
||
return nil | ||
} | ||
|
||
func getDefaultGenerator() *generate.Generator { | ||
g := generate.New() | ||
g.SetRootPath(".") | ||
g.SetProcessArgs([]string{"/runtimetest"}) | ||
return &g | ||
} | ||
|
||
func TestValidateBasic(t *testing.T) { | ||
g := getDefaultGenerator() | ||
|
||
if err := runtimeValidate(runtime, g); err != nil { | ||
t.Errorf("%s failed validation: %v", runtime, err) | ||
} | ||
} | ||
|
||
func TestValidateSysctls(t *testing.T) { | ||
g := getDefaultGenerator() | ||
g.AddLinuxSysctl("net.ipv4.ip_forward", "1") | ||
|
||
if err := runtimeValidate(runtime, g); err != nil { | ||
t.Errorf("%s failed validation: %v", runtime, err) | ||
} | ||
} |