Skip to content

Commit 63de64f

Browse files
committed
Improve testing of NewDriver function
1 parent a71697f commit 63de64f

File tree

2 files changed

+109
-6
lines changed

2 files changed

+109
-6
lines changed

pkg/azurelustre/azurelustre.go

Lines changed: 15 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,9 @@ const (
5353
volumeIDTemplate = "%s#%s#%s#%s#%s#%s"
5454
subnetTemplate = "/subscriptions/%s/resourceGroups/%s/providers/Microsoft.Network/virtualNetworks/%s/subnets/%s"
5555

56+
DefaultAzureConfigFileEnv = "AZURE_CONFIG_FILE"
57+
DefaultConfigFilePathLinux = "/etc/kubernetes/azure.json"
58+
5659
amlFilesystemNameMaxLength = 80
5760

5861
AgentNotReadyNodeTaintKeySuffix = "/agent-not-ready"
@@ -177,15 +180,21 @@ func NewDriver(options *DriverOptions) *Driver {
177180

178181
ctx := context.Background()
179182

180-
// Will need to change if we ever support non-AKS clusters
181-
AKSConfigFile := "/etc/kubernetes/azure.json"
182-
183183
az := &azure.Cloud{}
184+
185+
credFile, ok := os.LookupEnv(DefaultAzureConfigFileEnv)
186+
if ok && strings.TrimSpace(credFile) != "" {
187+
klog.V(2).Infof("%s env var set as %v", DefaultAzureConfigFileEnv, credFile)
188+
} else {
189+
credFile = DefaultConfigFilePathLinux
190+
klog.V(2).Infof("use default %s env var: %v", DefaultAzureConfigFileEnv, credFile)
191+
}
192+
184193
config, err := configloader.Load[azure.Config](ctx, nil, &configloader.FileLoaderConfig{
185-
FilePath: AKSConfigFile,
194+
FilePath: credFile,
186195
})
187196
if err != nil {
188-
klog.V(2).Infof("failed to get cloud config from file %s: %v", AKSConfigFile, err)
197+
klog.V(2).Infof("failed to get cloud config from file %s: %v", credFile, err)
189198
}
190199

191200
if config == nil {
@@ -374,6 +383,7 @@ type JSONPatch struct {
374383
}
375384

376385
// removeTaintInBackground removes the taint from the node in a goroutine with retry logic
386+
// TODO: We could test this properly with synctest when we move to go 1.25
377387
func removeTaintInBackground(k8sClient kubernetes.Interface, nodeName, driverName string, backoff wait.Backoff, removalFunc func(kubernetes.Interface, string, string) error) {
378388
klog.V(2).Infof("starting background node taint removal for node %s", nodeName)
379389
go func() {

pkg/azurelustre/azurelustre_test.go

Lines changed: 94 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,107 @@ func (f *FakeDynamicProvisioner) GetSkuValuesForLocation(_ context.Context, loca
131131
}
132132

133133
func TestNewDriver(t *testing.T) {
134+
fakeConfigFile := "fake-cred-file.json"
135+
fakeConfigContent := `{
136+
"tenantId": "fake-tenant-id",
137+
"subscriptionId": "fake-subscription-id",
138+
"aadClientId": "fake-client-id",
139+
"aadClientSecret": "fake-client-secret",
140+
"resourceGroup": "fake-resource-group",
141+
"location": "fake-location",
142+
}`
143+
144+
if err := os.WriteFile(fakeConfigFile, []byte(fakeConfigContent), 0o600); err != nil {
145+
t.Error(err)
146+
}
147+
148+
defer func() {
149+
if err := os.Remove(fakeConfigFile); err != nil {
150+
t.Error(err)
151+
}
152+
}()
153+
154+
t.Setenv(DefaultAzureConfigFileEnv, fakeConfigFile)
155+
134156
driverOptions := DriverOptions{
135157
NodeID: fakeNodeID,
136-
DriverName: DefaultDriverName,
158+
DriverName: fakeDriverName,
159+
EnableAzureLustreMockMount: false,
160+
EnableAzureLustreMockDynProv: true,
161+
WorkingMountDir: "/tmp",
162+
RemoveNotReadyTaint: true,
163+
}
164+
d := NewDriver(&driverOptions)
165+
assert.NotNil(t, d)
166+
assert.NotNil(t, d.cloud)
167+
assert.NotNil(t, d.dynamicProvisioner)
168+
assert.Equal(t, "fake-resource-group", d.resourceGroup)
169+
assert.Equal(t, "fake-location", d.location)
170+
assert.Equal(t, fakeNodeID, d.NodeID)
171+
assert.Equal(t, fakeDriverName, d.Name)
172+
assert.Equal(t, "fake-subscription-id", d.cloud.SubscriptionID)
173+
assert.Equal(t, "fake-tenant-id", d.cloud.TenantID)
174+
assert.Equal(t, "fake-client-id", d.cloud.AADClientID)
175+
assert.Equal(t, "fake-client-secret", d.cloud.AADClientSecret)
176+
assert.Equal(t, "fake-location", d.cloud.Location)
177+
assert.Equal(t, "fake-resource-group", d.cloud.ResourceGroup)
178+
assert.Equal(t, "/tmp", d.workingMountDir)
179+
assert.True(t, d.enableAzureLustreMockDynProv, "enableAzureLustreMockDynProv should be true")
180+
assert.False(t, d.enableAzureLustreMockMount, "enableAzureLustreMockMount should be false")
181+
assert.True(t, d.removeNotReadyTaint, "removeNotReadyTaint should be true")
182+
}
183+
184+
func TestNewDriverInvalidConfigFileLocation(t *testing.T) {
185+
fakeConfigFile := "fake-cred-file.json"
186+
187+
if err := os.Remove(fakeConfigFile); err != nil && !os.IsNotExist(err) {
188+
t.Error(err)
189+
}
190+
191+
t.Setenv(DefaultAzureConfigFileEnv, fakeConfigFile)
192+
193+
driverOptions := DriverOptions{
194+
NodeID: fakeNodeID,
195+
DriverName: fakeDriverName,
196+
EnableAzureLustreMockMount: false,
197+
EnableAzureLustreMockDynProv: true,
198+
WorkingMountDir: "/tmp",
199+
RemoveNotReadyTaint: true,
200+
}
201+
d := NewDriver(&driverOptions)
202+
assert.NotNil(t, d)
203+
assert.Equal(t, &azure.Cloud{}, d.cloud)
204+
assert.Equal(t, &DynamicProvisioner{}, d.dynamicProvisioner)
205+
}
206+
207+
func TestNewDriverInvalidConfigFileContents(t *testing.T) {
208+
invalidConfigFile := "fake-cred-file.json"
209+
invalidConfigContent := `;;;....invalid########`
210+
211+
if err := os.WriteFile(invalidConfigFile, []byte(invalidConfigContent), 0o600); err != nil {
212+
t.Error(err)
213+
}
214+
215+
defer func() {
216+
if err := os.Remove(invalidConfigFile); err != nil {
217+
t.Error(err)
218+
}
219+
}()
220+
221+
t.Setenv(DefaultAzureConfigFileEnv, invalidConfigFile)
222+
223+
driverOptions := DriverOptions{
224+
NodeID: fakeNodeID,
225+
DriverName: fakeDriverName,
137226
EnableAzureLustreMockMount: false,
138227
EnableAzureLustreMockDynProv: true,
228+
WorkingMountDir: "/tmp",
229+
RemoveNotReadyTaint: true,
139230
}
140231
d := NewDriver(&driverOptions)
141232
assert.NotNil(t, d)
233+
assert.Equal(t, &azure.Cloud{}, d.cloud)
234+
assert.Equal(t, &DynamicProvisioner{}, d.dynamicProvisioner)
142235
}
143236

144237
func TestIsCorruptedDir(t *testing.T) {

0 commit comments

Comments
 (0)