Files
libopenapi/index/rolodex_remote_loader_test.go
quobix 28047d08d2 First sweep at cleaning up dead code
first round of a number I am sure, lots to clean.

Signed-off-by: quobix <dave@quobix.com>
2023-10-21 18:26:21 -04:00

165 lines
4.2 KiB
Go

// Copyright 2023 Princess B33f Heavy Industries / Dave Shanley
// SPDX-License-Identifier: MIT
package index
import (
"github.com/stretchr/testify/assert"
"io"
"net/http"
"net/http/httptest"
"net/url"
"testing"
"time"
)
var test_httpClient = &http.Client{Timeout: time.Duration(60) * time.Second}
func test_buildServer() *httptest.Server {
return httptest.NewServer(http.HandlerFunc(func(rw http.ResponseWriter, req *http.Request) {
if req.URL.String() == "/file1.yaml" {
rw.Header().Set("Last-Modified", "Wed, 21 Oct 2015 07:28:00 GMT")
_, _ = rw.Write([]byte(`"$ref": "./deeper/file2.yaml#/components/schemas/Pet"`))
return
}
if req.URL.String() == "/deeper/file2.yaml" {
rw.Header().Set("Last-Modified", "Wed, 21 Oct 2015 08:28:00 GMT")
_, _ = rw.Write([]byte(`"$ref": "/deeper/even_deeper/file3.yaml#/components/schemas/Pet"`))
return
}
if req.URL.String() == "/deeper/even_deeper/file3.yaml" {
rw.Header().Set("Last-Modified", "Wed, 21 Oct 2015 10:28:00 GMT")
_, _ = rw.Write([]byte(`"$ref": "../file2.yaml#/components/schemas/Pet"`))
return
}
rw.Header().Set("Last-Modified", "Wed, 21 Oct 2015 12:28:00 GMT")
if req.URL.String() == "/deeper/list.yaml" {
_, _ = rw.Write([]byte(`"$ref": "../file2.yaml"`))
return
}
if req.URL.String() == "/bag/list.yaml" {
_, _ = rw.Write([]byte(`"$ref": "pocket/list.yaml"\n\n"$ref": "zip/things.yaml"`))
return
}
if req.URL.String() == "/bag/pocket/list.yaml" {
_, _ = rw.Write([]byte(`"$ref": "../list.yaml"\n\n"$ref": "../../file2.yaml"`))
return
}
if req.URL.String() == "/bag/pocket/things.yaml" {
_, _ = rw.Write([]byte(`"$ref": "list.yaml"`))
return
}
if req.URL.String() == "/bag/zip/things.yaml" {
_, _ = rw.Write([]byte(`"$ref": "list.yaml"`))
return
}
if req.URL.String() == "/bag/zip/list.yaml" {
_, _ = rw.Write([]byte(`"$ref": "../list.yaml"\n\n"$ref": "../../file1.yaml"\n\n"$ref": "more.yaml""`))
return
}
if req.URL.String() == "/bag/zip/more.yaml" {
_, _ = rw.Write([]byte(`"$ref": "../../deeper/list.yaml"\n\n"$ref": "../../bad.yaml"`))
return
}
if req.URL.String() == "/bad.yaml" {
rw.WriteHeader(http.StatusInternalServerError)
_, _ = rw.Write([]byte(`"error, cannot do the thing"`))
return
}
_, _ = rw.Write([]byte(`OK`))
}))
}
func TestNewRemoteFS_BasicCheck(t *testing.T) {
server := test_buildServer()
defer server.Close()
//remoteFS := NewRemoteFS("https://raw.githubusercontent.com/digitalocean/openapi/main/specification/")
remoteFS, _ := NewRemoteFSWithRootURL(server.URL)
remoteFS.RemoteHandlerFunc = test_httpClient.Get
file, err := remoteFS.Open("/file1.yaml")
assert.NoError(t, err)
bytes, rErr := io.ReadAll(file)
assert.NoError(t, rErr)
stat, _ := file.Stat()
assert.Equal(t, "/file1.yaml", stat.Name())
assert.Equal(t, int64(53), stat.Size())
assert.Len(t, bytes, 53)
lastMod := stat.ModTime()
assert.Equal(t, "2015-10-21 07:28:00 +0000 GMT", lastMod.String())
}
func TestNewRemoteFS_BasicCheck_Relative(t *testing.T) {
server := test_buildServer()
defer server.Close()
remoteFS, _ := NewRemoteFSWithRootURL(server.URL)
remoteFS.RemoteHandlerFunc = test_httpClient.Get
file, err := remoteFS.Open("/deeper/file2.yaml")
assert.NoError(t, err)
bytes, rErr := io.ReadAll(file)
assert.NoError(t, rErr)
assert.Len(t, bytes, 64)
stat, _ := file.Stat()
assert.Equal(t, "/deeper/file2.yaml", stat.Name())
assert.Equal(t, int64(64), stat.Size())
lastMod := stat.ModTime()
assert.Equal(t, "2015-10-21 08:28:00 +0000 GMT", lastMod.String())
}
func TestNewRemoteFS_BasicCheck_Relative_Deeper(t *testing.T) {
server := test_buildServer()
defer server.Close()
cf := CreateOpenAPIIndexConfig()
u, _ := url.Parse(server.URL)
cf.BaseURL = u
remoteFS, _ := NewRemoteFSWithConfig(cf)
remoteFS.RemoteHandlerFunc = test_httpClient.Get
file, err := remoteFS.Open("/deeper/even_deeper/file3.yaml")
assert.NoError(t, err)
bytes, rErr := io.ReadAll(file)
assert.NoError(t, rErr)
assert.Len(t, bytes, 47)
stat, _ := file.Stat()
assert.Equal(t, "/deeper/even_deeper/file3.yaml", stat.Name())
assert.Equal(t, int64(47), stat.Size())
lastMod := stat.ModTime()
assert.Equal(t, "2015-10-21 10:28:00 +0000 GMT", lastMod.String())
}