--- /dev/null
+// Copyright (C) The Arvados Authors. All rights reserved.
+//
+// SPDX-License-Identifier: AGPL-3.0
+
+package main
+
+import (
+ "flag"
+ "os"
+ "os/exec"
+ "path/filepath"
+ "testing"
+
+ "gopkg.in/check.v1"
+)
+
+var buildimage string
+
+func init() {
+ os.Args = append(os.Args, "-test.timeout=30m") // kludge
+
+ // This enables a hack to speed up repeated tests: hit "docker
+ // commit --pause {containername} checkpointtag" after the
+ // test container has downloaded/compiled some stuff, then run
+ // tests with "-test.buildimage=checkpointtag" next time to
+ // retry/resume/update from that point.
+ flag.StringVar(&buildimage, "test.buildimage", "debian:10", "docker image to use when running buildpackage")
+}
+
+type BuildSuite struct{}
+
+var _ = check.Suite(&BuildSuite{})
+
+func Test(t *testing.T) { check.TestingT(t) }
+
+func (s *BuildSuite) TestBuildAndInstall(c *check.C) {
+ if testing.Short() {
+ c.Skip("skipping docker tests in short mode")
+ } else if _, err := exec.Command("docker", "info").CombinedOutput(); err != nil {
+ c.Skip("skipping docker tests because docker is not available")
+ }
+ tmpdir := c.MkDir()
+ defer os.RemoveAll(tmpdir)
+
+ err := os.Mkdir(tmpdir+"/pkg", 0755)
+ c.Assert(err, check.IsNil)
+ err = os.Mkdir(tmpdir+"/bin", 0755)
+ c.Assert(err, check.IsNil)
+
+ cmd := exec.Command("go", "install")
+ cmd.Env = append(append([]string(nil), os.Environ()...), "GOPATH="+tmpdir)
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ err = cmd.Run()
+ c.Assert(err, check.IsNil)
+
+ srctree, err := filepath.Abs("../..")
+ c.Assert(err, check.IsNil)
+
+ cmd = exec.Command("docker", "run", "--rm",
+ "-v", tmpdir+"/pkg:/pkg",
+ "-v", tmpdir+"/bin/arvados-package:/arvados-package:ro",
+ "-v", srctree+":/usr/local/src/arvados:ro",
+ buildimage,
+ "/arvados-package", "build",
+ "-package-version", "0.9.99",
+ "-source", "/usr/local/src/arvados",
+ "-output-directory", "/pkg")
+ cmd.Stdout = os.Stdout
+ cmd.Stderr = os.Stderr
+ err = cmd.Run()
+ c.Assert(err, check.IsNil)
+
+ fi, err := os.Stat(tmpdir + "/pkg/arvados-server-easy_0.9.99_amd64.deb")
+ c.Assert(err, check.IsNil)
+ c.Logf("%#v", fi)
+}