mirror of
				https://github.com/moby/moby.git
				synced 2022-11-09 12:21:53 -05:00 
			
		
		
		
	Make remote API unit tests easier to read and write
Docker-DCO-1.1-Signed-off-by: Solomon Hykes <solomon@docker.com> (github: shykes)
This commit is contained in:
		
							parent
							
								
									b602d6ca40
								
							
						
					
					
						commit
						1e6f21dc9e
					
				
					 1 changed files with 65 additions and 77 deletions
				
			
		| 
						 | 
					@ -1,6 +1,8 @@
 | 
				
			||||||
package server
 | 
					package server
 | 
				
			||||||
 | 
					
 | 
				
			||||||
import (
 | 
					import (
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"encoding/json"
 | 
				
			||||||
	"fmt"
 | 
						"fmt"
 | 
				
			||||||
	"github.com/dotcloud/docker/api"
 | 
						"github.com/dotcloud/docker/api"
 | 
				
			||||||
	"github.com/dotcloud/docker/engine"
 | 
						"github.com/dotcloud/docker/engine"
 | 
				
			||||||
| 
						 | 
					@ -57,15 +59,8 @@ func TesthttpError(t *testing.T) {
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestGetVersion(t *testing.T) {
 | 
					func TestGetVersion(t *testing.T) {
 | 
				
			||||||
	tmp, err := utils.TestDirectory("")
 | 
						eng := tmpEngine(t)
 | 
				
			||||||
	if err != nil {
 | 
						defer rmEngine(eng)
 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	defer os.RemoveAll(tmp)
 | 
					 | 
				
			||||||
	eng, err := engine.New(tmp)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	var called bool
 | 
						var called bool
 | 
				
			||||||
	eng.Register("version", func(job *engine.Job) engine.Status {
 | 
						eng.Register("version", func(job *engine.Job) engine.Status {
 | 
				
			||||||
		called = true
 | 
							called = true
 | 
				
			||||||
| 
						 | 
					@ -80,49 +75,22 @@ func TestGetVersion(t *testing.T) {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return engine.StatusOK
 | 
							return engine.StatusOK
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						r := serveRequest("GET", "/version", nil, eng, t)
 | 
				
			||||||
	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 {
 | 
						if !called {
 | 
				
			||||||
		t.Fatalf("handler was not called")
 | 
							t.Fatalf("handler was not called")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	out := engine.NewOutput()
 | 
						v := readEnv(r.Body, t)
 | 
				
			||||||
	v, err := out.AddEnv()
 | 
						if v.Get("Version") != "42.1" {
 | 
				
			||||||
	if err != nil {
 | 
							t.Fatalf("%#v\n", v)
 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if _, err := io.Copy(out, r.Body); err != nil {
 | 
						if r.HeaderMap.Get("Content-Type") != "application/json" {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatalf("%#v\n", r)
 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	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)
 | 
					 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
func TestGetInfo(t *testing.T) {
 | 
					func TestGetInfo(t *testing.T) {
 | 
				
			||||||
	tmp, err := utils.TestDirectory("")
 | 
						eng := tmpEngine(t)
 | 
				
			||||||
	if err != nil {
 | 
						defer rmEngine(eng)
 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	defer os.RemoveAll(tmp)
 | 
					 | 
				
			||||||
	eng, err := engine.New(tmp)
 | 
					 | 
				
			||||||
	if err != nil {
 | 
					 | 
				
			||||||
		t.Fatal(err)
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	var called bool
 | 
						var called bool
 | 
				
			||||||
	eng.Register("info", func(job *engine.Job) engine.Status {
 | 
						eng.Register("info", func(job *engine.Job) engine.Status {
 | 
				
			||||||
		called = true
 | 
							called = true
 | 
				
			||||||
| 
						 | 
					@ -134,47 +102,67 @@ func TestGetInfo(t *testing.T) {
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return engine.StatusOK
 | 
							return engine.StatusOK
 | 
				
			||||||
	})
 | 
						})
 | 
				
			||||||
 | 
						r := serveRequest("GET", "/info", nil, eng, t)
 | 
				
			||||||
	r := httptest.NewRecorder()
 | 
					 | 
				
			||||||
	req, err := http.NewRequest("GET", "/info", 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 {
 | 
						if !called {
 | 
				
			||||||
		t.Fatalf("handler was not called")
 | 
							t.Fatalf("handler was not called")
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
						v := readEnv(r.Body, t)
 | 
				
			||||||
 | 
						if v.GetInt("Images") != 42000 {
 | 
				
			||||||
 | 
							t.Fatalf("%#v\n", v)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if v.GetInt("Containers") != 1 {
 | 
				
			||||||
 | 
							t.Fatalf("%#v\n", v)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if r.HeaderMap.Get("Content-Type") != "application/json" {
 | 
				
			||||||
 | 
							t.Fatalf("%#v\n", r)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	out := engine.NewOutput()
 | 
					func serveRequest(method, target string, body io.Reader, eng *engine.Engine, t *testing.T) *httptest.ResponseRecorder {
 | 
				
			||||||
	i, err := out.AddEnv()
 | 
						r := httptest.NewRecorder()
 | 
				
			||||||
 | 
						req, err := http.NewRequest(method, target, body)
 | 
				
			||||||
	if err != nil {
 | 
						if err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if _, err := io.Copy(out, r.Body); err != nil {
 | 
						if err := ServeRequest(eng, api.APIVERSION, r, req); err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return r
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func tmpEngine(t *testing.T) *engine.Engine {
 | 
				
			||||||
 | 
						tmp, err := utils.TestDirectory("")
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						eng, err := engine.New(tmp)
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return eng
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func rmEngine(eng *engine.Engine) {
 | 
				
			||||||
 | 
						os.RemoveAll(eng.Root())
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func readEnv(src io.Reader, t *testing.T) *engine.Env {
 | 
				
			||||||
 | 
						out := engine.NewOutput()
 | 
				
			||||||
 | 
						v, err := out.AddEnv()
 | 
				
			||||||
 | 
						if err != nil {
 | 
				
			||||||
 | 
							t.Fatal(err)
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						if _, err := io.Copy(out, src); err != nil {
 | 
				
			||||||
		t.Fatal(err)
 | 
							t.Fatal(err)
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	out.Close()
 | 
						out.Close()
 | 
				
			||||||
	{
 | 
						return v
 | 
				
			||||||
		expected := 42000
 | 
					}
 | 
				
			||||||
		result := i.GetInt("Images")
 | 
					
 | 
				
			||||||
		if expected != result {
 | 
					func toJson(data interface{}, t *testing.T) io.Reader {
 | 
				
			||||||
			t.Fatalf("%#v\n", result)
 | 
						var buf bytes.Buffer
 | 
				
			||||||
		}
 | 
						if err := json.NewEncoder(&buf).Encode(data); err != nil {
 | 
				
			||||||
	}
 | 
							t.Fatal(err)
 | 
				
			||||||
	{
 | 
						}
 | 
				
			||||||
		expected := 1
 | 
						return &buf
 | 
				
			||||||
		result := i.GetInt("Containers")
 | 
					 | 
				
			||||||
		if expected != result {
 | 
					 | 
				
			||||||
			t.Fatalf("%#v\n", result)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
	{
 | 
					 | 
				
			||||||
		expected := "application/json"
 | 
					 | 
				
			||||||
		if result := r.HeaderMap.Get("Content-Type"); result != expected {
 | 
					 | 
				
			||||||
			t.Fatalf("%#v\n", result)
 | 
					 | 
				
			||||||
		}
 | 
					 | 
				
			||||||
	}
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue