moby--moby/api_test.go

241 lines
4.8 KiB
Go
Raw Normal View History

package docker
import (
"encoding/json"
"github.com/dotcloud/docker/auth"
"testing"
)
func init() {
// Make it our Store root
runtime, err := NewRuntimeFromDirectory(unitTestStoreBase, false)
if err != nil {
panic(err)
}
// Create the "Server"
srv := &Server{
runtime: runtime,
}
go ListenAndServe("0.0.0.0:4243", srv)
}
func TestAuth(t *testing.T) {
var out auth.AuthConfig
out.Username = "utest"
out.Password = "utest"
out.Email = "utest@yopmail.com"
_, _, err := call("POST", "/auth", out)
if err != nil {
t.Fatal(err)
}
out.Username = ""
out.Password = ""
out.Email = ""
body, _, err := call("GET", "/auth", nil)
if err != nil {
t.Fatal(err)
}
err = json.Unmarshal(body, &out)
if err != nil {
t.Fatal(err)
}
if out.Username != "utest" {
t.Errorf("Expected username to be utest, %s found", out.Username)
}
}
func TestVersion(t *testing.T) {
body, _, err := call("GET", "/version", nil)
if err != nil {
t.Fatal(err)
}
var out ApiVersion
err = json.Unmarshal(body, &out)
if err != nil {
t.Fatal(err)
}
if out.Version != VERSION {
t.Errorf("Excepted version %s, %s found", VERSION, out.Version)
}
}
func TestImages(t *testing.T) {
body, _, err := call("GET", "/images?quiet=0&all=0", nil)
if err != nil {
t.Fatal(err)
}
var outs []ApiImages
err = json.Unmarshal(body, &outs)
if err != nil {
t.Fatal(err)
}
if len(outs) != 1 {
t.Errorf("Excepted 1 image, %d found", len(outs))
}
if outs[0].Repository != "docker-ut" {
t.Errorf("Excepted image docker-ut, %s found", outs[0].Repository)
}
}
func TestInfo(t *testing.T) {
body, _, err := call("GET", "/info", nil)
if err != nil {
t.Fatal(err)
}
var out ApiInfo
err = json.Unmarshal(body, &out)
if err != nil {
t.Fatal(err)
}
if out.Version != VERSION {
t.Errorf("Excepted version %s, %s found", VERSION, out.Version)
}
}
func TestHistory(t *testing.T) {
body, _, err := call("GET", "/images/"+unitTestImageName+"/history", nil)
if err != nil {
t.Fatal(err)
}
var outs []ApiHistory
err = json.Unmarshal(body, &outs)
if err != nil {
t.Fatal(err)
}
if len(outs) != 1 {
t.Errorf("Excepted 1 line, %d found", len(outs))
}
}
func TestImagesSearch(t *testing.T) {
body, _, err := call("GET", "/images/search?term=redis", nil)
if err != nil {
t.Fatal(err)
}
var outs []ApiSearch
err = json.Unmarshal(body, &outs)
if err != nil {
t.Fatal(err)
}
if len(outs) < 2 {
t.Errorf("Excepted at least 2 lines, %d found", len(outs))
}
}
func TestGetImage(t *testing.T) {
obj, _, err := call("GET", "/images/"+unitTestImageName+"/json", nil)
if err != nil {
t.Fatal(err)
}
var out Image
err = json.Unmarshal(obj, &out)
if err != nil {
t.Fatal(err)
}
if out.Comment != "Imported from http://get.docker.io/images/busybox" {
t.Errorf("Error inspecting image")
}
}
func TestCreateListStartStopRestartKillWaitDelete(t *testing.T) {
containers := testListContainers(t, -1)
for _, container := range containers {
testDeleteContainer(t, container.Id)
}
testCreateContainer(t)
id := testListContainers(t, 1)[0].Id
testContainerStart(t, id)
testContainerStop(t, id)
testContainerRestart(t, id)
testContainerKill(t, id)
testContainerWait(t, id)
testDeleteContainer(t, id)
testListContainers(t, 0)
}
func testCreateContainer(t *testing.T) {
config, _, err := ParseRun([]string{unitTestImageName, "touch test"}, nil)
if err != nil {
t.Fatal(err)
}
_, _, err = call("POST", "/containers", *config)
if err != nil {
t.Fatal(err)
}
}
func testListContainers(t *testing.T, expected int) []ApiContainers {
body, _, err := call("GET", "/containers?quiet=1&all=1", nil)
if err != nil {
t.Fatal(err)
}
var outs []ApiContainers
err = json.Unmarshal(body, &outs)
if err != nil {
t.Fatal(err)
}
if expected >= 0 && len(outs) != expected {
t.Errorf("Excepted %d container, %d found", expected, len(outs))
}
return outs
}
func testContainerStart(t *testing.T, id string) {
_, _, err := call("POST", "/containers/"+id+"/start", nil)
if err != nil {
t.Fatal(err)
}
}
func testContainerRestart(t *testing.T, id string) {
_, _, err := call("POST", "/containers/"+id+"/restart?t=1", nil)
if err != nil {
t.Fatal(err)
}
}
func testContainerStop(t *testing.T, id string) {
_, _, err := call("POST", "/containers/"+id+"/stop?t=1", nil)
if err != nil {
t.Fatal(err)
}
}
func testContainerKill(t *testing.T, id string) {
_, _, err := call("POST", "/containers/"+id+"/kill", nil)
if err != nil {
t.Fatal(err)
}
}
func testContainerWait(t *testing.T, id string) {
_, _, err := call("POST", "/containers/"+id+"/wait", nil)
if err != nil {
t.Fatal(err)
}
}
func testDeleteContainer(t *testing.T, id string) {
_, _, err := call("DELETE", "/containers/"+id, nil)
if err != nil {
t.Fatal(err)
}
}
func testContainerChanges(t *testing.T, id string) {
_, _, err := call("GET", "/containers/"+id+"/changes", nil)
if err != nil {
t.Fatal(err)
}
}