| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- package descriptor
- import (
- "strings"
- "testing"
- "github.com/grpc-ecosystem/grpc-gateway/v2/protoc-gen-openapiv2/options"
- )
- func TestLoadOpenAPIConfigFromYAMLRejectInvalidYAML(t *testing.T) {
- config, err := loadOpenAPIConfigFromYAML([]byte(`
- openapiOptions:
- file:
- - file: test.proto
- - option:
- schemes:
- - HTTP
- - HTTPS
- - WSS
- securityDefinitions:
- security:
- ApiKeyAuth:
- type: TYPE_API_KEY
- in: IN_HEADER
- name: "X-API-Key"
- `), "invalidyaml")
- if err == nil {
- t.Fatal(err)
- }
- if !strings.Contains(err.Error(), "line 4") {
- t.Errorf("Expected yaml error to be detected in line 4. Got other error: %v", err)
- }
- if config != nil {
- t.Fatal("Config returned")
- }
- }
- func TestLoadOpenAPIConfigFromYAML(t *testing.T) {
- config, err := loadOpenAPIConfigFromYAML([]byte(`
- openapiOptions:
- file:
- - file: test.proto
- option:
- schemes:
- - HTTP
- - HTTPS
- - WSS
- securityDefinitions:
- security:
- ApiKeyAuth:
- type: TYPE_API_KEY
- in: IN_HEADER
- name: "X-API-Key"
- `), "openapi_options")
- if err != nil {
- t.Fatal(err)
- }
- if config.OpenapiOptions == nil {
- t.Fatal("OpenAPIOptions is empty")
- }
- opts := config.OpenapiOptions
- if numFileOpts := len(opts.File); numFileOpts != 1 {
- t.Fatalf("expected 1 file option but got %d", numFileOpts)
- }
- fileOpt := opts.File[0]
- if fileOpt.File != "test.proto" {
- t.Fatalf("file option has unexpected binding %s", fileOpt.File)
- }
- swaggerOpt := fileOpt.Option
- if swaggerOpt == nil {
- t.Fatal("expected option to be set")
- }
- if numSchemes := len(swaggerOpt.Schemes); numSchemes != 3 {
- t.Fatalf("expected 3 schemes but got %d", numSchemes)
- }
- if swaggerOpt.Schemes[0] != options.Scheme_HTTP {
- t.Fatalf("expected first scheme to be HTTP but got %s", swaggerOpt.Schemes[0])
- }
- if swaggerOpt.Schemes[1] != options.Scheme_HTTPS {
- t.Fatalf("expected second scheme to be HTTPS but got %s", swaggerOpt.Schemes[1])
- }
- if swaggerOpt.Schemes[2] != options.Scheme_WSS {
- t.Fatalf("expected third scheme to be WSS but got %s", swaggerOpt.Schemes[2])
- }
- if swaggerOpt.SecurityDefinitions == nil {
- t.Fatal("expected securityDefinitions to be set")
- }
- if numSecOpts := len(swaggerOpt.SecurityDefinitions.Security); numSecOpts != 1 {
- t.Fatalf("expected 1 security option but got %d", numSecOpts)
- }
- secOpt, ok := swaggerOpt.SecurityDefinitions.Security["ApiKeyAuth"]
- if !ok {
- t.Fatal("no SecurityScheme for key \"ApiKeyAuth\"")
- }
- if secOpt.Type != options.SecurityScheme_TYPE_API_KEY {
- t.Fatalf("expected scheme type to be TYPE_API_KEY but got %s", secOpt.Type)
- }
- if secOpt.In != options.SecurityScheme_IN_HEADER {
- t.Fatalf("expected scheme in to be IN_HEADER but got %s", secOpt.In)
- }
- if secOpt.Name != "X-API-Key" {
- t.Fatalf("expected name to be X-API-Key but got %s", secOpt.Name)
- }
- }
|