func TestMissingPortMapping(t *testing.T) { // Multiple service ports - no route port specified g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/missing-route-port.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } routeedges.AddAllRouteEdges(g) markers := FindMissingPortMapping(g) if expected, got := 1, len(markers); expected != got { t.Fatalf("expected %d markers, got %d", expected, got) } if expected, got := MissingRoutePortWarning, markers[0].Key; expected != got { t.Fatalf("expected %s marker key, got %s", expected, got) } // Dangling route g, _, err = osgraphtest.BuildGraph("../../../api/graph/test/lonely-route.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } routeedges.AddAllRouteEdges(g) markers = FindMissingPortMapping(g) if expected, got := 1, len(markers); expected != got { t.Fatalf("expected %d markers, got %d", expected, got) } if expected, got := MissingServiceWarning, markers[0].Key; expected != got { t.Fatalf("expected %s marker key, got %s", expected, got) } }
func TestUnpushableBuild(t *testing.T) { // Unconfigured internal registry g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/unpushable-build.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) imageedges.AddAllImageStreamRefEdges(g) imageedges.AddAllImageStreamImageRefEdges(g) markers := FindUnpushableBuildConfigs(g, osgraph.DefaultNamer) if e, a := 2, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if got, expected := markers[0].Key, MissingRequiredRegistryErr; got != expected { t.Fatalf("expected marker key %q, got %q", expected, got) } actualBC := osgraph.GetTopLevelContainerNode(g, markers[0].Node) expectedBC1 := g.Find(osgraph.UniqueName("BuildConfig|example/ruby-hello-world")) expectedBC2 := g.Find(osgraph.UniqueName("BuildConfig|example/ruby-hello-world-2")) if e1, e2, a := expectedBC1.ID(), expectedBC2.ID(), actualBC.ID(); e1 != a && e2 != a { t.Errorf("expected either %v or %v, got %v", e1, e2, a) } actualIST := markers[0].RelatedNodes[0] expectedIST := g.Find(osgraph.UniqueName("ImageStreamTag|example/ruby-hello-world:latest")) if e, a := expectedIST.ID(), actualIST.ID(); e != a { t.Errorf("expected %v, got %v: \n%v", e, a, g) } // Missing image stream g, _, err = osgraphtest.BuildGraph("../../../api/graph/test/unpushable-build-2.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) imageedges.AddAllImageStreamRefEdges(g) imageedges.AddAllImageStreamImageRefEdges(g) markers = FindUnpushableBuildConfigs(g, osgraph.DefaultNamer) if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if got, expected := markers[0].Key, MissingOutputImageStreamErr; got != expected { t.Fatalf("expected marker key %q, got %q", expected, got) } }
func TestBareRCGroup(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/bare-rc.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } kubeedges.AddAllExposedPodTemplateSpecEdges(g) kubeedges.AddAllExposedPodEdges(g) kubeedges.AddAllManagedByRCPodEdges(g) coveredNodes := IntSet{} serviceGroups, coveredByServiceGroups := AllServiceGroups(g, coveredNodes) coveredNodes.Insert(coveredByServiceGroups.List()...) bareRCs, coveredByRCs := AllReplicationControllers(g, coveredNodes) coveredNodes.Insert(coveredByRCs.List()...) if e, a := 1, len(serviceGroups); e != a { t.Errorf("expected %v, got %v", e, a) } if e, a := 1, len(bareRCs); e != a { t.Errorf("expected %v, got %v", e, a) } }
func TestBareDCGroup(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/bare-dc.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } kubeedges.AddAllExposedPodTemplateSpecEdges(g) buildedges.AddAllInputOutputEdges(g) deployedges.AddAllTriggerEdges(g) coveredNodes := IntSet{} serviceGroups, coveredByServiceGroups := AllServiceGroups(g, coveredNodes) coveredNodes.Insert(coveredByServiceGroups.List()...) bareDCPipelines, coveredByDCs := AllDeploymentConfigPipelines(g, coveredNodes) coveredNodes.Insert(coveredByDCs.List()...) bareBCPipelines, coveredByBCs := AllImagePipelinesFromBuildConfig(g, coveredNodes) coveredNodes.Insert(coveredByBCs.List()...) if e, a := 0, len(serviceGroups); e != a { t.Errorf("expected %v, got %v", e, a) } if e, a := 1, len(bareDCPipelines); e != a { t.Errorf("expected %v, got %v", e, a) } if e, a := 0, len(bareBCPipelines); e != a { t.Errorf("expected %v, got %v", e, a) } if e, a := 1, len(bareDCPipelines[0].Images); e != a { t.Errorf("expected %v, got %v", e, a) } }
func TestUnpushableBuild(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/unpushable-build.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) imageedges.AddAllImageStreamRefEdges(g) markers := FindUnpushableBuildConfigs(g) if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } actualBC := osgraph.GetTopLevelContainerNode(g, markers[0].Node) expectedBC := g.Find(osgraph.UniqueName("BuildConfig|/ruby-hello-world")) if e, a := expectedBC.ID(), actualBC.ID(); e != a { t.Errorf("expected %v, got %v", e, a) } actualIST := markers[0].RelatedNodes[0] expectedIST := g.Find(osgraph.UniqueName("ImageStreamTag|/ruby-hello-world:latest")) if e, a := expectedIST.ID(), actualIST.ID(); e != a { t.Errorf("expected %v, got %v: \n%v", e, a, g) } }
func TestMissingSecrets(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/bad_secret_refs.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } kubeedges.AddAllRequestedServiceAccountEdges(g) kubeedges.AddAllMountableSecretEdges(g) kubeedges.AddAllMountedSecretEdges(g) markers := FindMissingSecrets(g, osgraph.DefaultNamer) if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } actualDC := osgraph.GetTopLevelContainerNode(g, markers[0].Node) expectedDC := g.Find(osgraph.UniqueName("DeploymentConfig|/docker-nfs-server")) if e, a := expectedDC.ID(), actualDC.ID(); e != a { t.Errorf("expected %v, got %v", e, a) } actualSecret := markers[0].RelatedNodes[0] expectedSecret := g.Find(osgraph.UniqueName("Secret|/missing-secret")) if e, a := expectedSecret.ID(), actualSecret.ID(); e != a { t.Errorf("expected %v, got %v", e, a) } }
func TestCheckMountedSecrets(t *testing.T) { g, objs, err := osgraphtest.BuildGraph("../../../api/graph/test/bad_secret_refs.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } var dc *deployapi.DeploymentConfig for _, obj := range objs { if currDC, ok := obj.(*deployapi.DeploymentConfig); ok { if dc != nil { t.Errorf("got more than one dc: %v", currDC) } dc = currDC } } kubeedges.AddAllRequestedServiceAccountEdges(g) kubeedges.AddAllMountableSecretEdges(g) kubeedges.AddAllMountedSecretEdges(g) dcNode := g.Find(deploygraph.DeploymentConfigNodeName(dc)) unmountable, missing := CheckMountedSecrets(g, dcNode.(*deploygraph.DeploymentConfigNode)) if e, a := 2, len(unmountable); e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := 1, len(missing); e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := "missing-secret", missing[0].Name; e != a { t.Fatalf("expected %v, got %v", e, a) } }
func TestPendingImageStreamTag(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/unpushable-build.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) buildedges.AddAllBuildEdges(g) imageedges.AddAllImageStreamRefEdges(g) imageedges.AddAllImageStreamImageRefEdges(g) // Drop the build to showcase a TagNotAvailable warning (should happen when no // build is new, pending, or running currently) nodeFn := osgraph.NodesOfKind(imagegraph.ImageStreamTagNodeKind, buildgraph.BuildConfigNodeKind) edgeFn := osgraph.EdgesOfKind(buildedges.BuildInputImageEdgeKind, buildedges.BuildOutputEdgeKind) g = g.Subgraph(nodeFn, edgeFn) markers := FindPendingTags(g, osgraph.DefaultNamer) if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if got, expected := markers[0].Key, TagNotAvailableWarning; got != expected { t.Fatalf("expected marker key %q, got %q", expected, got) } }
func TestBuildConfigNoOutput(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/bc-missing-output.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } // we were getting go panics with nil refs cause output destinations are not required for BuildConfigs buildedges.AddAllInputOutputEdges(g) }
func TestDuelingRC(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/dueling-rcs.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } kubeedges.AddAllManagedByControllerPodEdges(g) markers := FindDuelingReplicationControllers(g, osgraph.DefaultNamer) if e, a := 2, len(markers); e != a { t.Errorf("expected %v, got %v", e, a) } expectedRC1 := g.Find(osgraph.UniqueName("ReplicationController|/rc-1")) expectedRC2 := g.Find(osgraph.UniqueName("ReplicationController|/rc-2")) found1 := false found2 := false for i := 0; i < 2; i++ { actualPod := osgraph.GetTopLevelContainerNode(g, markers[i].RelatedNodes[0]) expectedPod := g.Find(osgraph.UniqueName("Pod|/conflicted-pod")) if e, a := expectedPod.ID(), actualPod.ID(); e != a { t.Errorf("expected %v, got %v", e, a) } actualOtherRC := osgraph.GetTopLevelContainerNode(g, markers[i].RelatedNodes[1]) actualRC := markers[i].Node if e, a := expectedRC1.ID(), actualRC.ID(); e == a { found1 = true expectedOtherRC := expectedRC2 if e, a := expectedOtherRC.ID(), actualOtherRC.ID(); e != a { t.Errorf("expected %v, got %v", e, a) } } if e, a := expectedRC2.ID(), actualRC.ID(); e == a { found2 = true expectedOtherRC := expectedRC1 if e, a := expectedOtherRC.ID(), actualOtherRC.ID(); e != a { t.Errorf("expected %v, got %v", e, a) } } } if !found1 { t.Errorf("expected %v, got %v", expectedRC1, markers) } if !found2 { t.Errorf("expected %v, got %v", expectedRC2, markers) } }
func TestCircularDeps(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/circular.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) if len(FindCircularBuilds(g, osgraph.DefaultNamer)) != 1 { t.Fatalf("expected having circular dependencies") } not, _, err := osgraphtest.BuildGraph("../../../api/graph/test/circular-not.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(not) if len(FindCircularBuilds(not, osgraph.DefaultNamer)) != 0 { t.Fatalf("expected not having circular dependencies") } }
func TestPushableBuild(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/pushable-build.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) imageedges.AddAllImageStreamRefEdges(g) if e, a := 0, len(FindUnpushableBuildConfigs(g, osgraph.DefaultNamer)); e != a { t.Errorf("expected %v, got %v", e, a) } }
func TestPushableBuild(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/pushable-build.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) imageedges.AddAllImageStreamRefEdges(g) if e, a := false, hasUnresolvedImageStreamTag(g); e != a { t.Errorf("expected %v, got %v", e, a) } }
func TestRestartingPodWarning(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/restarting-pod.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } markers := FindRestartingPods(g) if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := RestartingPodWarning, markers[0].Key; e != a { t.Fatalf("expected %v, got %v", e, a) } }
func TestImageStreamPresent(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/prereq-image-present.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) imageedges.AddAllImageStreamRefEdges(g) imageedges.AddAllImageStreamImageRefEdges(g) if e, a := 0, len(FindMissingInputImageStreams(g, osgraph.DefaultNamer)); e != a { t.Errorf("expected %v, got %v", e, a) } }
func TestMissingRouter(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/lonely-route.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } routeedges.AddAllRouteEdges(g) markers := FindMissingRouter(g, osgraph.DefaultNamer) if expected, got := 1, len(markers); expected != got { t.Fatalf("expected %d markers, got %d", expected, got) } if expected, got := MissingRequiredRouterErr, markers[0].Key; expected != got { t.Fatalf("expected %s marker key, got %s", expected, got) } }
func TestPathBasedPassthroughRoutes(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/invalid-route.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } routeedges.AddAllRouteEdges(g) markers := FindPathBasedPassthroughRoutes(g, osgraph.DefaultNamer) if expected, got := 1, len(markers); expected != got { t.Fatalf("expected %d markers, got %d", expected, got) } if expected, got := PathBasedPassthroughErr, markers[0].Key; expected != got { t.Fatalf("expected %s marker key, got %s", expected, got) } }
func TestMissingTLSTerminationType(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/route-cruft.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } routeedges.AddAllRouteEdges(g) markers := FindMissingTLSTerminationType(g) if expected, got := 1, len(markers); expected != got { t.Fatalf("expected %d markers, got %d", expected, got) } if expected, got := MissingTLSTerminationTypeErr, markers[0].Key; expected != got { t.Fatalf("expected %s marker key, got %s", expected, got) } }
func TestSingleHostVolumeError(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/dc-with-claim.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } deployedges.AddAllVolumeClaimEdges(g) markers := FindPersistentVolumeClaimWarnings(g, osgraph.DefaultNamer) if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if got, expected := markers[0].Key, SingleHostVolumeWarning; got != expected { t.Fatalf("expected marker key %q, got %q", expected, got) } }
func TestLatestBuildFailed(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/failed-build.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) buildedges.AddAllBuildEdges(g) imageedges.AddAllImageStreamRefEdges(g) markers := FindPendingTags(g, osgraph.DefaultNamer) if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if got, expected := markers[0].Key, LatestBuildFailedErr; got != expected { t.Fatalf("expected marker key %q, got %q", expected, got) } }
func TestMissingImageStreamTag(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/missing-istag.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) deployedges.AddAllTriggerEdges(g) imageedges.AddAllImageStreamRefEdges(g) markers := FindDeploymentConfigTriggerErrors(g, osgraph.DefaultNamer) if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if got, expected := markers[0].Key, MissingImageStreamTagWarning; got != expected { t.Fatalf("expected marker key %q, got %q", expected, got) } }
func TestMissingReadinessProbe(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/unpushable-build-2.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) deployedges.AddAllTriggerEdges(g) imageedges.AddAllImageStreamRefEdges(g) markers := FindDeploymentConfigReadinessWarnings(g, osgraph.DefaultNamer, "command probe") if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if got, expected := markers[0].Key, MissingReadinessProbeWarning; got != expected { t.Fatalf("expected marker key %q, got %q", expected, got) } }
func TestSyntheticImageStreamTag(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/unpushable-build.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) deployedges.AddAllTriggerEdges(g) imageedges.AddAllImageStreamRefEdges(g) markers := FindDeploymentConfigTriggerErrors(g) if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if got, expected := markers[0].Key, ImageStreamTagNotAvailableInfo; got != expected { t.Fatalf("expected marker key %q, got %q", expected, got) } }
func TestUnmountableSecrets(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/bad_secret_refs.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } kubeedges.AddAllRequestedServiceAccountEdges(g) kubeedges.AddAllMountableSecretEdges(g) kubeedges.AddAllMountedSecretEdges(g) markers := FindUnmountableSecrets(g, osgraph.DefaultNamer) if e, a := 2, len(markers); e != a { t.Errorf("expected %v, got %v", e, a) } expectedSecret1 := g.Find(osgraph.UniqueName("Secret|/missing-secret")) expectedSecret2 := g.Find(osgraph.UniqueName("Secret|/unmountable-secret")) found1 := false found2 := false for i := 0; i < 2; i++ { actualDC := osgraph.GetTopLevelContainerNode(g, markers[i].Node) expectedDC := g.Find(osgraph.UniqueName("DeploymentConfig|/docker-nfs-server")) if e, a := expectedDC.ID(), actualDC.ID(); e != a { t.Errorf("expected %v, got %v", e, a) } actualSecret := markers[i].RelatedNodes[0] if e, a := expectedSecret1.ID(), actualSecret.ID(); e == a { found1 = true } if e, a := expectedSecret2.ID(), actualSecret.ID(); e == a { found2 = true } } if !found1 { t.Errorf("expected %v, got %v", expectedSecret1, markers) } if !found2 { t.Errorf("expected %v, got %v", expectedSecret2, markers) } }
func TestRestartingPodWarning(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/restarting-pod.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } defer func() { nowFn = unversioned.Now }() recent, _ := time.Parse(time.RFC3339, "2015-07-13T19:36:06Z") nowFn = func() unversioned.Time { return unversioned.NewTime(recent.UTC()) } markers := FindRestartingPods(g, osgraph.DefaultNamer, "oc logs", "oadm policy") sort.Sort(osgraph.BySeverity(markers)) if e, a := 4, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := CrashLoopingPodError, markers[0].Key; e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := CrashLoopingPodError, markers[1].Key; e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := RestartingPodWarning, markers[2].Key; e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := RestartingPodWarning, markers[3].Key; e != a { t.Fatalf("expected %v, got %v", e, a) } future, _ := time.Parse(time.RFC3339, "2015-07-13T19:46:06Z") nowFn = func() unversioned.Time { return unversioned.NewTime(future.UTC()) } markers = FindRestartingPods(g, osgraph.DefaultNamer, "oc logs", "oadm policy") sort.Sort(osgraph.BySeverity(markers)) if e, a := 3, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := CrashLoopingPodError, markers[0].Key; e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := CrashLoopingPodError, markers[1].Key; e != a { t.Fatalf("expected %v, got %v", e, a) } if e, a := RestartingPodWarning, markers[2].Key; e != a { t.Fatalf("expected %v, got %v", e, a) } }
func TestMissingLivenessProbes(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/simple-deployment.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } kubeedges.AddAllExposedPodEdges(g) markers := FindMissingLivenessProbes(g, osgraph.DefaultNamer, "oc set probe") if e, a := 1, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } actualDC := osgraph.GetTopLevelContainerNode(g, markers[0].Node) expectedDC := g.Find(osgraph.UniqueName("DeploymentConfig|/simple-deployment")) if e, a := expectedDC.ID(), actualDC.ID(); e != a { t.Errorf("expected %v, got %v", e, a) } }
func TestAllBCImageInputs(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/prereq-image-present.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) imageedges.AddAllImageStreamRefEdges(g) imageedges.AddAllImageStreamImageRefEdges(g) coveredNodes := IntSet{} bareBCPipelines, coveredByBCs := AllImagePipelinesFromBuildConfig(g, coveredNodes) coveredNodes.Insert(coveredByBCs.List()...) if e, a := 4, len(bareBCPipelines); e != a { t.Errorf("expected %v, got %v", e, a) } }
func TestHPAMissingScaleRefError(t *testing.T) { g, _, err := osgraphtest.BuildGraph("./../../../api/graph/test/hpa-missing-scale-ref.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } markers := FindHPASpecsMissingScaleRefs(g, osgraph.DefaultNamer) if len(markers) != 1 { t.Fatalf("expected to find one HPA spec missing a scale ref, got %d", len(markers)) } if actual, expected := markers[0].Severity, osgraph.ErrorSeverity; actual != expected { t.Errorf("expected HPA missing scale ref to be %v, got %v", expected, actual) } if actual, expected := markers[0].Key, HPAMissingScaleRefError; actual != expected { t.Errorf("expected marker type %v, got %v", expected, actual) } }
func TestImageStreamTagMissing(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/prereq-image-present-notag.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) imageedges.AddAllImageStreamRefEdges(g) imageedges.AddAllImageStreamImageRefEdges(g) markers := FindMissingInputImageStreams(g, osgraph.DefaultNamer) if e, a := 4, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } var actualImportOrBuild, actualImportOnly, actualSpecificHex int expectedImportOrBuild := 2 expectedImportOnly := 1 expectedSpecificHex := 1 for _, marker := range markers { if got, expected1, expected2 := marker.Key, MissingImageStreamImageWarning, MissingImageStreamTagWarning; got != expected1 && got != expected2 { t.Fatalf("expected marker key %q or %q, got %q", expected1, expected2, got) } else { if strings.Contains(marker.Suggestion.String(), "oc start-build") { actualImportOrBuild++ } if strings.Contains(marker.Suggestion.String(), "needs to be imported.") { actualImportOnly++ } if strings.Contains(marker.Suggestion.String(), "hexadecimal ID") { actualSpecificHex++ } } } if actualImportOnly != expectedImportOnly { t.Fatalf("expected %d import only suggestions but got %d", expectedImportOnly, actualImportOnly) } if actualImportOrBuild != expectedImportOrBuild { t.Fatalf("expected %d import or build suggestions but got %d", expectedImportOrBuild, actualImportOrBuild) } if actualSpecificHex != expectedSpecificHex { t.Fatalf("expected %d import specific image suggestions but got %d", expectedSpecificHex, actualSpecificHex) } }
func TestImageStreamTagMissing(t *testing.T) { g, _, err := osgraphtest.BuildGraph("../../../api/graph/test/prereq-image-present-notag.yaml") if err != nil { t.Fatalf("unexpected error: %v", err) } buildedges.AddAllInputOutputEdges(g) imageedges.AddAllImageStreamRefEdges(g) imageedges.AddAllImageStreamImageRefEdges(g) markers := FindMissingInputImageStreams(g, osgraph.DefaultNamer) if e, a := 4, len(markers); e != a { t.Fatalf("expected %v, got %v", e, a) } for _, marker := range markers { if got, expected1, expected2 := marker.Key, MissingImageStreamImageWarning, MissingImageStreamTagWarning; got != expected1 && got != expected2 { t.Fatalf("expected marker key %q or %q, got %q", expected1, expected2, got) } } }