Metadata order search tests
This commit is contained in:
		 Richard Gonzalez
					Richard Gonzalez
				
			
				
					committed by
					
						 Richard Gonzalez
						Richard Gonzalez
					
				
			
			
				
	
			
			
			 Richard Gonzalez
						Richard Gonzalez
					
				
			
						parent
						
							870195ad59
						
					
				
				
					commit
					0e81cac328
				
			| @@ -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() | ||||
|   | ||||
| @@ -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) | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
|   | ||||
| @@ -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 | ||||
| } | ||||
|  | ||||
|   | ||||
		Reference in New Issue
	
	Block a user