sigs.k8s.io/cluster-api-provider-azure@v1.14.3/azure/services/virtualmachineimages/images_test.go (about)

     1  /*
     2  Copyright 2022 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 virtualmachineimages
    18  
    19  import (
    20  	"context"
    21  	"strings"
    22  	"testing"
    23  
    24  	"github.com/Azure/azure-sdk-for-go/sdk/azidentity"
    25  	"github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/compute/armcompute/v5"
    26  	. "github.com/onsi/gomega"
    27  	"go.uber.org/mock/gomock"
    28  	"k8s.io/utils/ptr"
    29  	"sigs.k8s.io/cluster-api-provider-azure/azure"
    30  	"sigs.k8s.io/cluster-api-provider-azure/azure/mock_azure"
    31  	"sigs.k8s.io/cluster-api-provider-azure/azure/services/virtualmachineimages/mock_virtualmachineimages"
    32  )
    33  
    34  func TestGetDefaultUbuntuImage(t *testing.T) {
    35  	tests := []struct {
    36  		k8sVersion      string
    37  		expectedSKU     string
    38  		expectedVersion string
    39  		versions        armcompute.VirtualMachineImagesClientListResponse
    40  	}{
    41  		{
    42  			k8sVersion:      "v1.15.6",
    43  			expectedSKU:     "k8s-1dot15dot6-ubuntu-1804",
    44  			expectedVersion: "latest",
    45  		},
    46  		{
    47  			k8sVersion:      "v1.17.11",
    48  			expectedSKU:     "k8s-1dot17dot11-ubuntu-1804",
    49  			expectedVersion: "latest",
    50  		},
    51  		{
    52  			k8sVersion:      "v1.18.19",
    53  			expectedSKU:     "k8s-1dot18dot19-ubuntu-1804",
    54  			expectedVersion: "latest",
    55  		},
    56  		{
    57  			k8sVersion:      "v1.18.20",
    58  			expectedSKU:     "k8s-1dot18dot20-ubuntu-2004",
    59  			expectedVersion: "latest",
    60  		},
    61  		{
    62  			k8sVersion:      "v1.19.11",
    63  			expectedSKU:     "k8s-1dot19dot11-ubuntu-1804",
    64  			expectedVersion: "latest",
    65  		},
    66  		{
    67  			k8sVersion:      "v1.19.12",
    68  			expectedSKU:     "k8s-1dot19dot12-ubuntu-2004",
    69  			expectedVersion: "latest",
    70  		},
    71  		{
    72  			k8sVersion:      "v1.21.1",
    73  			expectedSKU:     "k8s-1dot21dot1-ubuntu-1804",
    74  			expectedVersion: "latest",
    75  		},
    76  		{
    77  			k8sVersion:      "v1.21.2",
    78  			expectedSKU:     "k8s-1dot21dot2-ubuntu-2004",
    79  			expectedVersion: "latest",
    80  		},
    81  		{
    82  			k8sVersion:      "v1.21.12",
    83  			expectedSKU:     "k8s-1dot21dot12-ubuntu-2004",
    84  			expectedVersion: "latest",
    85  		},
    86  		{
    87  			k8sVersion:      "v1.21.13",
    88  			expectedSKU:     "ubuntu-2004-gen1",
    89  			expectedVersion: "121.13.20220613",
    90  			versions: armcompute.VirtualMachineImagesClientListResponse{
    91  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
    92  					{Name: ptr.To("121.13.20220526")},
    93  					{Name: ptr.To("121.13.20220613")},
    94  					{Name: ptr.To("121.13.20220524")},
    95  				},
    96  			},
    97  		},
    98  		{
    99  			k8sVersion:      "v1.22.0",
   100  			expectedSKU:     "k8s-1dot22dot0-ubuntu-2004",
   101  			expectedVersion: "latest",
   102  		},
   103  		{
   104  			k8sVersion:      "v1.22.9",
   105  			expectedSKU:     "k8s-1dot22dot9-ubuntu-2004",
   106  			expectedVersion: "latest",
   107  		},
   108  		{
   109  			k8sVersion:      "v1.22.10",
   110  			expectedSKU:     "ubuntu-2004-gen1",
   111  			expectedVersion: "122.10.20220613",
   112  			versions: armcompute.VirtualMachineImagesClientListResponse{
   113  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   114  					{Name: ptr.To("122.10.20220524")},
   115  					{Name: ptr.To("122.10.20220613")},
   116  				},
   117  			},
   118  		},
   119  		{
   120  			k8sVersion:      "v1.22.16",
   121  			expectedSKU:     "ubuntu-2004-gen1",
   122  			expectedVersion: "122.16.20221117",
   123  			versions: armcompute.VirtualMachineImagesClientListResponse{
   124  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   125  					{Name: ptr.To("122.16.20221117")},
   126  				},
   127  			},
   128  		},
   129  		{
   130  			k8sVersion:      "v1.23.6",
   131  			expectedSKU:     "k8s-1dot23dot6-ubuntu-2004",
   132  			expectedVersion: "latest",
   133  		},
   134  		{
   135  			k8sVersion:      "v1.23.7",
   136  			expectedSKU:     "ubuntu-2004-gen1",
   137  			expectedVersion: "123.7.20231231",
   138  			versions: armcompute.VirtualMachineImagesClientListResponse{
   139  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   140  					{Name: ptr.To("123.7.20221124")},
   141  					{Name: ptr.To("123.7.20220524")},
   142  					{Name: ptr.To("123.7.20231231")},
   143  					{Name: ptr.To("123.7.20220818")},
   144  				},
   145  			},
   146  		},
   147  		{
   148  			k8sVersion:      "v1.24.0",
   149  			expectedSKU:     "ubuntu-2004-gen1",
   150  			expectedVersion: "124.0.20220512",
   151  			versions: armcompute.VirtualMachineImagesClientListResponse{
   152  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   153  					{Name: ptr.To("124.0.20220512")},
   154  				},
   155  			},
   156  		},
   157  		{
   158  			k8sVersion:      "v1.23.12",
   159  			expectedSKU:     "ubuntu-2004-gen1",
   160  			expectedVersion: "123.12.20220921",
   161  			versions: armcompute.VirtualMachineImagesClientListResponse{
   162  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   163  					{Name: ptr.To("123.12.20220921")},
   164  				},
   165  			},
   166  		},
   167  		{
   168  			k8sVersion:      "v1.23.13",
   169  			expectedSKU:     "ubuntu-2004-gen1",
   170  			expectedVersion: "123.13.20221014",
   171  			versions: armcompute.VirtualMachineImagesClientListResponse{
   172  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   173  					{Name: ptr.To("123.13.20221014")},
   174  				},
   175  			},
   176  		},
   177  		{
   178  			k8sVersion:      "v1.24.6",
   179  			expectedSKU:     "ubuntu-2004-gen1",
   180  			expectedVersion: "124.6.20220921",
   181  			versions: armcompute.VirtualMachineImagesClientListResponse{
   182  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   183  					{Name: ptr.To("124.6.20220921")},
   184  				},
   185  			},
   186  		},
   187  		{
   188  			k8sVersion:      "v1.24.7",
   189  			expectedSKU:     "ubuntu-2004-gen1",
   190  			expectedVersion: "124.7.20221014",
   191  			versions: armcompute.VirtualMachineImagesClientListResponse{
   192  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   193  					{Name: ptr.To("124.7.20221014")},
   194  				},
   195  			},
   196  		},
   197  		{
   198  			k8sVersion:      "v1.25.2",
   199  			expectedSKU:     "ubuntu-2004-gen1",
   200  			expectedVersion: "125.2.20220921",
   201  			versions: armcompute.VirtualMachineImagesClientListResponse{
   202  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   203  					{Name: ptr.To("125.2.20220921")},
   204  				},
   205  			},
   206  		},
   207  		{
   208  			k8sVersion:      "v1.25.3",
   209  			expectedSKU:     "ubuntu-2204-gen1",
   210  			expectedVersion: "125.3.20221014",
   211  			versions: armcompute.VirtualMachineImagesClientListResponse{
   212  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   213  					{Name: ptr.To("125.3.20221014")},
   214  				},
   215  			},
   216  		},
   217  	}
   218  
   219  	location := "westus3"
   220  	for _, test := range tests {
   221  		test := test
   222  		t.Run(test.k8sVersion, func(t *testing.T) {
   223  			t.Parallel()
   224  
   225  			mockCtrl := gomock.NewController(t)
   226  			defer mockCtrl.Finish()
   227  			mockAuth := mock_azure.NewMockAuthorizer(mockCtrl)
   228  			mockAuth.EXPECT().HashKey().Return(t.Name()).AnyTimes()
   229  			mockAuth.EXPECT().SubscriptionID().AnyTimes()
   230  			mockAuth.EXPECT().CloudEnvironment().AnyTimes()
   231  			mockAuth.EXPECT().Token().Return(&azidentity.DefaultAzureCredential{}).AnyTimes()
   232  			mockClient := mock_virtualmachineimages.NewMockClient(mockCtrl)
   233  			svc := Service{Client: mockClient, Authorizer: mockAuth}
   234  
   235  			if test.versions.VirtualMachineImageResourceArray != nil {
   236  				mockClient.EXPECT().
   237  					List(gomock.Any(), location, azure.DefaultImagePublisherID, azure.DefaultImageOfferID, gomock.Any()).
   238  					Return(test.versions, nil)
   239  			}
   240  			image, err := svc.GetDefaultUbuntuImage(context.TODO(), location, test.k8sVersion)
   241  
   242  			g := NewWithT(t)
   243  			g.Expect(err).NotTo(HaveOccurred())
   244  			g.Expect(image.Marketplace.Version).To(Equal(test.expectedVersion))
   245  			g.Expect(image.Marketplace.SKU).To(Equal(test.expectedSKU))
   246  		})
   247  	}
   248  }
   249  
   250  func TestGetDefaultWindowsImage(t *testing.T) {
   251  	mockCtrl := gomock.NewController(t)
   252  	defer mockCtrl.Finish()
   253  
   254  	mockClient := mock_virtualmachineimages.NewMockClient(mockCtrl)
   255  	svc := Service{Client: mockClient}
   256  
   257  	var tests = []struct {
   258  		name        string
   259  		k8sVersion  string
   260  		runtime     string
   261  		osVersion   string
   262  		expectedSKU string
   263  		expectedErr string
   264  	}{
   265  		{
   266  			name:        "no k8sVersion",
   267  			k8sVersion:  "1.1.1.1.1.1",
   268  			runtime:     "",
   269  			osVersion:   "",
   270  			expectedSKU: "",
   271  			expectedErr: "unable to parse Kubernetes version \"1.1.1.1.1.1\": Invalid character(s) found in patch number \"1.1.1.1\"",
   272  		},
   273  		{
   274  			name:        "1.21.* - default runtime - default osVersion",
   275  			k8sVersion:  "v1.21.4",
   276  			runtime:     "",
   277  			osVersion:   "",
   278  			expectedSKU: "k8s-1dot21dot4-windows-2019",
   279  			expectedErr: "",
   280  		},
   281  		{
   282  			name:        "1.21.* - dockershim runtime - default osVersion",
   283  			k8sVersion:  "v1.21.4",
   284  			runtime:     "dockershim",
   285  			osVersion:   "",
   286  			expectedSKU: "k8s-1dot21dot4-windows-2019",
   287  			expectedErr: "",
   288  		},
   289  		{
   290  			name:        "1.21.* - containerd runtime - default osVersion",
   291  			k8sVersion:  "v1.21.4",
   292  			runtime:     "containerd",
   293  			osVersion:   "",
   294  			expectedSKU: "",
   295  			expectedErr: "containerd image only supported in 1.22+",
   296  		},
   297  		{
   298  			name:        "1.23.* - containerd runtime - default osVersion",
   299  			k8sVersion:  "v1.23.2",
   300  			runtime:     "containerd",
   301  			osVersion:   "",
   302  			expectedSKU: "k8s-1dot23dot2-windows-2019-containerd",
   303  			expectedErr: "",
   304  		},
   305  		{
   306  			name:        "1.23.* - default runtime - 2019 osVersion",
   307  			k8sVersion:  "v1.23.2",
   308  			runtime:     "",
   309  			osVersion:   "windows-2019",
   310  			expectedSKU: "k8s-1dot23dot2-windows-2019-containerd",
   311  			expectedErr: "",
   312  		},
   313  		{
   314  			name:        "1.23.* - default runtime - 2022 osVersion",
   315  			k8sVersion:  "v1.23.2",
   316  			runtime:     "",
   317  			osVersion:   "windows-2022",
   318  			expectedSKU: "k8s-1dot23dot2-windows-2022-containerd",
   319  			expectedErr: "",
   320  		},
   321  		{
   322  			name:        "1.23.* - containerd runtime - 2022 osVersion",
   323  			k8sVersion:  "v1.23.2",
   324  			runtime:     "containerd",
   325  			osVersion:   "windows-2022",
   326  			expectedSKU: "k8s-1dot23dot2-windows-2022-containerd",
   327  			expectedErr: "",
   328  		},
   329  	}
   330  
   331  	for _, test := range tests {
   332  		t.Run(test.name, func(t *testing.T) {
   333  			g := NewWithT(t)
   334  			image, err := svc.GetDefaultWindowsImage(context.TODO(), "", test.k8sVersion, test.runtime, test.osVersion)
   335  			if test.expectedErr != "" {
   336  				g.Expect(err).To(HaveOccurred())
   337  				g.Expect(err.Error()).To(Equal(test.expectedErr))
   338  			} else {
   339  				g.Expect(err).NotTo(HaveOccurred())
   340  				g.Expect(image.Marketplace.SKU).To(Equal(test.expectedSKU))
   341  			}
   342  		})
   343  	}
   344  }
   345  
   346  func TestGetDefaultImageSKUID(t *testing.T) {
   347  	var tests = []struct {
   348  		k8sVersion      string
   349  		osAndVersion    string
   350  		expectedSKU     string
   351  		expectedVersion string
   352  		expectedError   bool
   353  		versions        armcompute.VirtualMachineImagesClientListResponse
   354  	}{
   355  		{
   356  			k8sVersion:      "v1.14.9",
   357  			expectedSKU:     "k8s-1dot14dot9-ubuntu-1804",
   358  			expectedVersion: "latest",
   359  			expectedError:   false,
   360  			osAndVersion:    "ubuntu-1804",
   361  		},
   362  		{
   363  			k8sVersion:      "v1.14.10",
   364  			expectedSKU:     "k8s-1dot14dot10-ubuntu-1804",
   365  			expectedError:   false,
   366  			expectedVersion: "latest",
   367  			osAndVersion:    "ubuntu-1804",
   368  		},
   369  		{
   370  			k8sVersion:      "v1.15.6",
   371  			expectedSKU:     "k8s-1dot15dot6-ubuntu-1804",
   372  			expectedError:   false,
   373  			expectedVersion: "latest",
   374  			osAndVersion:    "ubuntu-1804",
   375  		},
   376  		{
   377  			k8sVersion:      "v1.15.7",
   378  			expectedSKU:     "k8s-1dot15dot7-ubuntu-1804",
   379  			expectedError:   false,
   380  			expectedVersion: "latest",
   381  			osAndVersion:    "ubuntu-1804",
   382  		},
   383  		{
   384  			k8sVersion:      "v1.16.3",
   385  			expectedSKU:     "k8s-1dot16dot3-ubuntu-1804",
   386  			expectedError:   false,
   387  			expectedVersion: "latest",
   388  			osAndVersion:    "ubuntu-1804",
   389  		},
   390  		{
   391  			k8sVersion:      "v1.16.4",
   392  			expectedSKU:     "k8s-1dot16dot4-ubuntu-1804",
   393  			expectedError:   false,
   394  			expectedVersion: "latest",
   395  			osAndVersion:    "ubuntu-1804",
   396  		},
   397  		{
   398  			k8sVersion:      "1.12.0",
   399  			expectedSKU:     "k8s-1dot12dot0-ubuntu-1804",
   400  			expectedError:   false,
   401  			expectedVersion: "latest",
   402  			osAndVersion:    "ubuntu-1804",
   403  		},
   404  		{
   405  			k8sVersion:    "1.1.notvalid.semver",
   406  			expectedSKU:   "",
   407  			expectedError: true,
   408  		},
   409  		{
   410  			k8sVersion:      "v1.19.3",
   411  			expectedSKU:     "k8s-1dot19dot3-windows-2019",
   412  			expectedVersion: "latest",
   413  			expectedError:   false,
   414  			osAndVersion:    "windows-2019",
   415  		},
   416  		{
   417  			k8sVersion:      "v1.20.8",
   418  			expectedSKU:     "k8s-1dot20dot8-windows-2019",
   419  			expectedVersion: "latest",
   420  			expectedError:   false,
   421  			osAndVersion:    "windows-2019",
   422  		},
   423  		{
   424  			k8sVersion:      "v1.21.2",
   425  			expectedSKU:     "k8s-1dot21dot2-windows-2019",
   426  			expectedVersion: "latest",
   427  			expectedError:   false,
   428  			osAndVersion:    "windows-2019",
   429  		},
   430  		{
   431  			k8sVersion:      "v1.21.13",
   432  			expectedSKU:     "windows-2022-gen1",
   433  			expectedVersion: "121.13.20300524",
   434  			expectedError:   false,
   435  			osAndVersion:    "windows-2022",
   436  			versions: armcompute.VirtualMachineImagesClientListResponse{
   437  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   438  					{Name: ptr.To("121.13.20220524")},
   439  					{Name: ptr.To("124.0.20220512")},
   440  					{Name: ptr.To("121.13.20220524")},
   441  					{Name: ptr.To("123.13.20220524")},
   442  					{Name: ptr.To("121.13.20220619")},
   443  					{Name: ptr.To("121.13.20300524")},
   444  					{Name: ptr.To("121.14.20220524")},
   445  					{Name: ptr.To("121.12.20220524")},
   446  					{Name: ptr.To("121.13.20220101")},
   447  					{Name: ptr.To("121.13.20231231")},
   448  					{Name: ptr.To("121.13.19991231")},
   449  				},
   450  			},
   451  		},
   452  		{
   453  			k8sVersion:      "v1.20.8",
   454  			expectedSKU:     "k8s-1dot20dot8-ubuntu-2004",
   455  			expectedVersion: "latest",
   456  			expectedError:   false,
   457  			osAndVersion:    "ubuntu-2004",
   458  		},
   459  		{
   460  			k8sVersion:      "v1.21.2",
   461  			expectedSKU:     "k8s-1dot21dot2-ubuntu-2004",
   462  			expectedVersion: "latest",
   463  			expectedError:   false,
   464  			osAndVersion:    "ubuntu-2004",
   465  		},
   466  		{
   467  			k8sVersion:      "v1.22.0",
   468  			expectedSKU:     "k8s-1dot22dot0-ubuntu-2004",
   469  			expectedVersion: "latest",
   470  			expectedError:   false,
   471  			osAndVersion:    "ubuntu-2004",
   472  		},
   473  		{
   474  			k8sVersion:      "v1.22.9",
   475  			expectedSKU:     "k8s-1dot22dot9-ubuntu-2004",
   476  			expectedVersion: "latest",
   477  			expectedError:   false,
   478  			osAndVersion:    "ubuntu-2004",
   479  		},
   480  		{
   481  			k8sVersion:      "v1.23.12",
   482  			expectedSKU:     "ubuntu-2004-gen1",
   483  			expectedVersion: "123.12.20220921",
   484  			expectedError:   false,
   485  			osAndVersion:    "ubuntu-2004",
   486  			versions: armcompute.VirtualMachineImagesClientListResponse{
   487  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   488  					{Name: ptr.To("123.12.20220921")},
   489  				},
   490  			},
   491  		},
   492  		{
   493  			k8sVersion:      "v1.23.13",
   494  			expectedSKU:     "ubuntu-2204-gen1",
   495  			expectedVersion: "123.13.20220524",
   496  			expectedError:   false,
   497  			osAndVersion:    "ubuntu-2204",
   498  			versions: armcompute.VirtualMachineImagesClientListResponse{
   499  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   500  					{Name: ptr.To("123.13.20220524")},
   501  				},
   502  			},
   503  		},
   504  		{
   505  			k8sVersion:    "v1.23.13",
   506  			expectedError: true,
   507  			osAndVersion:  "ubuntu-2004",
   508  			versions: armcompute.VirtualMachineImagesClientListResponse{
   509  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{},
   510  			},
   511  		},
   512  		{
   513  			k8sVersion:      "v1.24.0",
   514  			expectedSKU:     "ubuntu-2004-gen1",
   515  			expectedVersion: "124.0.20220512",
   516  			expectedError:   false,
   517  			osAndVersion:    "ubuntu-2004",
   518  			versions: armcompute.VirtualMachineImagesClientListResponse{
   519  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   520  					{Name: ptr.To("124.0.20220512")},
   521  				},
   522  			},
   523  		},
   524  		{
   525  			k8sVersion:      "v1.24.0",
   526  			expectedSKU:     "windows-2022-containerd-gen1",
   527  			expectedVersion: "124.0.20220606",
   528  			expectedError:   false,
   529  			osAndVersion:    "windows-2022-containerd",
   530  			versions: armcompute.VirtualMachineImagesClientListResponse{
   531  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   532  					{Name: ptr.To("124.0.20220606")},
   533  				},
   534  			},
   535  		},
   536  		{
   537  			k8sVersion:    "v1.24.1",
   538  			expectedError: true,
   539  			osAndVersion:  "windows-2022-containerd",
   540  			versions: armcompute.VirtualMachineImagesClientListResponse{
   541  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   542  					{Name: ptr.To("124.0.20220606")},
   543  				},
   544  			},
   545  		},
   546  		{
   547  			k8sVersion:      "v1.25.4",
   548  			expectedSKU:     "ubuntu-2204-gen1",
   549  			expectedVersion: "125.4.20221011",
   550  			expectedError:   false,
   551  			osAndVersion:    "ubuntu-2204",
   552  			versions: armcompute.VirtualMachineImagesClientListResponse{
   553  				VirtualMachineImageResourceArray: []*armcompute.VirtualMachineImageResource{
   554  					{Name: ptr.To("125.4.20221011")},
   555  				},
   556  			},
   557  		},
   558  	}
   559  
   560  	location := "francesouth"
   561  	for _, test := range tests {
   562  		test := test
   563  		t.Run(test.k8sVersion, func(t *testing.T) {
   564  			t.Parallel()
   565  
   566  			mockCtrl := gomock.NewController(t)
   567  			defer mockCtrl.Finish()
   568  			mockAuth := mock_azure.NewMockAuthorizer(mockCtrl)
   569  			mockAuth.EXPECT().HashKey().Return(t.Name()).AnyTimes()
   570  			mockAuth.EXPECT().SubscriptionID().AnyTimes()
   571  			mockAuth.EXPECT().CloudEnvironment().AnyTimes()
   572  			mockAuth.EXPECT().Token().Return(&azidentity.DefaultAzureCredential{}).AnyTimes()
   573  			mockClient := mock_virtualmachineimages.NewMockClient(mockCtrl)
   574  			svc := Service{Client: mockClient, Authorizer: mockAuth}
   575  
   576  			offer := azure.DefaultImageOfferID
   577  			if strings.HasPrefix(test.osAndVersion, "windows") {
   578  				offer = azure.DefaultWindowsImageOfferID
   579  			}
   580  			if test.versions.VirtualMachineImageResourceArray != nil {
   581  				mockClient.EXPECT().
   582  					List(gomock.Any(), location, azure.DefaultImagePublisherID, offer, gomock.Any()).
   583  					Return(test.versions, nil)
   584  			}
   585  			id, version, err := svc.getSKUAndVersion(context.TODO(), location, azure.DefaultImagePublisherID,
   586  				offer, test.k8sVersion, test.osAndVersion)
   587  
   588  			g := NewWithT(t)
   589  			if test.expectedError {
   590  				g.Expect(err).To(HaveOccurred())
   591  			} else {
   592  				g.Expect(err).NotTo(HaveOccurred())
   593  			}
   594  			g.Expect(id).To(Equal(test.expectedSKU))
   595  			g.Expect(version).To(Equal(test.expectedVersion))
   596  		})
   597  	}
   598  }