github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/integration/gotests/gotest_test.go (about) 1 // Copyright 2018 the u-root Authors. All rights reserved 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // +build !race 6 7 package integration 8 9 import ( 10 "os" 11 "os/exec" 12 "strings" 13 "testing" 14 "time" 15 16 "github.com/u-root/u-root/pkg/qemu" 17 "github.com/u-root/u-root/pkg/vmtest" 18 ) 19 20 // testPkgs returns a slice of tests to run. 21 func testPkgs(t *testing.T) []string { 22 // Packages which do not contain tests (or do not contain tests for the 23 // build target) will still compile a test binary which vacuously pass. 24 cmd := exec.Command("go", "list", 25 "github.com/u-root/u-root/cmds/boot/...", 26 "github.com/u-root/u-root/cmds/core/...", 27 "github.com/u-root/u-root/cmds/exp/...", 28 "github.com/u-root/u-root/pkg/...", 29 ) 30 cmd.Env = append(os.Environ(), "GOARCH="+vmtest.TestArch()) 31 out, err := cmd.CombinedOutput() 32 if err != nil { 33 t.Fatal(err) 34 } 35 pkgs := strings.Fields(strings.TrimSpace(string(out))) 36 37 // TODO: Some tests do not run properly in QEMU at the moment. They are 38 // blocklisted. These tests fail for mostly two reasons: 39 // 1. either it requires networking (not enabled in the kernel) 40 // 2. or it depends on some test files (for example /bin/sleep) 41 blocklist := []string{ 42 "github.com/u-root/u-root/cmds/core/cmp", 43 "github.com/u-root/u-root/cmds/core/dd", 44 "github.com/u-root/u-root/cmds/core/elvish/eval", 45 "github.com/u-root/u-root/cmds/core/elvish/edit/tty", 46 "github.com/u-root/u-root/cmds/core/fusermount", 47 "github.com/u-root/u-root/cmds/core/wget", 48 "github.com/u-root/u-root/cmds/core/which", 49 "github.com/u-root/u-root/cmds/exp/rush", 50 "github.com/u-root/u-root/cmds/exp/pox", 51 "github.com/u-root/u-root/pkg/crypto", 52 "github.com/u-root/u-root/pkg/tarutil", 53 "github.com/u-root/u-root/pkg/ldd", 54 55 // These have special configuration. 56 "github.com/u-root/u-root/pkg/gpio", 57 "github.com/u-root/u-root/pkg/mount", 58 "github.com/u-root/u-root/pkg/mount/loop", 59 60 // Missing xzcat in VM. 61 "github.com/u-root/u-root/cmds/exp/bzimage", 62 "github.com/u-root/u-root/pkg/boot/bzimage", 63 64 // Missing /dev/mem and /sys/firmware/efi 65 "github.com/u-root/u-root/pkg/boot/acpi", 66 67 // No Go compiler in VM. 68 "github.com/u-root/u-root/pkg/bb", 69 "github.com/u-root/u-root/pkg/uroot", 70 "github.com/u-root/u-root/pkg/uroot/builder", 71 } 72 if vmtest.TestArch() == "arm64" { 73 blocklist = append( 74 blocklist, 75 "github.com/u-root/u-root/pkg/strace", 76 ) 77 } 78 for i := 0; i < len(pkgs); i++ { 79 for _, b := range blocklist { 80 if pkgs[i] == b { 81 pkgs = append(pkgs[:i], pkgs[i+1:]...) 82 } 83 } 84 } 85 86 return pkgs 87 } 88 89 // TestGoTest effectively runs "go test ./..." inside a QEMU instance. The 90 // tests run as root and can do all sorts of things not possible otherwise. 91 func TestGoTest(t *testing.T) { 92 pkgs := testPkgs(t) 93 94 o := &vmtest.Options{ 95 QEMUOpts: qemu.Options{ 96 Timeout: 120 * time.Second, 97 }, 98 } 99 vmtest.GolangTest(t, pkgs, o) 100 }