func main() { flag.Usage = func() { fmt.Println("Produce a tar from comparing two directory paths. By default a demo tar is created of around 200 files (including hardlinks)") fmt.Printf("%s [OPTIONS]\n", os.Args[0]) flag.PrintDefaults() } flag.Parse() log.Out = os.Stderr if (len(os.Getenv("DEBUG")) > 0) || *flDebug { logrus.SetLevel(logrus.DebugLevel) } var newDir, oldDir string if len(*flNewDir) == 0 { var err error newDir, err = ioutil.TempDir("", "docker-test-newDir") if err != nil { log.Fatal(err) } defer os.RemoveAll(newDir) if _, err := prepareUntarSourceDirectory(100, newDir, true); err != nil { log.Fatal(err) } } else { newDir = *flNewDir } if len(*flOldDir) == 0 { oldDir, err := ioutil.TempDir("", "docker-test-oldDir") if err != nil { log.Fatal(err) } defer os.RemoveAll(oldDir) } else { oldDir = *flOldDir } changes, err := archive.ChangesDirs(newDir, oldDir) if err != nil { log.Fatal(err) } a, err := archive.ExportChanges(newDir, changes) if err != nil { log.Fatal(err) } defer a.Close() i, err := io.Copy(os.Stdout, a) if err != nil && err != io.EOF { log.Fatal(err) } fmt.Fprintf(os.Stderr, "wrote archive of %d bytes", i) }
func TestDocker(t *testing.T) { if os.Getuid() != 0 { t.Skip("pinkerton: must be root to create AUFS mounts") } // start Docker registry using test files cwd, err := os.Getwd() if err != nil { t.Fatal(err) } root := filepath.Join(cwd, "test", "files") config := configuration.Configuration{ Storage: configuration.Storage{ "filesystem": configuration.Parameters{ "rootdirectory": root, }, }, } logrus.SetLevel(logrus.ErrorLevel) app := handlers.NewApp(context.Background(), config) srv := httptest.NewServer(app) defer srv.Close() // create context tmp, err := ioutil.TempDir("", "pinkerton-test") if err != nil { t.Fatal(err) } defer os.RemoveAll(tmp) ctx, err := BuildContext("aufs", tmp) if err != nil { t.Fatal(err) } // pull image using digest imageID, err := ctx.PullDocker(srv.URL+"?name=pinkerton-test&id="+testImageDigest, ioutil.Discard) if err != nil { t.Fatal(err) } if imageID != testImageID { t.Fatalf("expected image to have ID %q, got %q", testImageID, imageID) } // checkout image name := random.String(8) path, err := ctx.Checkout(name, imageID) if err != nil { t.Fatal(err) } defer ctx.Cleanup(name) // check foo.txt exists and has correct data f, err := os.Open(filepath.Join(path, "foo.txt")) if err != nil { t.Fatal(err) } data, err := ioutil.ReadAll(f) f.Close() if err != nil { t.Fatal(err) } if !reflect.DeepEqual(data, []byte(testImageData)) { t.Fatalf("expected foo.txt to contain %q, got %q", testImageData, string(data)) } }