diff --git a/api/server/server_unit_test.go b/api/server/server_unit_test.go index 5ea5af411c..c14fd8ba9e 100644 --- a/api/server/server_unit_test.go +++ b/api/server/server_unit_test.go @@ -2,8 +2,13 @@ package server import ( "fmt" + "github.com/dotcloud/docker/api" + "github.com/dotcloud/docker/engine" + "github.com/dotcloud/docker/utils" + "io" "net/http" "net/http/httptest" + "os" "testing" ) @@ -50,3 +55,59 @@ func TesthttpError(t *testing.T) { t.Fatalf("Expected %d, got %d", http.StatusInternalServerError, r.Code) } } + +func TestGetVersion(t *testing.T) { + tmp, err := utils.TestDirectory("") + if err != nil { + t.Fatal(err) + } + defer os.RemoveAll(tmp) + eng, err := engine.New(tmp) + if err != nil { + t.Fatal(err) + } + var called bool + eng.Register("version", func(job *engine.Job) engine.Status { + called = true + v := &engine.Env{} + v.Set("Version", "42.1") + v.Set("ApiVersion", "1.1.1.1.1") + v.Set("GoVersion", "2.42") + v.Set("Os", "Linux") + v.Set("Arch", "x86_64") + if _, err := v.WriteTo(job.Stdout); err != nil { + return job.Error(err) + } + return engine.StatusOK + }) + + r := httptest.NewRecorder() + req, err := http.NewRequest("GET", "/version", nil) + if err != nil { + t.Fatal(err) + } + // FIXME getting the version should require an actual running Server + if err := ServeRequest(eng, api.APIVERSION, r, req); err != nil { + t.Fatal(err) + } + if !called { + t.Fatalf("handler was not called") + } + out := engine.NewOutput() + v, err := out.AddEnv() + if err != nil { + t.Fatal(err) + } + if _, err := io.Copy(out, r.Body); err != nil { + t.Fatal(err) + } + out.Close() + expected := "42.1" + if result := v.Get("Version"); result != expected { + t.Errorf("Expected version %s, %s found", expected, result) + } + expected = "application/json" + if result := r.HeaderMap.Get("Content-Type"); result != expected { + t.Errorf("Expected Content-Type %s, %s found", expected, result) + } +} diff --git a/integration/api_test.go b/integration/api_test.go index d08617ea69..61697af8a1 100644 --- a/integration/api_test.go +++ b/integration/api_test.go @@ -16,7 +16,6 @@ import ( "github.com/dotcloud/docker/api" "github.com/dotcloud/docker/api/server" - "github.com/dotcloud/docker/dockerversion" "github.com/dotcloud/docker/engine" "github.com/dotcloud/docker/image" "github.com/dotcloud/docker/runconfig" @@ -25,42 +24,6 @@ import ( "github.com/dotcloud/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar" ) -func TestGetVersion(t *testing.T) { - eng := NewTestEngine(t) - defer mkRuntimeFromEngine(eng, t).Nuke() - - var err error - r := httptest.NewRecorder() - - req, err := http.NewRequest("GET", "/version", nil) - if err != nil { - t.Fatal(err) - } - // FIXME getting the version should require an actual running Server - if err := server.ServeRequest(eng, api.APIVERSION, r, req); err != nil { - t.Fatal(err) - } - assertHttpNotError(r, t) - - out := engine.NewOutput() - v, err := out.AddEnv() - if err != nil { - t.Fatal(err) - } - if _, err := io.Copy(out, r.Body); err != nil { - t.Fatal(err) - } - out.Close() - expected := dockerversion.VERSION - if result := v.Get("Version"); result != expected { - t.Errorf("Expected version %s, %s found", expected, result) - } - expected = "application/json" - if result := r.HeaderMap.Get("Content-Type"); result != expected { - t.Errorf("Expected Content-Type %s, %s found", expected, result) - } -} - func TestGetInfo(t *testing.T) { eng := NewTestEngine(t) defer mkRuntimeFromEngine(eng, t).Nuke()