github.com/AliyunContainerService/cli@v0.0.0-20181009023821-814ced4b30d0/internal/test/environment/testenv.go (about)

     1  package environment
     2  
     3  import (
     4  	"os"
     5  	"strings"
     6  	"testing"
     7  	"time"
     8  
     9  	"github.com/pkg/errors"
    10  	"gotest.tools/icmd"
    11  	"gotest.tools/poll"
    12  	"gotest.tools/skip"
    13  )
    14  
    15  // Setup a new environment
    16  func Setup() error {
    17  	dockerHost := os.Getenv("TEST_DOCKER_HOST")
    18  	if dockerHost == "" {
    19  		return errors.New("$TEST_DOCKER_HOST must be set")
    20  	}
    21  	if err := os.Setenv("DOCKER_HOST", dockerHost); err != nil {
    22  		return err
    23  	}
    24  
    25  	if dockerCertPath := os.Getenv("TEST_DOCKER_CERT_PATH"); dockerCertPath != "" {
    26  		if err := os.Setenv("DOCKER_CERT_PATH", dockerCertPath); err != nil {
    27  			return err
    28  		}
    29  		if err := os.Setenv("DOCKER_TLS_VERIFY", "1"); err != nil {
    30  			return err
    31  		}
    32  	}
    33  
    34  	if kubeConfig := os.Getenv("TEST_KUBECONFIG"); kubeConfig != "" {
    35  		if err := os.Setenv("KUBECONFIG", kubeConfig); err != nil {
    36  			return err
    37  		}
    38  	}
    39  
    40  	if val := boolFromString(os.Getenv("TEST_REMOTE_DAEMON")); val {
    41  		if err := os.Setenv("REMOTE_DAEMON", "1"); err != nil {
    42  			return err
    43  		}
    44  	}
    45  
    46  	if val := boolFromString(os.Getenv("TEST_SKIP_PLUGIN_TESTS")); val {
    47  		if err := os.Setenv("SKIP_PLUGIN_TESTS", "1"); err != nil {
    48  			return err
    49  		}
    50  	}
    51  
    52  	return nil
    53  }
    54  
    55  // KubernetesEnabled returns if Kubernetes testing is enabled
    56  func KubernetesEnabled() bool {
    57  	return os.Getenv("KUBECONFIG") != ""
    58  }
    59  
    60  // RemoteDaemon returns true if running against a remote daemon
    61  func RemoteDaemon() bool {
    62  	return os.Getenv("REMOTE_DAEMON") != ""
    63  }
    64  
    65  // SkipPluginTests returns if plugin tests should be skipped
    66  func SkipPluginTests() bool {
    67  	return os.Getenv("SKIP_PLUGIN_TESTS") != ""
    68  }
    69  
    70  // boolFromString determines boolean value from string
    71  func boolFromString(val string) bool {
    72  	switch strings.ToLower(val) {
    73  	case "true", "1":
    74  		return true
    75  	default:
    76  		return false
    77  	}
    78  }
    79  
    80  // DefaultPollSettings used with gotestyourself/poll
    81  var DefaultPollSettings = poll.WithDelay(100 * time.Millisecond)
    82  
    83  // SkipIfNotExperimentalDaemon returns whether the test docker daemon is in experimental mode
    84  func SkipIfNotExperimentalDaemon(t *testing.T) {
    85  	t.Helper()
    86  	result := icmd.RunCmd(icmd.Command("docker", "info", "--format", "{{.ExperimentalBuild}}"))
    87  	result.Assert(t, icmd.Expected{Err: icmd.None})
    88  	experimentalBuild := strings.TrimSpace(result.Stdout()) == "true"
    89  	skip.If(t, !experimentalBuild, "running against a non-experimental daemon")
    90  }