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 (
|
import (
|
||||||
"errors"
|
"errors"
|
||||||
|
|
||||||
"github.com/linuxsuren/api-testing/pkg/mock"
|
"github.com/linuxsuren/api-testing/pkg/mock"
|
||||||
"github.com/spf13/cobra"
|
"github.com/spf13/cobra"
|
||||||
)
|
)
|
||||||
|
|
||||||
type mockOption struct {
|
type mockOption struct {
|
||||||
port int
|
port int
|
||||||
files []string
|
prefix string
|
||||||
|
files []string
|
||||||
}
|
}
|
||||||
|
|
||||||
func createMockCmd() (c *cobra.Command) {
|
func createMockCmd() (c *cobra.Command) {
|
||||||
|
@ -39,6 +41,7 @@ func createMockCmd() (c *cobra.Command) {
|
||||||
|
|
||||||
flags := c.Flags()
|
flags := c.Flags()
|
||||||
flags.IntVarP(&opt.port, "port", "", 6060, "The mock server port")
|
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")
|
flags.StringSliceVarP(&opt.files, "files", "", nil, "The mock config files")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
@ -55,7 +58,7 @@ func (o *mockOption) runE(c *cobra.Command, args []string) (err error) {
|
||||||
|
|
||||||
server := mock.NewInMemoryServer(o.port)
|
server := mock.NewInMemoryServer(o.port)
|
||||||
|
|
||||||
if err = server.Start(reader); err != nil {
|
if err = server.Start(reader, o.prefix); err != nil {
|
||||||
return
|
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.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.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.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
|
// gc related flags
|
||||||
flags.IntVarP(&opt.gcPercent, "gc-percent", "", 100, "The GC percent of Go")
|
flags.IntVarP(&opt.gcPercent, "gc-percent", "", 100, "The GC percent of Go")
|
||||||
|
@ -125,6 +126,7 @@ type serverOption struct {
|
||||||
oauthGroup []string
|
oauthGroup []string
|
||||||
|
|
||||||
mockConfig []string
|
mockConfig []string
|
||||||
|
mockPrefix string
|
||||||
|
|
||||||
gcPercent int
|
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")
|
cmd.Println("currently only one mock config is supported, will take the first one")
|
||||||
var mockServerHandler http.Handler
|
var mockServerHandler http.Handler
|
||||||
if mockServerHandler, err = mock.NewInMemoryServer(0).
|
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
|
return
|
||||||
}
|
}
|
||||||
combineHandlers.PutHandler("/mock", mockServerHandler)
|
combineHandlers.PutHandler(o.mockPrefix, mockServerHandler)
|
||||||
}
|
}
|
||||||
|
|
||||||
debugHandler(mux, remoteServer)
|
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
|
var server *Server
|
||||||
if server, err = reader.Parse(); err != nil {
|
if server, err = reader.Parse(); err != nil {
|
||||||
return
|
return
|
||||||
|
@ -57,7 +57,7 @@ func (s *inMemoryServer) SetupHandler(reader Reader) (handler http.Handler, err
|
||||||
|
|
||||||
// init the data
|
// init the data
|
||||||
s.data = make(map[string][]map[string]interface{})
|
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
|
handler = s.mux
|
||||||
|
|
||||||
memLogger.Info("start to run all the APIs from objects")
|
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
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
func (s *inMemoryServer) Start(reader Reader) (err error) {
|
func (s *inMemoryServer) Start(reader Reader, prefix string) (err error) {
|
||||||
var handler http.Handler
|
var handler http.Handler
|
||||||
if handler, err = s.SetupHandler(reader); err != nil {
|
if handler, err = s.SetupHandler(reader, prefix); err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -17,17 +17,18 @@ package mock
|
||||||
|
|
||||||
import (
|
import (
|
||||||
"bytes"
|
"bytes"
|
||||||
"github.com/stretchr/testify/assert"
|
|
||||||
"io"
|
"io"
|
||||||
"net/http"
|
"net/http"
|
||||||
"strings"
|
"strings"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
func TestInMemoryServer(t *testing.T) {
|
func TestInMemoryServer(t *testing.T) {
|
||||||
server := NewInMemoryServer(0)
|
server := NewInMemoryServer(0)
|
||||||
|
|
||||||
err := server.Start(NewLocalFileReader("data/api.yaml"))
|
err := server.Start(NewLocalFileReader("testdata/api.yaml"), "/mock")
|
||||||
assert.NoError(t, err)
|
assert.NoError(t, err)
|
||||||
defer func() {
|
defer func() {
|
||||||
server.Stop()
|
server.Stop()
|
||||||
|
@ -132,7 +133,7 @@ func TestInMemoryServer(t *testing.T) {
|
||||||
|
|
||||||
t.Run("not found config file", func(t *testing.T) {
|
t.Run("not found config file", func(t *testing.T) {
|
||||||
server := NewInMemoryServer(0)
|
server := NewInMemoryServer(0)
|
||||||
err := server.Start(NewLocalFileReader("fake"))
|
err := server.Start(NewLocalFileReader("fake"), "/")
|
||||||
assert.Error(t, err)
|
assert.Error(t, err)
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
|
@ -18,8 +18,8 @@ package mock
|
||||||
import "net/http"
|
import "net/http"
|
||||||
|
|
||||||
type DynamicServer interface {
|
type DynamicServer interface {
|
||||||
Start(reader Reader) error
|
Start(reader Reader, prefix string) error
|
||||||
SetupHandler(reader Reader) (http.Handler, error)
|
SetupHandler(reader Reader, prefix string) (http.Handler, error)
|
||||||
Stop() error
|
Stop() error
|
||||||
GetPort() string
|
GetPort() string
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue