File: message_test.go

package info (click to toggle)
golang-github-azure-go-amqp 1.0.2-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, trixie
  • size: 4,192 kB
  • sloc: makefile: 22
file content (83 lines) | stat: -rw-r--r-- 3,211 bytes parent folder | download
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
81
82
83
package amqp

import (
	"testing"

	"github.com/google/go-cmp/cmp"
	"github.com/google/go-cmp/cmp/cmpopts"
	"github.com/stretchr/testify/require"
)

var helperTo = "ActiveMQ.DLQ"

var exampleEncodedMessages = []struct {
	label    string
	expected Message
	encoded  []byte
}{
	{
		label: "SwiftMQ message",
		expected: Message{
			Format: 0,
			Header: &MessageHeader{
				Durable: true, Priority: 4,
				TTL: 0, FirstAcquirer: false,
				DeliveryCount: 0,
			},
			Properties: &MessageProperties{
				MessageID: "7735812932138480283/1/12",
				To:        &helperTo,
			},
			ApplicationProperties: map[string]any{
				"prop002":       "v2",
				"prop000000003": int64(100000),
				"prop4":         "val000004",
				"prop01":        "val001",
			},
			Value: `{"id":"000000000","prop4":"val000004","prop002Code":"v2","___prop000000003":10.0,"_______prop000000003":"10.0","prop0005":100,"_________prop01":"val001"}`,
		},
		encoded: []byte{
			0, 128, 0, 0, 0, 0, 0, 0, 0, 112, 192, 7, 5, 65, 80, 4, 64, 66, 67,
			0, 128, 0, 0, 0, 0, 0, 0, 0, 115, 192, 42, 3, 161, 24, 55, 55, 51, 53, 56, 49, 50, 57, 51, 50, 49, 51, 56, 52, 56, 48, 50, 56, 51, 47, 49, 47, 49, 50, 64, 161, 12, 65, 99, 116, 105, 118, 101, 77, 81, 46, 68, 76, 81,
			0, 128, 0, 0, 0, 0, 0, 0, 0, 116, 193, 72, 8, 161, 6, 112, 114, 111, 112, 48, 49, 161, 6, 118, 97, 108, 48, 48, 49, 161, 7, 112, 114, 111, 112, 48, 48, 50, 161, 2, 118, 50, 161, 13, 112, 114, 111, 112, 48, 48, 48, 48, 48, 48, 48, 48, 51, 129, 0, 0, 0, 0, 0, 1, 134, 160, 161, 5, 112, 114, 111, 112, 52, 161, 9, 118, 97, 108, 48, 48, 48, 48, 48, 52,
			0, 128, 0, 0, 0, 0, 0, 0, 0, 119, 161, 153, 123, 34, 105, 100, 34, 58, 34, 48, 48, 48, 48, 48, 48, 48, 48, 48, 34, 44, 34, 112, 114, 111, 112, 52, 34, 58, 34, 118, 97, 108, 48, 48, 48, 48, 48, 52, 34, 44, 34, 112, 114, 111, 112, 48, 48, 50, 67, 111, 100, 101, 34, 58, 34, 118, 50, 34, 44, 34, 95, 95, 95, 112, 114, 111, 112, 48, 48, 48, 48, 48, 48, 48, 48, 51, 34, 58, 49, 48, 46, 48, 44, 34, 95, 95, 95, 95, 95, 95, 95, 112, 114, 111, 112, 48, 48, 48, 48, 48, 48, 48, 48, 51, 34, 58, 34, 49, 48, 46, 48, 34, 44, 34, 112, 114, 111, 112, 48, 48, 48, 53, 34, 58, 49, 48, 48, 44, 34, 95, 95, 95, 95, 95, 95, 95, 95, 95, 112, 114, 111, 112, 48, 49, 34, 58, 34, 118, 97, 108, 48, 48, 49, 34, 125,
		},
	},
}

func TestMessageUnmarshaling(t *testing.T) {
	for _, tt := range exampleEncodedMessages {
		t.Run(tt.label, func(t *testing.T) {
			var msg Message

			if err := msg.UnmarshalBinary(tt.encoded); err != nil {
				t.Fatal("failed to decode message: ", err)
			}

			if diff := cmp.Diff(tt.expected, msg, cmpopts.IgnoreUnexported(Message{})); diff != "" {
				t.Fatalf("decoded message differs from expected (-expected +got): %s", diff)
			}
		})
	}
}

func TestMessageWithSequence(t *testing.T) {
	m := &Message{
		Sequence: [][]any{
			{"hello1", "world1", 11, 12, 13},
			{"hello2", "world2", 21, 22, 23},
		},
	}

	bytes, err := m.MarshalBinary()
	require.NoError(t, err)

	newM := &Message{}
	err = newM.UnmarshalBinary(bytes)
	require.NoError(t, err)

	require.EqualValues(t, [][]any{
		{"hello1", "world1", int64(11), int64(12), int64(13)},
		{"hello2", "world2", int64(21), int64(22), int64(23)},
	}, newM.Sequence)
}