mirror of
				https://github.com/binwiederhier/ntfy.git
				synced 2025-10-31 13:02:24 +01:00 
			
		
		
		
	More tests
This commit is contained in:
		
							parent
							
								
									18bd3c0e55
								
							
						
					
					
						commit
						6122cf20aa
					
				
					 5 changed files with 84 additions and 10 deletions
				
			
		|  | @ -56,6 +56,7 @@ var ( | |||
| 	errHTTPUnauthorized                              = &errHTTP{40101, http.StatusUnauthorized, "unauthorized", "https://ntfy.sh/docs/publish/#authentication"} | ||||
| 	errHTTPForbidden                                 = &errHTTP{40301, http.StatusForbidden, "forbidden", "https://ntfy.sh/docs/publish/#authentication"} | ||||
| 	errHTTPEntityTooLargeAttachmentTooLarge          = &errHTTP{41301, http.StatusRequestEntityTooLarge, "attachment too large, or bandwidth limit reached", "https://ntfy.sh/docs/publish/#limitations"} | ||||
| 	errHTTPEntityTooLargeMatrixRequestTooLarge       = &errHTTP{41302, http.StatusRequestEntityTooLarge, "Matrix request is larger than the max allowed length", ""} | ||||
| 	errHTTPTooManyRequestsLimitRequests              = &errHTTP{42901, http.StatusTooManyRequests, "limit reached: too many requests, please be nice", "https://ntfy.sh/docs/publish/#limitations"} | ||||
| 	errHTTPTooManyRequestsLimitEmails                = &errHTTP{42902, http.StatusTooManyRequests, "limit reached: too many emails, please be nice", "https://ntfy.sh/docs/publish/#limitations"} | ||||
| 	errHTTPTooManyRequestsLimitSubscriptions         = &errHTTP{42903, http.StatusTooManyRequests, "limit reached: too many active subscriptions, please be nice", "https://ntfy.sh/docs/publish/#limitations"} | ||||
|  |  | |||
|  | @ -113,8 +113,11 @@ func newRequestFromMatrixJSON(r *http.Request, baseURL string, messageLimit int) | |||
| 		return nil, err | ||||
| 	} | ||||
| 	defer r.Body.Close() | ||||
| 	if body.LimitReached { | ||||
| 		return nil, errHTTPEntityTooLargeMatrixRequestTooLarge | ||||
| 	} | ||||
| 	var m matrixRequest | ||||
| 	if err := json.NewDecoder(body).Decode(&m); err != nil { | ||||
| 	if err := json.Unmarshal(body.PeekedBytes, &m); err != nil { | ||||
| 		return nil, errHTTPBadRequestMatrixMessageInvalid | ||||
| 	} else if m.Notification == nil || len(m.Notification.Devices) == 0 || m.Notification.Devices[0].PushKey == "" { | ||||
| 		return nil, errHTTPBadRequestMatrixMessageInvalid | ||||
|  |  | |||
|  | @ -3,6 +3,7 @@ package server | |||
| import ( | ||||
| 	"github.com/stretchr/testify/require" | ||||
| 	"net/http" | ||||
| 	"net/http/httptest" | ||||
| 	"strings" | ||||
| 	"testing" | ||||
| ) | ||||
|  | @ -19,3 +20,65 @@ func TestMatrix_NewRequestFromMatrixJSON_Success(t *testing.T) { | |||
| 	require.Equal(t, "https://ntfy.sh/upABCDEFGHI?up=1", newRequest.Header.Get("X-Matrix-Pushkey")) | ||||
| 	require.Equal(t, body, readAll(t, newRequest.Body)) | ||||
| } | ||||
| 
 | ||||
| func TestMatrix_NewRequestFromMatrixJSON_TooLarge(t *testing.T) { | ||||
| 	baseURL := "https://ntfy.sh" | ||||
| 	maxLength := 10 // Small | ||||
| 	body := `{"notification":{"content":{"body":"I'm floating in a most peculiar way.","msgtype":"m.text"},"counts":{"missed_calls":1,"unread":2},"devices":[{"app_id":"org.matrix.matrixConsole.ios","data":{},"pushkey":"https://ntfy.sh/upABCDEFGHI?up=1","pushkey_ts":12345678,"tweaks":{"sound":"bing"}}],"event_id":"$3957tyerfgewrf384","prio":"high","room_alias":"#exampleroom:matrix.org","room_id":"!slw48wfj34rtnrf:example.com","room_name":"Mission Control","sender":"@exampleuser:matrix.org","sender_display_name":"Major Tom","type":"m.room.message"}}` | ||||
| 	r, _ := http.NewRequest("POST", "http://ntfy.example.com/_matrix/push/v1/notify", strings.NewReader(body)) | ||||
| 	_, err := newRequestFromMatrixJSON(r, baseURL, maxLength) | ||||
| 	require.Equal(t, errHTTPEntityTooLargeMatrixRequestTooLarge, err) | ||||
| } | ||||
| 
 | ||||
| func TestMatrix_NewRequestFromMatrixJSON_InvalidJSON(t *testing.T) { | ||||
| 	baseURL := "https://ntfy.sh" | ||||
| 	maxLength := 4096 | ||||
| 	body := `this is not json` | ||||
| 	r, _ := http.NewRequest("POST", "http://ntfy.example.com/_matrix/push/v1/notify", strings.NewReader(body)) | ||||
| 	_, err := newRequestFromMatrixJSON(r, baseURL, maxLength) | ||||
| 	require.Equal(t, errHTTPBadRequestMatrixMessageInvalid, err) | ||||
| } | ||||
| 
 | ||||
| func TestMatrix_NewRequestFromMatrixJSON_NotAMatrixMessage(t *testing.T) { | ||||
| 	baseURL := "https://ntfy.sh" | ||||
| 	maxLength := 4096 | ||||
| 	body := `{"message":"this is not a matrix message, but valid json"}` | ||||
| 	r, _ := http.NewRequest("POST", "http://ntfy.example.com/_matrix/push/v1/notify", strings.NewReader(body)) | ||||
| 	_, err := newRequestFromMatrixJSON(r, baseURL, maxLength) | ||||
| 	require.Equal(t, errHTTPBadRequestMatrixMessageInvalid, err) | ||||
| } | ||||
| 
 | ||||
| func TestMatrix_NewRequestFromMatrixJSON_MismatchingPushKey(t *testing.T) { | ||||
| 	baseURL := "https://ntfy.sh" // Mismatch! | ||||
| 	maxLength := 4096 | ||||
| 	body := `{"notification":{"content":{"body":"I'm floating in a most peculiar way.","msgtype":"m.text"},"counts":{"missed_calls":1,"unread":2},"devices":[{"app_id":"org.matrix.matrixConsole.ios","data":{},"pushkey":"https://ntfy.example.com/upABCDEFGHI?up=1","pushkey_ts":12345678,"tweaks":{"sound":"bing"}}],"event_id":"$3957tyerfgewrf384","prio":"high","room_alias":"#exampleroom:matrix.org","room_id":"!slw48wfj34rtnrf:example.com","room_name":"Mission Control","sender":"@exampleuser:matrix.org","sender_display_name":"Major Tom","type":"m.room.message"}}` | ||||
| 	r, _ := http.NewRequest("POST", "http://ntfy.example.com/_matrix/push/v1/notify", strings.NewReader(body)) | ||||
| 	_, err := newRequestFromMatrixJSON(r, baseURL, maxLength) | ||||
| 	matrixErr, ok := err.(*errMatrix) | ||||
| 	require.True(t, ok) | ||||
| 	require.Equal(t, errHTTPBadRequestMatrixPushkeyBaseURLMismatch, matrixErr.err) | ||||
| 	require.Equal(t, "https://ntfy.example.com/upABCDEFGHI?up=1", matrixErr.pushKey) | ||||
| } | ||||
| 
 | ||||
| func TestMatrix_WriteMatrixDiscoveryResponse(t *testing.T) { | ||||
| 	w := httptest.NewRecorder() | ||||
| 	require.Nil(t, writeMatrixDiscoveryResponse(w)) | ||||
| 	require.Equal(t, 200, w.Result().StatusCode) | ||||
| 	require.Equal(t, `{"unifiedpush":{"gateway":"matrix"}}`+"\n", w.Body.String()) | ||||
| } | ||||
| 
 | ||||
| func TestMatrix_WriteMatrixError(t *testing.T) { | ||||
| 	w := httptest.NewRecorder() | ||||
| 	r, _ := http.NewRequest("POST", "http://ntfy.example.com/_matrix/push/v1/notify", nil) | ||||
| 	v := newVisitor(newTestConfig(t), nil, "1.2.3.4") | ||||
| 	require.Nil(t, writeMatrixError(w, r, v, &errMatrix{"https://ntfy.example.com/upABCDEFGHI?up=1", errHTTPBadRequestMatrixPushkeyBaseURLMismatch})) | ||||
| 	require.Equal(t, 200, w.Result().StatusCode) | ||||
| 	require.Equal(t, `{"rejected":["https://ntfy.example.com/upABCDEFGHI?up=1"]}`+"\n", w.Body.String()) | ||||
| } | ||||
| 
 | ||||
| func TestMatrix_WriteMatrixSuccess(t *testing.T) { | ||||
| 	w := httptest.NewRecorder() | ||||
| 	require.Nil(t, writeMatrixSuccess(w)) | ||||
| 	require.Equal(t, 200, w.Result().StatusCode) | ||||
| 	require.Equal(t, `{"rejected":[]}`+"\n", w.Body.String()) | ||||
| } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Philipp Heckel
						Philipp Heckel