浏览代码

Merge branch 'tests/insert' of https://github.com/mrallen1/docker into mrallen1-tests/insert

Conflicts:
	server.go
Victor Vieux 11 年之前
父节点
当前提交
b314f19db8
共有 4 个文件被更改,包括 37 次插入16 次删除
  1. 3 2
      api.go
  2. 1 4
      commands.go
  3. 10 10
      server.go
  4. 23 0
      server_test.go

+ 3 - 2
api.go

@@ -479,15 +479,16 @@ func postImagesInsert(srv *Server, version float64, w http.ResponseWriter, r *ht
 		w.Header().Set("Content-Type", "application/json")
 		w.Header().Set("Content-Type", "application/json")
 	}
 	}
 	sf := utils.NewStreamFormatter(version > 1.0)
 	sf := utils.NewStreamFormatter(version > 1.0)
-	imgID, err := srv.ImageInsert(name, url, path, w, sf)
+	err := srv.ImageInsert(name, url, path, w, sf)
 	if err != nil {
 	if err != nil {
 		if sf.Used() {
 		if sf.Used() {
 			w.Write(sf.FormatError(err))
 			w.Write(sf.FormatError(err))
 			return nil
 			return nil
 		}
 		}
+		return err
 	}
 	}
 
 
-	return writeJSON(w, http.StatusOK, &APIID{ID: imgID})
+	return nil
 }
 }
 
 
 func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {
 func postImagesPush(srv *Server, version float64, w http.ResponseWriter, r *http.Request, vars map[string]string) error {

+ 1 - 4
commands.go

@@ -130,10 +130,7 @@ func (cli *DockerCli) CmdInsert(args ...string) error {
 	v.Set("url", cmd.Arg(1))
 	v.Set("url", cmd.Arg(1))
 	v.Set("path", cmd.Arg(2))
 	v.Set("path", cmd.Arg(2))
 
 
-	if err := cli.stream("POST", "/images/"+cmd.Arg(0)+"/insert?"+v.Encode(), nil, cli.out, nil); err != nil {
-		return err
-	}
-	return nil
+	return cli.stream("POST", "/images/"+cmd.Arg(0)+"/insert?"+v.Encode(), nil, cli.out, nil)
 }
 }
 
 
 // mkBuildContext returns an archive of an empty context with the contents
 // mkBuildContext returns an archive of an empty context with the contents

+ 10 - 10
server.go

@@ -198,39 +198,39 @@ func (srv *Server) ImagesSearch(term string) ([]registry.SearchResult, error) {
 	return results.Results, nil
 	return results.Results, nil
 }
 }
 
 
-func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils.StreamFormatter) (string, error) {
+func (srv *Server) ImageInsert(name, url, path string, out io.Writer, sf *utils.StreamFormatter) error {
 	out = utils.NewWriteFlusher(out)
 	out = utils.NewWriteFlusher(out)
 	img, err := srv.runtime.repositories.LookupImage(name)
 	img, err := srv.runtime.repositories.LookupImage(name)
 	if err != nil {
 	if err != nil {
-		return "", err
+		return err
 	}
 	}
 
 
 	file, err := utils.Download(url, out)
 	file, err := utils.Download(url, out)
 	if err != nil {
 	if err != nil {
-		return "", err
+		return err
 	}
 	}
 	defer file.Body.Close()
 	defer file.Body.Close()
 
 
 	config, _, _, err := ParseRun([]string{img.ID, "echo", "insert", url, path}, srv.runtime.capabilities)
 	config, _, _, err := ParseRun([]string{img.ID, "echo", "insert", url, path}, srv.runtime.capabilities)
 	if err != nil {
 	if err != nil {
-		return "", err
+		return err
 	}
 	}
 
 
 	c, _, err := srv.runtime.Create(config, "")
 	c, _, err := srv.runtime.Create(config, "")
 	if err != nil {
 	if err != nil {
-		return "", err
+		return err
 	}
 	}
 
 
-	if err := c.Inject(utils.ProgressReader(file.Body, int(file.ContentLength), out, sf.FormatProgress("", "Downloading", "%8v/%v (%v)"), sf, true), path); err != nil {
-		return "", err
+	if err := c.Inject(utils.ProgressReader(file.Body, int(file.ContentLength), out, sf.FormatProgress("", "Downloading", "%8v/%v (%v)"), sf, false), path); err != nil {
+		return err
 	}
 	}
 	// FIXME: Handle custom repo, tag comment, author
 	// FIXME: Handle custom repo, tag comment, author
 	img, err = srv.runtime.Commit(c, "", "", img.Comment, img.Author, nil)
 	img, err = srv.runtime.Commit(c, "", "", img.Comment, img.Author, nil)
 	if err != nil {
 	if err != nil {
-		return "", err
+		return err
 	}
 	}
-	out.Write(sf.FormatStatus("", img.ID))
-	return img.ID, nil
+	out.Write(sf.FormatStatus(img.ID, ""))
+	return nil
 }
 }
 
 
 func (srv *Server) ImagesViz(out io.Writer) error {
 func (srv *Server) ImagesViz(out io.Writer) error {

+ 23 - 0
server_test.go

@@ -3,6 +3,7 @@ package docker
 import (
 import (
 	"github.com/dotcloud/docker/utils"
 	"github.com/dotcloud/docker/utils"
 	"strings"
 	"strings"
+	"io/ioutil"
 	"testing"
 	"testing"
 	"time"
 	"time"
 )
 )
@@ -521,3 +522,25 @@ func TestImagesFilter(t *testing.T) {
 		t.Fatal("incorrect number of matches returned")
 		t.Fatal("incorrect number of matches returned")
 	}
 	}
 }
 }
+
+func TestImageInsert(t *testing.T) {
+	runtime := mkRuntime(t)
+	defer nuke(runtime)
+	srv := &Server{runtime: runtime}
+	sf := utils.NewStreamFormatter(true)
+
+	// bad image name fails
+	if err := srv.ImageInsert("foo", "https://www.docker.io/static/img/docker-top-logo.png", "/foo", ioutil.Discard, sf); err == nil {
+		t.Fatal("expected an error and got none")
+	}
+
+	// bad url fails
+	if err := srv.ImageInsert(GetTestImage(runtime).ID, "http://bad_host_name_that_will_totally_fail.com/", "/foo", ioutil.Discard, sf); err == nil {
+		t.Fatal("expected an error and got none")
+	}
+
+	// success returns nil
+	if err := srv.ImageInsert(GetTestImage(runtime).ID, "https://www.docker.io/static/img/docker-top-logo.png", "/foo", ioutil.Discard, sf); err != nil {
+		t.Fatalf("expected no error, but got %v", err)
+	}
+}