1package testutils
2
3import (
4	"bytes"
5	"encoding/json"
6	"strconv"
7	"strings"
8	"testing"
9
10	. "github.com/sirupsen/logrus"
11
12	"github.com/stretchr/testify/require"
13)
14
15func LogAndAssertJSON(t *testing.T, log func(*Logger), assertions func(fields Fields)) {
16	var buffer bytes.Buffer
17	var fields Fields
18
19	logger := New()
20	logger.Out = &buffer
21	logger.Formatter = new(JSONFormatter)
22
23	log(logger)
24
25	err := json.Unmarshal(buffer.Bytes(), &fields)
26	require.Nil(t, err)
27
28	assertions(fields)
29}
30
31func LogAndAssertText(t *testing.T, log func(*Logger), assertions func(fields map[string]string)) {
32	var buffer bytes.Buffer
33
34	logger := New()
35	logger.Out = &buffer
36	logger.Formatter = &TextFormatter{
37		DisableColors: true,
38	}
39
40	log(logger)
41
42	fields := make(map[string]string)
43	for _, kv := range strings.Split(strings.TrimRight(buffer.String(), "\n"), " ") {
44		if !strings.Contains(kv, "=") {
45			continue
46		}
47		kvArr := strings.Split(kv, "=")
48		key := strings.TrimSpace(kvArr[0])
49		val := kvArr[1]
50		if kvArr[1][0] == '"' {
51			var err error
52			val, err = strconv.Unquote(val)
53			require.NoError(t, err)
54		}
55		fields[key] = val
56	}
57	assertions(fields)
58}
59