Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
22 changes: 11 additions & 11 deletions cmd/server.go
Original file line number Diff line number Diff line change
Expand Up @@ -264,13 +264,12 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
storeExtMgr := server.NewStoreExtManager(o.execer)
storeExtMgr.WithDownloader(extDownloader)
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: %v\n", storeKindsErr)
} else {
if runPluginErr := startPlugins(storeExtMgr, kinds); runPluginErr != nil {
if stores, storeErr := remoteServer.GetStores(ctx, nil); storeErr == nil {
if runPluginErr := startPlugins(storeExtMgr, stores); runPluginErr != nil {
cmd.PrintErrf("error occurred during starting plugins, error: %v\n", runPluginErr)
}
} else {
cmd.PrintErrf("error occurred during getting stores, error: %v\n", storeErr)
}

// create mock server controller
Expand Down Expand Up @@ -438,13 +437,14 @@ func postRequestProxy(proxy string) func(w http.ResponseWriter, r *http.Request,
}
}

func startPlugins(storeExtMgr server.ExtManager, kinds *server.StoreKinds) (err error) {
const socketPrefix = "unix://"

for _, kind := range kinds.Data {
if kind.Enabled && (strings.HasPrefix(kind.Url, socketPrefix) || strings.Contains(kind.Url, ":")) {
err = errors.Join(err, storeExtMgr.Start(kind.Name, kind.Url))
func startPlugins(storeExtMgr server.ExtManager, stores *server.Stores) (err error) {
for _, store := range stores.Data {
if store.Disabled || store.Kind == nil {
continue
}

kind := store.Kind
err = errors.Join(err, storeExtMgr.Start(kind.Name, kind.Url))
}
return
}
Expand Down
10 changes: 5 additions & 5 deletions console/atest-ui/src/App.vue
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import {
Share,
ArrowDown,
Guide,
DataAnalysis, Help, Setting
Help, Setting
} from '@element-plus/icons-vue'
import * as ElementPlusIcons from '@element-plus/icons-vue'
import { ref, watch, getCurrentInstance} from 'vue'
Expand Down Expand Up @@ -152,16 +152,16 @@ API.GetMenus((menus) => {
<el-icon><Guide /></el-icon>
<template #title>{{ t('title.mock' )}}</template>
</el-menu-item>
<el-menu-item index="store">
<el-icon><location /></el-icon>
<template #title>{{ t('title.stores') }}</template>
</el-menu-item>
<span v-for="menu in extensionMenus" :key="menu.index" :index="menu.index">
<el-menu-item :index="menu.index">
<el-icon><component :is="ElementPlusIcons[menu.icon]" /></el-icon>
<template #title>{{ menu.name }}</template>
</el-menu-item>
</span>
<el-menu-item index="store">
<el-icon><location /></el-icon>
<template #title>{{ t('title.stores') }}</template>
</el-menu-item>
</el-menu>
</el-aside>

Expand Down
2 changes: 1 addition & 1 deletion pkg/downloader/oci.go
Original file line number Diff line number Diff line change
Expand Up @@ -135,7 +135,7 @@ func (d *defaultOCIDownloader) Download(image, tag, file string) (reader io.Read
}
}

err = fmt.Errorf("not found %s", file)
err = fmt.Errorf("not found %s from %s", file, api)
return
}

Expand Down
16 changes: 11 additions & 5 deletions pkg/server/remote_server.go
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ import (
"path/filepath"
reflect "reflect"
"regexp"
"runtime"
"slices"
"strconv"
"strings"
Expand Down Expand Up @@ -1247,10 +1248,7 @@ func (s *server) CreateStore(ctx context.Context, in *Store) (reply *Store, err
storeFactory := testing.NewStoreFactory(s.configDir)
store := ToNormalStore(in)

if store.Kind.URL == "" {
store.Kind.URL = fmt.Sprintf("unix://%s", home.GetExtensionSocketPath(store.Kind.Name))
}

handleStore(&store)
if err = storeFactory.CreateStore(store); err == nil && s.storeExtMgr != nil {
err = s.storeExtMgr.Start(store.Kind.Name, store.Kind.URL)
}
Expand All @@ -1260,6 +1258,7 @@ func (s *server) UpdateStore(ctx context.Context, in *Store) (reply *Store, err
reply = &Store{}
storeFactory := testing.NewStoreFactory(s.configDir)
store := ToNormalStore(in)
handleStore(&store)
if err = storeFactory.UpdateStore(store); err == nil && s.storeExtMgr != nil {
// TODO need to restart extension if config was changed
err = s.storeExtMgr.Start(store.Kind.Name, store.Kind.URL)
Expand All @@ -1276,14 +1275,21 @@ func (s *server) VerifyStore(ctx context.Context, in *SimpleQuery) (reply *Exten
reply = &ExtensionStatus{}
var loader testing.Writer
if loader, err = s.getLoaderByStoreName(in.Name); err == nil && loader != nil {
readOnly, verifyErr := loader.Verify()
readOnly, version, verifyErr := loader.Verify()
reply.Ready = verifyErr == nil
reply.Version = version
reply.ReadOnly = readOnly
reply.Message = util.OKOrErrorMessage(verifyErr)
}
return
}

func handleStore(store *testing.Store) {
if store.Kind.URL == "" && runtime.GOOS != "windows" {
store.Kind.URL = fmt.Sprintf("unix://%s", home.GetExtensionSocketPath(store.Kind.Name))
}
}

// secret related interfaces
func (s *server) GetSecrets(ctx context.Context, in *Empty) (reply *Secrets, err error) {
return s.secretServer.GetSecrets(ctx, in)
Expand Down
14 changes: 12 additions & 2 deletions pkg/server/server.pb.go

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions pkg/server/server.proto
Original file line number Diff line number Diff line change
Expand Up @@ -616,6 +616,7 @@ message StoreKind {
repeated StoreKindDependency dependencies = 4;
string link = 5;
repeated StoreKindParam params = 6;
repeated string categories = 7;
}

message StoreKindDependency {
Expand Down
17 changes: 13 additions & 4 deletions pkg/server/store_ext_manager.go
Original file line number Diff line number Diff line change
Expand Up @@ -98,13 +98,21 @@ func (s *storeExtManager) StartPlugin(storeKind testing.StoreKind) {
}

func (s *storeExtManager) Start(name, socket string) (err error) {
if name == "" {
}

serverLogger.Info("start", "extension", name, "socket", socket)
if v, ok := s.extStatusMap[name]; ok && v {
return
}

platformBasedName := name
if s.execer.OS() == "windows" {
platformBasedName += ".exe"
} else {
socket = fmt.Sprintf("unix://%s", home.GetExtensionSocketPath(name))
}

targetDir := home.GetUserBinDir()
targetBinaryFile := filepath.Join(targetDir, platformBasedName)

Expand All @@ -118,13 +126,14 @@ func (s *storeExtManager) Start(name, socket string) (err error) {
if err != nil {
err = fmt.Errorf("not found extension, try to download it, error: %v", err)
go func() {
s.ociDownloader.WithKind("store")
s.ociDownloader.WithOS(s.execer.OS())
reader, dErr := s.ociDownloader.Download(name, "", "")
ociDownloader := downloader.NewStoreDownloader()
ociDownloader.WithKind("store")
ociDownloader.WithOS(s.execer.OS())
reader, dErr := ociDownloader.Download(name, "", "")
if dErr != nil {
serverLogger.Error(dErr, "failed to download extension", "name", name)
} else {
extFile := s.ociDownloader.GetTargetFile()
extFile := ociDownloader.GetTargetFile()

targetFile := filepath.Base(extFile)
if dErr = downloader.WriteTo(reader, targetDir, targetFile); dErr == nil {
Expand Down
2 changes: 1 addition & 1 deletion pkg/testing/loader.go
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ type Loader interface {
GetCount() int
Reset()

Verify() (readOnly bool, err error)
Verify() (readOnly bool, version string, err error)
PProf(name string) []byte

Query(query map[string]string) (result DataResult, err error)
Expand Down
2 changes: 1 addition & 1 deletion pkg/testing/loader_file.go
Original file line number Diff line number Diff line change
Expand Up @@ -504,7 +504,7 @@ func (l *fileLoader) RenameTestSuite(oldName, newName string) (err error) {
return
}

func (l *fileLoader) Verify() (readOnly bool, err error) {
func (l *fileLoader) Verify() (readOnly bool, version string, err error) {
// always be okay
return
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/testing/loader_file_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,7 @@ func TestFileLoader(t *testing.T) {
}
tt.verify(t, loader)

readonly, err := loader.Verify()
readonly, _, err := loader.Verify()
assert.NoError(t, err)
assert.False(t, readonly)
})
Expand Down
2 changes: 1 addition & 1 deletion pkg/testing/loader_non.go
Original file line number Diff line number Diff line change
Expand Up @@ -141,7 +141,7 @@ func (l *nonLoader) RenameTestSuite(oldName, newName string) (err error) {
return
}

func (l *nonLoader) Verify() (readOnly bool, err error) {
func (l *nonLoader) Verify() (readOnly bool, version string, err error) {
// always be okay
return
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/testing/loader_non_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ func TestNonLoader(t *testing.T) {
assert.NoError(t, loader.RenameTestCase("", "", ""))

var readonly bool
readonly, err = loader.Verify()
readonly, _, err = loader.Verify()
assert.NoError(t, err)
assert.False(t, readonly)
assert.Empty(t, loader.PProf(""))
Expand Down
3 changes: 2 additions & 1 deletion pkg/testing/remote/grpc_store.go
Original file line number Diff line number Diff line change
Expand Up @@ -285,14 +285,15 @@ func (g *gRPCLoader) RenameTestSuite(oldName, newName string) (err error) {
return
}

func (g *gRPCLoader) Verify() (readOnly bool, err error) {
func (g *gRPCLoader) Verify() (readOnly bool, version string, err error) {
// avoid to long to wait the response
ctx, cancel := context.WithTimeout(g.ctx, time.Second*5)
defer cancel()

var result *server.ExtensionStatus
if result, err = g.client.Verify(ctx, &server.Empty{}); err == nil {
readOnly = result.ReadOnly
version = result.Version
if !result.Ready {
err = errors.New(result.Message)
}
Expand Down
2 changes: 1 addition & 1 deletion pkg/testing/remote/grpc_store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ func TestNewGRPCLoader(t *testing.T) {
assert.Error(t, err)

var readonly bool
readonly, err = writer.Verify()
readonly, _, err = writer.Verify()
assert.Error(t, err)
assert.False(t, readonly)
})
Expand Down
1 change: 1 addition & 0 deletions pkg/testing/store.go
Original file line number Diff line number Diff line change
Expand Up @@ -105,6 +105,7 @@ type StoreKind struct {
Params []StoreKindParam
Link string
Enabled bool
Categories []string
}

type StoreKindDependency struct {
Expand Down
Loading