70 lines
1.7 KiB
Go
70 lines
1.7 KiB
Go
// 日志注入测试:验证 agent 包可携带宿主项目的日志实现,
|
|
// 日志统一走注入的 Logger(嵌入到 capricorn 等项目时日志不再"各写各的")。
|
|
package e2e
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
"sync"
|
|
"testing"
|
|
"time"
|
|
|
|
"git.zeroonesoft.cn/golib/zonat/agent"
|
|
)
|
|
|
|
// captureLogger 捕获日志的假实现(模拟宿主项目的 logger)
|
|
type captureLogger struct {
|
|
mu sync.Mutex
|
|
lines []string
|
|
}
|
|
|
|
func (c *captureLogger) Debugf(format string, args ...any) {}
|
|
|
|
func (c *captureLogger) appendf(format string, args ...any) {
|
|
c.mu.Lock()
|
|
c.lines = append(c.lines, fmt.Sprintf(format, args...))
|
|
c.mu.Unlock()
|
|
}
|
|
|
|
func (c *captureLogger) Infof(format string, args ...any) { c.appendf(format, args...) }
|
|
func (c *captureLogger) Warnf(format string, args ...any) { c.appendf(format, args...) }
|
|
func (c *captureLogger) Errorf(format string, args ...any) { c.appendf(format, args...) }
|
|
|
|
func (c *captureLogger) contains(sub string) bool {
|
|
c.mu.Lock()
|
|
defer c.mu.Unlock()
|
|
for _, l := range c.lines {
|
|
if strings.Contains(l, sub) {
|
|
return true
|
|
}
|
|
}
|
|
return false
|
|
}
|
|
|
|
func TestLoggerInjection(t *testing.T) {
|
|
target := startEchoServer(t)
|
|
n := startNode(t)
|
|
|
|
cap := &captureLogger{}
|
|
a := agent.New("agent-log")
|
|
a.Logger = cap
|
|
a.Backoff = 100 * time.Millisecond
|
|
a.PingEvery = 0
|
|
go a.Run()
|
|
t.Cleanup(a.Close)
|
|
|
|
if _, err := a.RegisterTunnel(buildTunnel(t, n, a, "log-tunnel", target, 0)); err != nil {
|
|
t.Fatal(err)
|
|
}
|
|
|
|
// 注入的 logger 必须收到 agent 内部日志
|
|
deadline := time.Now().Add(2 * time.Second)
|
|
for time.Now().Before(deadline) {
|
|
if cap.contains("已连接节点") {
|
|
return
|
|
}
|
|
time.Sleep(20 * time.Millisecond)
|
|
}
|
|
t.Fatal("注入的 logger 未收到 agent 日志")
|
|
}
|