Skip to content

Commit d3d2e40

Browse files
committed
fix: correct configDir parameter for GetPluginsByCategory method
- Add configDir field to storeExtManager struct - Update NewStoreExtManager and NewStoreExtManagerInstance to accept configDir parameter - Fix cmd/server.go to pass o.configDir when creating storeExtManager - Update all test calls to use proper configDir (../testing/testdata) - Add AI plugin test data to extension.yaml for proper testing - GetPluginsByCategory now uses correct configuration directory instead of hardcoded empty string - All tests now pass with proper plugin discovery functionality
1 parent 5c1cb2d commit d3d2e40

File tree

4 files changed

+45
-10
lines changed

4 files changed

+45
-10
lines changed

cmd/server.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -261,7 +261,7 @@ func (o *serverOption) runE(cmd *cobra.Command, args []string) (err error) {
261261
extDownloader := downloader.NewStoreDownloader()
262262
extDownloader.WithRegistry(o.extensionRegistry)
263263
extDownloader.WithTimeout(o.downloadTimeout)
264-
storeExtMgr := server.NewStoreExtManager(o.execer)
264+
storeExtMgr := server.NewStoreExtManager(o.execer, o.configDir)
265265
storeExtMgr.WithDownloader(extDownloader)
266266
remoteServer := server.NewRemoteServer(loader, remote.NewGRPCloaderFromStore(), secretServer, storeExtMgr, o.configDir, o.grpcMaxRecvMsgSize)
267267
if stores, storeErr := remoteServer.GetStores(ctx, nil); storeErr == nil {

pkg/server/store_ext_manager.go

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -73,18 +73,20 @@ type storeExtManager struct {
7373
processChan chan fakeruntime.Process
7474
stopSingal chan struct{}
7575
lock *sync.RWMutex
76+
configDir string
7677
}
7778

7879
var ss *storeExtManager
7980

80-
func NewStoreExtManager(execer fakeruntime.Execer) ExtManager {
81+
func NewStoreExtManager(execer fakeruntime.Execer, configDir string) ExtManager {
8182
if ss == nil {
8283
ss = &storeExtManager{
8384
processChan: make(chan fakeruntime.Process),
8485
stopSingal: make(chan struct{}, 1),
8586
lock: &sync.RWMutex{},
8687
}
8788
ss.execer = execer
89+
ss.configDir = configDir
8890
ss.socketPrefix = "unix://"
8991
ss.extStatusMap = map[string]bool{}
9092
ss.processCollect()
@@ -93,13 +95,14 @@ func NewStoreExtManager(execer fakeruntime.Execer) ExtManager {
9395
return ss
9496
}
9597

96-
func NewStoreExtManagerInstance(execer fakeruntime.Execer) ExtManager {
98+
func NewStoreExtManagerInstance(execer fakeruntime.Execer, configDir string) ExtManager {
9799
ss = &storeExtManager{
98100
processChan: make(chan fakeruntime.Process),
99101
stopSingal: make(chan struct{}, 1),
100102
lock: &sync.RWMutex{},
101103
}
102104
ss.execer = execer
105+
ss.configDir = configDir
103106
ss.socketPrefix = "unix://"
104107
ss.extStatusMap = map[string]bool{}
105108
ss.processCollect()
@@ -271,12 +274,10 @@ func (n *nonDownloader) GetTargetFile() string {
271274

272275
// GetPluginsByCategory returns plugins filtered by category (e.g., "ai")
273276
func (s *storeExtManager) GetPluginsByCategory(category string) ([]testing.StoreKind, error) {
274-
storeFactory := testing.NewStoreFactory("") // Use default config directory
277+
storeFactory := testing.NewStoreFactory(s.configDir)
275278
allStoreKinds, err := storeFactory.GetStoreKinds()
276279
if err != nil {
277-
// In test environment or when extension.yaml doesn't exist, return empty list gracefully
278-
serverLogger.Info("failed to get store kinds, returning empty list", "error", err.Error())
279-
return []testing.StoreKind{}, nil
280+
return nil, fmt.Errorf("failed to get store kinds: %w", err)
280281
}
281282

282283
var filteredKinds []testing.StoreKind

pkg/server/store_ext_manager_test.go

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -28,15 +28,15 @@ func TestStoreExtManager(t *testing.T) {
2828
t.Run("not found", func(t *testing.T) {
2929
mgr := NewStoreExtManagerInstance(&fakeruntime.FakeExecer{
3030
ExpectLookPathError: errors.New("not found"),
31-
})
31+
}, "../testing/testdata")
3232
err := mgr.Start("fake", "")
3333
assert.Error(t, err)
3434
})
3535

3636
t.Run("exist executable file", func(t *testing.T) {
3737
mgr := NewStoreExtManagerInstance(&fakeruntime.FakeExecer{
3838
ExpectLookPath: "/usr/local/bin/go",
39-
})
39+
}, "../testing/testdata")
4040
err := mgr.Start("go", "")
4141
assert.NoError(t, err, err)
4242

@@ -53,7 +53,7 @@ func TestStoreExtManager(t *testing.T) {
5353
func TestUnifiedPluginManagement(t *testing.T) {
5454
mgr := NewStoreExtManagerInstance(&fakeruntime.FakeExecer{
5555
ExpectLookPath: "/usr/local/bin/go",
56-
})
56+
}, "../testing/testdata")
5757

5858
t.Run("discover AI plugins via category filter", func(t *testing.T) {
5959
// Test AI plugin discovery using the new unified method

pkg/testing/testdata/data/core/extension.yaml

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,3 +3,37 @@ items:
33
dependencies:
44
- name: atest-store-database
55
link: https://github.com/LinuxSuRen/atest-ext-store-database
6+
categories:
7+
- database
8+
- name: openai-gpt4
9+
dependencies:
10+
- name: openai-gpt4
11+
link: https://github.com/LinuxSuRen/atest-ext-ai-openai
12+
categories:
13+
- ai
14+
params:
15+
- key: version
16+
defaultValue: "1.0.0"
17+
description: "Plugin version"
18+
- key: capabilities
19+
defaultValue: "sql-generation,code-analysis"
20+
description: "AI capabilities"
21+
- name: claude-ai
22+
dependencies:
23+
- name: claude-ai
24+
link: https://github.com/LinuxSuRen/atest-ext-ai-claude
25+
categories:
26+
- ai
27+
params:
28+
- key: version
29+
defaultValue: "1.0.0"
30+
description: "Plugin version"
31+
- key: capabilities
32+
defaultValue: "natural-language,text-analysis"
33+
description: "AI capabilities"
34+
- name: web-scraper
35+
dependencies:
36+
- name: web-scraper
37+
link: https://github.com/LinuxSuRen/atest-ext-web-scraper
38+
categories:
39+
- web

0 commit comments

Comments
 (0)