2014-10-17 08:00:59 +08:00
|
|
|
package utils
|
|
|
|
|
2016-04-10 21:09:16 +08:00
|
|
|
import (
|
|
|
|
"bytes"
|
|
|
|
"fmt"
|
|
|
|
"os"
|
|
|
|
"path/filepath"
|
|
|
|
"syscall"
|
|
|
|
"testing"
|
|
|
|
)
|
2014-10-17 08:00:59 +08:00
|
|
|
|
|
|
|
func TestGenerateName(t *testing.T) {
|
|
|
|
name, err := GenerateRandomName("veth", 5)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
expected := 5 + len("veth")
|
2015-05-30 11:50:15 +08:00
|
|
|
if len(name) != expected {
|
|
|
|
t.Fatalf("expected name to be %d chars but received %d", expected, len(name))
|
|
|
|
}
|
|
|
|
|
|
|
|
name, err = GenerateRandomName("veth", 65)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
expected = 64 + len("veth")
|
|
|
|
if len(name) != expected {
|
2014-10-17 08:00:59 +08:00
|
|
|
t.Fatalf("expected name to be %d chars but received %d", expected, len(name))
|
|
|
|
}
|
|
|
|
}
|
2016-04-06 23:57:59 +08:00
|
|
|
|
|
|
|
var labelTest = []struct {
|
|
|
|
labels []string
|
|
|
|
query string
|
|
|
|
expectedValue string
|
|
|
|
}{
|
|
|
|
{[]string{"bundle=/path/to/bundle"}, "bundle", "/path/to/bundle"},
|
|
|
|
{[]string{"test=a", "test=b"}, "bundle", ""},
|
|
|
|
{[]string{"bundle=a", "test=b", "bundle=c"}, "bundle", "a"},
|
|
|
|
{[]string{"", "test=a", "bundle=b"}, "bundle", "b"},
|
|
|
|
{[]string{"test", "bundle=a"}, "bundle", "a"},
|
|
|
|
{[]string{"test=a", "bundle="}, "bundle", ""},
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestSearchLabels(t *testing.T) {
|
|
|
|
for _, tt := range labelTest {
|
|
|
|
if v := SearchLabels(tt.labels, tt.query); v != tt.expectedValue {
|
|
|
|
t.Errorf("expected value '%s' for query '%s'; got '%s'", tt.expectedValue, tt.query, v)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2016-04-10 21:09:16 +08:00
|
|
|
|
|
|
|
func TestResolveRootfs(t *testing.T) {
|
|
|
|
dir := "rootfs"
|
|
|
|
os.Mkdir(dir, 0600)
|
|
|
|
defer os.Remove(dir)
|
|
|
|
|
|
|
|
path, err := ResolveRootfs(dir)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
pwd, err := os.Getwd()
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
if path != fmt.Sprintf("%s/%s", pwd, "rootfs") {
|
|
|
|
t.Errorf("expected rootfs to be abs and was %s", path)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestResolveRootfsWithSymlink(t *testing.T) {
|
|
|
|
dir := "rootfs"
|
|
|
|
tmpDir, _ := filepath.EvalSymlinks(os.TempDir())
|
|
|
|
os.Symlink(tmpDir, dir)
|
|
|
|
defer os.Remove(dir)
|
|
|
|
|
|
|
|
path, err := ResolveRootfs(dir)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
if path != tmpDir {
|
|
|
|
t.Errorf("expected rootfs to be the real path %s and was %s", path, os.TempDir())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestResolveRootfsWithNonExistingDir(t *testing.T) {
|
|
|
|
_, err := ResolveRootfs("foo")
|
|
|
|
if err == nil {
|
|
|
|
t.Error("expected error to happen but received nil")
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestExitStatus(t *testing.T) {
|
|
|
|
status := syscall.WaitStatus(0)
|
|
|
|
ex := ExitStatus(status)
|
|
|
|
if ex != 0 {
|
|
|
|
t.Errorf("expected exit status to equal 0 and received %d", ex)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestExitStatusSignaled(t *testing.T) {
|
|
|
|
status := syscall.WaitStatus(2)
|
|
|
|
ex := ExitStatus(status)
|
|
|
|
if ex != 130 {
|
|
|
|
t.Errorf("expected exit status to equal 130 and received %d", ex)
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestWriteJSON(t *testing.T) {
|
|
|
|
person := struct {
|
|
|
|
Name string
|
|
|
|
Age int
|
|
|
|
}{
|
|
|
|
Name: "Alice",
|
|
|
|
Age: 30,
|
|
|
|
}
|
|
|
|
|
|
|
|
var b bytes.Buffer
|
|
|
|
err := WriteJSON(&b, person)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
|
|
|
|
expected := `{"Name":"Alice","Age":30}`
|
|
|
|
if b.String() != expected {
|
|
|
|
t.Errorf("expected to write %s but was %s", expected, b.String())
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
func TestCleanPath(t *testing.T) {
|
|
|
|
path := CleanPath("")
|
|
|
|
if path != "" {
|
|
|
|
t.Errorf("expected to received empty string and received %s", path)
|
|
|
|
}
|
|
|
|
|
|
|
|
path = CleanPath("rootfs")
|
|
|
|
if path != "rootfs" {
|
|
|
|
t.Errorf("expected to received 'rootfs' and received %s", path)
|
|
|
|
}
|
|
|
|
|
|
|
|
path = CleanPath("../../../var")
|
|
|
|
if path != "var" {
|
|
|
|
t.Errorf("expected to received 'var' and received %s", path)
|
|
|
|
}
|
|
|
|
|
|
|
|
path = CleanPath("/../../../var")
|
|
|
|
if path != "/var" {
|
|
|
|
t.Errorf("expected to received '/var' and received %s", path)
|
|
|
|
}
|
|
|
|
}
|