diff --git a/Documentation/dev-running-db-tests.md b/Documentation/dev-integration-tests.md similarity index 60% rename from Documentation/dev-running-db-tests.md rename to Documentation/dev-integration-tests.md index c0eef62b..0445205e 100644 --- a/Documentation/dev-running-db-tests.md +++ b/Documentation/dev-integration-tests.md @@ -1,12 +1,25 @@ -# Running database tests +# Running integration tests + +## Kubernetes + +Kubernetes tests will only run if the `DEX_KUBECONFIG` environment variable is set. + +``` +$ export DEX_KUBECONFIG=~/.kube/config +$ go test -v -i ./storage/kubernetes +$ go test -v ./storage/kubernetes +``` + +Because third party resources creation isn't synchronized it's expected that the tests fail the first time. Fear not, and just run them again. + +## Postgres Running database tests locally require: * A systemd based Linux distro. * A recent version of [rkt](https://github.com/coreos/rkt) installed. -The `standup.sh` script in the SQL directory is used to run databases in -containers with systemd daemonizing the process. +The `standup.sh` script in the SQL directory is used to run databases in containers with systemd daemonizing the process. ``` $ sudo ./storage/sql/standup.sh create postgres @@ -21,11 +34,10 @@ To run tests export the following environment variables: ``` -Exporting the variables will cause the database tests to be run, rather than -skipped. +Exporting the variables will cause the database tests to be run, rather than skipped. ``` -$ # sqlite takes forever to compile, be sure to install test dependencies +$ # sqlite3 takes forever to compile, be sure to install test dependencies $ go test -v -i ./storage/sql $ go test -v ./storage/sql ``` diff --git a/glide.lock b/glide.lock index 6e733476..c743fb33 100644 --- a/glide.lock +++ b/glide.lock @@ -1,5 +1,5 @@ -hash: 8b7a5f94584ecd144fc3ce94bb0b09f8e96c94b5a8e10d5053bd24bb597367ce -updated: 2016-10-03T23:25:41.280181088-07:00 +hash: a813cbca07393d7cbe35d411cdef588afac7a3bab8a287ffe7b9587516ef5898 +updated: 2016-10-23T20:51:55.313818678-07:00 imports: - name: github.com/cockroachdb/cockroach-go version: 31611c0501c812f437d4861d87d117053967c955 @@ -33,8 +33,6 @@ imports: - oid - name: github.com/mattn/go-sqlite3 version: 3fb7a0e792edd47bf0cf1e919dfc14e2be412e15 -- name: github.com/mitchellh/go-homedir - version: 756f7b183b7ab78acdbbee5c7f392838ed459dda - name: github.com/pquerna/cachecontrol version: c97913dcbd76de40b051a9b4cd827f7eaeb7a868 subpackages: diff --git a/glide.yaml b/glide.yaml index 3b342b44..2616cae7 100644 --- a/glide.yaml +++ b/glide.yaml @@ -74,9 +74,6 @@ import: - proto - protoc-gen-go -- package: github.com/mitchellh/go-homedir - verison: 756f7b183b7ab78acdbbee5c7f392838ed459dda - - package: github.com/kylelemons/godebug subpackages: - diff diff --git a/storage/kubernetes/storage.go b/storage/kubernetes/storage.go index 7a7fb2b4..32424321 100644 --- a/storage/kubernetes/storage.go +++ b/storage/kubernetes/storage.go @@ -5,11 +5,8 @@ import ( "fmt" "log" "net/http" - "os" - "path/filepath" "time" - homedir "github.com/mitchellh/go-homedir" "golang.org/x/net/context" "github.com/coreos/dex/storage" @@ -37,8 +34,7 @@ const ( // Config values for the Kubernetes storage type. type Config struct { InCluster bool `yaml:"inCluster"` - KubeConfigPath string `yaml:"kubeConfigPath"` - GCFrequency int64 `yaml:"gcFrequency"` // seconds + KubeConfigFile string `yaml:"kubeConfigFile"` } // Open returns a storage using Kubernetes third party resource. @@ -52,8 +48,11 @@ func (c *Config) Open() (storage.Storage, error) { // open returns a client with no garbage collection. func (c *Config) open() (*client, error) { - if c.InCluster && (c.KubeConfigPath != "") { - return nil, errors.New("cannot specify both 'inCluster' and 'kubeConfigPath'") + if c.InCluster && (c.KubeConfigFile != "") { + return nil, errors.New("cannot specify both 'inCluster' and 'kubeConfigFile'") + } + if !c.InCluster && (c.KubeConfigFile == "") { + return nil, errors.New("must specify either 'inCluster' or 'kubeConfigFile'") } var ( @@ -65,18 +64,7 @@ func (c *Config) open() (*client, error) { if c.InCluster { cluster, user, namespace, err = inClusterConfig() } else { - kubeConfigPath := c.KubeConfigPath - if kubeConfigPath == "" { - kubeConfigPath = os.Getenv("KUBECONFIG") - } - if kubeConfigPath == "" { - p, err := homedir.Dir() - if err != nil { - return nil, fmt.Errorf("finding homedir: %v", err) - } - kubeConfigPath = filepath.Join(p, ".kube", "config") - } - cluster, user, namespace, err = loadKubeConfig(kubeConfigPath) + cluster, user, namespace, err = loadKubeConfig(c.KubeConfigFile) } if err != nil { return nil, err diff --git a/storage/kubernetes/storage_test.go b/storage/kubernetes/storage_test.go index 0f347730..9132fd0a 100644 --- a/storage/kubernetes/storage_test.go +++ b/storage/kubernetes/storage_test.go @@ -8,15 +8,19 @@ import ( "github.com/coreos/dex/storage/conformance" ) +const testKubeConfigEnv = "DEX_KUBECONFIG" + func TestLoadClient(t *testing.T) { loadClient(t) } func loadClient(t *testing.T) *client { - if os.Getenv("KUBECONFIG") == "" { - t.Skip() + config := Config{ + KubeConfigFile: os.Getenv(testKubeConfigEnv), + } + if config.KubeConfigFile == "" { + t.Skipf("test environment variable %q not set, skipping", testKubeConfigEnv) } - var config Config s, err := config.open() if err != nil { t.Fatal(err) diff --git a/vendor/github.com/mitchellh/go-homedir/LICENSE b/vendor/github.com/mitchellh/go-homedir/LICENSE deleted file mode 100644 index f9c841a5..00000000 --- a/vendor/github.com/mitchellh/go-homedir/LICENSE +++ /dev/null @@ -1,21 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2013 Mitchell Hashimoto - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in -all copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN -THE SOFTWARE. diff --git a/vendor/github.com/mitchellh/go-homedir/README.md b/vendor/github.com/mitchellh/go-homedir/README.md deleted file mode 100644 index d70706d5..00000000 --- a/vendor/github.com/mitchellh/go-homedir/README.md +++ /dev/null @@ -1,14 +0,0 @@ -# go-homedir - -This is a Go library for detecting the user's home directory without -the use of cgo, so the library can be used in cross-compilation environments. - -Usage is incredibly simple, just call `homedir.Dir()` to get the home directory -for a user, and `homedir.Expand()` to expand the `~` in a path to the home -directory. - -**Why not just use `os/user`?** The built-in `os/user` package requires -cgo on Darwin systems. This means that any Go code that uses that package -cannot cross compile. But 99% of the time the use for `os/user` is just to -retrieve the home directory, which we can do for the current user without -cgo. This library does that, enabling cross-compilation. diff --git a/vendor/github.com/mitchellh/go-homedir/homedir.go b/vendor/github.com/mitchellh/go-homedir/homedir.go deleted file mode 100644 index 8996b022..00000000 --- a/vendor/github.com/mitchellh/go-homedir/homedir.go +++ /dev/null @@ -1,137 +0,0 @@ -package homedir - -import ( - "bytes" - "errors" - "os" - "os/exec" - "path/filepath" - "runtime" - "strconv" - "strings" - "sync" -) - -// DisableCache will disable caching of the home directory. Caching is enabled -// by default. -var DisableCache bool - -var homedirCache string -var cacheLock sync.RWMutex - -// Dir returns the home directory for the executing user. -// -// This uses an OS-specific method for discovering the home directory. -// An error is returned if a home directory cannot be detected. -func Dir() (string, error) { - if !DisableCache { - cacheLock.RLock() - cached := homedirCache - cacheLock.RUnlock() - if cached != "" { - return cached, nil - } - } - - cacheLock.Lock() - defer cacheLock.Unlock() - - var result string - var err error - if runtime.GOOS == "windows" { - result, err = dirWindows() - } else { - // Unix-like system, so just assume Unix - result, err = dirUnix() - } - - if err != nil { - return "", err - } - homedirCache = result - return result, nil -} - -// Expand expands the path to include the home directory if the path -// is prefixed with `~`. If it isn't prefixed with `~`, the path is -// returned as-is. -func Expand(path string) (string, error) { - if len(path) == 0 { - return path, nil - } - - if path[0] != '~' { - return path, nil - } - - if len(path) > 1 && path[1] != '/' && path[1] != '\\' { - return "", errors.New("cannot expand user-specific home dir") - } - - dir, err := Dir() - if err != nil { - return "", err - } - - return filepath.Join(dir, path[1:]), nil -} - -func dirUnix() (string, error) { - // First prefer the HOME environmental variable - if home := os.Getenv("HOME"); home != "" { - return home, nil - } - - // If that fails, try getent - var stdout bytes.Buffer - cmd := exec.Command("getent", "passwd", strconv.Itoa(os.Getuid())) - cmd.Stdout = &stdout - if err := cmd.Run(); err != nil { - // If "getent" is missing, ignore it - if err == exec.ErrNotFound { - return "", err - } - } else { - if passwd := strings.TrimSpace(stdout.String()); passwd != "" { - // username:password:uid:gid:gecos:home:shell - passwdParts := strings.SplitN(passwd, ":", 7) - if len(passwdParts) > 5 { - return passwdParts[5], nil - } - } - } - - // If all else fails, try the shell - stdout.Reset() - cmd = exec.Command("sh", "-c", "cd && pwd") - cmd.Stdout = &stdout - if err := cmd.Run(); err != nil { - return "", err - } - - result := strings.TrimSpace(stdout.String()) - if result == "" { - return "", errors.New("blank output when reading home directory") - } - - return result, nil -} - -func dirWindows() (string, error) { - // First prefer the HOME environmental variable - if home := os.Getenv("HOME"); home != "" { - return home, nil - } - - drive := os.Getenv("HOMEDRIVE") - path := os.Getenv("HOMEPATH") - home := drive + path - if drive == "" || path == "" { - home = os.Getenv("USERPROFILE") - } - if home == "" { - return "", errors.New("HOMEDRIVE, HOMEPATH, and USERPROFILE are blank") - } - - return home, nil -} diff --git a/vendor/github.com/mitchellh/go-homedir/homedir_test.go b/vendor/github.com/mitchellh/go-homedir/homedir_test.go deleted file mode 100644 index e4054e72..00000000 --- a/vendor/github.com/mitchellh/go-homedir/homedir_test.go +++ /dev/null @@ -1,112 +0,0 @@ -package homedir - -import ( - "os" - "os/user" - "path/filepath" - "testing" -) - -func patchEnv(key, value string) func() { - bck := os.Getenv(key) - deferFunc := func() { - os.Setenv(key, bck) - } - - os.Setenv(key, value) - return deferFunc -} - -func BenchmarkDir(b *testing.B) { - // We do this for any "warmups" - for i := 0; i < 10; i++ { - Dir() - } - - b.ResetTimer() - for i := 0; i < b.N; i++ { - Dir() - } -} - -func TestDir(t *testing.T) { - u, err := user.Current() - if err != nil { - t.Fatalf("err: %s", err) - } - - dir, err := Dir() - if err != nil { - t.Fatalf("err: %s", err) - } - - if u.HomeDir != dir { - t.Fatalf("%#v != %#v", u.HomeDir, dir) - } -} - -func TestExpand(t *testing.T) { - u, err := user.Current() - if err != nil { - t.Fatalf("err: %s", err) - } - - cases := []struct { - Input string - Output string - Err bool - }{ - { - "/foo", - "/foo", - false, - }, - - { - "~/foo", - filepath.Join(u.HomeDir, "foo"), - false, - }, - - { - "", - "", - false, - }, - - { - "~", - u.HomeDir, - false, - }, - - { - "~foo/foo", - "", - true, - }, - } - - for _, tc := range cases { - actual, err := Expand(tc.Input) - if (err != nil) != tc.Err { - t.Fatalf("Input: %#v\n\nErr: %s", tc.Input, err) - } - - if actual != tc.Output { - t.Fatalf("Input: %#v\n\nOutput: %#v", tc.Input, actual) - } - } - - DisableCache = true - defer func() { DisableCache = false }() - defer patchEnv("HOME", "/custom/path/")() - expected := filepath.Join("/", "custom", "path", "foo/bar") - actual, err := Expand("~/foo/bar") - - if err != nil { - t.Errorf("No error is expected, got: %v", err) - } else if actual != expected { - t.Errorf("Expected: %v; actual: %v", expected, actual) - } -}