Browse code

dump etcd on test integration failures

deads2k authored on 2016/07/16 02:37:25
Showing 61 changed files
... ...
@@ -189,6 +189,7 @@ func setupAdmissionPluginTestConfig(t *testing.T, value string) string {
189 189
 }
190 190
 
191 191
 func TestKubernetesAdmissionPluginOrderOverride(t *testing.T) {
192
+	defer testutil.DumpEtcdOnFailure(t)
192 193
 	registerAdmissionPlugins(t, "plugin1", "plugin2", "plugin3")
193 194
 	kubeClient, _ := setupAdmissionTest(t, func(config *configapi.MasterConfig) {
194 195
 		config.KubernetesMasterConfig.AdmissionConfig.PluginOrderOverride = []string{"plugin1", "plugin2"}
... ...
@@ -204,6 +205,7 @@ func TestKubernetesAdmissionPluginOrderOverride(t *testing.T) {
204 204
 }
205 205
 
206 206
 func TestKubernetesAdmissionPluginConfigFile(t *testing.T) {
207
+	defer testutil.DumpEtcdOnFailure(t)
207 208
 	registerAdmissionPluginTestConfigType()
208 209
 	configFile := setupAdmissionPluginTestConfig(t, "plugin1configvalue")
209 210
 	registerAdmissionPlugins(t, "plugin1", "plugin2")
... ...
@@ -222,6 +224,7 @@ func TestKubernetesAdmissionPluginConfigFile(t *testing.T) {
222 222
 }
223 223
 
224 224
 func TestKubernetesAdmissionPluginEmbeddedConfig(t *testing.T) {
225
+	defer testutil.DumpEtcdOnFailure(t)
225 226
 	registerAdmissionPluginTestConfigType()
226 227
 	registerAdmissionPlugins(t, "plugin1", "plugin2")
227 228
 	kubeClient, _ := setupAdmissionTest(t, func(config *configapi.MasterConfig) {
... ...
@@ -241,6 +244,7 @@ func TestKubernetesAdmissionPluginEmbeddedConfig(t *testing.T) {
241 241
 }
242 242
 
243 243
 func TestOpenshiftAdmissionPluginOrderOverride(t *testing.T) {
244
+	defer testutil.DumpEtcdOnFailure(t)
244 245
 	registerAdmissionPlugins(t, "plugin1", "plugin2", "plugin3")
245 246
 	_, openshiftClient := setupAdmissionTest(t, func(config *configapi.MasterConfig) {
246 247
 		config.AdmissionConfig.PluginOrderOverride = []string{"plugin1", "plugin2"}
... ...
@@ -256,6 +260,7 @@ func TestOpenshiftAdmissionPluginOrderOverride(t *testing.T) {
256 256
 }
257 257
 
258 258
 func TestOpenshiftAdmissionPluginConfigFile(t *testing.T) {
259
+	defer testutil.DumpEtcdOnFailure(t)
259 260
 	registerAdmissionPluginTestConfigType()
260 261
 	configFile := setupAdmissionPluginTestConfig(t, "plugin2configvalue")
261 262
 	registerAdmissionPlugins(t, "plugin1", "plugin2")
... ...
@@ -274,6 +279,7 @@ func TestOpenshiftAdmissionPluginConfigFile(t *testing.T) {
274 274
 }
275 275
 
276 276
 func TestOpenshiftAdmissionPluginEmbeddedConfig(t *testing.T) {
277
+	defer testutil.DumpEtcdOnFailure(t)
277 278
 	registerAdmissionPluginTestConfigType()
278 279
 	registerAdmissionPlugins(t, "plugin1", "plugin2")
279 280
 	_, openshiftClient := setupAdmissionTest(t, func(config *configapi.MasterConfig) {
... ...
@@ -294,6 +300,8 @@ func TestOpenshiftAdmissionPluginEmbeddedConfig(t *testing.T) {
294 294
 
295 295
 func TestAlwaysPullImagesOn(t *testing.T) {
296 296
 	testutil.RequireEtcd(t)
297
+	defer testutil.DumpEtcdOnFailure(t)
298
+
297 299
 	masterConfig, err := testserver.DefaultMasterOptions()
298 300
 	if err != nil {
299 301
 		t.Fatalf("error creating config: %v", err)
... ...
@@ -343,6 +351,8 @@ func TestAlwaysPullImagesOn(t *testing.T) {
343 343
 
344 344
 func TestAlwaysPullImagesOff(t *testing.T) {
345 345
 	testutil.RequireEtcd(t)
346
+	defer testutil.DumpEtcdOnFailure(t)
347
+
346 348
 	_, kubeConfigFile, err := testserver.StartTestMaster()
347 349
 	if err != nil {
348 350
 		t.Fatalf("error starting server: %v", err)
... ...
@@ -20,6 +20,8 @@ import (
20 20
 
21 21
 func TestRootAPIPaths(t *testing.T) {
22 22
 	testutil.RequireEtcd(t)
23
+	defer testutil.DumpEtcdOnFailure(t)
24
+
23 25
 	masterConfig, adminConfigFile, err := testserver.StartTestMaster()
24 26
 	if err != nil {
25 27
 		t.Fatalf("unexpected error starting test master: %v", err)
... ...
@@ -36,6 +36,7 @@ func setupAuditTest(t *testing.T) (*kclient.Client, *client.Client) {
36 36
 
37 37
 func TestBasicFunctionalityWithAudit(t *testing.T) {
38 38
 	kubeClient, _ := setupAuditTest(t)
39
+	defer testutil.DumpEtcdOnFailure(t)
39 40
 
40 41
 	if _, err := kubeClient.Pods(kapi.NamespaceDefault).Watch(kapi.ListOptions{}); err != nil {
41 42
 		t.Errorf("Unexpected error watching pods: %v", err)
... ...
@@ -35,6 +35,8 @@ func TestAuthProxyOnAuthorize(t *testing.T) {
35 35
 	idp.MappingMethod = "claim"
36 36
 
37 37
 	testutil.RequireEtcd(t)
38
+	defer testutil.DumpEtcdOnFailure(t)
39
+
38 40
 	masterConfig, err := testserver.DefaultMasterOptions()
39 41
 	if err != nil {
40 42
 		t.Fatal(err)
... ...
@@ -30,6 +30,8 @@ import (
30 30
 
31 31
 func TestClusterReaderCoverage(t *testing.T) {
32 32
 	testutil.RequireEtcd(t)
33
+	defer testutil.DumpEtcdOnFailure(t)
34
+
33 35
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
34 36
 	if err != nil {
35 37
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -114,6 +116,8 @@ func TestClusterReaderCoverage(t *testing.T) {
114 114
 
115 115
 func TestAuthorizationRestrictedAccessForProjectAdmins(t *testing.T) {
116 116
 	testutil.RequireEtcd(t)
117
+	defer testutil.DumpEtcdOnFailure(t)
118
+
117 119
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
118 120
 	if err != nil {
119 121
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -185,6 +189,8 @@ func waitForProject(t *testing.T, client client.Interface, projectName string, d
185 185
 
186 186
 func TestAuthorizationResolution(t *testing.T) {
187 187
 	testutil.RequireEtcd(t)
188
+	defer testutil.DumpEtcdOnFailure(t)
189
+
188 190
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
189 191
 	if err != nil {
190 192
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -373,7 +379,7 @@ func (test localResourceAccessReviewTest) run(t *testing.T) {
373 373
 
374 374
 func TestAuthorizationResourceAccessReview(t *testing.T) {
375 375
 	testutil.RequireEtcd(t)
376
-	defer testutil.DumpEtcdOnFailure(t, "TestAuthorizationResourceAccessReview")
376
+	defer testutil.DumpEtcdOnFailure(t)
377 377
 
378 378
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
379 379
 	if err != nil {
... ...
@@ -567,6 +573,7 @@ func (test subjectAccessReviewTest) run(t *testing.T) {
567 567
 
568 568
 func TestAuthorizationSubjectAccessReviewAPIGroup(t *testing.T) {
569 569
 	testutil.RequireEtcd(t)
570
+	defer testutil.DumpEtcdOnFailure(t)
570 571
 
571 572
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
572 573
 	if err != nil {
... ...
@@ -695,6 +702,8 @@ func TestAuthorizationSubjectAccessReviewAPIGroup(t *testing.T) {
695 695
 
696 696
 func TestAuthorizationSubjectAccessReview(t *testing.T) {
697 697
 	testutil.RequireEtcd(t)
698
+	defer testutil.DumpEtcdOnFailure(t)
699
+
698 700
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
699 701
 	if err != nil {
700 702
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -979,6 +988,8 @@ func TestAuthorizationSubjectAccessReview(t *testing.T) {
979 979
 // this is needed to support old docker registry images
980 980
 func TestOldLocalSubjectAccessReviewEndpoint(t *testing.T) {
981 981
 	testutil.RequireEtcd(t)
982
+	defer testutil.DumpEtcdOnFailure(t)
983
+
982 984
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
983 985
 	if err != nil {
984 986
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -1106,6 +1117,8 @@ func TestOldLocalSubjectAccessReviewEndpoint(t *testing.T) {
1106 1106
 // this is needed to support old who-can client
1107 1107
 func TestOldLocalResourceAccessReviewEndpoint(t *testing.T) {
1108 1108
 	testutil.RequireEtcd(t)
1109
+	defer testutil.DumpEtcdOnFailure(t)
1110
+
1109 1111
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
1110 1112
 	if err != nil {
1111 1113
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -23,6 +23,8 @@ import (
23 23
 
24 24
 func TestBootstrapPolicyAuthenticatedUsersAgainstOpenshiftNamespace(t *testing.T) {
25 25
 	testutil.RequireEtcd(t)
26
+	defer testutil.DumpEtcdOnFailure(t)
27
+
26 28
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
27 29
 	if err != nil {
28 30
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -79,6 +81,8 @@ func TestBootstrapPolicyAuthenticatedUsersAgainstOpenshiftNamespace(t *testing.T
79 79
 
80 80
 func TestBootstrapPolicyOverwritePolicyCommand(t *testing.T) {
81 81
 	testutil.RequireEtcd(t)
82
+	defer testutil.DumpEtcdOnFailure(t)
83
+
82 84
 	masterConfig, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
83 85
 	if err != nil {
84 86
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -121,6 +125,8 @@ func TestBootstrapPolicyOverwritePolicyCommand(t *testing.T) {
121 121
 
122 122
 func TestBootstrapPolicySelfSubjectAccessReviews(t *testing.T) {
123 123
 	testutil.RequireEtcd(t)
124
+	defer testutil.DumpEtcdOnFailure(t)
125
+
124 126
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
125 127
 	if err != nil {
126 128
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -180,6 +186,8 @@ func TestBootstrapPolicySelfSubjectAccessReviews(t *testing.T) {
180 180
 
181 181
 func TestSelfSubjectAccessReviewsNonExistingNamespace(t *testing.T) {
182 182
 	testutil.RequireEtcd(t)
183
+	defer testutil.DumpEtcdOnFailure(t)
184
+
183 185
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
184 186
 	if err != nil {
185 187
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -19,6 +19,7 @@ import (
19 19
 )
20 20
 
21 21
 func TestPolicyBasedRestrictionOfBuildCreateAndCloneByStrategy(t *testing.T) {
22
+	defer testutil.DumpEtcdOnFailure(t)
22 23
 	clusterAdminClient, projectAdminClient, projectEditorClient := setupBuildStrategyTest(t, false)
23 24
 
24 25
 	clients := map[string]*client.Client{"admin": projectAdminClient, "editor": projectEditorClient}
... ...
@@ -74,6 +75,7 @@ func TestPolicyBasedRestrictionOfBuildCreateAndCloneByStrategy(t *testing.T) {
74 74
 }
75 75
 
76 76
 func TestPolicyBasedRestrictionOfBuildConfigCreateAndInstantiateByStrategy(t *testing.T) {
77
+	defer testutil.DumpEtcdOnFailure(t)
77 78
 	clusterAdminClient, projectAdminClient, projectEditorClient := setupBuildStrategyTest(t, true)
78 79
 
79 80
 	clients := map[string]*client.Client{"admin": projectAdminClient, "editor": projectEditorClient}
... ...
@@ -81,6 +81,7 @@ func mockBuild() *buildapi.Build {
81 81
 // TestConcurrentBuildControllers tests the transition of a build from new to pending. Ensures that only a single New -> Pending
82 82
 // transition happens and that only a single pod is created during a set period of time.
83 83
 func TestConcurrentBuildControllers(t *testing.T) {
84
+	defer testutil.DumpEtcdOnFailure(t)
84 85
 	// Start a master with multiple BuildControllers
85 86
 	osClient, kClient := setupBuildControllerTest(controllerCount{BuildControllers: 5}, t)
86 87
 
... ...
@@ -161,6 +162,7 @@ type buildControllerPodTest struct {
161 161
 
162 162
 // TestConcurrentBuildPodControllers tests the lifecycle of a build pod when running multiple controllers.
163 163
 func TestConcurrentBuildPodControllers(t *testing.T) {
164
+	defer testutil.DumpEtcdOnFailure(t)
164 165
 	// Start a master with multiple BuildPodControllers
165 166
 	osClient, kClient := setupBuildControllerTest(controllerCount{BuildPodControllers: 5}, t)
166 167
 
... ...
@@ -309,6 +311,7 @@ func TestConcurrentBuildPodControllers(t *testing.T) {
309 309
 }
310 310
 
311 311
 func TestConcurrentBuildImageChangeTriggerControllers(t *testing.T) {
312
+	defer testutil.DumpEtcdOnFailure(t)
312 313
 	// Start a master with multiple ImageChangeTrigger controllers
313 314
 	osClient, _ := setupBuildControllerTest(controllerCount{ImageChangeControllers: 5}, t)
314 315
 	tag := "latest"
... ...
@@ -322,21 +325,25 @@ func TestConcurrentBuildImageChangeTriggerControllers(t *testing.T) {
322 322
 }
323 323
 
324 324
 func TestBuildDeleteController(t *testing.T) {
325
+	defer testutil.DumpEtcdOnFailure(t)
325 326
 	osClient, kClient := setupBuildControllerTest(controllerCount{}, t)
326 327
 	runBuildDeleteTest(t, osClient, kClient)
327 328
 }
328 329
 
329 330
 func TestBuildRunningPodDeleteController(t *testing.T) {
331
+	defer testutil.DumpEtcdOnFailure(t)
330 332
 	osClient, kClient := setupBuildControllerTest(controllerCount{}, t)
331 333
 	runBuildRunningPodDeleteTest(t, osClient, kClient)
332 334
 }
333 335
 
334 336
 func TestBuildCompletePodDeleteController(t *testing.T) {
337
+	defer testutil.DumpEtcdOnFailure(t)
335 338
 	osClient, kClient := setupBuildControllerTest(controllerCount{}, t)
336 339
 	runBuildCompletePodDeleteTest(t, osClient, kClient)
337 340
 }
338 341
 
339 342
 func TestConcurrentBuildConfigControllers(t *testing.T) {
343
+	defer testutil.DumpEtcdOnFailure(t)
340 344
 	osClient, kClient := setupBuildControllerTest(controllerCount{ConfigChangeControllers: 5}, t)
341 345
 	runBuildConfigChangeControllerTest(t, osClient, kClient)
342 346
 }
... ...
@@ -26,6 +26,7 @@ import (
26 26
 var buildPodAdmissionTestTimeout time.Duration = 10 * time.Second
27 27
 
28 28
 func TestBuildDefaultGitHTTPProxy(t *testing.T) {
29
+	defer testutil.DumpEtcdOnFailure(t)
29 30
 	httpProxy := "http://my.test.proxy:12345"
30 31
 	oclient, kclient := setupBuildDefaultsAdmissionTest(t, &defaultsapi.BuildDefaultsConfig{
31 32
 		GitHTTPProxy: httpProxy,
... ...
@@ -37,6 +38,7 @@ func TestBuildDefaultGitHTTPProxy(t *testing.T) {
37 37
 }
38 38
 
39 39
 func TestBuildDefaultGitHTTPSProxy(t *testing.T) {
40
+	defer testutil.DumpEtcdOnFailure(t)
40 41
 	httpsProxy := "https://my.test.proxy:12345"
41 42
 	oclient, kclient := setupBuildDefaultsAdmissionTest(t, &defaultsapi.BuildDefaultsConfig{
42 43
 		GitHTTPSProxy: httpsProxy,
... ...
@@ -48,6 +50,7 @@ func TestBuildDefaultGitHTTPSProxy(t *testing.T) {
48 48
 }
49 49
 
50 50
 func TestBuildDefaultEnvironment(t *testing.T) {
51
+	defer testutil.DumpEtcdOnFailure(t)
51 52
 	env := []kapi.EnvVar{
52 53
 		{
53 54
 			Name:  "VAR1",
... ...
@@ -68,6 +71,7 @@ func TestBuildDefaultEnvironment(t *testing.T) {
68 68
 }
69 69
 
70 70
 func TestBuildOverrideForcePull(t *testing.T) {
71
+	defer testutil.DumpEtcdOnFailure(t)
71 72
 	oclient, kclient := setupBuildOverridesAdmissionTest(t, &overridesapi.BuildOverridesConfig{
72 73
 		ForcePull: true,
73 74
 	})
... ...
@@ -78,6 +82,7 @@ func TestBuildOverrideForcePull(t *testing.T) {
78 78
 }
79 79
 
80 80
 func TestBuildOverrideForcePullCustomStrategy(t *testing.T) {
81
+	defer testutil.DumpEtcdOnFailure(t)
81 82
 	oclient, kclient := setupBuildOverridesAdmissionTest(t, &overridesapi.BuildOverridesConfig{
82 83
 		ForcePull: true,
83 84
 	})
... ...
@@ -15,6 +15,7 @@ import (
15 15
 
16 16
 func TestCLIGetToken(t *testing.T) {
17 17
 	testutil.RequireEtcd(t)
18
+	defer testutil.DumpEtcdOnFailure(t)
18 19
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
19 20
 	if err != nil {
20 21
 		t.Fatal(err)
... ...
@@ -21,6 +21,7 @@ import (
21 21
 
22 22
 func TestClusterQuota(t *testing.T) {
23 23
 	testutil.RequireEtcd(t)
24
+	defer testutil.DumpEtcdOnFailure(t)
24 25
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
25 26
 	if err != nil {
26 27
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -19,6 +19,7 @@ import (
19 19
 )
20 20
 
21 21
 func TestClusterResourceOverridePluginWithNoLimits(t *testing.T) {
22
+	defer testutil.DumpEtcdOnFailure(t)
22 23
 	config := &overrideapi.ClusterResourceOverrideConfig{
23 24
 		LimitCPUToMemoryPercent:     100,
24 25
 		CPURequestToLimitPercent:    50,
... ...
@@ -45,6 +46,7 @@ func TestClusterResourceOverridePluginWithNoLimits(t *testing.T) {
45 45
 }
46 46
 
47 47
 func TestClusterResourceOverridePluginWithLimits(t *testing.T) {
48
+	defer testutil.DumpEtcdOnFailure(t)
48 49
 	config := &overrideapi.ClusterResourceOverrideConfig{
49 50
 		LimitCPUToMemoryPercent:     100,
50 51
 		CPURequestToLimitPercent:    50,
... ...
@@ -19,6 +19,7 @@ func TestDeployScale(t *testing.T) {
19 19
 	const namespace = "test-deploy-scale"
20 20
 
21 21
 	testutil.RequireEtcd(t)
22
+	defer testutil.DumpEtcdOnFailure(t)
22 23
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
23 24
 	if err != nil {
24 25
 		t.Fatal(err)
... ...
@@ -26,6 +26,7 @@ func TestTriggers_manual(t *testing.T) {
26 26
 	const namespace = "test-triggers-manual"
27 27
 
28 28
 	testutil.RequireEtcd(t)
29
+	defer testutil.DumpEtcdOnFailure(t)
29 30
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
30 31
 	if err != nil {
31 32
 		t.Fatal(err)
... ...
@@ -103,6 +104,7 @@ func TestTriggers_manual(t *testing.T) {
103 103
 // will start a new deployment when an image change happens.
104 104
 func TestTriggers_imageChange(t *testing.T) {
105 105
 	testutil.RequireEtcd(t)
106
+	defer testutil.DumpEtcdOnFailure(t)
106 107
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
107 108
 	if err != nil {
108 109
 		t.Fatalf("error starting master: %v", err)
... ...
@@ -208,6 +210,7 @@ waitForNewConfig:
208 208
 // trigger will have its image updated without starting a new deployment.
209 209
 func TestTriggers_imageChange_nonAutomatic(t *testing.T) {
210 210
 	testutil.RequireEtcd(t)
211
+	defer testutil.DumpEtcdOnFailure(t)
211 212
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
212 213
 	if err != nil {
213 214
 		t.Fatalf("error starting master: %v", err)
... ...
@@ -353,6 +356,7 @@ out:
353 353
 // will start a new deployment iff all images are resolved.
354 354
 func TestTriggers_MultipleICTs(t *testing.T) {
355 355
 	testutil.RequireEtcd(t)
356
+	defer testutil.DumpEtcdOnFailure(t)
356 357
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
357 358
 	if err != nil {
358 359
 		t.Fatalf("error starting master: %v", err)
... ...
@@ -508,6 +512,7 @@ func TestTriggers_configChange(t *testing.T) {
508 508
 	const namespace = "test-triggers-configchange"
509 509
 
510 510
 	testutil.RequireEtcd(t)
511
+	defer testutil.DumpEtcdOnFailure(t)
511 512
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
512 513
 	if err != nil {
513 514
 		t.Fatal(err)
... ...
@@ -18,6 +18,7 @@ import (
18 18
 
19 19
 func TestDiagNodeConditions(t *testing.T) {
20 20
 	testutil.RequireEtcd(t)
21
+	defer testutil.DumpEtcdOnFailure(t)
21 22
 	_, nodeConfig, clientFile, err := testserver.StartTestAllInOne()
22 23
 	if err != nil {
23 24
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -16,6 +16,7 @@ import (
16 16
 
17 17
 func TestDiscoveryGroupVersions(t *testing.T) {
18 18
 	testutil.RequireEtcd(t)
19
+	defer testutil.DumpEtcdOnFailure(t)
19 20
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
20 21
 	if err != nil {
21 22
 		t.Fatalf("unexpected error starting test master: %v", err)
... ...
@@ -22,6 +22,7 @@ import (
22 22
 
23 23
 func TestDNS(t *testing.T) {
24 24
 	testutil.RequireEtcd(t)
25
+	defer testutil.DumpEtcdOnFailure(t)
25 26
 	masterConfig, clientFile, err := testserver.StartTestMaster()
26 27
 	if err != nil {
27 28
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -55,6 +55,7 @@ func testOne(t *testing.T, client *kclient.Client, namespace, addrType string, s
55 55
 
56 56
 func TestEndpointAdmission(t *testing.T) {
57 57
 	testutil.RequireEtcd(t)
58
+	defer testutil.DumpEtcdOnFailure(t)
58 59
 	masterConfig, err := testserver.DefaultMasterOptions()
59 60
 	if err != nil {
60 61
 		t.Fatalf("error creating config: %v", err)
... ...
@@ -21,6 +21,7 @@ func TestExtensionsAPIDeletion(t *testing.T) {
21 21
 	const projName = "ext-deletion-proj"
22 22
 
23 23
 	testutil.RequireEtcd(t)
24
+	defer testutil.DumpEtcdOnFailure(t)
24 25
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
25 26
 	if err != nil {
26 27
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -19,6 +19,7 @@ func TestExtensionsAPIDisabledAutoscaleBatchEnabled(t *testing.T) {
19 19
 	const projName = "ext-disabled-batch-enabled-proj"
20 20
 
21 21
 	testutil.RequireEtcd(t)
22
+	defer testutil.DumpEtcdOnFailure(t)
22 23
 	masterConfig, err := testserver.DefaultMasterOptions()
23 24
 	if err != nil {
24 25
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -147,6 +148,7 @@ func TestExtensionsAPIDisabled(t *testing.T) {
147 147
 	const projName = "ext-disabled-proj"
148 148
 
149 149
 	testutil.RequireEtcd(t)
150
+	defer testutil.DumpEtcdOnFailure(t)
150 151
 	masterConfig, err := testserver.DefaultMasterOptions()
151 152
 	if err != nil {
152 153
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -22,6 +22,7 @@ import (
22 22
 
23 23
 func TestExternalKube(t *testing.T) {
24 24
 	testutil.RequireEtcd(t)
25
+	defer testutil.DumpEtcdOnFailure(t)
25 26
 	// Start one OpenShift master as "cluster1" to play the external kube server
26 27
 	cluster1MasterConfig, cluster1AdminConfigFile, err := testserver.StartTestMasterAPI()
27 28
 	if err != nil {
... ...
@@ -19,6 +19,7 @@ import (
19 19
 
20 20
 func TestBasicUserBasedGroupManipulation(t *testing.T) {
21 21
 	testutil.RequireEtcd(t)
22
+	defer testutil.DumpEtcdOnFailure(t)
22 23
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
23 24
 	if err != nil {
24 25
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -107,6 +108,7 @@ func TestBasicUserBasedGroupManipulation(t *testing.T) {
107 107
 
108 108
 func TestBasicGroupManipulation(t *testing.T) {
109 109
 	testutil.RequireEtcd(t)
110
+	defer testutil.DumpEtcdOnFailure(t)
110 111
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
111 112
 	if err != nil {
112 113
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -177,6 +179,7 @@ func TestBasicGroupManipulation(t *testing.T) {
177 177
 
178 178
 func TestGroupCommands(t *testing.T) {
179 179
 	testutil.RequireEtcd(t)
180
+	defer testutil.DumpEtcdOnFailure(t)
180 181
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
181 182
 	if err != nil {
182 183
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -21,6 +21,7 @@ const (
21 21
 )
22 22
 
23 23
 func TestSimpleImageChangeBuildTriggerFromImageStreamTagSTI(t *testing.T) {
24
+	defer testutil.DumpEtcdOnFailure(t)
24 25
 	projectAdminClient := setup(t)
25 26
 	imageStream := mockImageStream2(tag)
26 27
 	imageStreamMapping := mockImageStreamMapping(imageStream.Name, "someimage", tag, "registry:8080/openshift/test-image-trigger:"+tag)
... ...
@@ -30,6 +31,7 @@ func TestSimpleImageChangeBuildTriggerFromImageStreamTagSTI(t *testing.T) {
30 30
 }
31 31
 
32 32
 func TestSimpleImageChangeBuildTriggerFromImageStreamTagSTIWithConfigChange(t *testing.T) {
33
+	defer testutil.DumpEtcdOnFailure(t)
33 34
 	projectAdminClient := setup(t)
34 35
 	imageStream := mockImageStream2(tag)
35 36
 	imageStreamMapping := mockImageStreamMapping(imageStream.Name, "someimage", tag, "registry:8080/openshift/test-image-trigger:"+tag)
... ...
@@ -39,6 +41,7 @@ func TestSimpleImageChangeBuildTriggerFromImageStreamTagSTIWithConfigChange(t *t
39 39
 }
40 40
 
41 41
 func TestSimpleImageChangeBuildTriggerFromImageStreamTagDocker(t *testing.T) {
42
+	defer testutil.DumpEtcdOnFailure(t)
42 43
 	projectAdminClient := setup(t)
43 44
 	imageStream := mockImageStream2(tag)
44 45
 	imageStreamMapping := mockImageStreamMapping(imageStream.Name, "someimage", tag, "registry:8080/openshift/test-image-trigger:"+tag)
... ...
@@ -48,6 +51,7 @@ func TestSimpleImageChangeBuildTriggerFromImageStreamTagDocker(t *testing.T) {
48 48
 }
49 49
 
50 50
 func TestSimpleImageChangeBuildTriggerFromImageStreamTagDockerWithConfigChange(t *testing.T) {
51
+	defer testutil.DumpEtcdOnFailure(t)
51 52
 	projectAdminClient := setup(t)
52 53
 	imageStream := mockImageStream2(tag)
53 54
 	imageStreamMapping := mockImageStreamMapping(imageStream.Name, "someimage", tag, "registry:8080/openshift/test-image-trigger:"+tag)
... ...
@@ -57,6 +61,7 @@ func TestSimpleImageChangeBuildTriggerFromImageStreamTagDockerWithConfigChange(t
57 57
 }
58 58
 
59 59
 func TestSimpleImageChangeBuildTriggerFromImageStreamTagCustom(t *testing.T) {
60
+	defer testutil.DumpEtcdOnFailure(t)
60 61
 	projectAdminClient := setup(t)
61 62
 	imageStream := mockImageStream2(tag)
62 63
 	imageStreamMapping := mockImageStreamMapping(imageStream.Name, "someimage", tag, "registry:8080/openshift/test-image-trigger:"+tag)
... ...
@@ -66,6 +71,7 @@ func TestSimpleImageChangeBuildTriggerFromImageStreamTagCustom(t *testing.T) {
66 66
 }
67 67
 
68 68
 func TestSimpleImageChangeBuildTriggerFromImageStreamTagCustomWithConfigChange(t *testing.T) {
69
+	defer testutil.DumpEtcdOnFailure(t)
69 70
 	projectAdminClient := setup(t)
70 71
 	imageStream := mockImageStream2(tag)
71 72
 	imageStreamMapping := mockImageStreamMapping(imageStream.Name, "someimage", tag, "registry:8080/openshift/test-image-trigger:"+tag)
... ...
@@ -364,6 +370,7 @@ func runTest(t *testing.T, testname string, projectAdminClient *client.Client, i
364 364
 }
365 365
 
366 366
 func TestMultipleImageChangeBuildTriggers(t *testing.T) {
367
+	defer testutil.DumpEtcdOnFailure(t)
367 368
 	mockImageStream := func(name, tag string) *imageapi.ImageStream {
368 369
 		return &imageapi.ImageStream{
369 370
 			ObjectMeta: kapi.ObjectMeta{Name: name},
... ...
@@ -34,6 +34,7 @@ import (
34 34
 
35 35
 func TestImageStreamImport(t *testing.T) {
36 36
 	testutil.RequireEtcd(t)
37
+	defer testutil.DumpEtcdOnFailure(t)
37 38
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
38 39
 	if err != nil {
39 40
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -197,6 +198,7 @@ func TestImageStreamImportOfV1ImageFromV2Repository(t *testing.T) {
197 197
 	}
198 198
 
199 199
 	testutil.RequireEtcd(t)
200
+	defer testutil.DumpEtcdOnFailure(t)
200 201
 
201 202
 	// start regular HTTP servers
202 203
 	requireAuth := false
... ...
@@ -318,6 +320,7 @@ func TestImageStreamImportOfV1ImageFromV2Repository(t *testing.T) {
318 318
 
319 319
 func TestImageStreamImportAuthenticated(t *testing.T) {
320 320
 	testutil.RequireEtcd(t)
321
+	defer testutil.DumpEtcdOnFailure(t)
321 322
 	// start regular HTTP servers
322 323
 	count := 0
323 324
 	server := httptest.NewServer(mockRegistryHandler(t, true, &count))
... ...
@@ -484,6 +487,7 @@ func TestImageStreamImportAuthenticated(t *testing.T) {
484 484
 // repository.
485 485
 func TestImageStreamImportTagsFromRepository(t *testing.T) {
486 486
 	testutil.RequireEtcd(t)
487
+	defer testutil.DumpEtcdOnFailure(t)
487 488
 	// start regular HTTP servers
488 489
 	count := 0
489 490
 	server := httptest.NewServer(mockRegistryHandler(t, false, &count))
... ...
@@ -584,6 +588,7 @@ func TestImageStreamImportTagsFromRepository(t *testing.T) {
584 584
 // error occurs writes the error only once (instead of every interval)
585 585
 func TestImageStreamImportScheduled(t *testing.T) {
586 586
 	testutil.RequireEtcd(t)
587
+	defer testutil.DumpEtcdOnFailure(t)
587 588
 	written := make(chan struct{}, 1)
588 589
 	count := 0
589 590
 	server := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
... ...
@@ -21,6 +21,7 @@ import (
21 21
 const limitRangeName = "limits"
22 22
 
23 23
 func TestImageStreamTagsAdmission(t *testing.T) {
24
+	defer testutil.DumpEtcdOnFailure(t)
24 25
 	kClient, client := setupImageStreamAdmissionTest(t)
25 26
 
26 27
 	for i, name := range []string{imagetest.BaseImageWith1LayerDigest, imagetest.BaseImageWith2LayersDigest, imagetest.MiscImageDigest} {
... ...
@@ -216,6 +217,7 @@ func TestImageStreamTagsAdmission(t *testing.T) {
216 216
 }
217 217
 
218 218
 func TestImageStreamAdmitSpecUpdate(t *testing.T) {
219
+	defer testutil.DumpEtcdOnFailure(t)
219 220
 	kClient, client := setupImageStreamAdmissionTest(t)
220 221
 
221 222
 	for i, name := range []string{imagetest.BaseImageWith1LayerDigest, imagetest.BaseImageWith2LayersDigest} {
... ...
@@ -354,6 +356,7 @@ func TestImageStreamAdmitSpecUpdate(t *testing.T) {
354 354
 }
355 355
 
356 356
 func TestImageStreamAdmitStatusUpdate(t *testing.T) {
357
+	defer testutil.DumpEtcdOnFailure(t)
357 358
 	kClient, client := setupImageStreamAdmissionTest(t)
358 359
 	images := []*imageapi.Image{}
359 360
 
... ...
@@ -20,6 +20,7 @@ import (
20 20
 
21 21
 func TestImageStreamList(t *testing.T) {
22 22
 	testutil.RequireEtcd(t)
23
+	defer testutil.DumpEtcdOnFailure(t)
23 24
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
24 25
 	if err != nil {
25 26
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -49,6 +50,7 @@ func mockImageStream() *imageapi.ImageStream {
49 49
 
50 50
 func TestImageStreamCreate(t *testing.T) {
51 51
 	testutil.RequireEtcd(t)
52
+	defer testutil.DumpEtcdOnFailure(t)
52 53
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
53 54
 	if err != nil {
54 55
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -96,6 +98,7 @@ func TestImageStreamCreate(t *testing.T) {
96 96
 
97 97
 func TestImageStreamMappingCreate(t *testing.T) {
98 98
 	testutil.RequireEtcd(t)
99
+	defer testutil.DumpEtcdOnFailure(t)
99 100
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
100 101
 	if err != nil {
101 102
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -283,6 +286,7 @@ func TestImageStreamMappingCreate(t *testing.T) {
283 283
 
284 284
 func TestImageStreamTagLifecycleHook(t *testing.T) {
285 285
 	testutil.RequireEtcd(t)
286
+	defer testutil.DumpEtcdOnFailure(t)
286 287
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
287 288
 	if err != nil {
288 289
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -15,6 +15,7 @@ import (
15 15
 
16 16
 func TestLeaderLeaseAcquire(t *testing.T) {
17 17
 	testutil.RequireEtcd(t)
18
+	defer testutil.DumpEtcdOnFailure(t)
18 19
 	client := testutil.NewEtcdClient()
19 20
 
20 21
 	key := "/random/key"
... ...
@@ -52,6 +53,7 @@ func TestLeaderLeaseAcquire(t *testing.T) {
52 52
 
53 53
 func TestLeaderLeaseWait(t *testing.T) {
54 54
 	testutil.RequireEtcd(t)
55
+	defer testutil.DumpEtcdOnFailure(t)
55 56
 	client := testutil.NewEtcdClient()
56 57
 	key := "/random/key"
57 58
 
... ...
@@ -93,6 +95,7 @@ func TestLeaderLeaseWait(t *testing.T) {
93 93
 
94 94
 func TestLeaderLeaseSwapWhileWaiting(t *testing.T) {
95 95
 	testutil.RequireEtcd(t)
96
+	defer testutil.DumpEtcdOnFailure(t)
96 97
 	client := testutil.NewEtcdClient()
97 98
 	key := "/random/key"
98 99
 
... ...
@@ -124,6 +127,7 @@ func TestLeaderLeaseSwapWhileWaiting(t *testing.T) {
124 124
 
125 125
 func TestLeaderLeaseReacquire(t *testing.T) {
126 126
 	testutil.RequireEtcd(t)
127
+	defer testutil.DumpEtcdOnFailure(t)
127 128
 	client := testutil.NewEtcdClient()
128 129
 	key := "/random/key"
129 130
 
... ...
@@ -24,6 +24,7 @@ import (
24 24
 
25 25
 func TestLogin(t *testing.T) {
26 26
 	testutil.RequireEtcd(t)
27
+	defer testutil.DumpEtcdOnFailure(t)
27 28
 	clientcmd.DefaultCluster = clientcmdapi.Cluster{Server: ""}
28 29
 
29 30
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
... ...
@@ -11,6 +11,7 @@ import (
11 11
 
12 12
 func TestNamespaceLifecycleAdmission(t *testing.T) {
13 13
 	testutil.RequireEtcd(t)
14
+	defer testutil.DumpEtcdOnFailure(t)
14 15
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
15 16
 	if err != nil {
16 17
 		t.Fatal(err)
... ...
@@ -28,6 +28,7 @@ type testRequest struct {
28 28
 
29 29
 func TestNodeAuth(t *testing.T) {
30 30
 	testutil.RequireEtcd(t)
31
+	defer testutil.DumpEtcdOnFailure(t)
31 32
 	// Server config
32 33
 	masterConfig, nodeConfig, adminKubeConfigFile, err := testserver.StartTestAllInOne()
33 34
 	if err != nil {
... ...
@@ -309,6 +309,7 @@ func TestOAuthBasicAuthPassword(t *testing.T) {
309 309
 
310 310
 	// Build master config
311 311
 	testutil.RequireEtcd(t)
312
+	defer testutil.DumpEtcdOnFailure(t)
312 313
 	masterOptions, err := testserver.DefaultMasterOptions()
313 314
 	if err != nil {
314 315
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -40,6 +40,7 @@ func TestOAuthCertFallback(t *testing.T) {
40 40
 	)
41 41
 
42 42
 	testutil.RequireEtcd(t)
43
+	defer testutil.DumpEtcdOnFailure(t)
43 44
 	// Build master config
44 45
 	masterOptions, err := testserver.DefaultMasterOptions()
45 46
 	if err != nil {
... ...
@@ -15,6 +15,7 @@ import (
15 15
 
16 16
 func TestOAuthDisabled(t *testing.T) {
17 17
 	testutil.RequireEtcd(t)
18
+	defer testutil.DumpEtcdOnFailure(t)
18 19
 	// Build master config
19 20
 	masterOptions, err := testserver.DefaultMasterOptions()
20 21
 	if err != nil {
... ...
@@ -24,6 +24,7 @@ func TestOAuthHTPasswd(t *testing.T) {
24 24
 	defer os.Remove(htpasswdFile.Name())
25 25
 
26 26
 	testutil.RequireEtcd(t)
27
+	defer testutil.DumpEtcdOnFailure(t)
27 28
 	masterOptions, err := testserver.DefaultMasterOptions()
28 29
 	if err != nil {
29 30
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -82,6 +82,7 @@ func TestOAuthLDAP(t *testing.T) {
82 82
 	defer ldapServer.Stop()
83 83
 
84 84
 	testutil.RequireEtcd(t)
85
+	defer testutil.DumpEtcdOnFailure(t)
85 86
 	masterOptions, err := testserver.DefaultMasterOptions()
86 87
 	if err != nil {
87 88
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -69,6 +69,7 @@ func TestOAuthOIDC(t *testing.T) {
69 69
 
70 70
 	// Get master config
71 71
 	testutil.RequireEtcd(t)
72
+	defer testutil.DumpEtcdOnFailure(t)
72 73
 
73 74
 	masterOptions, err := testserver.DefaultMasterOptions()
74 75
 	if err != nil {
... ...
@@ -46,6 +46,7 @@ func TestOAuthRequestHeader(t *testing.T) {
46 46
 
47 47
 	// Get master config
48 48
 	testutil.RequireEtcd(t)
49
+	defer testutil.DumpEtcdOnFailure(t)
49 50
 	masterOptions, err := testserver.DefaultMasterOptions()
50 51
 	if err != nil {
51 52
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -55,6 +55,7 @@ func (u *testUser) ConvertFromAccessToken(*api.OAuthAccessToken) (interface{}, e
55 55
 
56 56
 func TestOAuthStorage(t *testing.T) {
57 57
 	testutil.RequireEtcd(t)
58
+	defer testutil.DumpEtcdOnFailure(t)
58 59
 
59 60
 	masterOptions, err := testserver.DefaultMasterOptions()
60 61
 	if err != nil {
... ...
@@ -24,6 +24,7 @@ import (
24 24
 func TestPatchConflicts(t *testing.T) {
25 25
 
26 26
 	testutil.RequireEtcd(t)
27
+	defer testutil.DumpEtcdOnFailure(t)
27 28
 
28 29
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
29 30
 
... ...
@@ -23,17 +23,20 @@ import (
23 23
 )
24 24
 
25 25
 func TestPodNodeConstraintsAdmissionPluginSetNodeNameClusterAdmin(t *testing.T) {
26
+	defer testutil.DumpEtcdOnFailure(t)
26 27
 	oclient, kclient := setupClusterAdminPodNodeConstraintsTest(t, &pluginapi.PodNodeConstraintsConfig{})
27 28
 	testPodNodeConstraintsObjectCreationWithPodTemplate(t, "set node name, cluster admin", kclient, oclient, "nodename.example.com", nil, false)
28 29
 }
29 30
 
30 31
 func TestPodNodeConstraintsAdmissionPluginSetNodeNameNonAdmin(t *testing.T) {
32
+	defer testutil.DumpEtcdOnFailure(t)
31 33
 	config := &pluginapi.PodNodeConstraintsConfig{}
32 34
 	oclient, kclient := setupUserPodNodeConstraintsTest(t, config, "derples")
33 35
 	testPodNodeConstraintsObjectCreationWithPodTemplate(t, "set node name, regular user", kclient, oclient, "nodename.example.com", nil, true)
34 36
 }
35 37
 
36 38
 func TestPodNodeConstraintsAdmissionPluginSetNodeSelectorClusterAdmin(t *testing.T) {
39
+	defer testutil.DumpEtcdOnFailure(t)
37 40
 	config := &pluginapi.PodNodeConstraintsConfig{
38 41
 		NodeSelectorLabelBlacklist: []string{"hostname"},
39 42
 	}
... ...
@@ -42,6 +45,7 @@ func TestPodNodeConstraintsAdmissionPluginSetNodeSelectorClusterAdmin(t *testing
42 42
 }
43 43
 
44 44
 func TestPodNodeConstraintsAdmissionPluginSetNodeSelectorNonAdmin(t *testing.T) {
45
+	defer testutil.DumpEtcdOnFailure(t)
45 46
 	config := &pluginapi.PodNodeConstraintsConfig{
46 47
 		NodeSelectorLabelBlacklist: []string{"hostname"},
47 48
 	}
... ...
@@ -16,6 +16,7 @@ import (
16 16
 
17 17
 func TestPolicyCommands(t *testing.T) {
18 18
 	testutil.RequireEtcd(t)
19
+	defer testutil.DumpEtcdOnFailure(t)
19 20
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
20 21
 	if err != nil {
21 22
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -125,6 +125,7 @@ func projectRequestLimitUsers() map[string]labels.Set {
125 125
 }
126 126
 
127 127
 func TestProjectRequestLimitMultiLevelConfig(t *testing.T) {
128
+	defer testutil.DumpEtcdOnFailure(t)
128 129
 	kclient, oclient, clientConfig := setupProjectRequestLimitTest(t, projectRequestLimitMultiLevelConfig())
129 130
 	setupProjectRequestLimitUsers(t, oclient, projectRequestLimitUsers())
130 131
 	setupProjectRequestLimitNamespaces(t, kclient, map[string]int{
... ...
@@ -140,6 +141,7 @@ func TestProjectRequestLimitMultiLevelConfig(t *testing.T) {
140 140
 }
141 141
 
142 142
 func TestProjectRequestLimitEmptyConfig(t *testing.T) {
143
+	defer testutil.DumpEtcdOnFailure(t)
143 144
 	kclient, oclient, clientConfig := setupProjectRequestLimitTest(t, projectRequestLimitEmptyConfig())
144 145
 	setupProjectRequestLimitUsers(t, oclient, projectRequestLimitUsers())
145 146
 	setupProjectRequestLimitNamespaces(t, kclient, map[string]int{
... ...
@@ -155,6 +157,7 @@ func TestProjectRequestLimitEmptyConfig(t *testing.T) {
155 155
 }
156 156
 
157 157
 func TestProjectRequestLimitSingleConfig(t *testing.T) {
158
+	defer testutil.DumpEtcdOnFailure(t)
158 159
 	kclient, oclient, clientConfig := setupProjectRequestLimitTest(t, projectRequestLimitSingleDefaultConfig())
159 160
 	setupProjectRequestLimitUsers(t, oclient, projectRequestLimitUsers())
160 161
 	setupProjectRequestLimitNamespaces(t, kclient, map[string]int{
... ...
@@ -172,6 +175,7 @@ func TestProjectRequestLimitSingleConfig(t *testing.T) {
172 172
 // we had a bug where this failed on ` uenxpected error: metadata.name: Invalid value: "system:admin": may not contain ":"`
173 173
 // make sure we never have that bug again and that project limits for them work
174 174
 func TestProjectRequestLimitAsSystemAdmin(t *testing.T) {
175
+	defer testutil.DumpEtcdOnFailure(t)
175 176
 	_, oclient, _ := setupProjectRequestLimitTest(t, projectRequestLimitSingleDefaultConfig())
176 177
 
177 178
 	if _, err := oclient.ProjectRequests().Create(&projectapi.ProjectRequest{
... ...
@@ -20,6 +20,7 @@ import (
20 20
 // TestProjectIsNamespace verifies that a project is a namespace, and a namespace is a project
21 21
 func TestProjectIsNamespace(t *testing.T) {
22 22
 	testutil.RequireEtcd(t)
23
+	defer testutil.DumpEtcdOnFailure(t)
23 24
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
24 25
 	if err != nil {
25 26
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -86,6 +87,7 @@ func TestProjectIsNamespace(t *testing.T) {
86 86
 // TestProjectMustExist verifies that content cannot be added in a project that does not exist
87 87
 func TestProjectMustExist(t *testing.T) {
88 88
 	testutil.RequireEtcd(t)
89
+	defer testutil.DumpEtcdOnFailure(t)
89 90
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
90 91
 	if err != nil {
91 92
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -156,6 +158,7 @@ func TestProjectMustExist(t *testing.T) {
156 156
 
157 157
 func TestProjectWatch(t *testing.T) {
158 158
 	testutil.RequireEtcd(t)
159
+	defer testutil.DumpEtcdOnFailure(t)
159 160
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
160 161
 	if err != nil {
161 162
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -15,6 +15,7 @@ import (
15 15
 
16 16
 func TestRootRedirect(t *testing.T) {
17 17
 	testutil.RequireEtcd(t)
18
+	defer testutil.DumpEtcdOnFailure(t)
18 19
 	masterConfig, _, err := testserver.StartTestMasterAPI()
19 20
 	if err != nil {
20 21
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -29,6 +29,7 @@ import (
29 29
 // processed.  Reload should similarly suppressed on subsequent
30 30
 // resyncs.
31 31
 func TestRouterReloadSuppressionOnSync(t *testing.T) {
32
+	defer testutil.DumpEtcdOnFailure(t)
32 33
 	stressRouter(
33 34
 		t,
34 35
 		// Allow the test to be configured to enable experimentation
... ...
@@ -46,6 +46,7 @@ func testPodDuration(t *testing.T, name string, kclient kclient.Interface, pod *
46 46
 }
47 47
 
48 48
 func TestRunOnceDurationAdmissionPlugin(t *testing.T) {
49
+	defer testutil.DumpEtcdOnFailure(t)
49 50
 	var secs int64 = 3600
50 51
 	config := &pluginapi.RunOnceDurationConfig{
51 52
 		ActiveDeadlineSecondsLimit: &secs,
... ...
@@ -58,6 +59,7 @@ func TestRunOnceDurationAdmissionPlugin(t *testing.T) {
58 58
 }
59 59
 
60 60
 func TestRunOnceDurationAdmissionPluginProjectLimit(t *testing.T) {
61
+	defer testutil.DumpEtcdOnFailure(t)
61 62
 	var secs int64 = 3600
62 63
 	config := &pluginapi.RunOnceDurationConfig{
63 64
 		ActiveDeadlineSecondsLimit: &secs,
... ...
@@ -35,6 +35,7 @@ import (
35 35
 
36 36
 func TestSAAsOAuthClient(t *testing.T) {
37 37
 	testutil.RequireEtcd(t)
38
+	defer testutil.DumpEtcdOnFailure(t)
38 39
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
39 40
 	if err != nil {
40 41
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -14,6 +14,7 @@ import (
14 14
 
15 15
 func TestPodUpdateSCCEnforcement(t *testing.T) {
16 16
 	testutil.RequireEtcd(t)
17
+	defer testutil.DumpEtcdOnFailure(t)
17 18
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
18 19
 	if err != nil {
19 20
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -24,6 +24,7 @@ import (
24 24
 
25 25
 func TestScopedTokens(t *testing.T) {
26 26
 	testutil.RequireEtcd(t)
27
+	defer testutil.DumpEtcdOnFailure(t)
27 28
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
28 29
 	if err != nil {
29 30
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -100,6 +101,7 @@ func TestScopedTokens(t *testing.T) {
100 100
 
101 101
 func TestScopedImpersonation(t *testing.T) {
102 102
 	testutil.RequireEtcd(t)
103
+	defer testutil.DumpEtcdOnFailure(t)
103 104
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
104 105
 	if err != nil {
105 106
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -144,6 +146,7 @@ func TestScopedImpersonation(t *testing.T) {
144 144
 
145 145
 func TestScopeEscalations(t *testing.T) {
146 146
 	testutil.RequireEtcd(t)
147
+	defer testutil.DumpEtcdOnFailure(t)
147 148
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
148 149
 	if err != nil {
149 150
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -224,6 +227,7 @@ func TestScopeEscalations(t *testing.T) {
224 224
 
225 225
 func TestTokensWithIllegalScopes(t *testing.T) {
226 226
 	testutil.RequireEtcd(t)
227
+	defer testutil.DumpEtcdOnFailure(t)
227 228
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
228 229
 	if err != nil {
229 230
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -28,6 +28,7 @@ import (
28 28
 
29 29
 func TestServiceAccountAuthorization(t *testing.T) {
30 30
 	testutil.RequireEtcd(t)
31
+	defer testutil.DumpEtcdOnFailure(t)
31 32
 	saNamespace := api.NamespaceDefault
32 33
 	saName := serviceaccountadmission.DefaultServiceAccountName
33 34
 	saUsername := serviceaccount.MakeUsername(saNamespace, saName)
... ...
@@ -248,6 +249,7 @@ func TestAutomaticCreationOfPullSecrets(t *testing.T) {
248 248
 	saName := serviceaccountadmission.DefaultServiceAccountName
249 249
 
250 250
 	testutil.RequireEtcd(t)
251
+	defer testutil.DumpEtcdOnFailure(t)
251 252
 	_, clusterAdminConfig, err := testserver.StartTestMaster()
252 253
 	if err != nil {
253 254
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -305,6 +307,7 @@ func getServiceAccountPullSecret(client *kclient.Client, ns, name string) (strin
305 305
 
306 306
 func TestEnforcingServiceAccount(t *testing.T) {
307 307
 	testutil.RequireEtcd(t)
308
+	defer testutil.DumpEtcdOnFailure(t)
308 309
 	masterConfig, err := testserver.DefaultMasterOptions()
309 310
 	masterConfig.ServiceAccountConfig.LimitSecretReferences = false
310 311
 	if err != nil {
... ...
@@ -18,6 +18,7 @@ import (
18 18
 
19 19
 func TestCachingDiscoveryClient(t *testing.T) {
20 20
 	testutil.RequireEtcd(t)
21
+	defer testutil.DumpEtcdOnFailure(t)
21 22
 	_, originKubeConfig, err := testserver.StartTestMasterAPI()
22 23
 	if err != nil {
23 24
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -30,6 +30,7 @@ const (
30 30
 
31 31
 func TestSNI(t *testing.T) {
32 32
 	testutil.RequireEtcd(t)
33
+	defer testutil.DumpEtcdOnFailure(t)
33 34
 	// Create tempfiles with certs and keys we're going to use
34 35
 	certNames := map[string]string{}
35 36
 	for certName, certContents := range sniCerts {
... ...
@@ -33,6 +33,7 @@ import (
33 33
 // }
34 34
 
35 35
 func TestStorageVersionsUnified(t *testing.T) {
36
+	defer testutil.DumpEtcdOnFailure(t)
36 37
 	runStorageTest(t, "unified",
37 38
 		extensions_v1beta1.SchemeGroupVersion,
38 39
 		extensions_v1beta1.SchemeGroupVersion,
... ...
@@ -21,6 +21,7 @@ import (
21 21
 
22 22
 func TestTemplate(t *testing.T) {
23 23
 	testutil.RequireEtcd(t)
24
+	defer testutil.DumpEtcdOnFailure(t)
24 25
 	_, path, err := testserver.StartTestMasterAPI()
25 26
 	if err != nil {
26 27
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -119,6 +120,7 @@ func walkJSONFiles(inDir string, fn func(name, path string, data []byte)) error
119 119
 
120 120
 func TestTemplateTransformationFromConfig(t *testing.T) {
121 121
 	testutil.RequireEtcd(t)
122
+	defer testutil.DumpEtcdOnFailure(t)
122 123
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
123 124
 	if err != nil {
124 125
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -23,6 +23,7 @@ import (
23 23
 
24 24
 func TestUnprivilegedNewProject(t *testing.T) {
25 25
 	testutil.RequireEtcd(t)
26
+	defer testutil.DumpEtcdOnFailure(t)
26 27
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
27 28
 	if err != nil {
28 29
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -92,6 +93,7 @@ func TestUnprivilegedNewProject(t *testing.T) {
92 92
 }
93 93
 func TestUnprivilegedNewProjectFromTemplate(t *testing.T) {
94 94
 	testutil.RequireEtcd(t)
95
+	defer testutil.DumpEtcdOnFailure(t)
95 96
 	namespace := "foo"
96 97
 	templateName := "bar"
97 98
 
... ...
@@ -187,6 +189,7 @@ func TestUnprivilegedNewProjectFromTemplate(t *testing.T) {
187 187
 
188 188
 func TestUnprivilegedNewProjectDenied(t *testing.T) {
189 189
 	testutil.RequireEtcd(t)
190
+	defer testutil.DumpEtcdOnFailure(t)
190 191
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
191 192
 	if err != nil {
192 193
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -67,6 +67,7 @@ func makeMapping(user, identity string) *api.UserIdentityMapping {
67 67
 
68 68
 func TestUserInitialization(t *testing.T) {
69 69
 	testutil.RequireEtcd(t)
70
+	defer testutil.DumpEtcdOnFailure(t)
70 71
 	masterConfig, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
71 72
 	if err != nil {
72 73
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -72,6 +72,7 @@ func signedManifest(name string) ([]byte, digest.Digest, error) {
72 72
 
73 73
 func TestV2RegistryGetTags(t *testing.T) {
74 74
 	testutil.RequireEtcd(t)
75
+	defer testutil.DumpEtcdOnFailure(t)
75 76
 	_, clusterAdminKubeConfig, err := testserver.StartTestMasterAPI()
76 77
 	if err != nil {
77 78
 		t.Fatalf("error starting master: %v", err)
... ...
@@ -85,6 +85,7 @@ func tryAccessURL(t *testing.T, url string, expectedStatus int, expectedRedirect
85 85
 
86 86
 func TestAccessOriginWebConsole(t *testing.T) {
87 87
 	testutil.RequireEtcd(t)
88
+	defer testutil.DumpEtcdOnFailure(t)
88 89
 	masterOptions, err := testserver.DefaultMasterOptions()
89 90
 	if err != nil {
90 91
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -112,6 +113,7 @@ func TestAccessOriginWebConsole(t *testing.T) {
112 112
 
113 113
 func TestAccessDisabledWebConsole(t *testing.T) {
114 114
 	testutil.RequireEtcd(t)
115
+	defer testutil.DumpEtcdOnFailure(t)
115 116
 	masterOptions, err := testserver.DefaultMasterOptions()
116 117
 	if err != nil {
117 118
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -150,6 +152,7 @@ func TestAccessDisabledWebConsole(t *testing.T) {
150 150
 
151 151
 func TestAccessOriginWebConsoleMultipleIdentityProviders(t *testing.T) {
152 152
 	testutil.RequireEtcd(t)
153
+	defer testutil.DumpEtcdOnFailure(t)
153 154
 	masterOptions, err := testserver.DefaultMasterOptions()
154 155
 	if err != nil {
155 156
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -55,6 +55,7 @@ func TestWebConsoleExtensions(t *testing.T) {
55 55
 
56 56
 	// Build master config.
57 57
 	testutil.RequireEtcd(t)
58
+	defer testutil.DumpEtcdOnFailure(t)
58 59
 	masterOptions, err := testserver.DefaultMasterOptions()
59 60
 	if err != nil {
60 61
 		t.Fatalf("Failed creating master configuration: %v", err)
... ...
@@ -21,6 +21,7 @@ import (
21 21
 
22 22
 func TestWebhookGitHubPushWithImage(t *testing.T) {
23 23
 	testutil.RequireEtcd(t)
24
+	defer testutil.DumpEtcdOnFailure(t)
24 25
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
25 26
 	if err != nil {
26 27
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -123,6 +124,7 @@ func TestWebhookGitHubPushWithImage(t *testing.T) {
123 123
 
124 124
 func TestWebhookGitHubPushWithImageStream(t *testing.T) {
125 125
 	testutil.RequireEtcd(t)
126
+	defer testutil.DumpEtcdOnFailure(t)
126 127
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
127 128
 	if err != nil {
128 129
 		t.Fatalf("unexpected error: %v", err)
... ...
@@ -223,6 +225,7 @@ func TestWebhookGitHubPushWithImageStream(t *testing.T) {
223 223
 
224 224
 func TestWebhookGitHubPing(t *testing.T) {
225 225
 	testutil.RequireEtcd(t)
226
+	defer testutil.DumpEtcdOnFailure(t)
226 227
 	_, clusterAdminKubeConfig, err := testserver.StartTestMaster()
227 228
 	if err != nil {
228 229
 		t.Fatalf("unable to start master: %v", err)
... ...
@@ -7,6 +7,8 @@ import (
7 7
 	"log"
8 8
 	"math/rand"
9 9
 	"os"
10
+	goruntime "runtime"
11
+	"strings"
10 12
 	"testing"
11 13
 
12 14
 	"github.com/coreos/pkg/capnslog"
... ...
@@ -84,11 +86,16 @@ func withEtcdKey(f func(string)) {
84 84
 	f(prefix)
85 85
 }
86 86
 
87
-func DumpEtcdOnFailure(t *testing.T, name string) {
87
+func DumpEtcdOnFailure(t *testing.T) {
88 88
 	if !t.Failed() {
89 89
 		return
90 90
 	}
91 91
 
92
+	pc := make([]uintptr, 10)
93
+	goruntime.Callers(2, pc)
94
+	f := goruntime.FuncForPC(pc[0])
95
+	name := f.Name()[strings.LastIndex(f.Name(), "Test"):]
96
+
92 97
 	client := NewEtcdClient()
93 98
 	etcdResponse, err := client.RawGet("/", false, true)
94 99
 	if err != nil {