From bc16de0b58d64b90c465cdc6a7e61594bec086d1 Mon Sep 17 00:00:00 2001
From: Eric Chiang <eric.chiang@coreos.com>
Date: Sun, 23 Oct 2016 07:58:28 -0700
Subject: [PATCH] storage/kubernetes: don't guess the kubeconfig location and
 change test env

Using the default KUBECONFIG environment variable to indicate that
the Kubernetes tests should be run lead to cases where developers
accidentally ran the tests. This has now been changed to
"DEX_KUBECONFIG" and documentation hsa been added detailing how to
run these tests.

Additionally, no other storage reads environment variables for its
normal configuration (outside of tests) so the Kubernetes storage
no longer does.

Overall, be less surprising.
---
 ...g-db-tests.md => dev-integration-tests.md} | 24 ++++++++++++-----
 glide.lock                                    |  6 ++---
 glide.yaml                                    |  3 ---
 storage/kubernetes/storage.go                 | 26 +++++--------------
 storage/kubernetes/storage_test.go            | 10 ++++---
 5 files changed, 34 insertions(+), 35 deletions(-)
 rename Documentation/{dev-running-db-tests.md => dev-integration-tests.md} (60%)

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)
-- 
GitLab