diff --git a/engine/autoedge_test.go b/engine/autoedge_test.go
index 19c6ec8c..5b4fd4da 100644
--- a/engine/autoedge_test.go
+++ b/engine/autoedge_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package engine
import (
diff --git a/engine/graph/autogroup/autogroup_test.go b/engine/graph/autogroup/autogroup_test.go
index 2d3f43ed..438bd72b 100644
--- a/engine/graph/autogroup/autogroup_test.go
+++ b/engine/graph/autogroup/autogroup_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package autogroup
import (
diff --git a/engine/graph/semaphore_test.go b/engine/graph/semaphore_test.go
index 8af3e9fd..6b03c7ca 100644
--- a/engine/graph/semaphore_test.go
+++ b/engine/graph/semaphore_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package graph
import (
diff --git a/engine/metaparams_test.go b/engine/metaparams_test.go
index be6afc47..5c12790e 100644
--- a/engine/metaparams_test.go
+++ b/engine/metaparams_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package engine
import (
diff --git a/engine/resources/exec_test.go b/engine/resources/exec_test.go
index 011919e0..7adb0054 100644
--- a/engine/resources/exec_test.go
+++ b/engine/resources/exec_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package resources
import (
diff --git a/engine/resources/file_test.go b/engine/resources/file_test.go
index 81bca361..c47f7aad 100644
--- a/engine/resources/file_test.go
+++ b/engine/resources/file_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package resources
import (
diff --git a/engine/resources/mount_test.go b/engine/resources/mount_test.go
index 13039eaf..fcd404ea 100644
--- a/engine/resources/mount_test.go
+++ b/engine/resources/mount_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package resources
import (
diff --git a/engine/resources/msg_test.go b/engine/resources/msg_test.go
index 5f897b16..909a9056 100644
--- a/engine/resources/msg_test.go
+++ b/engine/resources/msg_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package resources
import (
diff --git a/engine/resources/noop_test.go b/engine/resources/noop_test.go
index 614bd6d7..28cbb473 100644
--- a/engine/resources/noop_test.go
+++ b/engine/resources/noop_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package resources
import (
diff --git a/engine/resources/pkg_test.go b/engine/resources/pkg_test.go
index 213bf647..16e72ddb 100644
--- a/engine/resources/pkg_test.go
+++ b/engine/resources/pkg_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package resources
import (
diff --git a/engine/resources/test_test.go b/engine/resources/test_test.go
index bb8f0183..49dd3d74 100644
--- a/engine/resources/test_test.go
+++ b/engine/resources/test_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package resources
import (
diff --git a/engine/util/util_test.go b/engine/util/util_test.go
index 8195be21..661c6e9e 100644
--- a/engine/util/util_test.go
+++ b/engine/util/util_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package util
import (
diff --git a/etcd/etcd_test.go b/etcd/etcd_test.go
index 48d02bdd..d8b111e3 100644
--- a/etcd/etcd_test.go
+++ b/etcd/etcd_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package etcd
import (
diff --git a/etcd/fs/fs_test.go b/etcd/fs/fs_test.go
index 7df3db7a..0c0879f5 100644
--- a/etcd/fs/fs_test.go
+++ b/etcd/fs/fs_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package fs_test // named this way to make it easier for examples
import (
diff --git a/integration/basic_test.go b/integration/basic_test.go
index 4e113d74..5572c8bc 100644
--- a/integration/basic_test.go
+++ b/integration/basic_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package integration
import (
diff --git a/integration/util_test.go b/integration/util_test.go
index 0bfdd9dc..059ecb7d 100644
--- a/integration/util_test.go
+++ b/integration/util_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package integration
import (
diff --git a/lang/funcs/facts/func_test.go b/lang/funcs/facts/func_test.go
index 35e0657f..934cf136 100644
--- a/lang/funcs/facts/func_test.go
+++ b/lang/funcs/facts/func_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package facts
import (
diff --git a/lang/funcs/funcs_test.go b/lang/funcs/funcs_test.go
index fbe7cfab..f447508d 100644
--- a/lang/funcs/funcs_test.go
+++ b/lang/funcs/funcs_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package funcs
// most of the testing of this package is inside of the adjacent `facts` package
diff --git a/lang/interpolate_test.go b/lang/interpolate_test.go
index c6ea15a7..534c9728 100644
--- a/lang/interpolate_test.go
+++ b/lang/interpolate_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package lang
import (
diff --git a/lang/interpret_test.go b/lang/interpret_test.go
index 40fd0f16..4929ea62 100644
--- a/lang/interpret_test.go
+++ b/lang/interpret_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package lang
import (
diff --git a/lang/lang_test.go b/lang/lang_test.go
index 3a32d734..469db498 100644
--- a/lang/lang_test.go
+++ b/lang/lang_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package lang
import (
diff --git a/lang/lexparse_test.go b/lang/lexparse_test.go
index 475581df..5a062f8d 100644
--- a/lang/lexparse_test.go
+++ b/lang/lexparse_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package lang
import (
diff --git a/lang/types/type_test.go b/lang/types/type_test.go
index 6758c5b4..9e06edde 100644
--- a/lang/types/type_test.go
+++ b/lang/types/type_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package types
import (
diff --git a/lang/types/value_test.go b/lang/types/value_test.go
index 78d006cf..6b73c37d 100644
--- a/lang/types/value_test.go
+++ b/lang/types/value_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package types
import (
diff --git a/lang/unification_test.go b/lang/unification_test.go
index 8822dd8c..0d4f6378 100644
--- a/lang/unification_test.go
+++ b/lang/unification_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package lang
import (
diff --git a/lib/main_test.go b/lib/main_test.go
index 7b9976df..0c477cb1 100644
--- a/lib/main_test.go
+++ b/lib/main_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package lib
import (
diff --git a/pgraph/graphsync_test.go b/pgraph/graphsync_test.go
index 6cdb5c9e..14c427bd 100644
--- a/pgraph/graphsync_test.go
+++ b/pgraph/graphsync_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package pgraph
import (
diff --git a/pgraph/pgraph_test.go b/pgraph/pgraph_test.go
index 9750adf3..751a7b5b 100644
--- a/pgraph/pgraph_test.go
+++ b/pgraph/pgraph_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package pgraph
import (
diff --git a/pgraph/subgraph_test.go b/pgraph/subgraph_test.go
index 1aa04453..b73c813b 100644
--- a/pgraph/subgraph_test.go
+++ b/pgraph/subgraph_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package pgraph
import (
diff --git a/pgraph/util_test.go b/pgraph/util_test.go
index 2f124264..9698c941 100644
--- a/pgraph/util_test.go
+++ b/pgraph/util_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package pgraph
import (
diff --git a/prometheus/prometheus_test.go b/prometheus/prometheus_test.go
index 4b255f86..27cac0b2 100644
--- a/prometheus/prometheus_test.go
+++ b/prometheus/prometheus_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package prometheus
import (
diff --git a/test.sh b/test.sh
index e2fe6523..6326d16b 100755
--- a/test.sh
+++ b/test.sh
@@ -63,11 +63,22 @@ if env | grep -q -e '^TRAVIS=true$' -e '^JENKINS_URL=' -e '^BUILD_TAG=jenkins';
run-testsuite ./test/test-gotest.sh --race
run-testsuite ./test/test-integration.sh
run-testsuite ./test/test-integration.sh --race
+
+ # XXX: fix and enable these on travis (sudo: go: command not found)
+ #run-testsuite ./test/test-gotest.sh --root
+ #run-testsuite ./test/test-gotest.sh --root --race
+ #run-testsuite ./test/test-integration.sh --root
+ #run-testsuite ./test/test-integration.sh --root --race
else
REASON="CI server only test" skip-testsuite ./test/test-shell.sh
REASON="CI server only test" skip-testsuite ./test/test-gotest.sh --race
REASON="CI server only test" skip-testsuite ./test/test-integration.sh
REASON="CI server only test" skip-testsuite ./test/test-integration.sh --race
+
+ REASON="CI server only test" skip-testsuite ./test/test-gotest.sh --root
+ REASON="CI server only test" skip-testsuite ./test/test-gotest.sh --root --race
+ REASON="CI server only test" skip-testsuite ./test/test-integration.sh --root
+ REASON="CI server only test" skip-testsuite ./test/test-integration.sh --root --race
fi
run-testsuite ./test/test-gometalinter.sh
diff --git a/test/test-gotest.sh b/test/test-gotest.sh
index ba80679f..c03f1267 100755
--- a/test/test-gotest.sh
+++ b/test/test-gotest.sh
@@ -7,26 +7,38 @@ ROOT=$(dirname "${BASH_SOURCE}")/..
cd "${ROOT}"
. test/util.sh
+# if we want to run this test as root, use build tag -root to ask each test...
+XSUDO=''
+XTAGS=''
+if [[ "$@" = *"--root"* ]]; then
+ if ! timeout 1s sudo -A true; then
+ echo "sudo disabled: can't run as root"
+ exit 1
+ fi
+ XSUDO='sudo -E'
+ XTAGS='-tags root'
+fi
+
failures=''
function run-test()
{
- $@ || failures=$( [ -n "$failures" ] && echo "$failures\\n$@" || echo "$@" )
+ $XSUDO $@ || failures=$( [ -n "$failures" ] && echo "$failures\\n$@" || echo "$@" )
}
base=$(go list .)
if [[ "$@" = *"--integration"* ]]; then
if [[ "$@" = *"--race"* ]]; then
- run-test go test -race "${base}/integration" -v
+ GOCACHE=off run-test go test -race "${base}/integration" -v ${XTAGS}
else
- run-test go test "${base}/integration" -v
+ GOCACHE=off run-test go test "${base}/integration" -v ${XTAGS}
fi
else
for pkg in `go list -e ./... | grep -v "^${base}/vendor/" | grep -v "^${base}/examples/" | grep -v "^${base}/test/" | grep -v "^${base}/old" | grep -v "^${base}/old/" | grep -v "^${base}/tmp" | grep -v "^${base}/tmp/" | grep -v "^${base}/integration"`; do
echo -e "\ttesting: $pkg"
if [[ "$@" = *"--race"* ]]; then
- run-test go test -race "$pkg"
+ GOCACHE=off run-test go test -race "$pkg" ${XTAGS}
else
- run-test go test "$pkg"
+ GOCACHE=off run-test go test "$pkg" ${XTAGS}
fi
done
fi
diff --git a/util/code_test.go b/util/code_test.go
index 4afffcfd..e68c2d97 100644
--- a/util/code_test.go
+++ b/util/code_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package util
import (
diff --git a/util/home_test.go b/util/home_test.go
index f66eed99..f0727352 100644
--- a/util/home_test.go
+++ b/util/home_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package util
import (
diff --git a/util/root_test.go b/util/root_test.go
new file mode 100644
index 00000000..e5b3e0bd
--- /dev/null
+++ b/util/root_test.go
@@ -0,0 +1,37 @@
+// Mgmt
+// Copyright (C) 2013-2018+ James Shubin and the project contributors
+// Written by James Shubin and the project contributors
+//
+// This program is free software: you can redistribute it and/or modify
+// it under the terms of the GNU General Public License as published by
+// the Free Software Foundation, either version 3 of the License, or
+// (at your option) any later version.
+//
+// This program is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+// GNU General Public License for more details.
+//
+// You should have received a copy of the GNU General Public License
+// along with this program. If not, see .
+
+// +build root
+
+package util
+
+import (
+ "os/user"
+ "testing"
+)
+
+func TestIsRoot(t *testing.T) {
+ u, err := user.Current()
+ if err != nil {
+ t.Errorf("error running user.Current(): %+v", err)
+ return
+ }
+ if u.Uid != "0" {
+ t.Errorf("expected uid 0, got: %s", u.Uid)
+ return
+ }
+}
diff --git a/util/util_test.go b/util/util_test.go
index ea4cca31..9bd6a633 100644
--- a/util/util_test.go
+++ b/util/util_test.go
@@ -15,6 +15,8 @@
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
+// +build !root
+
package util
import (