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  }