feat: support to set the prefix of mock server (#402)

Co-authored-by: rick <linuxsuren@users.noreply.github.com>
This commit is contained in:
Rick 2024-04-28 08:30:52 +08:00 committed by GitHub
parent 72fc008ea1
commit ffac34fd9d
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
6 changed files with 20 additions and 14 deletions

View File

@ -18,13 +18,15 @@ package cmd
import (
"errors"
"github.com/linuxsuren/api-testing/pkg/mock"
"github.com/spf13/cobra"
)
type mockOption struct {
port int
files []string
port int
prefix string
files []string
}
func createMockCmd() (c *cobra.Command) {
@ -39,6 +41,7 @@ func createMockCmd() (c *cobra.Command) {
flags := c.Flags()
flags.IntVarP(&opt.port, "port", "", 6060, "The mock server port")
flags.StringVarP(&opt.prefix, "prefix", "", "/mock", "The mock server API prefix")
flags.StringSliceVarP(&opt.files, "files", "", nil, "The mock config files")
return
}
@ -55,7 +58,7 @@ func (o *mockOption) runE(c *cobra.Command, args []string) (err error) {
server := mock.NewInMemoryServer(o.port)
if err = server.Start(reader); err != nil {
if err = server.Start(reader, o.prefix); err != nil {
return
}

View File

@ -91,6 +91,7 @@ func createServerCmd(execer fakeruntime.Execer, httpServer server.HTTPServer) (c
flags.StringVarP(&opt.clientSecret, "client-secret", "", os.Getenv("OAUTH_CLIENT_SECRET"), "ClientSecret is the application's secret")
flags.BoolVarP(&opt.dryRun, "dry-run", "", false, "Do not really start a gRPC server")
flags.StringArrayVarP(&opt.mockConfig, "mock-config", "", nil, "The mock config files")
flags.StringVarP(&opt.mockPrefix, "mock-prefix", "", "/mock", "The mock server API prefix")
// gc related flags
flags.IntVarP(&opt.gcPercent, "gc-percent", "", 100, "The GC percent of Go")
@ -125,6 +126,7 @@ type serverOption struct {
oauthGroup []string
mockConfig []string
mockPrefix string
gcPercent int
@ -297,10 +299,10 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
cmd.Println("currently only one mock config is supported, will take the first one")
var mockServerHandler http.Handler
if mockServerHandler, err = mock.NewInMemoryServer(0).
SetupHandler(mock.NewLocalFileReader(o.mockConfig[0])); err != nil {
SetupHandler(mock.NewLocalFileReader(o.mockConfig[0]), o.mockPrefix); err != nil {
return
}
combineHandlers.PutHandler("/mock", mockServerHandler)
combineHandlers.PutHandler(o.mockPrefix, mockServerHandler)
}
debugHandler(mux, remoteServer)

View File

@ -49,7 +49,7 @@ func NewInMemoryServer(port int) DynamicServer {
}
}
func (s *inMemoryServer) SetupHandler(reader Reader) (handler http.Handler, err error) {
func (s *inMemoryServer) SetupHandler(reader Reader, prefix string) (handler http.Handler, err error) {
var server *Server
if server, err = reader.Parse(); err != nil {
return
@ -57,7 +57,7 @@ func (s *inMemoryServer) SetupHandler(reader Reader) (handler http.Handler, err
// init the data
s.data = make(map[string][]map[string]interface{})
s.mux = mux.NewRouter().PathPrefix("/mock").Subrouter()
s.mux = mux.NewRouter().PathPrefix(prefix).Subrouter()
handler = s.mux
memLogger.Info("start to run all the APIs from objects")
@ -73,9 +73,9 @@ func (s *inMemoryServer) SetupHandler(reader Reader) (handler http.Handler, err
return
}
func (s *inMemoryServer) Start(reader Reader) (err error) {
func (s *inMemoryServer) Start(reader Reader, prefix string) (err error) {
var handler http.Handler
if handler, err = s.SetupHandler(reader); err != nil {
if handler, err = s.SetupHandler(reader, prefix); err != nil {
return
}

View File

@ -17,17 +17,18 @@ package mock
import (
"bytes"
"github.com/stretchr/testify/assert"
"io"
"net/http"
"strings"
"testing"
"github.com/stretchr/testify/assert"
)
func TestInMemoryServer(t *testing.T) {
server := NewInMemoryServer(0)
err := server.Start(NewLocalFileReader("data/api.yaml"))
err := server.Start(NewLocalFileReader("testdata/api.yaml"), "/mock")
assert.NoError(t, err)
defer func() {
server.Stop()
@ -132,7 +133,7 @@ func TestInMemoryServer(t *testing.T) {
t.Run("not found config file", func(t *testing.T) {
server := NewInMemoryServer(0)
err := server.Start(NewLocalFileReader("fake"))
err := server.Start(NewLocalFileReader("fake"), "/")
assert.Error(t, err)
})
}

View File

@ -18,8 +18,8 @@ package mock
import "net/http"
type DynamicServer interface {
Start(reader Reader) error
SetupHandler(reader Reader) (http.Handler, error)
Start(reader Reader, prefix string) error
SetupHandler(reader Reader, prefix string) (http.Handler, error)
Stop() error
GetPort() string
}