@@ -25,100 +25,79 @@ defmodule BoomboxTest do
25
25
file_file_mp4_audio: { [ @ bbb_mp4_a , "output.mp4" ] , "ref_bun10s_aac.mp4" , kinds: [ :audio ] } ,
26
26
file_file_mp4_video: { [ @ bbb_mp4_v , "output.mp4" ] , "ref_bun10s_aac.mp4" , kinds: [ :video ] } ,
27
27
http_file_mp4: { [ @ bbb_mp4_url , "output.mp4" ] , "ref_bun10s_aac.mp4" , [ ] } ,
28
- file_file_file_mp4: { [ @ bbb_mp4 , "mid_output.mp4" , "output.mp4" ] , "ref_bun10s_aac.mp4" , [ ] }
28
+ file_file_file_mp4: { [ @ bbb_mp4 , "mid_output.mp4" , "output.mp4" ] , "ref_bun10s_aac.mp4" , [ ] } ,
29
+ file_webrtc:
30
+ { [ @ bbb_mp4 , { :async , { :webrtc , quote ( do: Membrane.WebRTC.Signaling . new ( ) ) } } , "output.mp4" ] ,
31
+ "ref_bun10s_opus_aac.mp4" , [ ] } ,
32
+ file_whip:
33
+ { [ @ bbb_mp4 , { :async , { :whip , quote ( do: get_free_local_address ( ) ) } } , "output.mp4" ] ,
34
+ "ref_bun10s_opus_aac.mp4" , [ ] } ,
35
+ http_webrtc:
36
+ { [
37
+ @ bbb_mp4_url ,
38
+ { :async , { :webrtc , quote ( do: Membrane.WebRTC.Signaling . new ( ) ) } } ,
39
+ "output.mp4"
40
+ ] , "ref_bun10s_opus_aac.mp4" , [ ] } ,
41
+ webrtc_audio:
42
+ { [
43
+ @ bbb_mp4_a ,
44
+ { :async , { :webrtc , quote ( do: Membrane.WebRTC.Signaling . new ( ) ) } } ,
45
+ "output.mp4"
46
+ ] , "ref_bun10s_opus_aac.mp4" , [ kinds: [ :audio ] ] } ,
47
+ webrtc_video:
48
+ { [
49
+ @ bbb_mp4_v ,
50
+ { :async , { :webrtc , quote ( do: Membrane.WebRTC.Signaling . new ( ) ) } } ,
51
+ "output.mp4"
52
+ ] , "ref_bun10s_opus_aac.mp4" , [ kinds: [ :video ] ] } ,
53
+ webrtc_webrtc:
54
+ { [
55
+ @ bbb_mp4 ,
56
+ { :async , { :webrtc , quote ( do: Membrane.WebRTC.Signaling . new ( ) ) } } ,
57
+ { :async , { :webrtc , quote ( do: Membrane.WebRTC.Signaling . new ( ) ) } } ,
58
+ "output.mp4"
59
+ ] , "ref_bun10s_opus_aac.mp4" , [ ] }
29
60
]
30
61
|> Enum . each ( fn { tag , { [ input | io ] , fixture , opts } } ->
31
62
@ tag tag
32
63
async_test "#{ tag } " , % { tmp_dir: tmp } do
64
+ Keyword . get ( unquote ( opts ) , :setup , fn -> :ok end ) . ( )
65
+
33
66
reduce_test ( unquote ( io ) , unquote ( input ) , unquote ( fixture ) , [ { :tmp_dir , tmp } | unquote ( opts ) ] )
34
67
end
35
68
end )
36
69
70
+ defp reduce_test ( [ { :async , output } | next ] , input , fixture , opts ) do
71
+ t = Boombox . async ( input: input , output: output )
72
+
73
+ reduce_test (
74
+ next ,
75
+ output ,
76
+ fixture ,
77
+ Keyword . put ( opts , :async , [ t | Keyword . get ( opts , :async , [ ] ) ] )
78
+ )
79
+ end
80
+
37
81
defp reduce_test ( [ output | next ] , input , fixture , opts ) do
38
82
output_path = Path . join ( opts [ :tmp_dir ] , output )
39
83
Boombox . run ( input: input , output: output_path )
40
84
reduce_test ( next , output_path , fixture , opts )
41
85
end
42
86
43
87
defp reduce_test ( [ ] , input , fixture , opts ) do
88
+ Task . await_many ( Keyword . get ( opts , :async , [ ] ) )
44
89
Compare . compare ( input , "test/fixtures/#{ fixture } " , opts )
45
90
end
46
91
47
- @ tag :file_webrtc
48
- async_test "mp4 file -> webrtc -> mp4 file" , % { tmp_dir: tmp } do
49
- output = Path . join ( tmp , "output.mp4" )
50
- signaling = Membrane.WebRTC.Signaling . new ( )
51
- t = Boombox . async ( input: @ bbb_mp4 , output: { :webrtc , signaling } )
52
- Boombox . run ( input: { :webrtc , signaling } , output: output )
53
- Task . await ( t )
54
- Compare . compare ( output , "test/fixtures/ref_bun10s_opus_aac.mp4" )
55
- end
56
-
57
- @ tag :file_whip
58
- async_test "mp4 file -> webrtc/whip -> mp4 file" , % { tmp_dir: tmp } do
59
- output = Path . join ( tmp , "output.mp4" )
60
-
61
- port = get_free_port ( )
62
-
63
- t = Boombox . async ( input: @ bbb_mp4 , output: { :whip , "http://127.0.0.1:#{ port } " } )
64
-
65
- Boombox . run ( input: { :whip , "http://127.0.0.1:#{ port } " } , output: output )
66
- Task . await ( t )
67
- Compare . compare ( output , "test/fixtures/ref_bun10s_opus_aac.mp4" )
68
- end
69
-
70
- @ tag :http_webrtc
71
- async_test "http mp4 -> webrtc -> mp4 file" , % { tmp_dir: tmp } do
72
- output = Path . join ( tmp , "output.mp4" )
73
- signaling = Membrane.WebRTC.Signaling . new ( )
74
- t = Boombox . async ( input: @ bbb_mp4_url , output: { :webrtc , signaling } )
75
- Boombox . run ( input: { :webrtc , signaling } , output: output )
76
- Task . await ( t )
77
- Compare . compare ( output , "test/fixtures/ref_bun10s_opus_aac.mp4" )
78
- end
79
-
80
- @ tag :webrtc_audio
81
- async_test "mp4 -> webrtc -> mp4 audio" , % { tmp_dir: tmp } do
82
- output = Path . join ( tmp , "output.mp4" )
83
- signaling = Membrane.WebRTC.Signaling . new ( )
84
-
85
- t =
86
- Boombox . async ( input: @ bbb_mp4_a , output: { :webrtc , signaling } )
87
-
88
- Boombox . run ( input: { :webrtc , signaling } , output: "#{ tmp } /output.mp4" )
89
- Task . await ( t )
90
- Compare . compare ( output , "test/fixtures/ref_bun10s_opus_aac.mp4" , kinds: [ :audio ] )
91
- end
92
-
93
- @ tag :webrtc_video
94
- async_test "mp4 -> webrtc -> mp4 video" , % { tmp_dir: tmp } do
95
- output = Path . join ( tmp , "output.mp4" )
96
- signaling = Membrane.WebRTC.Signaling . new ( )
97
-
98
- t =
99
- Boombox . async ( input: @ bbb_mp4_v , output: { :webrtc , signaling } )
100
-
101
- Boombox . run ( input: { :webrtc , signaling } , output: output )
102
- Task . await ( t )
103
- Compare . compare ( output , "test/fixtures/ref_bun10s_opus_aac.mp4" , kinds: [ :video ] )
92
+ defp get_free_local_address ( ) do
93
+ "http://127.0.0.1:#{ get_free_port ( ) } "
104
94
end
105
95
106
- @ tag :webrtc2
107
- async_test "mp4 -> webrtc -> webrtc -> mp4" , % { tmp_dir: tmp } do
108
- output = Path . join ( tmp , "output.mp4" )
109
- signaling1 = Membrane.WebRTC.Signaling . new ( )
110
- signaling2 = Membrane.WebRTC.Signaling . new ( )
111
-
112
- t1 =
113
- Boombox . async ( input: @ bbb_mp4 , output: { :webrtc , signaling1 } )
114
-
115
- t2 =
116
- Boombox . async ( input: { :webrtc , signaling1 } , output: { :webrtc , signaling2 } )
117
-
118
- Boombox . run ( input: { :webrtc , signaling2 } , output: output )
119
- Task . await ( t1 )
120
- Task . await ( t2 )
121
- Compare . compare ( output , "test/fixtures/ref_bun10s_opus2_aac.mp4" )
96
+ defp get_free_port ( ) do
97
+ { :ok , s } = :gen_tcp . listen ( 0 , active: false )
98
+ { :ok , port } = :inet . port ( s )
99
+ :ok = :gen_tcp . close ( s )
100
+ port
122
101
end
123
102
124
103
@ tag :rtmp
@@ -413,11 +392,4 @@ defmodule BoomboxTest do
413
392
414
393
p
415
394
end
416
-
417
- defp get_free_port ( ) do
418
- { :ok , s } = :gen_tcp . listen ( 0 , active: false )
419
- { :ok , port } = :inet . port ( s )
420
- :ok = :gen_tcp . close ( s )
421
- port
422
- end
423
395
end
0 commit comments