aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pipewire/header_test.go
blob: d7ca468b75b16eaf8c99a958e533f3a138d634fe (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
81
82
package pipewire_test

import (
	"reflect"
	"testing"

	"hakurei.app/internal/pipewire"
)

func TestHeader(t *testing.T) {
	t.Parallel()

	encodingTestCases[pipewire.Header, *pipewire.Header]{
		{"PW_CORE_METHOD_HELLO", []byte(sendmsg00Message00Header), pipewire.Header{
			ID:     pipewire.PW_ID_CORE,
			Opcode: pipewire.PW_CORE_METHOD_HELLO,
			Size:   0x18, Sequence: 0, FileCount: 0,
		}, nil},

		{"PW_CLIENT_METHOD_UPDATE_PROPERTIES", []byte(sendmsg00Message01Header), pipewire.Header{
			ID:     pipewire.PW_ID_CLIENT,
			Opcode: pipewire.PW_CLIENT_METHOD_UPDATE_PROPERTIES,
			Size:   0x600, Sequence: 1, FileCount: 0,
		}, nil},

		{"PW_CORE_METHOD_GET_REGISTRY", []byte(sendmsg00Message02Header), pipewire.Header{
			ID:     pipewire.PW_ID_CORE,
			Opcode: pipewire.PW_CORE_METHOD_GET_REGISTRY,
			Size:   0x28, Sequence: 2, FileCount: 0,
		}, nil},

		{"PW_CORE_METHOD_SYNC", []byte(sendmsg00Message03Header), pipewire.Header{
			ID:     pipewire.PW_ID_CORE,
			Opcode: pipewire.PW_CORE_METHOD_SYNC,
			Size:   0x28, Sequence: 3, FileCount: 0,
		}, nil},

		{"PW_SECURITY_CONTEXT_METHOD_CREATE", []byte{
			// Id
			3, 0, 0, 0,
			// size
			0xd8, 0, 0,
			// opcode
			1,
			// seq
			5, 0, 0, 0,
			// n_fds
			2, 0, 0, 0,
		}, pipewire.Header{ID: 3, Opcode: pipewire.PW_SECURITY_CONTEXT_METHOD_CREATE,
			Size: 0xd8, Sequence: 5, FileCount: 2}, nil},

		{"PW_SECURITY_CONTEXT_METHOD_NUM", []byte{
			// Id
			0, 0, 0, 0,
			// size
			0x28, 0, 0,
			// opcode
			2,
			// seq
			6, 0, 0, 0,
			// n_fds
			0, 0, 0, 0,
		}, pipewire.Header{ID: 0, Opcode: pipewire.PW_SECURITY_CONTEXT_METHOD_NUM,
			Size: 0x28, Sequence: 6, FileCount: 0}, nil},
	}.run(t)

	t.Run("size range", func(t *testing.T) {
		t.Parallel()

		if _, err := (&pipewire.Header{Size: 0xff000000}).MarshalBinary(); !reflect.DeepEqual(err, pipewire.ErrSizeRange) {
			t.Errorf("UnmarshalBinary: error = %v", err)
		}
	})

	t.Run("header size", func(t *testing.T) {
		t.Parallel()

		if err := (*pipewire.Header)(nil).UnmarshalBinary(nil); !reflect.DeepEqual(err, pipewire.ErrBadHeader) {
			t.Errorf("UnmarshalBinary: error = %v", err)
		}
	})
}