github.com/verrazzano/verrazzano@v1.7.1/tools/vz/pkg/internal/util/cluster/clusterapi_test.go (about) 1 // Copyright (c) 2023, 2024, Oracle and/or its affiliates. 2 // Licensed under the Universal Permissive License v 1.0 as shown at https://oss.oracle.com/licenses/upl. 3 4 package cluster 5 6 import ( 7 "testing" 8 9 "github.com/stretchr/testify/assert" 10 capi "github.com/verrazzano/verrazzano/tools/vz/pkg/internal/util/cluster/clusterapi" 11 "github.com/verrazzano/verrazzano/tools/vz/pkg/internal/util/report" 12 "go.uber.org/zap" 13 ) 14 15 const ( 16 clusterAPIReadySnapshot = "../../test/cluster/cluster-api/clusters-ready/cluster-snapshot" 17 clustersAPINotReadySnapshot = "../../test/cluster/cluster-api/clusters-not-ready/cluster-snapshot" 18 ) 19 20 type capiTestCase struct { 21 Function func(clusterRoot string, namespace string, issueReporter *report.IssueReporter) error 22 ClusterRoot string 23 Namespaced bool 24 ExpectedIssues int 25 } 26 27 var capiTestCases = []capiTestCase{ 28 { 29 Function: capi.AnalyzeClusters, 30 ClusterRoot: clusterAPIReadySnapshot, 31 Namespaced: true, 32 ExpectedIssues: 0, 33 }, 34 { 35 Function: capi.AnalyzeClusters, 36 ClusterRoot: clustersAPINotReadySnapshot, 37 Namespaced: true, 38 ExpectedIssues: 1, 39 }, 40 { 41 Function: capi.AnalyzeOCIClusters, 42 ClusterRoot: clusterAPIReadySnapshot, 43 Namespaced: true, 44 ExpectedIssues: 0, 45 }, 46 { 47 Function: capi.AnalyzeOCIClusters, 48 ClusterRoot: clustersAPINotReadySnapshot, 49 Namespaced: true, 50 ExpectedIssues: 1, 51 }, 52 { 53 Function: capi.AnalyzeOCNEControlPlanes, 54 ClusterRoot: clusterAPIReadySnapshot, 55 Namespaced: true, 56 ExpectedIssues: 0, 57 }, 58 { 59 Function: capi.AnalyzeOCNEControlPlanes, 60 ClusterRoot: clustersAPINotReadySnapshot, 61 Namespaced: true, 62 ExpectedIssues: 1, 63 }, 64 { 65 Function: capi.AnalyzeMachines, 66 ClusterRoot: clusterAPIReadySnapshot, 67 Namespaced: true, 68 ExpectedIssues: 0, 69 }, 70 { 71 Function: capi.AnalyzeMachines, 72 ClusterRoot: clustersAPINotReadySnapshot, 73 Namespaced: true, 74 ExpectedIssues: 1, 75 }, 76 { 77 Function: capi.AnalyzeMachineDeployments, 78 ClusterRoot: clusterAPIReadySnapshot, 79 Namespaced: true, 80 ExpectedIssues: 0, 81 }, 82 { 83 Function: capi.AnalyzeMachineDeployments, 84 ClusterRoot: clustersAPINotReadySnapshot, 85 Namespaced: true, 86 ExpectedIssues: 1, 87 }, 88 { 89 Function: capi.AnalyzeOCNEConfigs, 90 ClusterRoot: clusterAPIReadySnapshot, 91 Namespaced: true, 92 ExpectedIssues: 0, 93 }, 94 { 95 Function: capi.AnalyzeOCNEConfigs, 96 ClusterRoot: clustersAPINotReadySnapshot, 97 Namespaced: true, 98 ExpectedIssues: 1, 99 }, 100 { 101 Function: capi.AnalyzeOCIMachines, 102 ClusterRoot: clusterAPIReadySnapshot, 103 Namespaced: true, 104 ExpectedIssues: 0, 105 }, 106 { 107 Function: capi.AnalyzeOCIMachines, 108 ClusterRoot: clustersAPINotReadySnapshot, 109 Namespaced: true, 110 ExpectedIssues: 1, 111 }, 112 { 113 Function: capi.AnalyzeMachineSets, 114 ClusterRoot: clusterAPIReadySnapshot, 115 Namespaced: true, 116 ExpectedIssues: 0, 117 }, 118 { 119 Function: capi.AnalyzeMachineSets, 120 ClusterRoot: clustersAPINotReadySnapshot, 121 Namespaced: true, 122 ExpectedIssues: 1, 123 }, 124 { 125 Function: capi.AnalyzeClusterResourceSets, 126 ClusterRoot: clusterAPIReadySnapshot, 127 Namespaced: true, 128 ExpectedIssues: 0, 129 }, 130 { 131 Function: capi.AnalyzeClusterResourceSets, 132 ClusterRoot: clustersAPINotReadySnapshot, 133 Namespaced: true, 134 ExpectedIssues: 1, 135 }, 136 } 137 138 // Test analyze Cluster API resources with different cluster snapshots. 139 func TestAnalyzeClusterAPI(t *testing.T) { 140 var issueReporter = report.IssueReporter{ 141 PendingIssues: make(map[string]report.Issue), 142 } 143 logger := zap.S() 144 145 for _, test := range capiTestCases { 146 report.ClearReports() 147 namespace := "" 148 if test.Namespaced { 149 namespace = "namespaced" 150 } 151 assert.NoError(t, test.Function(test.ClusterRoot, namespace, &issueReporter)) 152 issueReporter.Contribute(logger, test.ClusterRoot) 153 reportedIssues := report.GetAllSourcesFilteredIssues(logger, true, 0, 0) 154 if test.ExpectedIssues == 0 { 155 assert.Empty(t, reportedIssues) 156 } else { 157 assert.Len(t, reportedIssues, test.ExpectedIssues) 158 if len(reportedIssues) != 0 { 159 assert.Equal(t, "ClusterAPIClusterIssues", reportedIssues[0].Type) 160 } 161 } 162 } 163 }