88 lines
2.2 KiB
Go
88 lines
2.2 KiB
Go
package collector
|
|
|
|
import (
|
|
"context"
|
|
"testing"
|
|
)
|
|
|
|
func TestRegistry_Register(t *testing.T) {
|
|
r := NewRegistry()
|
|
|
|
mock := &mockCollector{name: "test"}
|
|
err := r.Register(mock)
|
|
if err != nil {
|
|
t.Fatalf("注册时不应出错: %v", err)
|
|
}
|
|
|
|
// 重复注册应该失败
|
|
err = r.Register(mock)
|
|
if err == nil {
|
|
t.Fatal("重复注册应该返回错误")
|
|
}
|
|
}
|
|
|
|
func TestRegistry_Get(t *testing.T) {
|
|
r := NewRegistry()
|
|
|
|
mock := &mockCollector{name: "test"}
|
|
_ = r.Register(mock)
|
|
|
|
c, ok := r.Get("test")
|
|
if !ok {
|
|
t.Fatal("应该能找到已注册的采集器")
|
|
}
|
|
if c.Name() != "test" {
|
|
t.Fatalf("期望名称为 'test',实际为 '%s'", c.Name())
|
|
}
|
|
|
|
_, ok = r.Get("nonexistent")
|
|
if ok {
|
|
t.Fatal("不应该找到未注册的采集器")
|
|
}
|
|
}
|
|
|
|
func TestRegistry_List(t *testing.T) {
|
|
r := NewRegistry()
|
|
|
|
_ = r.Register(&mockCollector{name: "a", category: CategoryRuntime})
|
|
_ = r.Register(&mockCollector{name: "b", category: CategoryEditor})
|
|
_ = r.Register(&mockCollector{name: "c", category: CategoryRuntime})
|
|
|
|
all := r.List()
|
|
if len(all) != 3 {
|
|
t.Fatalf("期望 3 个采集器,实际为 %d 个", len(all))
|
|
}
|
|
|
|
runtime := r.ListByCategory(CategoryRuntime)
|
|
if len(runtime) != 2 {
|
|
t.Fatalf("期望 2 个运行时采集器,实际为 %d 个", len(runtime))
|
|
}
|
|
}
|
|
|
|
// mockCollector 用于测试的模拟采集器
|
|
type mockCollector struct {
|
|
name string
|
|
category Category
|
|
available bool
|
|
}
|
|
|
|
func (m *mockCollector) Name() string { return m.name }
|
|
func (m *mockCollector) DisplayName() string { return m.name }
|
|
func (m *mockCollector) Description() string { return "模拟采集器" }
|
|
func (m *mockCollector) Category() Category { return m.category }
|
|
func (m *mockCollector) IsAvailable(ctx context.Context) bool {
|
|
return m.available
|
|
}
|
|
func (m *mockCollector) Scan(ctx context.Context, opts ScanOptions) (*ScanResult, error) {
|
|
return &ScanResult{Collector: m.name, Category: m.category}, nil
|
|
}
|
|
func (m *mockCollector) Capture(ctx context.Context, targetDir string, opts CaptureOptions) error {
|
|
return nil
|
|
}
|
|
func (m *mockCollector) Restore(ctx context.Context, sourceDir string, opts RestoreOptions) error {
|
|
return nil
|
|
}
|
|
func (m *mockCollector) Verify(ctx context.Context) (*VerifyResult, error) {
|
|
return &VerifyResult{Success: true}, nil
|
|
}
|