]> git.r.bdr.sh - rbdr/mobius/blobdiff - hotline/server_blackbox_test.go
Fix tracker registration logging
[rbdr/mobius] / hotline / server_blackbox_test.go
index 17ad7f49418779b40db14832e2ab15ef1277106d..888ca3f0ac86aa6bda2f8f72e348c1e58dc38f82 100644 (file)
@@ -1,44 +1,86 @@
 package hotline
 
 import (
+       "cmp"
+       "encoding/binary"
+       "encoding/hex"
        "github.com/stretchr/testify/assert"
-       "go.uber.org/zap"
-       "go.uber.org/zap/zapcore"
+       "log/slog"
        "os"
+       "slices"
        "testing"
 )
 
-func NewTestLogger() *zap.SugaredLogger {
-       encoderCfg := zap.NewProductionEncoderConfig()
-       encoderCfg.TimeKey = "timestamp"
-       encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder
+func NewTestLogger() *slog.Logger {
+       return slog.New(slog.NewTextHandler(os.Stdout, nil))
+}
+
+// assertTransferBytesEqual takes a string with a hexdump in the same format that `hexdump -C` produces and compares with
+// a hexdump for the bytes in got, after stripping the create/modify timestamps.
+// I don't love this, but as git does not  preserve file create/modify timestamps, we either need to fully mock the
+// filesystem interactions or work around in this way.
+// TODO: figure out a better solution
+func assertTransferBytesEqual(t *testing.T, wantHexDump string, got []byte) bool {
+       if wantHexDump == "" {
+               return true
+       }
 
-       core := zapcore.NewCore(
-               zapcore.NewConsoleEncoder(encoderCfg),
-               zapcore.Lock(os.Stdout),
-               zap.DebugLevel,
+       clean := slices.Concat(
+               got[:92],
+               make([]byte, 16),
+               got[108:],
        )
+       return assert.Equal(t, wantHexDump, hex.Dump(clean))
+}
 
-       cores := []zapcore.Core{core}
-       l := zap.New(zapcore.NewTee(cores...))
-       defer func() { _ = l.Sync() }()
-       return l.Sugar()
+var tranSortFunc = func(a, b Transaction) int {
+       return cmp.Compare(
+               binary.BigEndian.Uint16(a.ClientID[:]),
+               binary.BigEndian.Uint16(b.ClientID[:]),
+       )
 }
 
-// tranAssertEqual compares equality of transactions slices after stripping out the random ID
-func tranAssertEqual(t *testing.T, tran1, tran2 []Transaction) bool {
+// TranAssertEqual compares equality of transactions slices after stripping out the random transaction Type
+func TranAssertEqual(t *testing.T, tran1, tran2 []Transaction) bool {
        var newT1 []Transaction
        var newT2 []Transaction
+
        for _, trans := range tran1 {
-               trans.ID = []byte{0, 0, 0, 0}
+               trans.ID = [4]byte{0, 0, 0, 0}
+               var fs []Field
+               for _, field := range trans.Fields {
+                       if field.Type == FieldRefNum { // FieldRefNum
+                               continue
+                       }
+                       if field.Type == FieldChatID { // FieldChatID
+                               continue
+                       }
+
+                       fs = append(fs, field)
+               }
+               trans.Fields = fs
                newT1 = append(newT1, trans)
        }
 
        for _, trans := range tran2 {
-               trans.ID = []byte{0, 0, 0, 0}
-               newT2 = append(newT2, trans)
+               trans.ID = [4]byte{0, 0, 0, 0}
+               var fs []Field
+               for _, field := range trans.Fields {
+                       if field.Type == FieldRefNum { // FieldRefNum
+                               continue
+                       }
+                       if field.Type == FieldChatID { // FieldChatID
+                               continue
+                       }
 
+                       fs = append(fs, field)
+               }
+               trans.Fields = fs
+               newT2 = append(newT2, trans)
        }
 
+       slices.SortFunc(newT1, tranSortFunc)
+       slices.SortFunc(newT2, tranSortFunc)
+
        return assert.Equal(t, newT1, newT2)
 }