mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-30 02:02:43 +00:00 
			
		
		
		
	Add AppRole response schema validation tests (#18636)
This PR modifies every test in `builtin/credentials/approle/path_role_test.go` with new validation checks to ensure that approle/path_role successful responses align with the declared response schema. It also introduces a test helper in `sdk/helper/testhelpers`: ```go func FindResponseSchema(t *testing.T, ...) ``` This test helper will be useful for all plugins that require similar response schema validation in tests. ### Background This PR is part of the ongoing work to add structured responses in Vault OpenAPI (VLT-234)
This commit is contained in:
		 Anton Averchenkov
					Anton Averchenkov
				
			
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			 GitHub
						GitHub
					
				
			
						parent
						
							6a2586747c
						
					
				
				
					commit
					9997cf5cdd
				
			
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										3
									
								
								changelog/18636.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										3
									
								
								changelog/18636.txt
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,3 @@ | |||||||
|  | ```release-note:improvement | ||||||
|  | sdk: Adding FindResponseSchema test helper to assist with response schema validation in tests | ||||||
|  | ``` | ||||||
| @@ -3,6 +3,7 @@ package schema | |||||||
| import ( | import ( | ||||||
| 	"encoding/json" | 	"encoding/json" | ||||||
| 	"fmt" | 	"fmt" | ||||||
|  | 	"net/http" | ||||||
| 	"testing" | 	"testing" | ||||||
|  |  | ||||||
| 	"github.com/hashicorp/vault/sdk/framework" | 	"github.com/hashicorp/vault/sdk/framework" | ||||||
| @@ -76,3 +77,45 @@ func validateResponseDataImpl(schema *framework.Response, data map[string]interf | |||||||
|  |  | ||||||
| 	return fd.Validate() | 	return fd.Validate() | ||||||
| } | } | ||||||
|  |  | ||||||
|  | // FindResponseSchema is a test helper to extract the response schema from a given framework path / operation | ||||||
|  | func FindResponseSchema(t *testing.T, paths []*framework.Path, pathIdx int, operation logical.Operation) *framework.Response { | ||||||
|  | 	t.Helper() | ||||||
|  |  | ||||||
|  | 	if pathIdx >= len(paths) { | ||||||
|  | 		t.Fatalf("path index %d is out of range", pathIdx) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	schemaPath := paths[pathIdx] | ||||||
|  |  | ||||||
|  | 	schemaOperation, ok := schemaPath.Operations[operation] | ||||||
|  | 	if !ok { | ||||||
|  | 		t.Fatalf( | ||||||
|  | 			"could not find response schema: %s: %q operation does not exist", | ||||||
|  | 			schemaPath.Pattern, | ||||||
|  | 			operation, | ||||||
|  | 		) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	var schemaResponses []framework.Response | ||||||
|  |  | ||||||
|  | 	for _, status := range []int{ | ||||||
|  | 		http.StatusOK, | ||||||
|  | 		http.StatusNoContent, | ||||||
|  | 	} { | ||||||
|  | 		schemaResponses, ok = schemaOperation.Properties().Responses[status] | ||||||
|  | 		if ok { | ||||||
|  | 			break | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	if len(schemaResponses) == 0 { | ||||||
|  | 		t.Fatalf( | ||||||
|  | 			"could not find response schema: %s: %q operation: no responses found", | ||||||
|  | 			schemaPath.Pattern, | ||||||
|  | 			operation, | ||||||
|  | 		) | ||||||
|  | 	} | ||||||
|  |  | ||||||
|  | 	return &schemaResponses[0] | ||||||
|  | } | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user