mirror of
https://github.com/moby/moby.git
synced 2022-11-09 12:21:53 -05:00
7a7357dae1
This enables docker cp and ADD/COPY docker build support for LCOW. Originally, the graphdriver.Get() interface returned a local path to the container root filesystem. This does not work for LCOW, so the Get() method now returns an interface that LCOW implements to support copying to and from the container. Signed-off-by: Akash Gupta <akagup@microsoft.com>
123 lines
3.3 KiB
Go
123 lines
3.3 KiB
Go
package remotecontext
|
|
|
|
import (
|
|
"errors"
|
|
"io/ioutil"
|
|
"log"
|
|
"os"
|
|
"sort"
|
|
"testing"
|
|
|
|
"github.com/docker/docker/builder"
|
|
"github.com/docker/docker/pkg/containerfs"
|
|
)
|
|
|
|
const (
|
|
dockerfileContents = "FROM busybox"
|
|
dockerignoreFilename = ".dockerignore"
|
|
testfileContents = "test"
|
|
)
|
|
|
|
const shouldStayFilename = "should_stay"
|
|
|
|
func extractFilenames(files []os.FileInfo) []string {
|
|
filenames := make([]string, len(files))
|
|
|
|
for i, file := range files {
|
|
filenames[i] = file.Name()
|
|
}
|
|
|
|
return filenames
|
|
}
|
|
|
|
func checkDirectory(t *testing.T, dir string, expectedFiles []string) {
|
|
files, err := ioutil.ReadDir(dir)
|
|
|
|
if err != nil {
|
|
t.Fatalf("Could not read directory: %s", err)
|
|
}
|
|
|
|
if len(files) != len(expectedFiles) {
|
|
log.Fatalf("Directory should contain exactly %d file(s), got %d", len(expectedFiles), len(files))
|
|
}
|
|
|
|
filenames := extractFilenames(files)
|
|
sort.Strings(filenames)
|
|
sort.Strings(expectedFiles)
|
|
|
|
for i, filename := range filenames {
|
|
if filename != expectedFiles[i] {
|
|
t.Fatalf("File %s should be in the directory, got: %s", expectedFiles[i], filename)
|
|
}
|
|
}
|
|
}
|
|
|
|
func executeProcess(t *testing.T, contextDir string) {
|
|
modifiableCtx := &stubRemote{root: containerfs.NewLocalContainerFS(contextDir)}
|
|
|
|
err := removeDockerfile(modifiableCtx, builder.DefaultDockerfileName)
|
|
|
|
if err != nil {
|
|
t.Fatalf("Error when executing Process: %s", err)
|
|
}
|
|
}
|
|
|
|
func TestProcessShouldRemoveDockerfileDockerignore(t *testing.T) {
|
|
contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
|
|
defer cleanup()
|
|
|
|
createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777)
|
|
createTestTempFile(t, contextDir, dockerignoreFilename, "Dockerfile\n.dockerignore", 0777)
|
|
createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0777)
|
|
|
|
executeProcess(t, contextDir)
|
|
|
|
checkDirectory(t, contextDir, []string{shouldStayFilename})
|
|
|
|
}
|
|
|
|
func TestProcessNoDockerignore(t *testing.T) {
|
|
contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
|
|
defer cleanup()
|
|
|
|
createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777)
|
|
createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0777)
|
|
|
|
executeProcess(t, contextDir)
|
|
|
|
checkDirectory(t, contextDir, []string{shouldStayFilename, builder.DefaultDockerfileName})
|
|
|
|
}
|
|
|
|
func TestProcessShouldLeaveAllFiles(t *testing.T) {
|
|
contextDir, cleanup := createTestTempDir(t, "", "builder-dockerignore-process-test")
|
|
defer cleanup()
|
|
|
|
createTestTempFile(t, contextDir, shouldStayFilename, testfileContents, 0777)
|
|
createTestTempFile(t, contextDir, builder.DefaultDockerfileName, dockerfileContents, 0777)
|
|
createTestTempFile(t, contextDir, dockerignoreFilename, "input1\ninput2", 0777)
|
|
|
|
executeProcess(t, contextDir)
|
|
|
|
checkDirectory(t, contextDir, []string{shouldStayFilename, builder.DefaultDockerfileName, dockerignoreFilename})
|
|
|
|
}
|
|
|
|
// TODO: remove after moving to a separate pkg
|
|
type stubRemote struct {
|
|
root containerfs.ContainerFS
|
|
}
|
|
|
|
func (r *stubRemote) Hash(path string) (string, error) {
|
|
return "", errors.New("not implemented")
|
|
}
|
|
|
|
func (r *stubRemote) Root() containerfs.ContainerFS {
|
|
return r.root
|
|
}
|
|
func (r *stubRemote) Close() error {
|
|
return errors.New("not implemented")
|
|
}
|
|
func (r *stubRemote) Remove(p string) error {
|
|
return r.root.Remove(r.root.Join(r.root.Path(), p))
|
|
}
|