@@ -19,61 +19,101 @@ func TestNew(t *testing.T) {
19
19
}
20
20
21
21
func TestConnect (t * testing.T ) {
22
- ts := httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
23
- if r .Method != "POST" {
24
- panic (fmt .Sprintf ("Invalid request method. Expected POST, got: %s\n " , r .Method ))
25
- }
22
+ ts := newWHEPMockServer ()
23
+ defer ts .Close ()
26
24
27
- contentType := r . Header . Get ( "Content-Type" )
28
- if contentType != "application/SDP" {
29
- panic ( fmt . Sprintf ( "Content-Type has to be application/SDP, got: %s \n " , contentType ) )
30
- }
25
+ client , err := New ( ts . URL , webrtc. Configuration {} )
26
+ if err != nil {
27
+ t . Fatal ( err )
28
+ }
31
29
32
- body , err := io .ReadAll (r .Body )
33
- if err != nil {
34
- panic (err )
35
- }
30
+ err = client .Connect ()
31
+ if err != nil {
32
+ t .Fatal (err )
33
+ }
34
+ }
36
35
37
- resourceId := generateResourceId (8 )
38
- pc , err := webrtc .NewPeerConnection (webrtc.Configuration {})
39
- if err != nil {
40
- panic (err )
41
- }
36
+ func TestDisconnect (t * testing.T ) {
37
+ ts := newWHEPMockServer ()
38
+ defer ts .Close ()
42
39
43
- err = pc . SetRemoteDescription (webrtc. SessionDescription { Type : webrtc .SDPTypeOffer , SDP : string ( body ) })
44
- if err != nil {
45
- panic (err )
46
- }
40
+ client , err := New ( ts . URL , webrtc.Configuration { })
41
+ if err != nil {
42
+ t . Fatal (err )
43
+ }
47
44
48
- answer , err := pc . CreateAnswer ( nil )
49
- if err != nil {
50
- panic (err )
51
- }
45
+ err = client . Connect ( )
46
+ if err != nil {
47
+ t . Fatal (err )
48
+ }
52
49
53
- w .Header ().Add ("location" , "http://" + r .Host + "/resource/" + resourceId )
54
- w .Header ().Add ("Content-Type" , "application/SDP" )
55
- w .Header ().Add ("Status Code" , "201" )
56
- w .WriteHeader (http .StatusCreated )
57
- sent , err := w .Write ([]byte (answer .SDP ))
58
- if err != nil {
59
- panic (err )
60
- }
50
+ err = client .Disconnect ()
51
+ if err != nil {
52
+ t .Fatal (err )
53
+ }
54
+ }
61
55
62
- if sent != len (answer .SDP ) {
63
- panic (fmt .Sprintf ("Could not write entire answer in response. Answer length: %v, wrote: %v" , len (answer .SDP ), sent ))
56
+ func newWHEPMockServer () * httptest.Server {
57
+ return httptest .NewServer (http .HandlerFunc (func (w http.ResponseWriter , r * http.Request ) {
58
+ if r .Method == "POST" {
59
+ handleSDPOfferRequest (w , r )
60
+ } else if r .Method == "DELETE" {
61
+ handleTerminateRequest (w , r )
64
62
}
65
63
}))
66
- defer ts . Close ()
64
+ }
67
65
68
- client , err := New (ts .URL , webrtc.Configuration {})
66
+ func handleSDPOfferRequest (w http.ResponseWriter , r * http.Request ) {
67
+ if r .Method != "POST" {
68
+ panic (fmt .Sprintf ("SDP offer has to be a POST request, got: %s\n " , r .Method ))
69
+ }
70
+
71
+ contentType := r .Header .Get ("Content-Type" )
72
+ if contentType != "application/SDP" {
73
+ panic (fmt .Sprintf ("Content-Type has to be application/SDP, got: %s\n " , contentType ))
74
+ }
75
+
76
+ body , err := io .ReadAll (r .Body )
69
77
if err != nil {
70
- t . Fatal (err )
78
+ panic (err )
71
79
}
72
80
73
- err = client .Connect ()
81
+ resourceId := generateResourceId (8 )
82
+ pc , err := webrtc .NewPeerConnection (webrtc.Configuration {})
74
83
if err != nil {
75
- t . Fatal (err )
84
+ panic (err )
76
85
}
86
+
87
+ err = pc .SetRemoteDescription (webrtc.SessionDescription {Type : webrtc .SDPTypeOffer , SDP : string (body )})
88
+ if err != nil {
89
+ panic (err )
90
+ }
91
+
92
+ answer , err := pc .CreateAnswer (nil )
93
+ if err != nil {
94
+ panic (err )
95
+ }
96
+
97
+ w .Header ().Add ("location" , "http://" + r .Host + "/resource/" + resourceId )
98
+ w .Header ().Add ("Content-Type" , "application/SDP" )
99
+ w .Header ().Add ("Status Code" , "201" )
100
+ w .WriteHeader (http .StatusCreated )
101
+ sent , err := w .Write ([]byte (answer .SDP ))
102
+ if err != nil {
103
+ panic (err )
104
+ }
105
+
106
+ if sent != len (answer .SDP ) {
107
+ panic (fmt .Sprintf ("Could not write entire answer in response. Answer length: %v, wrote: %v" , len (answer .SDP ), sent ))
108
+ }
109
+ }
110
+
111
+ func handleTerminateRequest (w http.ResponseWriter , r * http.Request ) {
112
+ if r .Method != "DELETE" {
113
+ panic (fmt .Sprintf ("Terminate session has to be a DELETE request, got: %s\n " , r .Method ))
114
+ }
115
+
116
+ w .WriteHeader (http .StatusOK )
77
117
}
78
118
79
119
func generateResourceId (n int ) string {
0 commit comments