
math.MaxInt64 represents 8 exabytes, which is a good limit for memory. Also, this is the type used by Docker, so it's not possible to get any value bigger than math.MaxInt64 as memory limit (both ram and swap) on a Docker container. Relevant discussion at #589 (more precisely, https://github.com/GoogleCloudPlatform/kubernetes/pull/589#issuecomment-50640605).
122 lines
3.3 KiB
Go
122 lines
3.3 KiB
Go
// Copyright 2014 go-dockerclient authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
package docker
|
|
|
|
import (
|
|
"net/http"
|
|
"net/url"
|
|
"reflect"
|
|
"sort"
|
|
"testing"
|
|
)
|
|
|
|
type DockerVersion struct {
|
|
Version string
|
|
GitCommit string
|
|
GoVersion string
|
|
}
|
|
|
|
func TestVersion(t *testing.T) {
|
|
body := `{
|
|
"Version":"0.2.2",
|
|
"GitCommit":"5a2a5cc+CHANGES",
|
|
"GoVersion":"go1.0.3"
|
|
}`
|
|
fakeRT := FakeRoundTripper{message: body, status: http.StatusOK}
|
|
client := newTestClient(&fakeRT)
|
|
expected := DockerVersion{
|
|
Version: "0.2.2",
|
|
GitCommit: "5a2a5cc+CHANGES",
|
|
GoVersion: "go1.0.3",
|
|
}
|
|
version, err := client.Version()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
if result := version.Get("Version"); result != expected.Version {
|
|
t.Errorf("Version(): Wrong result. Want %#v. Got %#v.", expected.Version, version.Get("Version"))
|
|
}
|
|
if result := version.Get("GitCommit"); result != expected.GitCommit {
|
|
t.Errorf("GitCommit(): Wrong result. Want %#v. Got %#v.", expected.GitCommit, version.Get("GitCommit"))
|
|
}
|
|
if result := version.Get("GoVersion"); result != expected.GoVersion {
|
|
t.Errorf("GoVersion(): Wrong result. Want %#v. Got %#v.", expected.GoVersion, version.Get("GoVersion"))
|
|
}
|
|
req := fakeRT.requests[0]
|
|
if req.Method != "GET" {
|
|
t.Errorf("Version(): wrong request method. Want GET. Got %s.", req.Method)
|
|
}
|
|
u, _ := url.Parse(client.getURL("/version"))
|
|
if req.URL.Path != u.Path {
|
|
t.Errorf("Version(): wrong request path. Want %q. Got %q.", u.Path, req.URL.Path)
|
|
}
|
|
}
|
|
|
|
func TestVersionError(t *testing.T) {
|
|
fakeRT := &FakeRoundTripper{message: "internal error", status: http.StatusInternalServerError}
|
|
client := newTestClient(fakeRT)
|
|
version, err := client.Version()
|
|
if version != nil {
|
|
t.Errorf("Version(): expected <nil> value, got %#v.", version)
|
|
}
|
|
if err == nil {
|
|
t.Error("Version(): unexpected <nil> error")
|
|
}
|
|
}
|
|
|
|
func TestInfo(t *testing.T) {
|
|
body := `{
|
|
"Containers":11,
|
|
"Images":16,
|
|
"Debug":0,
|
|
"NFd":11,
|
|
"NGoroutines":21,
|
|
"MemoryLimit":1,
|
|
"SwapLimit":0
|
|
}`
|
|
fakeRT := FakeRoundTripper{message: body, status: http.StatusOK}
|
|
client := newTestClient(&fakeRT)
|
|
expected := Env{}
|
|
expected.SetInt("Containers", 11)
|
|
expected.SetInt("Images", 16)
|
|
expected.SetBool("Debug", false)
|
|
expected.SetInt("NFd", 11)
|
|
expected.SetInt("NGoroutines", 21)
|
|
expected.SetBool("MemoryLimit", true)
|
|
expected.SetBool("SwapLimit", false)
|
|
info, err := client.Info()
|
|
if err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
infoSlice := []string(*info)
|
|
expectedSlice := []string(expected)
|
|
sort.Strings(infoSlice)
|
|
sort.Strings(expectedSlice)
|
|
if !reflect.DeepEqual(expectedSlice, infoSlice) {
|
|
t.Errorf("Info(): Wrong result.\nWant %#v.\nGot %#v.", expected, *info)
|
|
}
|
|
req := fakeRT.requests[0]
|
|
if req.Method != "GET" {
|
|
t.Errorf("Info(): Wrong HTTP method. Want GET. Got %s.", req.Method)
|
|
}
|
|
u, _ := url.Parse(client.getURL("/info"))
|
|
if req.URL.Path != u.Path {
|
|
t.Errorf("Info(): Wrong request path. Want %q. Got %q.", u.Path, req.URL.Path)
|
|
}
|
|
}
|
|
|
|
func TestInfoError(t *testing.T) {
|
|
fakeRT := &FakeRoundTripper{message: "internal error", status: http.StatusInternalServerError}
|
|
client := newTestClient(fakeRT)
|
|
version, err := client.Info()
|
|
if version != nil {
|
|
t.Errorf("Info(): expected <nil> value, got %#v.", version)
|
|
}
|
|
if err == nil {
|
|
t.Error("Info(): unexpected <nil> error")
|
|
}
|
|
}
|