integ-cli: fix TestImportDisplay & add FileServer

Docker-DCO-1.1-Signed-off-by: Cristian Staretu <cristian.staretu@gmail.com> (github: unclejack)
This commit is contained in:
unclejack 2014-09-12 20:10:42 +03:00
parent 8b18a2da54
commit 9e5592d6a1
3 changed files with 39 additions and 1 deletions

View file

@ -89,6 +89,9 @@ RUN mkdir -p /go/src/github.com/cpuguy83 \
# Get the "busybox" image source so we can build locally instead of pulling
RUN git clone -b buildroot-2014.02 https://github.com/jpetazzo/docker-busybox.git /docker-busybox
# Get the "cirros" image source so we can import it instead of fetching it during tests
RUN curl -sSL -o /cirros.tar.gz https://github.com/ewindisch/docker-cirros/raw/1cded459668e8b9dbf4ef976c94c05add9bbd8e9/cirros-0.3.0-x86_64-lxc.tar.gz
# Setup s3cmd config
RUN /bin/echo -e '[default]\naccess_key=$AWS_ACCESS_KEY\nsecret_key=$AWS_SECRET_KEY' > /.s3cfg

View file

@ -1,13 +1,22 @@
package main
import (
"fmt"
"os/exec"
"strings"
"testing"
)
func TestImportDisplay(t *testing.T) {
importCmd := exec.Command(dockerBinary, "import", "https://github.com/ewindisch/docker-cirros/raw/master/cirros-0.3.0-x86_64-lxc.tar.gz")
server, err := fileServer(map[string]string{
"/cirros.tar.gz": "/cirros.tar.gz",
})
if err != nil {
t.Fatal(err)
}
defer server.Close()
fileUrl := fmt.Sprintf("%s/cirros.tar.gz", server.URL)
importCmd := exec.Command(dockerBinary, "import", fileUrl)
out, _, err := runCommandWithOutput(importCmd)
if err != nil {
t.Errorf("import failed with errors: %v, output: %q", err, out)

View file

@ -5,6 +5,8 @@ import (
"encoding/json"
"fmt"
"io"
"net/http"
"net/http/httptest"
"os"
"os/exec"
"reflect"
@ -212,3 +214,27 @@ func ListTar(f io.Reader) ([]string, error) {
entries = append(entries, th.Name)
}
}
type FileServer struct {
*httptest.Server
}
func fileServer(files map[string]string) (*FileServer, error) {
var handler http.HandlerFunc = func(w http.ResponseWriter, r *http.Request) {
if filePath, found := files[r.URL.Path]; found {
http.ServeFile(w, r, filePath)
} else {
http.Error(w, http.StatusText(404), 404)
}
}
for _, file := range files {
if _, err := os.Stat(file); err != nil {
return nil, err
}
}
server := httptest.NewServer(handler)
return &FileServer{
Server: server,
}, nil
}