fix: avoid exit the main process when plugin start failed (#463)
Co-authored-by: rick <linuxsuren@users.noreply.github.com>
This commit is contained in:
parent
92d517f7b9
commit
1a720c03f8
|
@ -227,10 +227,10 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
|
|||
remoteServer := server.NewRemoteServer(loader, remote.NewGRPCloaderFromStore(), secretServer, storeExtMgr, o.configDir, o.grpcMaxRecvMsgSize)
|
||||
kinds, storeKindsErr := remoteServer.GetStoreKinds(ctx, nil)
|
||||
if storeKindsErr != nil {
|
||||
cmd.PrintErrf("failed to get store kinds, error: %p\n", storeKindsErr)
|
||||
cmd.PrintErrf("failed to get store kinds, error: %v\n", storeKindsErr)
|
||||
} else {
|
||||
if err = startPlugins(storeExtMgr, kinds); err != nil {
|
||||
return
|
||||
if runPluginErr := startPlugins(storeExtMgr, kinds); runPluginErr != nil {
|
||||
cmd.PrintErrf("error occurred during starting plugins, error: %v\n", runPluginErr)
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -349,9 +349,7 @@ func startPlugins(storeExtMgr server.ExtManager, kinds *server.StoreKinds) (err
|
|||
|
||||
for _, kind := range kinds.Data {
|
||||
if kind.Enabled && strings.HasPrefix(kind.Url, socketPrefix) {
|
||||
if err = storeExtMgr.Start(kind.Name, kind.Url); err != nil {
|
||||
break
|
||||
}
|
||||
err = errors.Join(err, storeExtMgr.Start(kind.Name, kind.Url))
|
||||
}
|
||||
}
|
||||
return
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright 2023 API Testing Authors.
|
||||
Copyright 2023-2024 API Testing Authors.
|
||||
|
||||
Licensed under the Apache License, Version 2.0 (the "License");
|
||||
you may not use this file except in compliance with the License.
|
||||
|
@ -17,10 +17,14 @@ package cmd
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
_ "embed"
|
||||
"errors"
|
||||
"fmt"
|
||||
"io"
|
||||
"net"
|
||||
"net/http"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
"testing"
|
||||
|
||||
|
@ -29,6 +33,7 @@ import (
|
|||
"github.com/linuxsuren/api-testing/pkg/server"
|
||||
"github.com/linuxsuren/api-testing/pkg/util"
|
||||
fakeruntime "github.com/linuxsuren/go-fake-runtime"
|
||||
"github.com/spf13/cobra"
|
||||
"github.com/stretchr/testify/assert"
|
||||
)
|
||||
|
||||
|
@ -167,8 +172,6 @@ func TestFrontEndHandlerWithLocation(t *testing.T) {
|
|||
defer listen.Close()
|
||||
|
||||
for _, name := range apis {
|
||||
// gock.Off()
|
||||
|
||||
resp, err := http.Get(fmt.Sprintf("http://localhost:%s/debug/pprof/%s?seconds=1", port, name))
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, http.StatusOK, resp.StatusCode)
|
||||
|
@ -275,6 +278,28 @@ func TestOAuth(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestStartPlugins(t *testing.T) {
|
||||
dir, err := os.MkdirTemp(os.TempDir(), "atest")
|
||||
assert.NoError(t, err)
|
||||
defer os.RemoveAll(dir)
|
||||
|
||||
err = os.WriteFile(filepath.Join(dir, "stores.yaml"), []byte(sampleStores), 0644)
|
||||
assert.NoError(t, err)
|
||||
|
||||
rootCmd := &cobra.Command{
|
||||
Use: "atest",
|
||||
}
|
||||
rootCmd.SetOut(io.Discard)
|
||||
rootCmd.AddCommand(createServerCmd(
|
||||
fakeruntime.FakeExecer{ExpectOS: "linux", ExpectLookPathError: errors.New("not-found")},
|
||||
server.NewFakeHTTPServer(),
|
||||
))
|
||||
|
||||
rootCmd.SetArgs([]string{"server", "--config-dir", dir, "--dry-run", "--port=0", "--http-port=0"})
|
||||
err = rootCmd.Execute()
|
||||
assert.NoError(t, err)
|
||||
}
|
||||
|
||||
type fakeResponseWriter struct {
|
||||
buf *bytes.Buffer
|
||||
header http.Header
|
||||
|
@ -299,3 +324,6 @@ func (w *fakeResponseWriter) WriteHeader(int) {
|
|||
func (w *fakeResponseWriter) GetBody() *bytes.Buffer {
|
||||
return w.buf
|
||||
}
|
||||
|
||||
//go:embed testdata/stores.yaml
|
||||
var sampleStores string
|
||||
|
|
|
@ -0,0 +1,12 @@
|
|||
stores:
|
||||
- name: git
|
||||
kind:
|
||||
name: atest-store-git
|
||||
enabled: true
|
||||
url: xxx
|
||||
readonly: false
|
||||
disabled: false
|
||||
plugins:
|
||||
- name: atest-store-git
|
||||
url: unix:///tmp/atest-store-git.sock
|
||||
enabled: true
|
|
@ -649,13 +649,14 @@ func TestGetSuggestedAPIs(t *testing.T) {
|
|||
|
||||
t.Run("normal", func(t *testing.T) {
|
||||
gock.Off()
|
||||
randomName := fmt.Sprintf("fake-%d", time.Now().Nanosecond())
|
||||
_, err := server.CreateTestSuite(ctx, &TestSuiteIdentity{
|
||||
Name: "fake-1",
|
||||
Name: randomName,
|
||||
})
|
||||
assert.NoError(t, err)
|
||||
|
||||
_, err = server.UpdateTestSuite(ctx, &TestSuite{
|
||||
Name: "fake-1",
|
||||
Name: randomName,
|
||||
Spec: &APISpec{
|
||||
Kind: "swagger",
|
||||
Url: urlFoo + "/v1",
|
||||
|
@ -666,7 +667,7 @@ func TestGetSuggestedAPIs(t *testing.T) {
|
|||
gock.New(urlFoo).Get("/v1").Reply(200).File("testdata/swagger.json")
|
||||
|
||||
var testcases *TestCases
|
||||
testcases, err = server.GetSuggestedAPIs(ctx, &TestSuiteIdentity{Name: "fake-1"})
|
||||
testcases, err = server.GetSuggestedAPIs(ctx, &TestSuiteIdentity{Name: randomName})
|
||||
assert.NoError(t, err)
|
||||
if assert.NotNil(t, testcases) {
|
||||
assert.Equal(t, 5, len(testcases.Data))
|
||||
|
|
Loading…
Reference in New Issue