openapi-mock icon indicating copy to clipboard operation
openapi-mock copied to clipboard

Panic when referencing schema from another file

Open palgalik opened this issue 3 years ago • 0 comments

I encountered an issue regarding referencing schema from another yaml file.

I have directory structure like this (_index.yaml is the mock api url starting point)

  • openapi
    • public-api
      • _index.yaml
      • user.yaml
    • shared
      • common.yaml

_index.yaml

openapi: 3.0.0
info:
  title: Test
  description: REST API specification.
  version: 2.0.0
servers:
  - url: 'http://localhost:8000/api/v2'
    description: 'dev'
paths:
  /change-password:
    $ref: 'user.yaml#/paths/~1change-password'

user.yaml

openapi: 3.0.0
info:
  title: Client - User components
  version: partial
paths:
  /change-password:
    post:
      requestBody:
        $ref: '#/components/requestBodies/RequiredPassword'
      responses:
        200:
          description: success

components:
  requestBodies:
    RequiredPassword:
      description: Data to password change
      required: true
      content:
        application/json:
          schema:
            type: object
            properties:
              token:
                $ref: '../shared/common.yaml#/components/schemas/Token'
              password:
                type: string
                format: password
            required:
              - token
              - password

common.yaml

openapi: 3.0.0
info:
  title: Common components
  version: partial
paths: { }
components:
  schemas:
    Token:
      type: string

docker-compose yaml:

  public-api-mock-server:
    container_name: public-api-mock-server
    image: muonsoft/openapi-mock:v0.3.3
    ports:
      - "8000:8080"
    volumes:
      - ./openapi:/app/openapi
    environment:
      OPENAPI_MOCK_SPECIFICATION_URL: '/app/openapi/public-api/_index.yaml'

version: v0.3.3

error output:

panic: runtime error: slice bounds out of range [23:19]


goroutine 1 [running]:
github.com/getkin/kin-openapi/openapi3.(*Loader).getResolvedRefPath(0xc000183880, {0xc00013fc20?, 0xc0003aeeb8?}, 0xc0003aeeb8, 0xc00013b200, 0xc0003d4900)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:762 +0xff
github.com/getkin/kin-openapi/openapi3.(*Loader).resolveSchemaRef(0xc000183880, 0xc0003ad8c0?, 0xc0003aec48, 0xc00013b200)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:702 +0x25d
github.com/getkin/kin-openapi/openapi3.(*Loader).resolveSchemaRef(0xc000183880, 0xc0003ad890?, 0xc0003aea68, 0xc00013b200)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:718 +0x51b
github.com/getkin/kin-openapi/openapi3.(*Loader).resolveRequestBodyRef(0xc000183880, 0x400?, 0xc0003ae8e8, 0xc00013b200)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:592 +0x511
github.com/getkin/kin-openapi/openapi3.(*Loader).ResolveRefsIn(0xc000183880, 0xc00018e460, 0x2d3?)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:186 +0x2c5
github.com/getkin/kin-openapi/openapi3.(*Loader).loadFromDataWithPathInternal(0xc000183880, {0xc0003be000, 0x2d2, 0x2d3}, 0x747048?)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:160 +0x14a
github.com/getkin/kin-openapi/openapi3.(*Loader).loadFromURIInternal(0xc00013f7d0?, 0x22?)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:78 +0x54
github.com/getkin/kin-openapi/openapi3.(*Loader).resolveRef(0xc000183880, 0xc0003ac180?, {0xc00013f7d0, 0x22}, 0x4?)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:433 +0x1be
github.com/getkin/kin-openapi/openapi3.(*Loader).resolvePathItemRef(0xc000183880, 0xc00018e380, {0xc0003aa5c0?, 0x10?}, 0xc00015a9a0, 0xc00013a750)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:988 +0x17b
github.com/getkin/kin-openapi/openapi3.(*Loader).ResolveRefsIn(0xc000183880, 0xc00018e380, 0x200?)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:221 +0x759
github.com/getkin/kin-openapi/openapi3.(*Loader).loadFromDataWithPathInternal(0xc000183880, {0xc00027f200, 0x12d, 0x200}, 0x40e465?)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:160 +0x14a
github.com/getkin/kin-openapi/openapi3.(*Loader).loadFromURIInternal(0xc00002801f?, 0x0?)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:78 +0x54
github.com/getkin/kin-openapi/openapi3.(*Loader).LoadFromURI(...)
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:64
github.com/getkin/kin-openapi/openapi3.(*Loader).LoadFromFile(0xc000183880, {0xc00002801f, 0x23})
	/go/pkg/mod/github.com/getkin/[email protected]/openapi3/loader.go:70 +0xd5
github.com/muonsoft/openapi-mock/internal/openapi/loader.(*autoLoader).LoadFromURI(0xc000336730, {0xc00002801f, 0x23})
	/project/internal/openapi/loader/autoLoader.go:16 +0x56
github.com/muonsoft/openapi-mock/internal/openapi/loader.(*processingLoader).LoadFromURI(0xc00039fc78, {0xc00002801f?, 0x203000?})
	/project/internal/openapi/loader/processingLoader.go:14 +0x46
github.com/muonsoft/openapi-mock/internal/application/di.(*Factory).CreateHTTPServer(0xc00039fd18)
	/project/internal/application/di/Factory.go:97 +0x145
github.com/muonsoft/openapi-mock/internal/application.newServeCommand.func1(0xc00036ac80?, {0x99d869?, 0x0?, 0x0?})
	/project/internal/application/Execute.go:122 +0x94
github.com/spf13/cobra.(*Command).execute(0xc00036ac80, {0xe69c40, 0x0, 0x0})
	/go/pkg/mod/github.com/spf13/[email protected]/command.go:872 +0x694
github.com/spf13/cobra.(*Command).ExecuteC(0xc00036a780)
	/go/pkg/mod/github.com/spf13/[email protected]/command.go:990 +0x3bd
github.com/spf13/cobra.(*Command).Execute(...)
	/go/pkg/mod/github.com/spf13/[email protected]/command.go:918
github.com/muonsoft/openapi-mock/internal/application.Execute({0xc00039ff30, 0x2, 0x60?})
	/project/internal/application/Execute.go:60 +0xb3
main.main()
	/project/cmd/openapi-mock/main.go:16 +0xaa

palgalik avatar Oct 26 '22 09:10 palgalik