sigs.k8s.io/cluster-api-provider-azure@v1.17.0/api/v1beta1/azuremanagedcontrolplanetemplate_default_test.go (about)

     1  /*
     2  Copyright 2023 The Kubernetes Authors.
     3  
     4  Licensed under the Apache License, Version 2.0 (the "License");
     5  you may not use this file except in compliance with the License.
     6  You may obtain a copy of the License at
     7  
     8      http://www.apache.org/licenses/LICENSE-2.0
     9  
    10  Unless required by applicable law or agreed to in writing, software
    11  distributed under the License is distributed on an "AS IS" BASIS,
    12  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    13  See the License for the specific language governing permissions and
    14  limitations under the License.
    15  */
    16  
    17  package v1beta1
    18  
    19  import (
    20  	"encoding/json"
    21  	"reflect"
    22  	"testing"
    23  
    24  	. "github.com/onsi/gomega"
    25  	metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
    26  )
    27  
    28  func TestDefaultVirtualNetworkTemplate(t *testing.T) {
    29  	cases := []struct {
    30  		name                 string
    31  		controlPlaneTemplate *AzureManagedControlPlaneTemplate
    32  		outputTemplate       *AzureManagedControlPlaneTemplate
    33  	}{
    34  		{
    35  			name: "virtual network not specified",
    36  			controlPlaneTemplate: &AzureManagedControlPlaneTemplate{
    37  				ObjectMeta: metav1.ObjectMeta{
    38  					Name: "test-cluster-template",
    39  				},
    40  				Spec: AzureManagedControlPlaneTemplateSpec{
    41  					Template: AzureManagedControlPlaneTemplateResource{},
    42  				},
    43  			},
    44  			outputTemplate: &AzureManagedControlPlaneTemplate{
    45  				ObjectMeta: metav1.ObjectMeta{
    46  					Name: "test-cluster-template",
    47  				},
    48  				Spec: AzureManagedControlPlaneTemplateSpec{
    49  					Template: AzureManagedControlPlaneTemplateResource{
    50  						Spec: AzureManagedControlPlaneTemplateResourceSpec{
    51  							AzureManagedControlPlaneClassSpec: AzureManagedControlPlaneClassSpec{
    52  								VirtualNetwork: ManagedControlPlaneVirtualNetwork{
    53  									ManagedControlPlaneVirtualNetworkClassSpec: ManagedControlPlaneVirtualNetworkClassSpec{
    54  										CIDRBlock: defaultAKSVnetCIDR,
    55  									},
    56  								},
    57  							},
    58  						},
    59  					},
    60  				},
    61  			},
    62  		},
    63  		{
    64  			name: "custom cidr block",
    65  			controlPlaneTemplate: &AzureManagedControlPlaneTemplate{
    66  				ObjectMeta: metav1.ObjectMeta{
    67  					Name: "test-cluster-template",
    68  				},
    69  				Spec: AzureManagedControlPlaneTemplateSpec{
    70  					Template: AzureManagedControlPlaneTemplateResource{
    71  						Spec: AzureManagedControlPlaneTemplateResourceSpec{
    72  							AzureManagedControlPlaneClassSpec: AzureManagedControlPlaneClassSpec{
    73  								VirtualNetwork: ManagedControlPlaneVirtualNetwork{
    74  									ManagedControlPlaneVirtualNetworkClassSpec: ManagedControlPlaneVirtualNetworkClassSpec{
    75  										CIDRBlock: "10.0.0.16/24",
    76  									},
    77  								},
    78  							},
    79  						},
    80  					},
    81  				},
    82  			},
    83  			outputTemplate: &AzureManagedControlPlaneTemplate{
    84  				ObjectMeta: metav1.ObjectMeta{
    85  					Name: "test-cluster-template",
    86  				},
    87  				Spec: AzureManagedControlPlaneTemplateSpec{
    88  					Template: AzureManagedControlPlaneTemplateResource{
    89  						Spec: AzureManagedControlPlaneTemplateResourceSpec{
    90  							AzureManagedControlPlaneClassSpec: AzureManagedControlPlaneClassSpec{
    91  								VirtualNetwork: ManagedControlPlaneVirtualNetwork{
    92  									ManagedControlPlaneVirtualNetworkClassSpec: ManagedControlPlaneVirtualNetworkClassSpec{
    93  										CIDRBlock: "10.0.0.16/24",
    94  									},
    95  								},
    96  							},
    97  						},
    98  					},
    99  				},
   100  			},
   101  		},
   102  	}
   103  
   104  	for _, c := range cases {
   105  		tc := c
   106  		t.Run(tc.name, func(t *testing.T) {
   107  			t.Parallel()
   108  			tc.controlPlaneTemplate.setDefaultVirtualNetwork()
   109  			if !reflect.DeepEqual(tc.controlPlaneTemplate, tc.outputTemplate) {
   110  				expected, _ := json.MarshalIndent(tc.outputTemplate, "", "\t")
   111  				actual, _ := json.MarshalIndent(tc.controlPlaneTemplate, "", "\t")
   112  				t.Errorf("Expected %s, got %s", string(expected), string(actual))
   113  			}
   114  		})
   115  	}
   116  }
   117  
   118  func TestDefaultSubnetTemplate(t *testing.T) {
   119  	cases := []struct {
   120  		name                 string
   121  		controlPlaneTemplate *AzureManagedControlPlaneTemplate
   122  		outputTemplate       *AzureManagedControlPlaneTemplate
   123  	}{
   124  		{
   125  			name: "subnet not specified",
   126  			controlPlaneTemplate: &AzureManagedControlPlaneTemplate{
   127  				ObjectMeta: metav1.ObjectMeta{
   128  					Name: "test-cluster-template",
   129  				},
   130  				Spec: AzureManagedControlPlaneTemplateSpec{
   131  					Template: AzureManagedControlPlaneTemplateResource{},
   132  				},
   133  			},
   134  			outputTemplate: &AzureManagedControlPlaneTemplate{
   135  				ObjectMeta: metav1.ObjectMeta{
   136  					Name: "test-cluster-template",
   137  				},
   138  				Spec: AzureManagedControlPlaneTemplateSpec{
   139  					Template: AzureManagedControlPlaneTemplateResource{
   140  						Spec: AzureManagedControlPlaneTemplateResourceSpec{
   141  							AzureManagedControlPlaneClassSpec: AzureManagedControlPlaneClassSpec{
   142  								VirtualNetwork: ManagedControlPlaneVirtualNetwork{
   143  									ManagedControlPlaneVirtualNetworkClassSpec: ManagedControlPlaneVirtualNetworkClassSpec{
   144  										Subnet: ManagedControlPlaneSubnet{
   145  											Name:      "test-cluster-template",
   146  											CIDRBlock: defaultAKSNodeSubnetCIDR,
   147  										},
   148  									},
   149  								},
   150  							},
   151  						},
   152  					},
   153  				},
   154  			},
   155  		},
   156  		{
   157  			name: "custom name",
   158  			controlPlaneTemplate: &AzureManagedControlPlaneTemplate{
   159  				ObjectMeta: metav1.ObjectMeta{
   160  					Name: "test-cluster-template",
   161  				},
   162  				Spec: AzureManagedControlPlaneTemplateSpec{
   163  					Template: AzureManagedControlPlaneTemplateResource{
   164  						Spec: AzureManagedControlPlaneTemplateResourceSpec{
   165  							AzureManagedControlPlaneClassSpec: AzureManagedControlPlaneClassSpec{
   166  								VirtualNetwork: ManagedControlPlaneVirtualNetwork{
   167  									ManagedControlPlaneVirtualNetworkClassSpec: ManagedControlPlaneVirtualNetworkClassSpec{
   168  										Subnet: ManagedControlPlaneSubnet{
   169  											Name: "custom-subnet-name",
   170  										},
   171  									},
   172  								},
   173  							},
   174  						},
   175  					},
   176  				},
   177  			},
   178  			outputTemplate: &AzureManagedControlPlaneTemplate{
   179  				ObjectMeta: metav1.ObjectMeta{
   180  					Name: "test-cluster-template",
   181  				},
   182  				Spec: AzureManagedControlPlaneTemplateSpec{
   183  					Template: AzureManagedControlPlaneTemplateResource{
   184  						Spec: AzureManagedControlPlaneTemplateResourceSpec{
   185  							AzureManagedControlPlaneClassSpec: AzureManagedControlPlaneClassSpec{
   186  								VirtualNetwork: ManagedControlPlaneVirtualNetwork{
   187  									ManagedControlPlaneVirtualNetworkClassSpec: ManagedControlPlaneVirtualNetworkClassSpec{
   188  										Subnet: ManagedControlPlaneSubnet{
   189  											Name:      "custom-subnet-name",
   190  											CIDRBlock: defaultAKSNodeSubnetCIDR,
   191  										},
   192  									},
   193  								},
   194  							},
   195  						},
   196  					},
   197  				},
   198  			},
   199  		},
   200  		{
   201  			name: "custom cidr block",
   202  			controlPlaneTemplate: &AzureManagedControlPlaneTemplate{
   203  				ObjectMeta: metav1.ObjectMeta{
   204  					Name: "test-cluster-template",
   205  				},
   206  				Spec: AzureManagedControlPlaneTemplateSpec{
   207  					Template: AzureManagedControlPlaneTemplateResource{
   208  						Spec: AzureManagedControlPlaneTemplateResourceSpec{
   209  							AzureManagedControlPlaneClassSpec: AzureManagedControlPlaneClassSpec{
   210  								VirtualNetwork: ManagedControlPlaneVirtualNetwork{
   211  									ManagedControlPlaneVirtualNetworkClassSpec: ManagedControlPlaneVirtualNetworkClassSpec{
   212  										Subnet: ManagedControlPlaneSubnet{
   213  											CIDRBlock: "10.0.0.16/24",
   214  										},
   215  									},
   216  								},
   217  							},
   218  						},
   219  					},
   220  				},
   221  			},
   222  			outputTemplate: &AzureManagedControlPlaneTemplate{
   223  				ObjectMeta: metav1.ObjectMeta{
   224  					Name: "test-cluster-template",
   225  				},
   226  				Spec: AzureManagedControlPlaneTemplateSpec{
   227  					Template: AzureManagedControlPlaneTemplateResource{
   228  						Spec: AzureManagedControlPlaneTemplateResourceSpec{
   229  							AzureManagedControlPlaneClassSpec: AzureManagedControlPlaneClassSpec{
   230  								VirtualNetwork: ManagedControlPlaneVirtualNetwork{
   231  									ManagedControlPlaneVirtualNetworkClassSpec: ManagedControlPlaneVirtualNetworkClassSpec{
   232  										Subnet: ManagedControlPlaneSubnet{
   233  											Name:      "test-cluster-template",
   234  											CIDRBlock: "10.0.0.16/24",
   235  										},
   236  									},
   237  								},
   238  							},
   239  						},
   240  					},
   241  				},
   242  			},
   243  		},
   244  	}
   245  
   246  	for _, c := range cases {
   247  		tc := c
   248  		t.Run(tc.name, func(t *testing.T) {
   249  			t.Parallel()
   250  			tc.controlPlaneTemplate.setDefaultSubnet()
   251  			if !reflect.DeepEqual(tc.controlPlaneTemplate, tc.outputTemplate) {
   252  				expected, _ := json.MarshalIndent(tc.outputTemplate, "", "\t")
   253  				actual, _ := json.MarshalIndent(tc.controlPlaneTemplate, "", "\t")
   254  				t.Errorf("Expected %s, got %s", string(expected), string(actual))
   255  			}
   256  		})
   257  	}
   258  }
   259  
   260  func TestSetDefault(t *testing.T) {
   261  	g := NewGomegaWithT(t)
   262  
   263  	type Struct struct{ name string }
   264  
   265  	var s *Struct
   266  	setDefault(&s, &Struct{"hello"})
   267  	g.Expect(s.name).To(Equal("hello"))
   268  	setDefault(&s, &Struct{"world"})
   269  	g.Expect(s.name).To(Equal("hello"))
   270  
   271  	r := &Struct{}
   272  	setDefault(&r, &Struct{"a name"})
   273  	g.Expect(r.name).To(BeEmpty())
   274  	setDefault(&r.name, "hello")
   275  	g.Expect(r.name).To(Equal("hello"))
   276  	setDefault(&r.name, "world")
   277  	g.Expect(r.name).To(Equal("hello"))
   278  
   279  	str := ""
   280  	setDefault(&str, "a string")
   281  	g.Expect(str).To(Equal("a string"))
   282  	setDefault(&str, "another string")
   283  	g.Expect(str).To(Equal("a string"))
   284  }