From 300294e4d9734aa22f11aae178114edc127e348e Mon Sep 17 00:00:00 2001 From: Victor Agababov Date: Tue, 5 Feb 2019 16:03:35 -0800 Subject: [PATCH 01/11] Add one more case to cover @latest as part of the traffic split. Followup to the main implementation of #2819. - fix the test comment, to reflect the reality - add a case where candidate is replaced with @latest - traffic distribution is validated. --- test/conformance/service_test.go | 20 ++++++++++++++++++-- 1 file changed, 18 insertions(+), 2 deletions(-) diff --git a/test/conformance/service_test.go b/test/conformance/service_test.go index 46cf6d95e79e..1fa7a83aa92c 100644 --- a/test/conformance/service_test.go +++ b/test/conformance/service_test.go @@ -301,13 +301,15 @@ func TestRunLatestService(t *testing.T) { } } -// TestReleaseService creates a Service in runLatest mode and then updates it to release mode. Once in release mode the test -// goes through Update/Validate to try different possible configurations for a release service. +// TestReleaseService creates a Service in `release` mode with the only revision +// being `@latest`. Once this succeeded, the test goes through Update/Validate to +// try different possible configurations for a release service. // Currently tests for the following combinations // 1. One Revision Specified, current == latest // 2. One Revision Specified, current != latset // 3. Two Revisions Specified, 50% rollout, candidate == latest // 4. Two Revisions Specified, 50% rollout, candidate != latest +// 5. Two Revisions Specified, 50% rollout, candidate != latest, latest referred to as `@latest`. func TestReleaseService(t *testing.T) { // Create Initial Service clients := setup(t) @@ -396,6 +398,20 @@ func TestReleaseService(t *testing.T) { []string{expectedFirstRev, expectedSecondRev}, []string{"latest", "candidate", "current"}, []string{expectedThirdRev, expectedSecondRev, expectedFirstRev}) + + // Now update the service to use `@latest` as candidate. + revisions[1] = v1alpha1.ReleaseLatestRevisionKeyword + logger.Info("Updating Service to split traffic between two `current` and `@latest`") + if objects.Service, err = test.PatchReleaseService(logger, clients, objects.Service, revisions, 50); err != nil { + t.Fatalf("Service %s was not updated to release: %v", names.Service, err) + } + + // The domains should not change, since configuration was not changed. + validateDomains(t, logger, clients, + names.Domain, + []string{expectedFirstRev, expectedSecondRev}, + []string{"latest", "candidate", "current"}, + []string{expectedThirdRev, expectedSecondRev, expectedFirstRev}) } // TODO(jonjohnsonjr): Examples of deploying from source. From b78802b4f09911c8212cf8101d20ac25e7c475f7 Mon Sep 17 00:00:00 2001 From: Victor Agababov Date: Tue, 5 Feb 2019 20:02:00 -0800 Subject: [PATCH 02/11] update the test --- test/conformance/service_test.go | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/test/conformance/service_test.go b/test/conformance/service_test.go index 1fa7a83aa92c..d4d25c732606 100644 --- a/test/conformance/service_test.go +++ b/test/conformance/service_test.go @@ -400,18 +400,18 @@ func TestReleaseService(t *testing.T) { []string{expectedThirdRev, expectedSecondRev, expectedFirstRev}) // Now update the service to use `@latest` as candidate. + fmt.Printf("########## WERE HERE ##########\n") revisions[1] = v1alpha1.ReleaseLatestRevisionKeyword logger.Info("Updating Service to split traffic between two `current` and `@latest`") if objects.Service, err = test.PatchReleaseService(logger, clients, objects.Service, revisions, 50); err != nil { t.Fatalf("Service %s was not updated to release: %v", names.Service, err) } - // The domains should not change, since configuration was not changed. validateDomains(t, logger, clients, names.Domain, - []string{expectedFirstRev, expectedSecondRev}, + []string{expectedFirstRev, expectedThirdRev}, []string{"latest", "candidate", "current"}, - []string{expectedThirdRev, expectedSecondRev, expectedFirstRev}) + []string{expectedThirdRev, expectedThirdRev, expectedFirstRev}) } // TODO(jonjohnsonjr): Examples of deploying from source. From de411cc9665a488f8f5f48915448d751b6a36e6a Mon Sep 17 00:00:00 2001 From: Victor Agababov Date: Wed, 6 Feb 2019 11:49:27 -0800 Subject: [PATCH 03/11] intermediate checkpoint state --- test/conformance/service_test.go | 49 ++++++++++++++++++++++++++++++-- test/crd_checks.go | 6 ++-- test/service.go | 5 ++-- 3 files changed, 52 insertions(+), 8 deletions(-) diff --git a/test/conformance/service_test.go b/test/conformance/service_test.go index d4d25c732606..96ac547cfdd2 100644 --- a/test/conformance/service_test.go +++ b/test/conformance/service_test.go @@ -301,10 +301,31 @@ func TestRunLatestService(t *testing.T) { } } +func waitForDesiredTrafficShape(sName string, want map[string]v1alpha1.TrafficTarget, clients *test.Clients, logger *logging.BaseLogger)(error) { +return test.WaitForServiceState( + clients.ServingClient, sName, func(s *v1alpha1.Service) (bool, error) { + // IsServiceReady never returns an error. + if ok, _ := test.IsServiceReady(s); !ok { + return false, nil + } + // Match the traffic shape. + got := map[string]v1alpha1.TrafficTarget{} + for _, tt := range s.Status.Traffic { + got[tt.Name] = tt + } + if !cmp.Equal(got, want) { + logger.Info("Traffic shape mismatch: (-got, +want)", cmp.Diff(got, want)) + return false, nil + } + return true, nil + }, "Verify Service Step 1", + ) +} + // TestReleaseService creates a Service in `release` mode with the only revision // being `@latest`. Once this succeeded, the test goes through Update/Validate to // try different possible configurations for a release service. -// Currently tests for the following combinations +// Currently tests for the following combinations: // 1. One Revision Specified, current == latest // 2. One Revision Specified, current != latset // 3. Two Revisions Specified, 50% rollout, candidate == latest @@ -334,18 +355,40 @@ func TestReleaseService(t *testing.T) { if err != nil { t.Fatalf("Failed to create initial Service %v: %v", names.Service, err) } + + // This is just creating the service, so make sure it ready. + logger.Info("Waiting for Service to transition to Ready.") + if err := test.WaitForServiceState(clients.ServingClient, names.Service, test.IsServiceReady, "Verify Service Initial State"); err != nil { + t.Fatalf("Error waiting for the service to become ready for the latest revision: %v", err) + } + logger.Info("Validating service shape.") if err := validateReleaseServiceShape(objects); err != nil { t.Fatalf("Release shape incorrect: %v", err) } revisions := []string{names.Revision} - // One Revision Specified, current == latest. + // 1. One Revision Specified, current == latest. logger.Info("Updating Service to ReleaseType using lastCreatedRevision") objects.Service, err = test.PatchReleaseService(logger, clients, objects.Service, revisions, 0) if err != nil { t.Fatalf("Service %s was not updated to release: %v", names.Service, err) } + desiredTrafficShape := map[string]v1alpha1.TrafficTarget{ + "current": v1alpha1.TrafficTarget{ + Name: "current", + RevisionName: objects.Config.Status.LatestReadyRevisionName, + Percent: 100, + }, + "latest": v1alpha1.TrafficTarget{ + Name: "latest", + RevisionName: objects.Config.Status.LatestReadyRevisionName, + }, + } + logger.Info("Step 1. Waiting for Service to become ready with the new shape.") + if err := waitForDesiredTrafficShape(names.Service, desiredTrafficShape, clients, logger); err != nil { + t.Fatal("Service never obtained expected shape") + } logger.Info("Service traffic should go to the first revision and be available on two names traffic targets: 'current' and 'latest'") validateDomains(t, logger, clients, @@ -354,7 +397,7 @@ func TestReleaseService(t *testing.T) { []string{"latest", "current"}, []string{expectedFirstRev, expectedFirstRev}) - // One Revision Specified, current != latest. + // 2. One Revision Specified, current != latest. logger.Info("Updating the Service Spec with a new image") if _, err := test.PatchServiceImage(logger, clients, objects.Service, releaseImagePath2); err != nil { t.Fatalf("Patch update for Service %s with new image %s failed: %v", names.Service, releaseImagePath2, err) diff --git a/test/crd_checks.go b/test/crd_checks.go index 3895c998db0c..c839a8b5b232 100644 --- a/test/crd_checks.go +++ b/test/crd_checks.go @@ -122,7 +122,7 @@ func CheckConfigurationState(client *ServingClients, name string, inState func(r } // WaitForRevisionState polls the status of the Revision called name -// from client every interval until inState returns `true` indicating it +// from client every `interval` until `inState` returns `true` indicating it // is done, returns an error or timeout. desc will be used to name the metric // that is emitted to track how long it took for name to get into the state checked by inState. func WaitForRevisionState(client *ServingClients, name string, inState func(r *v1alpha1.Revision) (bool, error), desc string) error { @@ -163,7 +163,7 @@ func CheckRevisionState(client *ServingClients, name string, inState func(r *v1a } // WaitForServiceState polls the status of the Service called name -// from client every interval until inState returns `true` indicating it +// from client every `interval` until `inState` returns `true` indicating it // is done, returns an error or timeout. desc will be used to name the metric // that is emitted to track how long it took for name to get into the state checked by inState. func WaitForServiceState(client *ServingClients, name string, inState func(s *v1alpha1.Service) (bool, error), desc string) error { @@ -210,5 +210,5 @@ func GetConfigMap(client *pkgTest.KubeClient) k8styped.ConfigMapInterface { // DeploymentScaledToZeroFunc returns a func that evaluates if a deployment has scaled to 0 pods. func DeploymentScaledToZeroFunc(d *apiv1beta1.Deployment) (bool, error) { - return d.Status.ReadyReplicas == 0, nil + return d.Status.ReadyReplicas == 0, nil } diff --git a/test/service.go b/test/service.go index c5967b5264ff..8bf942093637 100644 --- a/test/service.go +++ b/test/service.go @@ -66,7 +66,8 @@ func validateCreatedServiceStatus(clients *Clients, names *ResourceNames) error }) } -func getResourceObjects(clients *Clients, names ResourceNames) (*ResourceObjects, error) { +// GetResourceObjects obtains the services resources from the k8s API server. +func GetResourceObjects(clients *Clients, names ResourceNames) (*ResourceObjects, error) { routeObject, err := clients.ServingClient.Routes.Get(names.Route, metav1.GetOptions{}) if err != nil { return nil, err @@ -130,7 +131,7 @@ func CreateReleaseServiceWithLatest( } logger.Info("Getting latest objects Created by Service.") - return getResourceObjects(clients, *names) + return GetResourceObjects(clients, *names) } // CreateRunLatestServiceReady creates a new RunLatest Service in state 'Ready'. This function expects Service and Image name passed in through 'names'. From b5ec9073054c7c3ae471b9367acefce2533a220a Mon Sep 17 00:00:00 2001 From: Victor Agababov Date: Wed, 6 Feb 2019 15:10:05 -0800 Subject: [PATCH 04/11] checkpoint --- test/conformance/service_test.go | 41 ++++++++++++++++++++++++++++---- test/conformance/util.go | 2 +- test/service.go | 2 +- test/util.go | 2 +- 4 files changed, 39 insertions(+), 8 deletions(-) diff --git a/test/conformance/service_test.go b/test/conformance/service_test.go index 96ac547cfdd2..354be12b1bed 100644 --- a/test/conformance/service_test.go +++ b/test/conformance/service_test.go @@ -301,8 +301,8 @@ func TestRunLatestService(t *testing.T) { } } -func waitForDesiredTrafficShape(sName string, want map[string]v1alpha1.TrafficTarget, clients *test.Clients, logger *logging.BaseLogger)(error) { -return test.WaitForServiceState( +func waitForDesiredTrafficShape(sName string, want map[string]v1alpha1.TrafficTarget, clients *test.Clients, logger *logging.BaseLogger) error { + return test.WaitForServiceState( clients.ServingClient, sName, func(s *v1alpha1.Service) (bool, error) { // IsServiceReady never returns an error. if ok, _ := test.IsServiceReady(s); !ok { @@ -398,7 +398,7 @@ func TestReleaseService(t *testing.T) { []string{expectedFirstRev, expectedFirstRev}) // 2. One Revision Specified, current != latest. - logger.Info("Updating the Service Spec with a new image") + logger.Info("2. Updating the Service Spec with a new image") if _, err := test.PatchServiceImage(logger, clients, objects.Service, releaseImagePath2); err != nil { t.Fatalf("Patch update for Service %s with new image %s failed: %v", names.Service, releaseImagePath2, err) } @@ -409,6 +409,16 @@ func TestReleaseService(t *testing.T) { } revisions = append(revisions, names.Revision) + // Also verify traffic is in the correct shape. + desiredTrafficShape["latest"] = v1alpha1.TrafficTarget{ + Name: "latest", + RevisionName: names.Revision, + } + logger.Info("Step 2. Waiting for Service to become ready with the new shape.") + if err := waitForDesiredTrafficShape(names.Service, desiredTrafficShape, clients, logger); err != nil { + t.Fatal("Service never obtained expected shape") + } + logger.Info("Since the Service is using release the Route will not be updated, but new revision will be available at 'latest'") validateDomains(t, logger, clients, names.Domain, @@ -416,12 +426,33 @@ func TestReleaseService(t *testing.T) { []string{"latest", "current"}, []string{expectedSecondRev, expectedFirstRev}) - // Two Revisions Specified, 50% rollout, candidate == latest. - logger.Info("Updating Service to split traffic between two revisions using Release mode") + // 3. Two Revisions Specified, 50% rollout, candidate == latest. + logger.Info("3. Updating Service to split traffic between two revisions using Release mode") if objects.Service, err = test.PatchReleaseService(logger, clients, objects.Service, revisions, 50); err != nil { t.Fatalf("Service %s was not updated to release: %v", names.Service, err) } + desiredTrafficShape = map[string]v1alpha1.TrafficTarget{ + "current": v1alpha1.TrafficTarget{ + Name: "current", + RevisionName: revisions[0], + Percent: 50, + }, + "candidate": v1alpha1.TrafficTarget{ + Name: "candidate", + RevisionName: revisions[1], + Percent: 50, + }, + "latest": v1alpha1.TrafficTarget{ + Name: "latest", + RevisionName: revisions[1], + }, + } + logger.Info("Step 3. Waiting for Service to become ready with the new shape.") + if err := waitForDesiredTrafficShape(names.Service, desiredTrafficShape, clients, logger); err != nil { + t.Fatal("Service never obtained expected shape") + } + logger.Info("Traffic should be split between the two revisions and available on three named traffic targets, 'current', 'candidate', and 'latest'") validateDomains(t, logger, clients, names.Domain, diff --git a/test/conformance/util.go b/test/conformance/util.go index e6f0a792b9b7..94d9180ebc7d 100644 --- a/test/conformance/util.go +++ b/test/conformance/util.go @@ -49,7 +49,7 @@ const ( printport = "printport" runtime = "runtime" - concurrentRequests = 50 + concurrentRequests = 100 // We expect to see 100% of requests succeed for traffic sent directly to revisions. // This might be a bad assumption. minDirectPercentage = 1 diff --git a/test/service.go b/test/service.go index 8bf942093637..27dc2309ebf4 100644 --- a/test/service.go +++ b/test/service.go @@ -164,7 +164,7 @@ func CreateRunLatestServiceReady(logger *logging.BaseLogger, clients *Clients, n } logger.Info("Getting latest objects Created by Service.") - return getResourceObjects(clients, *names) + return GetResourceObjects(clients, *names) } // CreateReleaseService creates a service in namespace with the name names.Service and names.Image, diff --git a/test/util.go b/test/util.go index 802c0572e043..6c005082a475 100644 --- a/test/util.go +++ b/test/util.go @@ -31,7 +31,7 @@ const ( // LogResourceObject logs the resource object with the resource name and value func LogResourceObject(logger *logging.BaseLogger, value ResourceObjects) { - logger.Infof("resource %s", spew.Sdump(value)) + logger.Infof("Resources:\n%s", spew.Sdump(value)) } // ImagePath is a helper function to prefix image name with repo and suffix with tag From be53e8d3ba6403885f9676b62078da8950929c6a Mon Sep 17 00:00:00 2001 From: Victor Agababov Date: Wed, 6 Feb 2019 15:12:36 -0800 Subject: [PATCH 05/11] checkpoint --- test/conformance/service_test.go | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/test/conformance/service_test.go b/test/conformance/service_test.go index 354be12b1bed..0daf93d55a1c 100644 --- a/test/conformance/service_test.go +++ b/test/conformance/service_test.go @@ -460,11 +460,24 @@ func TestReleaseService(t *testing.T) { []string{"candidate", "latest", "current"}, []string{expectedSecondRev, expectedSecondRev, expectedFirstRev}) - // Two Revisions Specified, 50% rollout, candidate != latest. - logger.Info("Updating the Service Spec with a new image") + // 4. Two Revisions Specified, 50% rollout, candidate != latest. + logger.Info("4. Updating the Service Spec with a new image") if _, err := test.PatchServiceImage(logger, clients, objects.Service, releaseImagePath3); err != nil { t.Fatalf("Patch update for Service %s with new image %s failed: %v", names.Service, releaseImagePath3, err) } + logger.Info("Since the Service was updated a new Revision will be created") + if names.Revision, err = test.WaitForServiceLatestRevision(clients, names); err != nil { + t.Fatalf("The Service %s was not updated with new revision %s: %v", names.Service, names.Revision, err) + } + desiredTrafficShape["latest"] = v1alpha1.TrafficTarget{ + Name: "latest", + RevisionName: names.Revision, + } + logger.Debug("dsd") + logger.Info("Step 4. Waiting for Service to become ready with the new shape.") + if err := waitForDesiredTrafficShape(names.Service, desiredTrafficShape, clients, logger); err != nil { + t.Fatal("Service never obtained expected shape") + } logger.Info("Traffic should remain between the two images, and the new revision should be available on the named traffic target 'latest'") validateDomains(t, logger, clients, From a5f8f487d32e95c3e1ddc365c7caf68fd6c7934b Mon Sep 17 00:00:00 2001 From: Victor Agababov Date: Wed, 6 Feb 2019 16:23:57 -0800 Subject: [PATCH 06/11] make sure stuff works --- test/conformance/service_test.go | 28 +++++++++++++++++++--------- test/conformance/util.go | 16 +++++++++++----- test/util.go | 2 +- 3 files changed, 31 insertions(+), 15 deletions(-) diff --git a/test/conformance/service_test.go b/test/conformance/service_test.go index 0daf93d55a1c..98c93f463eec 100644 --- a/test/conformance/service_test.go +++ b/test/conformance/service_test.go @@ -314,11 +314,11 @@ func waitForDesiredTrafficShape(sName string, want map[string]v1alpha1.TrafficTa got[tt.Name] = tt } if !cmp.Equal(got, want) { - logger.Info("Traffic shape mismatch: (-got, +want)", cmp.Diff(got, want)) + logger.Info("For service %s traffic shape mismatch: (-got, +want)", sName, cmp.Diff(got, want)) return false, nil } return true, nil - }, "Verify Service Step 1", + }, "Verify Service Trafic Shape", ) } @@ -385,7 +385,7 @@ func TestReleaseService(t *testing.T) { RevisionName: objects.Config.Status.LatestReadyRevisionName, }, } - logger.Info("Step 1. Waiting for Service to become ready with the new shape.") + logger.Info("Waiting for Service to become ready with the new shape.") if err := waitForDesiredTrafficShape(names.Service, desiredTrafficShape, clients, logger); err != nil { t.Fatal("Service never obtained expected shape") } @@ -414,7 +414,7 @@ func TestReleaseService(t *testing.T) { Name: "latest", RevisionName: names.Revision, } - logger.Info("Step 2. Waiting for Service to become ready with the new shape.") + logger.Info("Waiting for Service to become ready with the new shape.") if err := waitForDesiredTrafficShape(names.Service, desiredTrafficShape, clients, logger); err != nil { t.Fatal("Service never obtained expected shape") } @@ -448,7 +448,7 @@ func TestReleaseService(t *testing.T) { RevisionName: revisions[1], }, } - logger.Info("Step 3. Waiting for Service to become ready with the new shape.") + logger.Info("Waiting for Service to become ready with the new shape.") if err := waitForDesiredTrafficShape(names.Service, desiredTrafficShape, clients, logger); err != nil { t.Fatal("Service never obtained expected shape") } @@ -469,12 +469,12 @@ func TestReleaseService(t *testing.T) { if names.Revision, err = test.WaitForServiceLatestRevision(clients, names); err != nil { t.Fatalf("The Service %s was not updated with new revision %s: %v", names.Service, names.Revision, err) } + desiredTrafficShape["latest"] = v1alpha1.TrafficTarget{ Name: "latest", RevisionName: names.Revision, } - logger.Debug("dsd") - logger.Info("Step 4. Waiting for Service to become ready with the new shape.") + logger.Info("Waiting for Service to become ready with the new shape.") if err := waitForDesiredTrafficShape(names.Service, desiredTrafficShape, clients, logger); err != nil { t.Fatal("Service never obtained expected shape") } @@ -487,13 +487,23 @@ func TestReleaseService(t *testing.T) { []string{expectedThirdRev, expectedSecondRev, expectedFirstRev}) // Now update the service to use `@latest` as candidate. - fmt.Printf("########## WERE HERE ##########\n") revisions[1] = v1alpha1.ReleaseLatestRevisionKeyword - logger.Info("Updating Service to split traffic between two `current` and `@latest`") + logger.Info("5. Updating Service to split traffic between two `current` and `@latest`") if objects.Service, err = test.PatchReleaseService(logger, clients, objects.Service, revisions, 50); err != nil { t.Fatalf("Service %s was not updated to release: %v", names.Service, err) } + // `candidate` now points to the latest. + desiredTrafficShape["candidate"] = v1alpha1.TrafficTarget{ + Name: "candidate", + RevisionName: names.Revision, + Percent: 50, + } + logger.Info("Waiting for Service to become ready with the new shape.") + if err := waitForDesiredTrafficShape(names.Service, desiredTrafficShape, clients, logger); err != nil { + t.Fatal("Service never obtained expected shape") + } + validateDomains(t, logger, clients, names.Domain, []string{expectedFirstRev, expectedThirdRev}, diff --git a/test/conformance/util.go b/test/conformance/util.go index 94d9180ebc7d..23de138505a2 100644 --- a/test/conformance/util.go +++ b/test/conformance/util.go @@ -49,7 +49,7 @@ const ( printport = "printport" runtime = "runtime" - concurrentRequests = 100 + concurrentRequests = 50 // We expect to see 100% of requests succeed for traffic sent directly to revisions. // This might be a bad assumption. minDirectPercentage = 1 @@ -102,14 +102,20 @@ func validateDomains( subdomains = append(subdomains, fmt.Sprintf("%s.%s", target, baseDomain)) } + g, _ := errgroup.WithContext(context.Background()) // We don't have a good way to check if the route is updated so we will wait until a subdomain has // started returning at least one expected result to key that we should validate percentage splits. - logger.Infof("Waiting for route to update domain: %s", subdomains[0]) - if err := waitForExpectedResponse(logger, clients, subdomains[0], targetsExpected[0]); err != nil { - t.Fatalf("Error waiting for route to update %s: %s", subdomains[0], targetsExpected[0]) + for i, s := range subdomains { + i, s := i, s + g.Go(func() error { + logger.Infof("Waiting for route to update domain: %s", s) + return waitForExpectedResponse(logger, clients, s, targetsExpected[i]) + }) + } + if err := g.Wait(); err != nil { + t.Fatalf("Error probing domains to be ready: %v", err) } - g, _ := errgroup.WithContext(context.Background()) var minBasePercentage float64 if len(baseExpected) == 1 { minBasePercentage = minDirectPercentage diff --git a/test/util.go b/test/util.go index 6c005082a475..be3ca8c3dc1b 100644 --- a/test/util.go +++ b/test/util.go @@ -31,7 +31,7 @@ const ( // LogResourceObject logs the resource object with the resource name and value func LogResourceObject(logger *logging.BaseLogger, value ResourceObjects) { - logger.Infof("Resources:\n%s", spew.Sdump(value)) + logger.Debugf("Resources:\n%s", spew.Sdump(value)) } // ImagePath is a helper function to prefix image name with repo and suffix with tag From 9d2cfc5722edfce197cedfd3005881890c273668 Mon Sep 17 00:00:00 2001 From: Victor Agababov Date: Wed, 6 Feb 2019 16:26:04 -0800 Subject: [PATCH 07/11] restore util.go --- test/util.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/util.go b/test/util.go index be3ca8c3dc1b..6c005082a475 100644 --- a/test/util.go +++ b/test/util.go @@ -31,7 +31,7 @@ const ( // LogResourceObject logs the resource object with the resource name and value func LogResourceObject(logger *logging.BaseLogger, value ResourceObjects) { - logger.Debugf("Resources:\n%s", spew.Sdump(value)) + logger.Infof("Resources:\n%s", spew.Sdump(value)) } // ImagePath is a helper function to prefix image name with repo and suffix with tag From af8aa0bdf2be7a0aac0a96e32e48e6c46a54cfd4 Mon Sep 17 00:00:00 2001 From: Victor Agababov Date: Wed, 6 Feb 2019 16:41:55 -0800 Subject: [PATCH 08/11] update comment --- test/conformance/util.go | 1 + 1 file changed, 1 insertion(+) diff --git a/test/conformance/util.go b/test/conformance/util.go index 23de138505a2..6d3354473f7d 100644 --- a/test/conformance/util.go +++ b/test/conformance/util.go @@ -105,6 +105,7 @@ func validateDomains( g, _ := errgroup.WithContext(context.Background()) // We don't have a good way to check if the route is updated so we will wait until a subdomain has // started returning at least one expected result to key that we should validate percentage splits. + // In order for tests to succeed reliably, we need to make sure that all domains succeed. for i, s := range subdomains { i, s := i, s g.Go(func() error { From dc646bc70b3b410969edee6ea901edc58c81236d Mon Sep 17 00:00:00 2001 From: Dan Gerdesmeier Date: Wed, 6 Feb 2019 17:12:52 -0800 Subject: [PATCH 09/11] Update test/conformance/service_test.go Co-Authored-By: vagababov --- test/conformance/service_test.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/conformance/service_test.go b/test/conformance/service_test.go index 98c93f463eec..e995bd67020e 100644 --- a/test/conformance/service_test.go +++ b/test/conformance/service_test.go @@ -369,7 +369,7 @@ func TestReleaseService(t *testing.T) { revisions := []string{names.Revision} // 1. One Revision Specified, current == latest. - logger.Info("Updating Service to ReleaseType using lastCreatedRevision") + logger.Info("1. Updating Service to ReleaseType using lastCreatedRevision") objects.Service, err = test.PatchReleaseService(logger, clients, objects.Service, revisions, 0) if err != nil { t.Fatalf("Service %s was not updated to release: %v", names.Service, err) From d163e9bb4b956c281eb00f37ad2093932c65d522 Mon Sep 17 00:00:00 2001 From: Dan Gerdesmeier Date: Wed, 6 Feb 2019 17:13:08 -0800 Subject: [PATCH 10/11] Update test/conformance/util.go Co-Authored-By: vagababov --- test/conformance/util.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/test/conformance/util.go b/test/conformance/util.go index 23de138505a2..ec3b93956b4d 100644 --- a/test/conformance/util.go +++ b/test/conformance/util.go @@ -103,7 +103,7 @@ func validateDomains( } g, _ := errgroup.WithContext(context.Background()) - // We don't have a good way to check if the route is updated so we will wait until a subdomain has + // We don't have a good way to check if the route is updated so we will wait until all subdomains have // started returning at least one expected result to key that we should validate percentage splits. for i, s := range subdomains { i, s := i, s From 85e0061a3a9b4216d482fa50d47aabeb58741ff5 Mon Sep 17 00:00:00 2001 From: Victor Agababov Date: Wed, 6 Feb 2019 17:13:29 -0800 Subject: [PATCH 11/11] address comments --- test/conformance/service_test.go | 6 ------ 1 file changed, 6 deletions(-) diff --git a/test/conformance/service_test.go b/test/conformance/service_test.go index 98c93f463eec..c2d0fef2ae40 100644 --- a/test/conformance/service_test.go +++ b/test/conformance/service_test.go @@ -356,12 +356,6 @@ func TestReleaseService(t *testing.T) { t.Fatalf("Failed to create initial Service %v: %v", names.Service, err) } - // This is just creating the service, so make sure it ready. - logger.Info("Waiting for Service to transition to Ready.") - if err := test.WaitForServiceState(clients.ServingClient, names.Service, test.IsServiceReady, "Verify Service Initial State"); err != nil { - t.Fatalf("Error waiting for the service to become ready for the latest revision: %v", err) - } - logger.Info("Validating service shape.") if err := validateReleaseServiceShape(objects); err != nil { t.Fatalf("Release shape incorrect: %v", err)