feat: support to set the prefix of mock server (#402)
Co-authored-by: rick <linuxsuren@users.noreply.github.com>
This commit is contained in:
parent
72fc008ea1
commit
ffac34fd9d
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
})
|
||||
}
|
||||
|
|
|
@ -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
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue