Major internal refactor to use an event bus to pass event/messages along. These changes are largely invisible user facing but sets up internal design for real time stats and information. - `--watch-config` logic refactored for events - remove multiple SSE api endpoints, replaced with /api/events - keep all functionality essentially the same - UI/backend sync is in near real time now
87 lines
1.9 KiB
Go
87 lines
1.9 KiB
Go
package proxy
|
|
|
|
import (
|
|
"bytes"
|
|
"io"
|
|
"sync"
|
|
"testing"
|
|
)
|
|
|
|
func TestLogMonitor(t *testing.T) {
|
|
logMonitor := NewLogMonitorWriter(io.Discard)
|
|
|
|
// A WaitGroup is used to wait for all the expected writes to complete
|
|
var wg sync.WaitGroup
|
|
|
|
client1Messages := make([]byte, 0)
|
|
client2Messages := make([]byte, 0)
|
|
|
|
defer logMonitor.OnLogData(func(data []byte) {
|
|
client1Messages = append(client1Messages, data...)
|
|
wg.Done()
|
|
})()
|
|
|
|
defer logMonitor.OnLogData(func(data []byte) {
|
|
client2Messages = append(client2Messages, data...)
|
|
wg.Done()
|
|
})()
|
|
|
|
wg.Add(6) // 2 x 3 writes
|
|
|
|
logMonitor.Write([]byte("1"))
|
|
logMonitor.Write([]byte("2"))
|
|
logMonitor.Write([]byte("3"))
|
|
|
|
// wait for all writes to complete
|
|
wg.Wait()
|
|
|
|
// Check the buffer
|
|
expectedHistory := "123"
|
|
history := string(logMonitor.GetHistory())
|
|
|
|
if history != expectedHistory {
|
|
t.Errorf("Expected history: %s, got: %s", expectedHistory, history)
|
|
}
|
|
|
|
c1Data := string(client1Messages)
|
|
if c1Data != expectedHistory {
|
|
t.Errorf("Client1 expected %s, got: %s", expectedHistory, c1Data)
|
|
}
|
|
|
|
c2Data := string(client2Messages)
|
|
if c2Data != expectedHistory {
|
|
t.Errorf("Client2 expected %s, got: %s", expectedHistory, c2Data)
|
|
}
|
|
}
|
|
|
|
func TestWrite_ImmutableBuffer(t *testing.T) {
|
|
// Create a new LogMonitor instance
|
|
lm := NewLogMonitorWriter(io.Discard)
|
|
|
|
// Prepare a message to write
|
|
msg := []byte("Hello, World!")
|
|
lenmsg := len(msg)
|
|
|
|
// Write the message to the LogMonitor
|
|
n, err := lm.Write(msg)
|
|
if err != nil {
|
|
t.Fatalf("Write failed: %v", err)
|
|
}
|
|
|
|
if n != lenmsg {
|
|
t.Errorf("Expected %d bytes written but got %d", lenmsg, n)
|
|
}
|
|
|
|
// Change the original message
|
|
msg[0] = 'B' // This should not affect the buffer
|
|
|
|
// Get the history from the LogMonitor
|
|
history := lm.GetHistory()
|
|
|
|
// Check that the history contains the original message, not the modified one
|
|
expected := []byte("Hello, World!")
|
|
if !bytes.Equal(history, expected) {
|
|
t.Errorf("Expected history to be %q, got %q", expected, history)
|
|
}
|
|
}
|