Browse code

api/server: replace an integration test with a unit test using engine mocking.

Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)

Solomon Hykes authored on 2014/04/04 08:14:51
Showing 2 changed files
... ...
@@ -2,8 +2,13 @@ package server
2 2
 
3 3
 import (
4 4
 	"fmt"
5
+	"github.com/dotcloud/docker/api"
6
+	"github.com/dotcloud/docker/engine"
7
+	"github.com/dotcloud/docker/utils"
8
+	"io"
5 9
 	"net/http"
6 10
 	"net/http/httptest"
11
+	"os"
7 12
 	"testing"
8 13
 )
9 14
 
... ...
@@ -50,3 +55,59 @@ func TesthttpError(t *testing.T) {
50 50
 		t.Fatalf("Expected %d, got %d", http.StatusInternalServerError, r.Code)
51 51
 	}
52 52
 }
53
+
54
+func TestGetVersion(t *testing.T) {
55
+	tmp, err := utils.TestDirectory("")
56
+	if err != nil {
57
+		t.Fatal(err)
58
+	}
59
+	defer os.RemoveAll(tmp)
60
+	eng, err := engine.New(tmp)
61
+	if err != nil {
62
+		t.Fatal(err)
63
+	}
64
+	var called bool
65
+	eng.Register("version", func(job *engine.Job) engine.Status {
66
+		called = true
67
+		v := &engine.Env{}
68
+		v.Set("Version", "42.1")
69
+		v.Set("ApiVersion", "1.1.1.1.1")
70
+		v.Set("GoVersion", "2.42")
71
+		v.Set("Os", "Linux")
72
+		v.Set("Arch", "x86_64")
73
+		if _, err := v.WriteTo(job.Stdout); err != nil {
74
+			return job.Error(err)
75
+		}
76
+		return engine.StatusOK
77
+	})
78
+
79
+	r := httptest.NewRecorder()
80
+	req, err := http.NewRequest("GET", "/version", nil)
81
+	if err != nil {
82
+		t.Fatal(err)
83
+	}
84
+	// FIXME getting the version should require an actual running Server
85
+	if err := ServeRequest(eng, api.APIVERSION, r, req); err != nil {
86
+		t.Fatal(err)
87
+	}
88
+	if !called {
89
+		t.Fatalf("handler was not called")
90
+	}
91
+	out := engine.NewOutput()
92
+	v, err := out.AddEnv()
93
+	if err != nil {
94
+		t.Fatal(err)
95
+	}
96
+	if _, err := io.Copy(out, r.Body); err != nil {
97
+		t.Fatal(err)
98
+	}
99
+	out.Close()
100
+	expected := "42.1"
101
+	if result := v.Get("Version"); result != expected {
102
+		t.Errorf("Expected version %s, %s found", expected, result)
103
+	}
104
+	expected = "application/json"
105
+	if result := r.HeaderMap.Get("Content-Type"); result != expected {
106
+		t.Errorf("Expected Content-Type %s, %s found", expected, result)
107
+	}
108
+}
... ...
@@ -16,7 +16,6 @@ import (
16 16
 
17 17
 	"github.com/dotcloud/docker/api"
18 18
 	"github.com/dotcloud/docker/api/server"
19
-	"github.com/dotcloud/docker/dockerversion"
20 19
 	"github.com/dotcloud/docker/engine"
21 20
 	"github.com/dotcloud/docker/image"
22 21
 	"github.com/dotcloud/docker/runconfig"
... ...
@@ -25,42 +24,6 @@ import (
25 25
 	"github.com/dotcloud/docker/vendor/src/code.google.com/p/go/src/pkg/archive/tar"
26 26
 )
27 27
 
28
-func TestGetVersion(t *testing.T) {
29
-	eng := NewTestEngine(t)
30
-	defer mkRuntimeFromEngine(eng, t).Nuke()
31
-
32
-	var err error
33
-	r := httptest.NewRecorder()
34
-
35
-	req, err := http.NewRequest("GET", "/version", nil)
36
-	if err != nil {
37
-		t.Fatal(err)
38
-	}
39
-	// FIXME getting the version should require an actual running Server
40
-	if err := server.ServeRequest(eng, api.APIVERSION, r, req); err != nil {
41
-		t.Fatal(err)
42
-	}
43
-	assertHttpNotError(r, t)
44
-
45
-	out := engine.NewOutput()
46
-	v, err := out.AddEnv()
47
-	if err != nil {
48
-		t.Fatal(err)
49
-	}
50
-	if _, err := io.Copy(out, r.Body); err != nil {
51
-		t.Fatal(err)
52
-	}
53
-	out.Close()
54
-	expected := dockerversion.VERSION
55
-	if result := v.Get("Version"); result != expected {
56
-		t.Errorf("Expected version %s, %s found", expected, result)
57
-	}
58
-	expected = "application/json"
59
-	if result := r.HeaderMap.Get("Content-Type"); result != expected {
60
-		t.Errorf("Expected Content-Type %s, %s found", expected, result)
61
-	}
62
-}
63
-
64 28
 func TestGetInfo(t *testing.T) {
65 29
 	eng := NewTestEngine(t)
66 30
 	defer mkRuntimeFromEngine(eng, t).Nuke()