mirror of
https://github.com/henrygd/beszel.git
synced 2025-10-30 01:57:04 +00:00
- add one minute charts - update disk io to use bytes - update hub and agent connection interfaces / handlers to be more flexible - change agent cache to use cache time instead of session id - refactor collection of metrics which require deltas to track separately per cache time
113 lines
2.9 KiB
Go
113 lines
2.9 KiB
Go
//go:build testing
|
|
// +build testing
|
|
|
|
package agent
|
|
|
|
import (
|
|
"testing"
|
|
|
|
"github.com/fxamacker/cbor/v2"
|
|
"github.com/henrygd/beszel/internal/common"
|
|
"github.com/stretchr/testify/assert"
|
|
)
|
|
|
|
// MockHandler for testing
|
|
type MockHandler struct {
|
|
requiresVerification bool
|
|
description string
|
|
handleFunc func(ctx *HandlerContext) error
|
|
}
|
|
|
|
func (m *MockHandler) Handle(ctx *HandlerContext) error {
|
|
if m.handleFunc != nil {
|
|
return m.handleFunc(ctx)
|
|
}
|
|
return nil
|
|
}
|
|
|
|
func (m *MockHandler) RequiresVerification() bool {
|
|
return m.requiresVerification
|
|
}
|
|
|
|
// TestHandlerRegistry tests the handler registry functionality
|
|
func TestHandlerRegistry(t *testing.T) {
|
|
t.Run("default registration", func(t *testing.T) {
|
|
registry := NewHandlerRegistry()
|
|
|
|
// Check default handlers are registered
|
|
getDataHandler, exists := registry.GetHandler(common.GetData)
|
|
assert.True(t, exists)
|
|
assert.IsType(t, &GetDataHandler{}, getDataHandler)
|
|
|
|
fingerprintHandler, exists := registry.GetHandler(common.CheckFingerprint)
|
|
assert.True(t, exists)
|
|
assert.IsType(t, &CheckFingerprintHandler{}, fingerprintHandler)
|
|
})
|
|
|
|
t.Run("custom handler registration", func(t *testing.T) {
|
|
registry := NewHandlerRegistry()
|
|
mockHandler := &MockHandler{
|
|
requiresVerification: true,
|
|
description: "Test handler",
|
|
}
|
|
|
|
// Register a custom handler for a mock action
|
|
const mockAction common.WebSocketAction = 99
|
|
registry.Register(mockAction, mockHandler)
|
|
|
|
// Verify registration
|
|
handler, exists := registry.GetHandler(mockAction)
|
|
assert.True(t, exists)
|
|
assert.Equal(t, mockHandler, handler)
|
|
})
|
|
|
|
t.Run("unknown action", func(t *testing.T) {
|
|
registry := NewHandlerRegistry()
|
|
ctx := &HandlerContext{
|
|
Request: &common.HubRequest[cbor.RawMessage]{
|
|
Action: common.WebSocketAction(255), // Unknown action
|
|
},
|
|
HubVerified: true,
|
|
}
|
|
|
|
err := registry.Handle(ctx)
|
|
assert.Error(t, err)
|
|
assert.Contains(t, err.Error(), "unknown action: 255")
|
|
})
|
|
|
|
t.Run("verification required", func(t *testing.T) {
|
|
registry := NewHandlerRegistry()
|
|
ctx := &HandlerContext{
|
|
Request: &common.HubRequest[cbor.RawMessage]{
|
|
Action: common.GetData, // Requires verification
|
|
},
|
|
HubVerified: false, // Not verified
|
|
}
|
|
|
|
err := registry.Handle(ctx)
|
|
assert.Error(t, err)
|
|
assert.Contains(t, err.Error(), "hub not verified")
|
|
})
|
|
}
|
|
|
|
// TestCheckFingerprintHandler tests the CheckFingerprint handler
|
|
func TestCheckFingerprintHandler(t *testing.T) {
|
|
handler := &CheckFingerprintHandler{}
|
|
|
|
t.Run("handle with invalid data", func(t *testing.T) {
|
|
client := &WebSocketClient{}
|
|
ctx := &HandlerContext{
|
|
Client: client,
|
|
HubVerified: false,
|
|
Request: &common.HubRequest[cbor.RawMessage]{
|
|
Action: common.CheckFingerprint,
|
|
Data: cbor.RawMessage{}, // Empty/invalid data
|
|
},
|
|
}
|
|
|
|
// Should fail to decode the fingerprint request
|
|
err := handler.Handle(ctx)
|
|
assert.Error(t, err)
|
|
})
|
|
}
|