Metadata order search tests

pull/6/head
Richard Gonzalez 2017-09-27 10:37:28 -04:00 committed by Richard Gonzalez
parent 870195ad59
commit 0e81cac328
3 changed files with 60 additions and 7 deletions

View File

@ -156,6 +156,7 @@ func getMetadata(order string) (*Metadata, error) {
elements := strings.Split(order, ",") elements := strings.Split(order, ",")
for _, id := range elements { for _, id := range elements {
id = strings.TrimSpace(id)
switch id { switch id {
case configDriveID: case configDriveID:
md, err = getMetadataFromConfigDrive() md, err = getMetadataFromConfigDrive()

View File

@ -253,6 +253,10 @@ func checkOpenStackOpts(openstackOpts *OpenStack) error {
} }
} }
if err := checkMetadataSearchOrder(openstackOpts.metadataOpts.SearchOrder); err != nil {
return err
}
return nil return nil
} }
@ -282,8 +286,6 @@ func newOpenStack(cfg Config) (*OpenStack, error) {
err = openstack.Authenticate(provider, cfg.toAuthOptions()) err = openstack.Authenticate(provider, cfg.toAuthOptions())
} }
err = validateMetadataSearchOrder(cfg.Metadata.SearchOrder)
if err != nil { if err != nil {
return nil, err return nil, err
} }
@ -753,7 +755,7 @@ func (os *OpenStack) volumeService(forceVersion string) (volumeService, error) {
} }
} }
func validateMetadataSearchOrder(order string) error { func checkMetadataSearchOrder(order string) error {
if order == "" { if order == "" {
return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot be empty") return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot be empty")
} }
@ -763,14 +765,15 @@ func validateMetadataSearchOrder(order string) error {
return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot contain more than 2 elements") return errors.New("Invalid value in section [Metadata] with key `search-order`. Value cannot contain more than 2 elements")
} }
for _, o := range elements { for _, id := range elements {
switch o { id = strings.TrimSpace(id)
switch id {
case configDriveID: case configDriveID:
case metadataID: case metadataID:
default: default:
errTxt := "Invalid element '%s' found in section [Metadata] with key `search-order`." + errTxt := "Invalid element '%s' found in section [Metadata] with key `search-order`." +
"Supported elements include '%s' and '%s'" "Supported elements include '%s' and '%s'"
return fmt.Errorf(errTxt, o, configDriveID, metadataID) return fmt.Errorf(errTxt, id, configDriveID, metadataID)
} }
} }

View File

@ -101,7 +101,8 @@ func TestReadConfig(t *testing.T) {
[BlockStorage] [BlockStorage]
bs-version = auto bs-version = auto
trust-device-path = yes trust-device-path = yes
[Metadata]
search-order = configDrive, metadataService
`)) `))
if err != nil { if err != nil {
t.Fatalf("Should succeed when a valid config is provided: %s", err) t.Fatalf("Should succeed when a valid config is provided: %s", err)
@ -128,6 +129,9 @@ func TestReadConfig(t *testing.T) {
if cfg.BlockStorage.BSVersion != "auto" { if cfg.BlockStorage.BSVersion != "auto" {
t.Errorf("incorrect bs.bs-version: %v", cfg.BlockStorage.BSVersion) t.Errorf("incorrect bs.bs-version: %v", cfg.BlockStorage.BSVersion)
} }
if cfg.Metadata.SearchOrder != "configDrive, metadataService" {
t.Errorf("incorrect md.search-order: %v", cfg.Metadata.SearchOrder)
}
} }
func TestToAuthOptions(t *testing.T) { func TestToAuthOptions(t *testing.T) {
@ -169,6 +173,9 @@ func TestCheckOpenStackOpts(t *testing.T) {
ManageSecurityGroups: true, ManageSecurityGroups: true,
NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144", NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144",
}, },
metadataOpts: MetadataOpts{
SearchOrder: configDriveID,
},
}, },
expectedError: nil, expectedError: nil,
}, },
@ -187,6 +194,9 @@ func TestCheckOpenStackOpts(t *testing.T) {
ManageSecurityGroups: true, ManageSecurityGroups: true,
NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144", NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144",
}, },
metadataOpts: MetadataOpts{
SearchOrder: configDriveID,
},
}, },
expectedError: nil, expectedError: nil,
}, },
@ -203,6 +213,9 @@ func TestCheckOpenStackOpts(t *testing.T) {
ManageSecurityGroups: true, ManageSecurityGroups: true,
NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144", NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144",
}, },
metadataOpts: MetadataOpts{
SearchOrder: configDriveID,
},
}, },
expectedError: fmt.Errorf("monitor-delay not set in cloud provider config"), expectedError: fmt.Errorf("monitor-delay not set in cloud provider config"),
}, },
@ -221,9 +234,43 @@ func TestCheckOpenStackOpts(t *testing.T) {
MonitorMaxRetries: uint(3), MonitorMaxRetries: uint(3),
ManageSecurityGroups: true, ManageSecurityGroups: true,
}, },
metadataOpts: MetadataOpts{
SearchOrder: configDriveID,
},
}, },
expectedError: fmt.Errorf("node-security-group not set in cloud provider config"), expectedError: fmt.Errorf("node-security-group not set in cloud provider config"),
}, },
{
name: "test5",
openstackOpts: &OpenStack{
provider: nil,
metadataOpts: MetadataOpts{
SearchOrder: "",
},
},
expectedError: fmt.Errorf("Invalid value in section [Metadata] with key `search-order`. Value cannot be empty"),
},
{
name: "test6",
openstackOpts: &OpenStack{
provider: nil,
metadataOpts: MetadataOpts{
SearchOrder: "value1,value2,value3",
},
},
expectedError: fmt.Errorf("Invalid value in section [Metadata] with key `search-order`. Value cannot contain more than 2 elements"),
},
{
name: "test7",
openstackOpts: &OpenStack{
provider: nil,
metadataOpts: MetadataOpts{
SearchOrder: "value1",
},
},
expectedError: fmt.Errorf("Invalid element '%s' found in section [Metadata] with key `search-order`."+
"Supported elements include '%s' and '%s'", "value1", configDriveID, metadataID),
},
} }
for _, testcase := range tests { for _, testcase := range tests {
@ -374,6 +421,8 @@ func configFromEnv() (cfg Config, ok bool) {
(cfg.Global.TenantId != "" || cfg.Global.TenantName != "" || (cfg.Global.TenantId != "" || cfg.Global.TenantName != "" ||
cfg.Global.DomainId != "" || cfg.Global.DomainName != "")) cfg.Global.DomainId != "" || cfg.Global.DomainName != ""))
cfg.Metadata.SearchOrder = fmt.Sprintf("%s,%s", configDriveID, metadataID)
return return
} }