Files
MyGoNavi/internal/app/methods_jvm_monitoring_test.go
Syngnat 9d08b185d0 feat(jvm): 新增持续监控与采样链路
- 后端新增监控会话管理,支持启动、停止和历史查询

- JMX、Endpoint、Agent Provider 补齐监控快照采集能力

- JMX helper 增加内存、GC、线程、类加载采样并更新内嵌运行时

- 生成 Wails 监控接口绑定并补充后端回归测试
2026-04-26 14:33:41 +08:00

148 lines
4.1 KiB
Go

package app
import (
"context"
"errors"
"testing"
"GoNavi-Wails/internal/connection"
"GoNavi-Wails/internal/jvm"
)
type fakeJVMMonitoringManager struct {
startSnapshot jvm.MonitoringSessionSnapshot
startErr error
historySnapshot jvm.MonitoringSessionSnapshot
historyErr error
stopErr error
startCfg connection.ConnectionConfig
startMode string
historyConnection string
historyMode string
stopConnection string
stopMode string
}
func (f *fakeJVMMonitoringManager) Start(_ context.Context, cfg connection.ConnectionConfig, mode string) (jvm.MonitoringSessionSnapshot, error) {
f.startCfg = cfg
f.startMode = mode
return f.startSnapshot, f.startErr
}
func (f *fakeJVMMonitoringManager) GetHistory(connectionID string, providerMode string) (jvm.MonitoringSessionSnapshot, error) {
f.historyConnection = connectionID
f.historyMode = providerMode
return f.historySnapshot, f.historyErr
}
func (f *fakeJVMMonitoringManager) Stop(connectionID string, providerMode string) error {
f.stopConnection = connectionID
f.stopMode = providerMode
return f.stopErr
}
func swapJVMMonitoringManager(manager jvmMonitoringService) func() {
prev := currentJVMMonitoringManager
currentJVMMonitoringManager = manager
return func() { currentJVMMonitoringManager = prev }
}
func TestJVMStartMonitoringReturnsManagerSnapshot(t *testing.T) {
app := NewAppWithSecretStore(nil)
manager := &fakeJVMMonitoringManager{
startSnapshot: jvm.MonitoringSessionSnapshot{
ConnectionID: "conn-monitor",
ProviderMode: jvm.ModeEndpoint,
Running: true,
Points: []jvm.JVMMonitoringPoint{
{Timestamp: 1713945600000, ThreadCount: 21},
},
},
}
restore := swapJVMMonitoringManager(manager)
defer restore()
res := app.JVMStartMonitoring(connection.ConnectionConfig{
ID: "conn-monitor",
Type: "jvm",
Host: "orders.internal",
JVM: connection.JVMConfig{
PreferredMode: jvm.ModeEndpoint,
AllowedModes: []string{jvm.ModeEndpoint},
},
})
if !res.Success {
t.Fatalf("expected success, got %+v", res)
}
snapshot, ok := res.Data.(jvm.MonitoringSessionSnapshot)
if !ok {
t.Fatalf("expected monitoring snapshot, got %#v", res.Data)
}
if !snapshot.Running || len(snapshot.Points) != 1 {
t.Fatalf("unexpected snapshot: %#v", snapshot)
}
if manager.startCfg.ID != "conn-monitor" {
t.Fatalf("expected manager to receive config ID, got %#v", manager.startCfg)
}
}
func TestJVMGetMonitoringHistoryResolvesPreferredMode(t *testing.T) {
app := NewAppWithSecretStore(nil)
manager := &fakeJVMMonitoringManager{
historySnapshot: jvm.MonitoringSessionSnapshot{
ConnectionID: "conn-history",
ProviderMode: jvm.ModeJMX,
Running: true,
},
}
restore := swapJVMMonitoringManager(manager)
defer restore()
res := app.JVMGetMonitoringHistory(connection.ConnectionConfig{
ID: "conn-history",
Type: "jvm",
Host: "orders.internal",
JVM: connection.JVMConfig{
PreferredMode: jvm.ModeJMX,
AllowedModes: []string{jvm.ModeJMX},
},
}, "")
if !res.Success {
t.Fatalf("expected success, got %+v", res)
}
if manager.historyConnection != "conn-history" || manager.historyMode != jvm.ModeJMX {
t.Fatalf("unexpected manager history args: connection=%q mode=%q", manager.historyConnection, manager.historyMode)
}
}
func TestJVMStopMonitoringReturnsManagerError(t *testing.T) {
app := NewAppWithSecretStore(nil)
manager := &fakeJVMMonitoringManager{
stopErr: errors.New("session not found"),
}
restore := swapJVMMonitoringManager(manager)
defer restore()
res := app.JVMStopMonitoring(connection.ConnectionConfig{
ID: "conn-stop",
Type: "jvm",
Host: "orders.internal",
JVM: connection.JVMConfig{
PreferredMode: jvm.ModeAgent,
AllowedModes: []string{jvm.ModeAgent},
},
}, "")
if res.Success {
t.Fatalf("expected failure, got %+v", res)
}
if res.Message != "session not found" {
t.Fatalf("expected message %q, got %#v", "session not found", res)
}
if manager.stopConnection != "conn-stop" || manager.stopMode != jvm.ModeAgent {
t.Fatalf("unexpected manager stop args: connection=%q mode=%q", manager.stopConnection, manager.stopMode)
}
}