Commit 33242b95 authored by k8s-merge-robot's avatar k8s-merge-robot Committed by GitHub

Merge pull request #27077 from mikedanese/faster-integration-tests

Automatic merge from submit-queue break integration tests into seperate packages so that they run in parallel If this is broken then our tests aren't threadsafe. ref #25940
parents ec6181d5 81e67c04
...@@ -109,7 +109,7 @@ following Go conventions - `stateLock`, `mapLock` etc. ...@@ -109,7 +109,7 @@ following Go conventions - `stateLock`, `mapLock` etc.
tests tests
- Table-driven tests are preferred for testing multiple scenarios/inputs; for - Table-driven tests are preferred for testing multiple scenarios/inputs; for
example, see [TestNamespaceAuthorization](../../test/integration/auth_test.go) example, see [TestNamespaceAuthorization](../../test/integration/auth/auth_test.go)
- Significant features should come with integration (test/integration) and/or - Significant features should come with integration (test/integration) and/or
[end-to-end (test/e2e) tests](e2e-tests.md) [end-to-end (test/e2e) tests](e2e-tests.md)
......
...@@ -73,7 +73,7 @@ passing, so it is often a good idea to make sure the e2e tests work as well. ...@@ -73,7 +73,7 @@ passing, so it is often a good idea to make sure the e2e tests work as well.
* All packages and any significant files require unit tests. * All packages and any significant files require unit tests.
* The preferred method of testing multiple scenarios or input is * The preferred method of testing multiple scenarios or input is
[table driven testing](https://github.com/golang/go/wiki/TableDrivenTests) [table driven testing](https://github.com/golang/go/wiki/TableDrivenTests)
- Example: [TestNamespaceAuthorization](../../test/integration/auth_test.go) - Example: [TestNamespaceAuthorization](../../test/integration/auth/auth_test.go)
* Unit tests must pass on OS X and Windows platforms. * Unit tests must pass on OS X and Windows platforms.
- Tests using linux-specific features must be skipped or compiled out. - Tests using linux-specific features must be skipped or compiled out.
- Skipped is better, compiled out is required when it won't compile. - Skipped is better, compiled out is required when it won't compile.
...@@ -189,9 +189,9 @@ See `go help test` and `go help testflag` for additional info. ...@@ -189,9 +189,9 @@ See `go help test` and `go help testflag` for additional info.
- This includes kubectl commands - This includes kubectl commands
* The preferred method of testing multiple scenarios or inputs * The preferred method of testing multiple scenarios or inputs
is [table driven testing](https://github.com/golang/go/wiki/TableDrivenTests) is [table driven testing](https://github.com/golang/go/wiki/TableDrivenTests)
- Example: [TestNamespaceAuthorization](../../test/integration/auth_test.go) - Example: [TestNamespaceAuthorization](../../test/integration/auth/auth_test.go)
* Each test should create its own master, httpserver and config. * Each test should create its own master, httpserver and config.
- Example: [TestPodUpdateActiveDeadlineSeconds](../../test/integration/pods_test.go) - Example: [TestPodUpdateActiveDeadlineSeconds](../../test/integration/pods/pods_test.go)
* See [coding conventions](coding-conventions.md). * See [coding conventions](coding-conventions.md).
### Install etcd dependency ### Install etcd dependency
......
...@@ -41,6 +41,15 @@ KUBE_INTEGRATION_TEST_MAX_CONCURRENCY=${KUBE_INTEGRATION_TEST_MAX_CONCURRENCY:-" ...@@ -41,6 +41,15 @@ KUBE_INTEGRATION_TEST_MAX_CONCURRENCY=${KUBE_INTEGRATION_TEST_MAX_CONCURRENCY:-"
LOG_LEVEL=${LOG_LEVEL:-2} LOG_LEVEL=${LOG_LEVEL:-2}
KUBE_TEST_ARGS=${KUBE_TEST_ARGS:-} KUBE_TEST_ARGS=${KUBE_TEST_ARGS:-}
kube::test::find_integration_test_dirs() {
(
cd ${KUBE_ROOT}
find test/integration -name '*_test.go' -print0 \
| xargs -0n1 dirname \
| sort -u
)
}
cleanup() { cleanup() {
kube::log::status "Cleaning up etcd" kube::log::status "Cleaning up etcd"
kube::etcd::cleanup kube::etcd::cleanup
...@@ -58,7 +67,7 @@ runTests() { ...@@ -58,7 +67,7 @@ runTests() {
KUBE_RACE="" \ KUBE_RACE="" \
KUBE_TIMEOUT="${KUBE_TIMEOUT}" \ KUBE_TIMEOUT="${KUBE_TIMEOUT}" \
KUBE_TEST_API_VERSIONS="$1" \ KUBE_TEST_API_VERSIONS="$1" \
"${KUBE_ROOT}/hack/test-go.sh" test/integration "${KUBE_ROOT}/hack/test-go.sh" $(kube::test::find_integration_test_dirs)
# Run the watch cache tests # Run the watch cache tests
# KUBE_TEST_ARGS doesn't mean anything to the watch cache test. # KUBE_TEST_ARGS doesn't mean anything to the watch cache test.
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package auth
import ( import (
"bytes" "bytes"
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package client
import ( import (
"fmt" "fmt"
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package client
import ( import (
"reflect" "reflect"
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package configmap
// This file tests use of the configMap API resource. // This file tests use of the configMap API resource.
...@@ -27,6 +27,7 @@ import ( ...@@ -27,6 +27,7 @@ import (
"k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/restclient"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/test/integration"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
) )
...@@ -114,7 +115,7 @@ func DoTestConfigMap(t *testing.T, client *client.Client, ns *api.Namespace) { ...@@ -114,7 +115,7 @@ func DoTestConfigMap(t *testing.T, client *client.Client, ns *api.Namespace) {
if _, err := client.Pods(ns.Name).Create(pod); err != nil { if _, err := client.Pods(ns.Name).Create(pod); err != nil {
t.Errorf("Failed to create pod: %v", err) t.Errorf("Failed to create pod: %v", err)
} }
defer deletePodOrErrorf(t, client, ns.Name, pod.Name) defer integration.DeletePodOrErrorf(t, client, ns.Name, pod.Name)
} }
func deleteConfigMapOrErrorf(t *testing.T, c *client.Client, ns, name string) { func deleteConfigMapOrErrorf(t *testing.T, c *client.Client, ns, name string) {
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package garbagecollector
import ( import (
"fmt" "fmt"
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package kubectl
import ( import (
"testing" "testing"
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package master
import ( import (
"strconv" "strconv"
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package master
import ( import (
"flag" "flag"
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package master
import ( import (
"bytes" "bytes"
...@@ -36,6 +36,7 @@ import ( ...@@ -36,6 +36,7 @@ import (
"k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/restclient"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/util/wait"
"k8s.io/kubernetes/test/integration"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
) )
...@@ -127,9 +128,9 @@ func TestAutoscalingGroupBackwardCompatibility(t *testing.T) { ...@@ -127,9 +128,9 @@ func TestAutoscalingGroupBackwardCompatibility(t *testing.T) {
expectedStatusCodes map[int]bool expectedStatusCodes map[int]bool
expectedVersion string expectedVersion string
}{ }{
{"POST", autoscalingPath("horizontalpodautoscalers", api.NamespaceDefault, ""), hpaV1, code201, ""}, {"POST", autoscalingPath("horizontalpodautoscalers", api.NamespaceDefault, ""), hpaV1, integration.Code201, ""},
{"GET", autoscalingPath("horizontalpodautoscalers", api.NamespaceDefault, ""), "", code200, testapi.Autoscaling.GroupVersion().String()}, {"GET", autoscalingPath("horizontalpodautoscalers", api.NamespaceDefault, ""), "", integration.Code200, testapi.Autoscaling.GroupVersion().String()},
{"GET", extensionsPath("horizontalpodautoscalers", api.NamespaceDefault, ""), "", code200, testapi.Extensions.GroupVersion().String()}, {"GET", extensionsPath("horizontalpodautoscalers", api.NamespaceDefault, ""), "", integration.Code200, testapi.Extensions.GroupVersion().String()},
} }
for _, r := range requests { for _, r := range requests {
...@@ -242,16 +243,6 @@ var jobV1 string = ` ...@@ -242,16 +243,6 @@ var jobV1 string = `
} }
` `
var deleteResp string = `
{
"kind": "Status",
"apiVersion": "v1",
"metadata":{},
"status":"Success",
"code":200
}
`
// TestBatchGroupBackwardCompatibility is testing that batch/v1 and ext/v1beta1 // TestBatchGroupBackwardCompatibility is testing that batch/v1 and ext/v1beta1
// Job share storage. This test can be deleted when Jobs is removed from ext/v1beta1, // Job share storage. This test can be deleted when Jobs is removed from ext/v1beta1,
// (expected to happen in 1.4). // (expected to happen in 1.4).
...@@ -271,15 +262,15 @@ func TestBatchGroupBackwardCompatibility(t *testing.T) { ...@@ -271,15 +262,15 @@ func TestBatchGroupBackwardCompatibility(t *testing.T) {
expectedVersion string expectedVersion string
}{ }{
// Post a v1 and get back both as v1beta1 and as v1. // Post a v1 and get back both as v1beta1 and as v1.
{"POST", batchPath("jobs", api.NamespaceDefault, ""), jobV1, code201, ""}, {"POST", batchPath("jobs", api.NamespaceDefault, ""), jobV1, integration.Code201, ""},
{"GET", batchPath("jobs", api.NamespaceDefault, "pi"), "", code200, testapi.Batch.GroupVersion().String()}, {"GET", batchPath("jobs", api.NamespaceDefault, "pi"), "", integration.Code200, testapi.Batch.GroupVersion().String()},
{"GET", extensionsPath("jobs", api.NamespaceDefault, "pi"), "", code200, testapi.Extensions.GroupVersion().String()}, {"GET", extensionsPath("jobs", api.NamespaceDefault, "pi"), "", integration.Code200, testapi.Extensions.GroupVersion().String()},
{"DELETE", batchPath("jobs", api.NamespaceDefault, "pi"), "", code200, testapi.Default.GroupVersion().String()}, // status response {"DELETE", batchPath("jobs", api.NamespaceDefault, "pi"), "", integration.Code200, testapi.Default.GroupVersion().String()}, // status response
// Post a v1beta1 and get back both as v1beta1 and as v1. // Post a v1beta1 and get back both as v1beta1 and as v1.
{"POST", extensionsPath("jobs", api.NamespaceDefault, ""), jobV1beta1, code201, ""}, {"POST", extensionsPath("jobs", api.NamespaceDefault, ""), jobV1beta1, integration.Code201, ""},
{"GET", batchPath("jobs", api.NamespaceDefault, "pi"), "", code200, testapi.Batch.GroupVersion().String()}, {"GET", batchPath("jobs", api.NamespaceDefault, "pi"), "", integration.Code200, testapi.Batch.GroupVersion().String()},
{"GET", extensionsPath("jobs", api.NamespaceDefault, "pi"), "", code200, testapi.Extensions.GroupVersion().String()}, {"GET", extensionsPath("jobs", api.NamespaceDefault, "pi"), "", integration.Code200, testapi.Extensions.GroupVersion().String()},
{"DELETE", extensionsPath("jobs", api.NamespaceDefault, "pi"), "", code200, testapi.Default.GroupVersion().String()}, //status response {"DELETE", extensionsPath("jobs", api.NamespaceDefault, "pi"), "", integration.Code200, testapi.Default.GroupVersion().String()}, //status response
} }
for _, r := range requests { for _, r := range requests {
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package metrics
import ( import (
"bufio" "bufio"
......
...@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and ...@@ -14,7 +14,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package openshift
import ( import (
"testing" "testing"
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package persistentvolumes
import ( import (
"fmt" "fmt"
...@@ -27,8 +27,6 @@ import ( ...@@ -27,8 +27,6 @@ import (
"testing" "testing"
"time" "time"
"github.com/golang/glog"
"k8s.io/kubernetes/pkg/api" "k8s.io/kubernetes/pkg/api"
"k8s.io/kubernetes/pkg/api/resource" "k8s.io/kubernetes/pkg/api/resource"
"k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/testapi"
...@@ -41,11 +39,14 @@ import ( ...@@ -41,11 +39,14 @@ import (
"k8s.io/kubernetes/pkg/volume" "k8s.io/kubernetes/pkg/volume"
volumetest "k8s.io/kubernetes/pkg/volume/testing" volumetest "k8s.io/kubernetes/pkg/volume/testing"
"k8s.io/kubernetes/pkg/watch" "k8s.io/kubernetes/pkg/watch"
"k8s.io/kubernetes/test/integration"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
"github.com/golang/glog"
) )
func init() { func init() {
requireEtcd() integration.RequireEtcd()
} }
// Several tests in this file are configurable by environment variables: // Several tests in this file are configurable by environment variables:
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package pods
import ( import (
"fmt" "fmt"
...@@ -26,6 +26,7 @@ import ( ...@@ -26,6 +26,7 @@ import (
"k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/restclient"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/test/integration"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
) )
...@@ -142,7 +143,7 @@ func TestPodUpdateActiveDeadlineSeconds(t *testing.T) { ...@@ -142,7 +143,7 @@ func TestPodUpdateActiveDeadlineSeconds(t *testing.T) {
t.Errorf("%v: unexpected allowed update to pod", tc.name) t.Errorf("%v: unexpected allowed update to pod", tc.name)
} }
deletePodOrErrorf(t, client, ns.Name, pod.Name) integration.DeletePodOrErrorf(t, client, ns.Name, pod.Name)
} }
} }
...@@ -177,5 +178,5 @@ func TestPodReadOnlyFilesystem(t *testing.T) { ...@@ -177,5 +178,5 @@ func TestPodReadOnlyFilesystem(t *testing.T) {
t.Errorf("Failed to create pod: %v", err) t.Errorf("Failed to create pod: %v", err)
} }
deletePodOrErrorf(t, client, ns.Name, pod.Name) integration.DeletePodOrErrorf(t, client, ns.Name, pod.Name)
} }
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package quota
import ( import (
"fmt" "fmt"
...@@ -40,11 +40,12 @@ import ( ...@@ -40,11 +40,12 @@ import (
quotainstall "k8s.io/kubernetes/pkg/quota/install" quotainstall "k8s.io/kubernetes/pkg/quota/install"
"k8s.io/kubernetes/pkg/watch" "k8s.io/kubernetes/pkg/watch"
"k8s.io/kubernetes/plugin/pkg/admission/resourcequota" "k8s.io/kubernetes/plugin/pkg/admission/resourcequota"
"k8s.io/kubernetes/test/integration"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
) )
func init() { func init() {
requireEtcd() integration.RequireEtcd()
} }
// 1.2 code gets: // 1.2 code gets:
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package scheduler
// This file tests scheduler extender. // This file tests scheduler extender.
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package scheduler
// This file tests the scheduler. // This file tests the scheduler.
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package secrets
// This file tests use of the secrets API resource. // This file tests use of the secrets API resource.
...@@ -27,6 +27,7 @@ import ( ...@@ -27,6 +27,7 @@ import (
"k8s.io/kubernetes/pkg/api/testapi" "k8s.io/kubernetes/pkg/api/testapi"
"k8s.io/kubernetes/pkg/client/restclient" "k8s.io/kubernetes/pkg/client/restclient"
client "k8s.io/kubernetes/pkg/client/unversioned" client "k8s.io/kubernetes/pkg/client/unversioned"
"k8s.io/kubernetes/test/integration"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
) )
...@@ -105,14 +106,14 @@ func DoTestSecrets(t *testing.T, client *client.Client, ns *api.Namespace) { ...@@ -105,14 +106,14 @@ func DoTestSecrets(t *testing.T, client *client.Client, ns *api.Namespace) {
if _, err := client.Pods(ns.Name).Create(pod); err != nil { if _, err := client.Pods(ns.Name).Create(pod); err != nil {
t.Errorf("Failed to create pod: %v", err) t.Errorf("Failed to create pod: %v", err)
} }
defer deletePodOrErrorf(t, client, ns.Name, pod.Name) defer integration.DeletePodOrErrorf(t, client, ns.Name, pod.Name)
// Create a pod that consumes non-existent secret. // Create a pod that consumes non-existent secret.
pod.ObjectMeta.Name = "uses-non-existent-secret" pod.ObjectMeta.Name = "uses-non-existent-secret"
if _, err := client.Pods(ns.Name).Create(pod); err != nil { if _, err := client.Pods(ns.Name).Create(pod); err != nil {
t.Errorf("Failed to create pod: %v", err) t.Errorf("Failed to create pod: %v", err)
} }
defer deletePodOrErrorf(t, client, ns.Name, pod.Name) defer integration.DeletePodOrErrorf(t, client, ns.Name, pod.Name)
// This pod may fail to run, but we don't currently prevent this, and this // This pod may fail to run, but we don't currently prevent this, and this
// test can't check whether the kubelet actually pulls the secret. // test can't check whether the kubelet actually pulls the secret.
......
...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and ...@@ -16,7 +16,7 @@ See the License for the specific language governing permissions and
limitations under the License. limitations under the License.
*/ */
package integration package serviceaccount
// This file tests authentication and (soon) authorization of HTTP requests to a master object. // This file tests authentication and (soon) authorization of HTTP requests to a master object.
// It does not use the client in pkg/client/... because authentication and authorization needs // It does not use the client in pkg/client/... because authentication and authorization needs
...@@ -47,6 +47,7 @@ import ( ...@@ -47,6 +47,7 @@ import (
"k8s.io/kubernetes/pkg/util/wait" "k8s.io/kubernetes/pkg/util/wait"
serviceaccountadmission "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount" serviceaccountadmission "k8s.io/kubernetes/plugin/pkg/admission/serviceaccount"
"k8s.io/kubernetes/plugin/pkg/auth/authenticator/request/union" "k8s.io/kubernetes/plugin/pkg/auth/authenticator/request/union"
"k8s.io/kubernetes/test/integration"
"k8s.io/kubernetes/test/integration/framework" "k8s.io/kubernetes/test/integration/framework"
) )
...@@ -59,7 +60,7 @@ const ( ...@@ -59,7 +60,7 @@ const (
) )
func init() { func init() {
requireEtcd() integration.RequireEtcd()
} }
func TestServiceAccountAutoCreate(t *testing.T) { func TestServiceAccountAutoCreate(t *testing.T) {
......
...@@ -39,7 +39,7 @@ func newEtcdClient() etcd.Client { ...@@ -39,7 +39,7 @@ func newEtcdClient() etcd.Client {
return client return client
} }
func requireEtcd() { func RequireEtcd() {
if _, err := etcd.NewKeysAPI(newEtcdClient()).Get(context.TODO(), "/", nil); err != nil { if _, err := etcd.NewKeysAPI(newEtcdClient()).Get(context.TODO(), "/", nil); err != nil {
glog.Fatalf("unable to connect to etcd for integration testing: %v", err) glog.Fatalf("unable to connect to etcd for integration testing: %v", err)
} }
...@@ -51,8 +51,21 @@ func withEtcdKey(f func(string)) { ...@@ -51,8 +51,21 @@ func withEtcdKey(f func(string)) {
f(prefix) f(prefix)
} }
func deletePodOrErrorf(t *testing.T, c *client.Client, ns, name string) { func DeletePodOrErrorf(t *testing.T, c *client.Client, ns, name string) {
if err := c.Pods(ns).Delete(name, nil); err != nil { if err := c.Pods(ns).Delete(name, nil); err != nil {
t.Errorf("unable to delete pod %v: %v", name, err) t.Errorf("unable to delete pod %v: %v", name, err)
} }
} }
// Requests to try. Each one should be forbidden or not forbidden
// depending on the authentication and authorization setup of the master.
var Code200 = map[int]bool{200: true}
var Code201 = map[int]bool{201: true}
var Code400 = map[int]bool{400: true}
var Code403 = map[int]bool{403: true}
var Code404 = map[int]bool{404: true}
var Code405 = map[int]bool{405: true}
var Code409 = map[int]bool{409: true}
var Code422 = map[int]bool{422: true}
var Code500 = map[int]bool{500: true}
var Code503 = map[int]bool{503: true}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment