aboutsummaryrefslogtreecommitdiff
path: root/hotline/server_blackbox_test.go
blob: 138a17f285ca782e64c8c2c79811c893ef9789e4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
package hotline

import (
	"bytes"
	"encoding/hex"
	"github.com/stretchr/testify/assert"
	"go.uber.org/zap"
	"go.uber.org/zap/zapcore"
	"os"
	"testing"
)

func NewTestLogger() *zap.SugaredLogger {
	encoderCfg := zap.NewProductionEncoderConfig()
	encoderCfg.TimeKey = "timestamp"
	encoderCfg.EncodeTime = zapcore.ISO8601TimeEncoder

	core := zapcore.NewCore(
		zapcore.NewConsoleEncoder(encoderCfg),
		zapcore.Lock(os.Stdout),
		zap.DebugLevel,
	)

	cores := []zapcore.Core{core}
	l := zap.New(zapcore.NewTee(cores...))
	defer func() { _ = l.Sync() }()
	return l.Sugar()
}

// 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
	}

	var clean []byte
	clean = append(clean, got[:92]...)         // keep the first 92 bytes
	clean = append(clean, make([]byte, 16)...) // replace the next 16 bytes for create/modify timestamps
	clean = append(clean, got[108:]...)        // keep the rest

	return assert.Equal(t, wantHexDump, hex.Dump(clean))
}

// tranAssertEqual compares equality of transactions slices after stripping out the random ID
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}
		var fs []Field
		for _, field := range trans.Fields {
			if bytes.Equal(field.ID, []byte{0x00, 0x6b}) {
				continue
			}
			fs = append(fs, field)
		}
		trans.Fields = fs
		newT1 = append(newT1, trans)
	}

	for _, trans := range tran2 {
		trans.ID = []byte{0, 0, 0, 0}
		var fs []Field
		for _, field := range trans.Fields {
			if bytes.Equal(field.ID, []byte{0x00, 0x6b}) {
				continue
			}
			fs = append(fs, field)
		}
		trans.Fields = fs
		newT2 = append(newT2, trans)
	}

	return assert.Equal(t, newT1, newT2)
}