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, ",")
for _, id := range elements {
id = strings.TrimSpace(id)
switch id {
case configDriveID:
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
}
@ -282,8 +286,6 @@ func newOpenStack(cfg Config) (*OpenStack, error) {
err = openstack.Authenticate(provider, cfg.toAuthOptions())
}
err = validateMetadataSearchOrder(cfg.Metadata.SearchOrder)
if err != nil {
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 == "" {
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")
}
for _, o := range elements {
switch o {
for _, id := range elements {
id = strings.TrimSpace(id)
switch id {
case configDriveID:
case metadataID:
default:
errTxt := "Invalid element '%s' found in section [Metadata] with key `search-order`." +
"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]
bs-version = auto
trust-device-path = yes
[Metadata]
search-order = configDrive, metadataService
`))
if err != nil {
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" {
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) {
@ -169,6 +173,9 @@ func TestCheckOpenStackOpts(t *testing.T) {
ManageSecurityGroups: true,
NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144",
},
metadataOpts: MetadataOpts{
SearchOrder: configDriveID,
},
},
expectedError: nil,
},
@ -187,6 +194,9 @@ func TestCheckOpenStackOpts(t *testing.T) {
ManageSecurityGroups: true,
NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144",
},
metadataOpts: MetadataOpts{
SearchOrder: configDriveID,
},
},
expectedError: nil,
},
@ -203,6 +213,9 @@ func TestCheckOpenStackOpts(t *testing.T) {
ManageSecurityGroups: true,
NodeSecurityGroupID: "b41d28c2-d02f-4e1e-8ffb-23b8e4f5c144",
},
metadataOpts: MetadataOpts{
SearchOrder: configDriveID,
},
},
expectedError: fmt.Errorf("monitor-delay not set in cloud provider config"),
},
@ -221,9 +234,43 @@ func TestCheckOpenStackOpts(t *testing.T) {
MonitorMaxRetries: uint(3),
ManageSecurityGroups: true,
},
metadataOpts: MetadataOpts{
SearchOrder: configDriveID,
},
},
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 {
@ -374,6 +421,8 @@ func configFromEnv() (cfg Config, ok bool) {
(cfg.Global.TenantId != "" || cfg.Global.TenantName != "" ||
cfg.Global.DomainId != "" || cfg.Global.DomainName != ""))
cfg.Metadata.SearchOrder = fmt.Sprintf("%s,%s", configDriveID, metadataID)
return
}