Skip to content
This repository was archived by the owner on Mar 22, 2018. It is now read-only.

Commit d07fdec

Browse files
richardalbertoRichard Gonzalez
authored andcommitted
Metadata order search tests
1 parent 07f31b2 commit d07fdec

3 files changed

Lines changed: 60 additions & 7 deletions

File tree

pkg/cloudprovider/providers/openstack/metadata.go

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -156,6 +156,7 @@ func getMetadata(order string) (*Metadata, error) {
156156

157157
elements := strings.Split(order, ",")
158158
for _, id := range elements {
159+
id = strings.TrimSpace(id)
159160
switch id {
160161
case configDriveID:
161162
md, err = getMetadataFromConfigDrive()

pkg/cloudprovider/providers/openstack/openstack.go

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -253,6 +253,10 @@ func checkOpenStackOpts(openstackOpts *OpenStack) error {
253253
}
254254
}
255255

256+
if err := checkMetadataSearchOrder(openstackOpts.metadataOpts.SearchOrder); err != nil {
257+
return err
258+
}
259+
256260
return nil
257261
}
258262

@@ -282,8 +286,6 @@ func newOpenStack(cfg Config) (*OpenStack, error) {
282286
err = openstack.Authenticate(provider, cfg.toAuthOptions())
283287
}
284288

285-
err = validateMetadataSearchOrder(cfg.Metadata.SearchOrder)
286-
287289
if err != nil {
288290
return nil, err
289291
}
@@ -753,7 +755,7 @@ func (os *OpenStack) volumeService(forceVersion string) (volumeService, error) {
753755
}
754756
}
755757

756-
func validateMetadataSearchOrder(order string) error {
758+
func checkMetadataSearchOrder(order string) error {
757759
if order == "" {
758760
return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot be empty")
759761
}
@@ -763,14 +765,15 @@ func validateMetadataSearchOrder(order string) error {
763765
return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot contain more than 2 elements")
764766
}
765767

766-
for _, o := range elements {
767-
switch o {
768+
for _, id := range elements {
769+
id = strings.TrimSpace(id)
770+
switch id {
768771
case configDriveID:
769772
case metadataID:
770773
default:
771774
errTxt := "Invalid element '%s' found in section [Metadata] with key `search-order`." +
772775
"Supported elements include '%s' and '%s'"
773-
return fmt.Errorf(errTxt, o, configDriveID, metadataID)
776+
return fmt.Errorf(errTxt, id, configDriveID, metadataID)
774777
}
775778
}
776779

pkg/cloudprovider/providers/openstack/openstack_test.go

Lines changed: 50 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,7 +101,8 @@ func TestReadConfig(t *testing.T) {
101101
[BlockStorage]
102102
bs-version = auto
103103
trust-device-path = yes
104-
104+
[Metadata]
105+
search-order = configDrive, metadataService
105106
`))
106107
if err != nil {
107108
t.Fatalf("Should succeed when a valid config is provided: %s", err)
@@ -128,6 +129,9 @@ func TestReadConfig(t *testing.T) {
128129
if cfg.BlockStorage.BSVersion != "auto" {
129130
t.Errorf("incorrect bs.bs-version: %v", cfg.BlockStorage.BSVersion)
130131
}
132+
if cfg.Metadata.SearchOrder != "configDrive, metadataService" {
133+
t.Errorf("incorrect md.search-order: %v", cfg.Metadata.SearchOrder)
134+
}
131135
}
132136

133137
func TestToAuthOptions(t *testing.T) {
@@ -169,6 +173,9 @@ func TestCheckOpenStackOpts(t *testing.T) {
169173
ManageSecurityGroups: true,
170174
NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144",
171175
},
176+
metadataOpts: MetadataOpts{
177+
SearchOrder: configDriveID,
178+
},
172179
},
173180
expectedError: nil,
174181
},
@@ -187,6 +194,9 @@ func TestCheckOpenStackOpts(t *testing.T) {
187194
ManageSecurityGroups: true,
188195
NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144",
189196
},
197+
metadataOpts: MetadataOpts{
198+
SearchOrder: configDriveID,
199+
},
190200
},
191201
expectedError: nil,
192202
},
@@ -203,6 +213,9 @@ func TestCheckOpenStackOpts(t *testing.T) {
203213
ManageSecurityGroups: true,
204214
NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144",
205215
},
216+
metadataOpts: MetadataOpts{
217+
SearchOrder: configDriveID,
218+
},
206219
},
207220
expectedError: fmt.Errorf("monitor-delay not set in cloud provider config"),
208221
},
@@ -221,9 +234,43 @@ func TestCheckOpenStackOpts(t *testing.T) {
221234
MonitorMaxRetries: uint(3),
222235
ManageSecurityGroups: true,
223236
},
237+
metadataOpts: MetadataOpts{
238+
SearchOrder: configDriveID,
239+
},
224240
},
225241
expectedError: fmt.Errorf("node-security-group not set in cloud provider config"),
226242
},
243+
{
244+
name: "test5",
245+
openstackOpts: &OpenStack{
246+
provider: nil,
247+
metadataOpts: MetadataOpts{
248+
SearchOrder: "",
249+
},
250+
},
251+
expectedError: fmt.Errorf("Invalid value in section [Metadata] with key `search-order`. Value cannot be empty"),
252+
},
253+
{
254+
name: "test6",
255+
openstackOpts: &OpenStack{
256+
provider: nil,
257+
metadataOpts: MetadataOpts{
258+
SearchOrder: "value1,value2,value3",
259+
},
260+
},
261+
expectedError: fmt.Errorf("Invalid value in section [Metadata] with key `search-order`. Value cannot contain more than 2 elements"),
262+
},
263+
{
264+
name: "test7",
265+
openstackOpts: &OpenStack{
266+
provider: nil,
267+
metadataOpts: MetadataOpts{
268+
SearchOrder: "value1",
269+
},
270+
},
271+
expectedError: fmt.Errorf("Invalid element '%s' found in section [Metadata] with key `search-order`."+
272+
"Supported elements include '%s' and '%s'", "value1", configDriveID, metadataID),
273+
},
227274
}
228275

229276
for _, testcase := range tests {
@@ -374,6 +421,8 @@ func configFromEnv() (cfg Config, ok bool) {
374421
(cfg.Global.TenantId != "" || cfg.Global.TenantName != "" ||
375422
cfg.Global.DomainId != "" || cfg.Global.DomainName != ""))
376423

424+
cfg.Metadata.SearchOrder = fmt.Sprintf("%s,%s", configDriveID, metadataID)
425+
377426
return
378427
}
379428

0 commit comments

Comments
 (0)