aboutsummaryrefslogtreecommitdiffhomepage
path: root/internal/pipewire/core_test.go
blob: 0997e9c3c4a77057483efd6396a1955b16d3c174 (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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
package pipewire_test

import (
	"testing"

	"hakurei.app/internal/pipewire"
)

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

	encodingTestCases[pipewire.Footer[pipewire.FooterCoreGeneration], *pipewire.Footer[pipewire.FooterCoreGeneration]]{
		{"sample", samplePWContainer[1][0][2], pipewire.Footer[pipewire.FooterCoreGeneration]{
			Opcode:  pipewire.FOOTER_CORE_OPCODE_GENERATION,
			Payload: pipewire.FooterCoreGeneration{RegistryGeneration: 0x22},
		}, nil},

		{"sample*", samplePWContainer[1][5][2], pipewire.Footer[pipewire.FooterCoreGeneration]{
			Opcode:  pipewire.FOOTER_CORE_OPCODE_GENERATION,
			Payload: pipewire.FooterCoreGeneration{RegistryGeneration: 0x23},
		}, nil},
	}.run(t)
}

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

	encodingTestCases[pipewire.CoreInfo, *pipewire.CoreInfo]{
		{"sample", samplePWContainer[1][0][1], pipewire.CoreInfo{
			ID:         0,
			Cookie:     -2069267610,
			UserName:   "alice",
			HostName:   "nixos",
			Version:    "1.4.7",
			Name:       "pipewire-0",
			ChangeMask: pipewire.PW_CORE_CHANGE_MASK_PROPS,
			Properties: &pipewire.SPADict{
				{Key: "config.name", Value: "pipewire.conf"},
				{Key: "application.name", Value: "pipewire"},
				{Key: "application.process.binary", Value: "pipewire"},
				{Key: "application.language", Value: "en_US.UTF-8"},
				{Key: "application.process.id", Value: "1446"},
				{Key: "application.process.user", Value: "alice"},
				{Key: "application.process.host", Value: "nixos"},
				{Key: "window.x11.display", Value: ":0"},
				{Key: "cpu.vm.name", Value: "qemu"},
				{Key: "link.max-buffers", Value: "16"},
				{Key: "core.daemon", Value: "true"},
				{Key: "core.name", Value: "pipewire-0"},
				{Key: "default.clock.min-quantum", Value: "1024"},
				{Key: "cpu.max-align", Value: "32"},
				{Key: "default.clock.rate", Value: "48000"},
				{Key: "default.clock.quantum", Value: "1024"},
				{Key: "default.clock.max-quantum", Value: "2048"},
				{Key: "default.clock.quantum-limit", Value: "8192"},
				{Key: "default.clock.quantum-floor", Value: "4"},
				{Key: "default.video.width", Value: "640"},
				{Key: "default.video.height", Value: "480"},
				{Key: "default.video.rate.num", Value: "25"},
				{Key: "default.video.rate.denom", Value: "1"},
				{Key: "log.level", Value: "2"},
				{Key: "clock.power-of-two-quantum", Value: "true"},
				{Key: "mem.warn-mlock", Value: "false"},
				{Key: "mem.allow-mlock", Value: "true"},
				{Key: "settings.check-quantum", Value: "false"},
				{Key: "settings.check-rate", Value: "false"},
				{Key: "object.id", Value: "0"},
				{Key: "object.serial", Value: "0"}},
		}, nil},
	}.run(t)
}

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

	encodingTestCases[pipewire.CoreDone, *pipewire.CoreDone]{
		{"sample", samplePWContainer[1][5][1], pipewire.CoreDone{
			ID:       -1,
			Sequence: 0,
		}, nil},
	}.run(t)
}

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

	encodingTestCases[pipewire.CoreBoundProps, *pipewire.CoreBoundProps]{
		{"sample", samplePWContainer[1][1][1], pipewire.CoreBoundProps{
			ID:       pipewire.PW_ID_CLIENT,
			GlobalID: 34,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "34"},
				{Key: "module.id", Value: "2"},
				{Key: "pipewire.protocol", Value: "protocol-native"},
				{Key: "pipewire.sec.pid", Value: "1443"},
				{Key: "pipewire.sec.uid", Value: "1000"},
				{Key: "pipewire.sec.gid", Value: "100"},
				{Key: "pipewire.sec.socket", Value: "pipewire-0-manager"}},
		}, nil},
	}.run(t)
}

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

	encodingTestCases[pipewire.CoreHello, *pipewire.CoreHello]{
		{"sample", samplePWContainer[0][0][1], pipewire.CoreHello{
			Version: pipewire.PW_VERSION_CORE,
		}, nil},
	}.run(t)
}

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

	encodingTestCases[pipewire.CoreSync, *pipewire.CoreSync]{
		{"sample", samplePWContainer[0][3][1], pipewire.CoreSync{
			ID:       pipewire.PW_ID_CORE,
			Sequence: pipewire.CoreSyncSequenceOffset + 3,
		}, nil},
	}.run(t)
}

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

	encodingTestCases[pipewire.CoreGetRegistry, *pipewire.CoreGetRegistry]{
		{"sample", samplePWContainer[0][2][1], pipewire.CoreGetRegistry{
			Version: pipewire.PW_VERSION_REGISTRY,
			// this ends up as the Id of PW_TYPE_INTERFACE_Registry
			NewID: 2,
		}, nil},
	}.run(t)
}

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

	encodingTestCases[pipewire.RegistryGlobal, *pipewire.RegistryGlobal]{
		{"sample0", samplePWContainer[1][6][1], pipewire.RegistryGlobal{
			ID:          pipewire.PW_ID_CORE,
			Permissions: pipewire.PW_CORE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Core,
			Version:     pipewire.PW_VERSION_CORE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "0"},
				{Key: "core.name", Value: "pipewire-0"},
			},
		}, nil},

		{"sample1", samplePWContainer[1][7][1], pipewire.RegistryGlobal{
			ID:          1,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "1"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-rt"},
			},
		}, nil},

		{"sample2", samplePWContainer[1][8][1], pipewire.RegistryGlobal{
			ID:          3, // registry takes up 2
			Permissions: pipewire.PW_SECURITY_CONTEXT_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_SecurityContext,
			Version:     pipewire.PW_VERSION_SECURITY_CONTEXT,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "3"},
			},
		}, nil},

		{"sample3", samplePWContainer[1][9][1], pipewire.RegistryGlobal{
			ID:          2,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "2"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-protocol-native"},
			},
		}, nil},

		{"sample4", samplePWContainer[1][10][1], pipewire.RegistryGlobal{
			ID:          5,
			Permissions: pipewire.PW_PROFILER_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Profiler,
			Version:     pipewire.PW_VERSION_PROFILER,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "5"},
			},
		}, nil},

		{"sample5", samplePWContainer[1][11][1], pipewire.RegistryGlobal{
			ID:          4,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "4"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-profiler"},
			},
		}, nil},

		{"sample6", samplePWContainer[1][12][1], pipewire.RegistryGlobal{
			ID:          6,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "6"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-metadata"},
			},
		}, nil},

		{"sample7", samplePWContainer[1][13][1], pipewire.RegistryGlobal{
			ID:          7,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "7"},
				{Key: "module.id", Value: "6"},
				{Key: "factory.name", Value: "metadata"},
				{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Metadata},
				{Key: "factory.type.version", Value: "3"},
			},
		}, nil},

		{"sample8", samplePWContainer[1][14][1], pipewire.RegistryGlobal{
			ID:          8,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "8"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-spa-device-factory"},
			},
		}, nil},

		{"sample9", samplePWContainer[1][15][1], pipewire.RegistryGlobal{
			ID:          9,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "9"},
				{Key: "module.id", Value: "8"},
				{Key: "factory.name", Value: "spa-device-factory"},
				{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Device},
				{Key: "factory.type.version", Value: "3"},
			},
		}, nil},

		{"sample10", samplePWContainer[1][16][1], pipewire.RegistryGlobal{
			ID:          10,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "10"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-spa-node-factory"},
			},
		}, nil},

		{"sample11", samplePWContainer[1][17][1], pipewire.RegistryGlobal{
			ID:          11,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "11"},
				{Key: "module.id", Value: "10"},
				{Key: "factory.name", Value: "spa-node-factory"},
				{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Node},
				{Key: "factory.type.version", Value: "3"},
			},
		}, nil},

		{"sample12", samplePWContainer[1][18][1], pipewire.RegistryGlobal{
			ID:          12,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "12"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-client-node"},
			},
		}, nil},

		{"sample13", samplePWContainer[1][19][1], pipewire.RegistryGlobal{
			ID:          13,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "13"},
				{Key: "module.id", Value: "12"},
				{Key: "factory.name", Value: "client-node"},
				{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_ClientNode},
				{Key: "factory.type.version", Value: "6"},
			},
		}, nil},

		{"sample14", samplePWContainer[1][20][1], pipewire.RegistryGlobal{
			ID:          14,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "14"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-client-device"},
			},
		}, nil},

		{"sample15", samplePWContainer[1][21][1], pipewire.RegistryGlobal{
			ID:          15,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "15"},
				{Key: "module.id", Value: "14"},
				{Key: "factory.name", Value: "client-device"},
				{Key: "factory.type.name", Value: "Spa:Pointer:Interface:Device"},
				{Key: "factory.type.version", Value: "0"},
			},
		}, nil},

		{"sample16", samplePWContainer[1][22][1], pipewire.RegistryGlobal{
			ID:          16,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "16"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-portal"},
			},
		}, nil},

		{"sample17", samplePWContainer[1][23][1], pipewire.RegistryGlobal{
			ID:          17,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "17"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-access"},
			},
		}, nil},

		{"sample18", samplePWContainer[1][24][1], pipewire.RegistryGlobal{
			ID:          18,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "18"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-adapter"},
			},
		}, nil},

		{"sample19", samplePWContainer[1][25][1], pipewire.RegistryGlobal{
			ID:          19,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "19"},
				{Key: "module.id", Value: "18"},
				{Key: "factory.name", Value: "adapter"},
				{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Node},
				{Key: "factory.type.version", Value: "3"},
			},
		}, nil},

		{"sample20", samplePWContainer[1][26][1], pipewire.RegistryGlobal{
			ID:          20,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "20"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-link-factory"},
			},
		}, nil},

		{"sample21", samplePWContainer[1][27][1], pipewire.RegistryGlobal{
			ID:          21,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "21"},
				{Key: "module.id", Value: "20"},
				{Key: "factory.name", Value: "link-factory"},
				{Key: "factory.type.name", Value: pipewire.PW_TYPE_INTERFACE_Link},
				{Key: "factory.type.version", Value: "3"},
			},
		}, nil},

		{"sample22", samplePWContainer[1][28][1], pipewire.RegistryGlobal{
			ID:          22,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "22"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-session-manager"},
			},
		}, nil},

		{"sample23", samplePWContainer[1][29][1], pipewire.RegistryGlobal{
			ID:          23,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "23"},
				{Key: "module.id", Value: "22"},
				{Key: "factory.name", Value: "client-endpoint"},
				{Key: "factory.type.name", Value: "PipeWire:Interface:ClientEndpoint"},
				{Key: "factory.type.version", Value: "0"},
			},
		}, nil},

		{"sample24", samplePWContainer[1][30][1], pipewire.RegistryGlobal{
			ID:          24,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "24"},
				{Key: "module.id", Value: "22"},
				{Key: "factory.name", Value: "client-session"},
				{Key: "factory.type.name", Value: "PipeWire:Interface:ClientSession"},
				{Key: "factory.type.version", Value: "0"},
			},
		}, nil},

		{"sample25", samplePWContainer[1][31][1], pipewire.RegistryGlobal{
			ID:          25,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "25"},
				{Key: "module.id", Value: "22"},
				{Key: "factory.name", Value: "session"},
				{Key: "factory.type.name", Value: "PipeWire:Interface:Session"},
				{Key: "factory.type.version", Value: "0"},
			},
		}, nil},

		{"sample26", samplePWContainer[1][32][1], pipewire.RegistryGlobal{
			ID:          26,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "26"},
				{Key: "module.id", Value: "22"},
				{Key: "factory.name", Value: "endpoint"},
				{Key: "factory.type.name", Value: "PipeWire:Interface:Endpoint"},
				{Key: "factory.type.version", Value: "0"},
			},
		}, nil},

		{"sample27", samplePWContainer[1][33][1], pipewire.RegistryGlobal{
			ID:          27,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "27"},
				{Key: "module.id", Value: "22"},
				{Key: "factory.name", Value: "endpoint-stream"},
				{Key: "factory.type.name", Value: "PipeWire:Interface:EndpointStream"},
				{Key: "factory.type.version", Value: "0"},
			},
		}, nil},

		{"sample28", samplePWContainer[1][34][1], pipewire.RegistryGlobal{
			ID:          28,
			Permissions: pipewire.PW_FACTORY_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Factory,
			Version:     pipewire.PW_VERSION_FACTORY,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "28"},
				{Key: "module.id", Value: "22"},
				{Key: "factory.name", Value: "endpoint-link"},
				{Key: "factory.type.name", Value: "PipeWire:Interface:EndpointLink"},
				{Key: "factory.type.version", Value: "0"},
			},
		}, nil},

		{"sample29", samplePWContainer[1][35][1], pipewire.RegistryGlobal{
			ID:          29,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "29"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-x11-bell"},
			},
		}, nil},

		{"sample30", samplePWContainer[1][36][1], pipewire.RegistryGlobal{
			ID:          30,
			Permissions: pipewire.PW_MODULE_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Module,
			Version:     pipewire.PW_VERSION_MODULE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "30"},
				{Key: "module.name", Value: pipewire.PIPEWIRE_MODULE_PREFIX + "module-jackdbus-detect"},
			},
		}, nil},

		{"sample31", samplePWContainer[1][37][1], pipewire.RegistryGlobal{
			ID:          31,
			Permissions: pipewire.PW_PERM_RWXM, // why is this not PW_NODE_PERM_MASK?
			Type:        pipewire.PW_TYPE_INTERFACE_Node,
			Version:     pipewire.PW_VERSION_NODE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "31"},
				{Key: "factory.id", Value: "11"},
				{Key: "priority.driver", Value: "200000"},
				{Key: "node.name", Value: "Dummy-Driver"},
			},
		}, nil},

		{"sample32", samplePWContainer[1][38][1], pipewire.RegistryGlobal{
			ID:          32,
			Permissions: pipewire.PW_PERM_RWXM, // why is this not PW_NODE_PERM_MASK?
			Type:        pipewire.PW_TYPE_INTERFACE_Node,
			Version:     pipewire.PW_VERSION_NODE,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "32"},
				{Key: "factory.id", Value: "11"},
				{Key: "priority.driver", Value: "190000"},
				{Key: "node.name", Value: "Freewheel-Driver"},
			},
		}, nil},

		{"sample33", samplePWContainer[1][39][1], pipewire.RegistryGlobal{
			ID:          33,
			Permissions: pipewire.PW_METADATA_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Metadata,
			Version:     pipewire.PW_VERSION_METADATA,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "33"},
				{Key: "metadata.name", Value: "settings"},
			},
		}, nil},

		{"sample34", samplePWContainer[1][40][1], pipewire.RegistryGlobal{
			ID:          34,
			Permissions: pipewire.PW_CLIENT_PERM_MASK,
			Type:        pipewire.PW_TYPE_INTERFACE_Client,
			Version:     pipewire.PW_VERSION_CLIENT,
			Properties: &pipewire.SPADict{
				{Key: "object.serial", Value: "34"},
				{Key: "module.id", Value: "2"},
				{Key: "pipewire.protocol", Value: "protocol-native"},
				{Key: "pipewire.sec.pid", Value: "1443"},
				{Key: "pipewire.sec.uid", Value: "1000"},
				{Key: "pipewire.sec.gid", Value: "100"},
				{Key: "pipewire.sec.socket", Value: "pipewire-0-manager"},
				{Key: "pipewire.access", Value: "unrestricted"},
				{Key: "application.name", Value: "pw-container"},
			},
		}, nil},
	}.run(t)
}