func newRemoteFileServer(ctx *FakeContext) (*remoteFileServer, error) { var ( image = fmt.Sprintf("fileserver-img-%s", strings.ToLower(stringutils.GenerateRandomAlphaOnlyString(10))) container = fmt.Sprintf("fileserver-cnt-%s", strings.ToLower(stringutils.GenerateRandomAlphaOnlyString(10))) ) // Build the image if err := fakeContextAddDockerfile(ctx, `FROM httpserver COPY . /static`); err != nil { return nil, fmt.Errorf("Cannot add Dockerfile to context: %v", err) } if _, err := buildImageFromContext(image, ctx, false); err != nil { return nil, fmt.Errorf("failed building file storage container image: %v", err) } // Start the container runCmd := exec.Command(dockerBinary, "run", "-d", "-P", "--name", container, image) if out, ec, err := runCommandWithOutput(runCmd); err != nil { return nil, fmt.Errorf("failed to start file storage container. ec=%v\nout=%s\nerr=%v", ec, out, err) } // Find out the system assigned port out, _, err := runCommandWithOutput(exec.Command(dockerBinary, "port", container, "80/tcp")) if err != nil { return nil, fmt.Errorf("failed to find container port: err=%v\nout=%s", err, out) } return &remoteFileServer{ container: container, image: image, host: strings.Trim(out, "\n"), ctx: ctx}, nil }
// RandomTmpDirPath provides a temporary path with rand string appended. // does not create or checks if it exists. func RandomTmpDirPath(s string) string { tmp := "/tmp" if runtime.GOOS == "windows" { tmp = os.Getenv("TEMP") } return filepath.Join(tmp, fmt.Sprintf("%s.%s", s, stringutils.GenerateRandomAlphaOnlyString(10))) }
// ensure we don't allow the use of invalid tags; these tag operations should fail func (s *DockerSuite) TestTagInvalidPrefixedRepo(c *check.C) { longTag := stringutils.GenerateRandomAlphaOnlyString(121) invalidTags := []string{"repo:fo$z$", "repo:Foo@3cc", "repo:Foo$3", "repo:Foo*3", "repo:Fo^3", "repo:Foo!3", "repo:%goodbye", "repo:#hashtagit", "repo:F)xcz(", "repo:-foo", "repo:..", longTag} for _, repotag := range invalidTags { out, _, err := dockerCmdWithError("tag", "busybox", repotag) c.Assert(err, checker.NotNil, check.Commentf("tag busybox %v should have failed : %v", repotag, out)) } }
// RandomTmpDirPath provides a temporary path with rand string appended. // does not create or checks if it exists. func RandomTmpDirPath(s string, platform string) string { tmp := "/tmp" if platform == "windows" { tmp = os.Getenv("TEMP") } path := filepath.Join(tmp, fmt.Sprintf("%s.%s", s, stringutils.GenerateRandomAlphaOnlyString(10))) if platform == "windows" { return filepath.FromSlash(path) // Using \ } return filepath.ToSlash(path) // Using / }
// ensure we don't allow the use of invalid tags; these tag operations should fail func (s *DockerSuite) TestTagInvalidPrefixedRepo(c *check.C) { longTag := stringutils.GenerateRandomAlphaOnlyString(121) invalidTags := []string{"repo:fo$z$", "repo:Foo@3cc", "repo:Foo$3", "repo:Foo*3", "repo:Fo^3", "repo:Foo!3", "repo:%goodbye", "repo:#hashtagit", "repo:F)xcz(", "repo:-foo", "repo:..", longTag} for _, repotag := range invalidTags { _, _, err := dockerCmdWithError("tag", "busybox", repotag) if err == nil { c.Fatalf("tag busybox %v should have failed", repotag) } } }
func newRemoteFileServer(c *check.C, ctx *FakeContext) *remoteFileServer { var ( image = fmt.Sprintf("fileserver-img-%s", strings.ToLower(stringutils.GenerateRandomAlphaOnlyString(10))) container = fmt.Sprintf("fileserver-cnt-%s", strings.ToLower(stringutils.GenerateRandomAlphaOnlyString(10))) ) c.Assert(ensureHTTPServerImage(), checker.IsNil) // Build the image fakeContextAddDockerfile(c, ctx, `FROM httpserver COPY . /static`) buildImageSuccessfully(c, image, withoutCache, withExternalBuildContext(ctx)) // Start the container dockerCmd(c, "run", "-d", "-P", "--name", container, image) // Find out the system assigned port out, _ := dockerCmd(c, "port", container, "80/tcp") fileserverHostPort := strings.Trim(out, "\n") _, port, err := net.SplitHostPort(fileserverHostPort) if err != nil { c.Fatalf("unable to parse file server host:port: %v", err) } dockerHostURL, err := url.Parse(daemonHost()) if err != nil { c.Fatalf("unable to parse daemon host URL: %v", err) } host, _, err := net.SplitHostPort(dockerHostURL.Host) if err != nil { c.Fatalf("unable to parse docker daemon host:port: %v", err) } return &remoteFileServer{ container: container, image: image, host: fmt.Sprintf("%s:%s", host, port), ctx: ctx} }
// os.Stat(v.Path) is NOT returning ErrNotExist so skip and return error from // initialize func TestInitializeCannotStatPathFileNameTooLong(t *testing.T) { // ENAMETOOLONG v := &Volume{Path: stringutils.GenerateRandomAlphaOnlyString(300)} err := v.initialize() if err == nil { t.Fatal("Expected not to initialize volume with a non existent path") } if !strings.Contains(err.Error(), "file name too long") { t.Fatalf("Expected to get ENAMETOOLONG error, got %s", err) } }
// os.Stat(v.Path) is NOT returning ErrNotExist so skip and return error from // initialize func TestInitializeCannotStatPathFileNameTooLong(t *testing.T) { // ENAMETOOLONG v := &Volume{Path: stringutils.GenerateRandomAlphaOnlyString(300)} err := v.initialize() if err == nil { t.Fatal("Expected not to initialize volume with a non existent path") } if os.IsNotExist(err) { t.Fatal("Expected to not get ErrNotExist") } }
// ensure we don't allow the use of invalid tags; these tag operations should fail func TestTagInvalidPrefixedRepo(t *testing.T) { longTag := stringutils.GenerateRandomAlphaOnlyString(121) invalidTags := []string{"repo:fo$z$", "repo:Foo@3cc", "repo:Foo$3", "repo:Foo*3", "repo:Fo^3", "repo:Foo!3", "repo:%goodbye", "repo:#hashtagit", "repo:F)xcz(", "repo:-foo", "repo:..", longTag} for _, repotag := range invalidTags { tagCmd := exec.Command(dockerBinary, "tag", "busybox", repotag) _, _, err := runCommandWithOutput(tagCmd) if err == nil { t.Fatalf("tag busybox %v should have failed", repotag) } } logDone("tag - busybox with invalid repo:tagnames --> must not work") }
// randomUnixTmpDirPath provides a temporary unix path with rand string appended. // does not create or checks if it exists. func randomUnixTmpDirPath(s string) string { return path.Join("/tmp", fmt.Sprintf("%s.%s", s, stringutils.GenerateRandomAlphaOnlyString(10))) }