Live video on the AT Protocol
79
fork

Configure Feed

Select the types of activity you want to include in your feed.

at eli/github-skip-darwin 95 lines 3.2 kB view raw
1package misttriggers 2 3import ( 4 "bytes" 5 "context" 6 "fmt" 7 "net/http" 8 "net/http/httptest" 9 "testing" 10 11 "github.com/stretchr/testify/require" 12 "stream.place/streamplace/pkg/config" 13) 14 15var pushRewritePayload = MistTriggerBody(` 16 rtmp://127.0.0.1:1935/live/c447-3l8v-1vmz-ej5t 17 127.0.0.1 18 c447-3l8v-1vmz-ej5t 19`) 20 21var pushRewritePayloadInvalid = MistTriggerBody(` 22 rtmp://127.0.0.1:1935/live/c447-3l8v-1vmz-ej5t 23`) 24 25var pushRewritePayloadBadURL = MistTriggerBody(` 26 http://hostname with spaces.com 27 127.0.0.1 28 c447-3l8v-1vmz-ej5t 29`) 30 31func TestItCanParseAValidPushRewritePayload(t *testing.T) { 32 p, err := ParsePushRewritePayload(pushRewritePayload) 33 require.NoError(t, err) 34 require.Equal(t, p.FullURL, "rtmp://127.0.0.1:1935/live/c447-3l8v-1vmz-ej5t") 35 require.Equal(t, p.URL.String(), "rtmp://127.0.0.1:1935/live/c447-3l8v-1vmz-ej5t") 36 require.Equal(t, p.Hostname, "127.0.0.1") 37 require.Equal(t, p.StreamName, "c447-3l8v-1vmz-ej5t") 38} 39 40func TestItCanRejectABadPushRewritePayload(t *testing.T) { 41 _, err := ParsePushRewritePayload(pushRewritePayloadInvalid) 42 require.Error(t, err) 43 _, err = ParsePushRewritePayload(pushRewritePayloadBadURL) 44 require.Error(t, err) 45} 46 47func doPushRewriteRequest(t *testing.T, payload MistTriggerBody, cb func(ctx context.Context, prp *PushRewritePayload) (string, error)) *httptest.ResponseRecorder { 48 broker := NewTriggerBroker() 49 broker.OnPushRewrite(cb) 50 d := NewMistCallbackHandlersCollection(&config.CLI{}, broker) 51 req, err := http.NewRequest("POST", "/trigger", bytes.NewBuffer([]byte(payload))) 52 require.NoError(t, err) 53 rr := httptest.NewRecorder() 54 d.TriggerPushRewrite(context.Background(), rr, req, payload) 55 return rr 56} 57 58func TestPushRewriteCanHandlePushRewriteRequests(t *testing.T) { 59 rr := doPushRewriteRequest(t, pushRewritePayload, func(ctx context.Context, prp *PushRewritePayload) (string, error) { 60 require.Equal(t, prp.StreamName, "c447-3l8v-1vmz-ej5t") 61 return "funky-stream", nil 62 }) 63 require.Equal(t, rr.Result().StatusCode, 200) 64 require.Equal(t, rr.Body.String(), "funky-stream") 65} 66 67func TestPushRewriteCanRejectPushRewriteRequests(t *testing.T) { 68 rr := doPushRewriteRequest(t, pushRewritePayload, func(ctx context.Context, prp *PushRewritePayload) (string, error) { 69 // Proper way to reject Mist 70 return "", nil 71 }) 72 require.Equal(t, rr.Result().StatusCode, 200) 73 require.Equal(t, rr.Body.String(), "") 74} 75 76func TestPushRewriteCanHandleFailureToHandle(t *testing.T) { 77 rr := doPushRewriteRequest(t, pushRewritePayload, func(ctx context.Context, prp *PushRewritePayload) (string, error) { 78 return "", fmt.Errorf("something went wrong") 79 }) 80 require.Equal(t, rr.Result().StatusCode, 500) 81} 82 83func TestPushRewriteCanErrorPushRewriteRequests(t *testing.T) { 84 rr := doPushRewriteRequest(t, pushRewritePayloadBadURL, func(ctx context.Context, prp *PushRewritePayload) (string, error) { 85 require.Fail(t, "test should be failing before it gets to me") 86 return "", nil 87 }) 88 require.Equal(t, rr.Result().StatusCode, 400) 89 90 rr = doPushRewriteRequest(t, pushRewritePayloadInvalid, func(ctx context.Context, prp *PushRewritePayload) (string, error) { 91 require.Fail(t, "test should be failing before it gets to me") 92 return "", nil 93 }) 94 require.Equal(t, rr.Result().StatusCode, 400) 95}