16306: Merge branch 'master'
[arvados.git] / cmd / arvados-package / build_test.go
1 // Copyright (C) The Arvados Authors. All rights reserved.
2 //
3 // SPDX-License-Identifier: AGPL-3.0
4
5 package main
6
7 import (
8         "flag"
9         "os"
10         "os/exec"
11         "path/filepath"
12         "testing"
13
14         "gopkg.in/check.v1"
15 )
16
17 var buildimage string
18
19 func init() {
20         os.Args = append(os.Args, "-test.timeout=30m") // kludge
21
22         // This enables a hack to speed up repeated tests: hit "docker
23         // commit --pause {containername} checkpointtag" after the
24         // test container has downloaded/compiled some stuff, then run
25         // tests with "-test.buildimage=checkpointtag" next time to
26         // retry/resume/update from that point.
27         flag.StringVar(&buildimage, "test.buildimage", "debian:10", "docker image to use when running buildpackage")
28 }
29
30 type BuildSuite struct{}
31
32 var _ = check.Suite(&BuildSuite{})
33
34 func Test(t *testing.T) { check.TestingT(t) }
35
36 func (s *BuildSuite) TestBuildAndInstall(c *check.C) {
37         if testing.Short() {
38                 c.Skip("skipping docker tests in short mode")
39         } else if _, err := exec.Command("docker", "info").CombinedOutput(); err != nil {
40                 c.Skip("skipping docker tests because docker is not available")
41         }
42         tmpdir := c.MkDir()
43         defer os.RemoveAll(tmpdir)
44
45         err := os.Mkdir(tmpdir+"/pkg", 0755)
46         c.Assert(err, check.IsNil)
47         err = os.Mkdir(tmpdir+"/bin", 0755)
48         c.Assert(err, check.IsNil)
49
50         cmd := exec.Command("go", "install")
51         cmd.Env = append(append([]string(nil), os.Environ()...), "GOPATH="+tmpdir)
52         cmd.Stdout = os.Stdout
53         cmd.Stderr = os.Stderr
54         err = cmd.Run()
55         c.Assert(err, check.IsNil)
56
57         srctree, err := filepath.Abs("../..")
58         c.Assert(err, check.IsNil)
59
60         cmd = exec.Command("docker", "run", "--rm",
61                 "-v", tmpdir+"/pkg:/pkg",
62                 "-v", tmpdir+"/bin/arvados-package:/arvados-package:ro",
63                 "-v", srctree+":/usr/local/src/arvados:ro",
64                 buildimage,
65                 "/arvados-package", "build",
66                 "-package-version", "0.9.99",
67                 "-source", "/usr/local/src/arvados",
68                 "-output-directory", "/pkg")
69         cmd.Stdout = os.Stdout
70         cmd.Stderr = os.Stderr
71         err = cmd.Run()
72         c.Assert(err, check.IsNil)
73
74         fi, err := os.Stat(tmpdir + "/pkg/arvados-server-easy_0.9.99_amd64.deb")
75         c.Assert(err, check.IsNil)
76         c.Logf("%#v", fi)
77 }