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 }