mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-21 21:13:09 -06:00
Flush out txn request pdu failure case testing
This commit is contained in:
parent
4d523a6353
commit
691c29180f
|
|
@ -17,6 +17,7 @@ package internal
|
||||||
import (
|
import (
|
||||||
"context"
|
"context"
|
||||||
"encoding/json"
|
"encoding/json"
|
||||||
|
"fmt"
|
||||||
"strconv"
|
"strconv"
|
||||||
"testing"
|
"testing"
|
||||||
"time"
|
"time"
|
||||||
|
|
@ -37,6 +38,7 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
var (
|
var (
|
||||||
|
invalidSignatures = json.RawMessage(`{"auth_events":["$x4MKEPRSF6OGlo0qpnsP3BfSmYX5HhVlykOsQH3ECyg","$BcEcbZnlFLB5rxSNSZNBn6fO3jU/TKAJ79wfKyCQLiU"],"content":{"body":"Test Message"},"depth":3917,"hashes":{"sha256":"cNAWtlHIegrji0mMA6x1rhpYCccY8W1NsWZqSpJFhjs"},"origin":"localhost","origin_server_ts":0,"prev_events":["$4GDB0bVjkWwS3G4noUZCq5oLWzpBYpwzdMcf7gj24CI"],"room_id":"!roomid:localishhost","sender":"@userid:localhost","signatures":{"localhost":{"ed2559:auto":"NKym6Kcy3u9mGUr21Hjfe3h7DfDilDhN5PqztT0QZ4NTZ+8Y7owseLolQVXp+TvNjecvzdDywsXXVvGiaQiWAQ"}},"type":"m.room.member"}`)
|
||||||
testData = []json.RawMessage{
|
testData = []json.RawMessage{
|
||||||
[]byte(`{"auth_events":[],"content":{"creator":"@userid:kaer.morhen"},"depth":0,"event_id":"$0ok8ynDp7kjc95e3:kaer.morhen","hashes":{"sha256":"17kPoH+h0Dk4Omn7Sus0qMb6+oGcf+CZFEgDhv7UKWs"},"origin":"kaer.morhen","origin_server_ts":0,"prev_events":[],"prev_state":[],"room_id":"!roomid:kaer.morhen","sender":"@userid:kaer.morhen","signatures":{"kaer.morhen":{"ed25519:auto":"jP4a04f5/F10Pw95FPpdCyKAO44JOwUQ/MZOOeA/RTU1Dn+AHPMzGSaZnuGjRr/xQuADt+I3ctb5ZQfLKNzHDw"}},"state_key":"","type":"m.room.create"}`),
|
[]byte(`{"auth_events":[],"content":{"creator":"@userid:kaer.morhen"},"depth":0,"event_id":"$0ok8ynDp7kjc95e3:kaer.morhen","hashes":{"sha256":"17kPoH+h0Dk4Omn7Sus0qMb6+oGcf+CZFEgDhv7UKWs"},"origin":"kaer.morhen","origin_server_ts":0,"prev_events":[],"prev_state":[],"room_id":"!roomid:kaer.morhen","sender":"@userid:kaer.morhen","signatures":{"kaer.morhen":{"ed25519:auto":"jP4a04f5/F10Pw95FPpdCyKAO44JOwUQ/MZOOeA/RTU1Dn+AHPMzGSaZnuGjRr/xQuADt+I3ctb5ZQfLKNzHDw"}},"state_key":"","type":"m.room.create"}`),
|
||||||
[]byte(`{"auth_events":[["$0ok8ynDp7kjc95e3:kaer.morhen",{"sha256":"sWCi6Ckp9rDimQON+MrUlNRkyfZ2tjbPbWfg2NMB18Q"}]],"content":{"membership":"join"},"depth":1,"event_id":"$LEwEu0kxrtu5fOiS:kaer.morhen","hashes":{"sha256":"B7M88PhXf3vd1LaFtjQutFu4x/w7fHD28XKZ4sAsJTo"},"origin":"kaer.morhen","origin_server_ts":0,"prev_events":[["$0ok8ynDp7kjc95e3:kaer.morhen",{"sha256":"sWCi6Ckp9rDimQON+MrUlNRkyfZ2tjbPbWfg2NMB18Q"}]],"prev_state":[],"room_id":"!roomid:kaer.morhen","sender":"@userid:kaer.morhen","signatures":{"kaer.morhen":{"ed25519:auto":"p2vqmuJn7ZBRImctSaKbXCAxCcBlIjPH9JHte1ouIUGy84gpu4eLipOvSBCLL26hXfC0Zrm4WUto6Hr+ohdrCg"}},"state_key":"@userid:kaer.morhen","type":"m.room.member"}`),
|
[]byte(`{"auth_events":[["$0ok8ynDp7kjc95e3:kaer.morhen",{"sha256":"sWCi6Ckp9rDimQON+MrUlNRkyfZ2tjbPbWfg2NMB18Q"}]],"content":{"membership":"join"},"depth":1,"event_id":"$LEwEu0kxrtu5fOiS:kaer.morhen","hashes":{"sha256":"B7M88PhXf3vd1LaFtjQutFu4x/w7fHD28XKZ4sAsJTo"},"origin":"kaer.morhen","origin_server_ts":0,"prev_events":[["$0ok8ynDp7kjc95e3:kaer.morhen",{"sha256":"sWCi6Ckp9rDimQON+MrUlNRkyfZ2tjbPbWfg2NMB18Q"}]],"prev_state":[],"room_id":"!roomid:kaer.morhen","sender":"@userid:kaer.morhen","signatures":{"kaer.morhen":{"ed25519:auto":"p2vqmuJn7ZBRImctSaKbXCAxCcBlIjPH9JHte1ouIUGy84gpu4eLipOvSBCLL26hXfC0Zrm4WUto6Hr+ohdrCg"}},"state_key":"@userid:kaer.morhen","type":"m.room.member"}`),
|
||||||
|
|
@ -53,6 +55,9 @@ var (
|
||||||
|
|
||||||
type FakeRsAPI struct {
|
type FakeRsAPI struct {
|
||||||
rsAPI.RoomserverInternalAPI
|
rsAPI.RoomserverInternalAPI
|
||||||
|
shouldFailQuery bool
|
||||||
|
bannedFromRoom bool
|
||||||
|
shouldEventsFail bool
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *FakeRsAPI) QueryRoomVersionForRoom(
|
func (r *FakeRsAPI) QueryRoomVersionForRoom(
|
||||||
|
|
@ -60,25 +65,23 @@ func (r *FakeRsAPI) QueryRoomVersionForRoom(
|
||||||
req *rsAPI.QueryRoomVersionForRoomRequest,
|
req *rsAPI.QueryRoomVersionForRoomRequest,
|
||||||
res *rsAPI.QueryRoomVersionForRoomResponse,
|
res *rsAPI.QueryRoomVersionForRoomResponse,
|
||||||
) error {
|
) error {
|
||||||
|
if r.shouldFailQuery {
|
||||||
|
return fmt.Errorf("Failure")
|
||||||
|
}
|
||||||
res.RoomVersion = gomatrixserverlib.RoomVersionV10
|
res.RoomVersion = gomatrixserverlib.RoomVersionV10
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func (r *FakeRsAPI) IsServerBannedFromRoom(
|
|
||||||
ctx context.Context,
|
|
||||||
rsAPI rsAPI.FederationRoomserverAPI,
|
|
||||||
roomID string,
|
|
||||||
serverName gomatrixserverlib.ServerName,
|
|
||||||
) bool {
|
|
||||||
return false
|
|
||||||
}
|
|
||||||
|
|
||||||
func (r *FakeRsAPI) QueryServerBannedFromRoom(
|
func (r *FakeRsAPI) QueryServerBannedFromRoom(
|
||||||
ctx context.Context,
|
ctx context.Context,
|
||||||
req *rsAPI.QueryServerBannedFromRoomRequest,
|
req *rsAPI.QueryServerBannedFromRoomRequest,
|
||||||
res *rsAPI.QueryServerBannedFromRoomResponse,
|
res *rsAPI.QueryServerBannedFromRoomResponse,
|
||||||
) error {
|
) error {
|
||||||
|
if r.bannedFromRoom {
|
||||||
|
res.Banned = true
|
||||||
|
} else {
|
||||||
res.Banned = false
|
res.Banned = false
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -87,6 +90,9 @@ func (r *FakeRsAPI) InputRoomEvents(
|
||||||
req *rsAPI.InputRoomEventsRequest,
|
req *rsAPI.InputRoomEventsRequest,
|
||||||
res *rsAPI.InputRoomEventsResponse,
|
res *rsAPI.InputRoomEventsResponse,
|
||||||
) error {
|
) error {
|
||||||
|
if r.shouldEventsFail {
|
||||||
|
return fmt.Errorf("Failure")
|
||||||
|
}
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -99,11 +105,15 @@ func TestEmptyTransactionRequest(t *testing.T) {
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestProcessTransactionRequestPDU(t *testing.T) {
|
func TestProcessTransactionRequestPDU(t *testing.T) {
|
||||||
txn := NewTxnReq(&FakeRsAPI{}, nil, "ourserver", nil, nil, nil, false, []json.RawMessage{testData[0]}, []gomatrixserverlib.EDU{}, "", "", "")
|
keyRing := &test.NopJSONVerifier{}
|
||||||
|
txn := NewTxnReq(&FakeRsAPI{}, nil, "ourserver", keyRing, nil, nil, false, []json.RawMessage{testData[len(testData)-1]}, []gomatrixserverlib.EDU{}, "", "", "")
|
||||||
txnRes, jsonRes := txn.ProcessTransaction(context.Background())
|
txnRes, jsonRes := txn.ProcessTransaction(context.Background())
|
||||||
|
|
||||||
assert.Nil(t, jsonRes)
|
assert.Nil(t, jsonRes)
|
||||||
assert.Zero(t, len(txnRes.PDUs))
|
assert.Equal(t, 1, len(txnRes.PDUs))
|
||||||
|
for _, result := range txnRes.PDUs {
|
||||||
|
assert.Empty(t, result.Error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestProcessTransactionRequestPDUs(t *testing.T) {
|
func TestProcessTransactionRequestPDUs(t *testing.T) {
|
||||||
|
|
@ -113,18 +123,70 @@ func TestProcessTransactionRequestPDUs(t *testing.T) {
|
||||||
|
|
||||||
assert.Nil(t, jsonRes)
|
assert.Nil(t, jsonRes)
|
||||||
assert.Equal(t, 1, len(txnRes.PDUs))
|
assert.Equal(t, 1, len(txnRes.PDUs))
|
||||||
|
for _, result := range txnRes.PDUs {
|
||||||
|
assert.Empty(t, result.Error)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestProcessTransactionRequestBadPDU(t *testing.T) {
|
func TestProcessTransactionRequestBadPDU(t *testing.T) {
|
||||||
pdu := json.RawMessage("{\"room_id\":\"asdf\"}")
|
pdu := json.RawMessage("{\"room_id\":\"asdf\"}")
|
||||||
pdu2 := json.RawMessage("\"roomid\":\"asdf\"")
|
pdu2 := json.RawMessage("\"roomid\":\"asdf\"")
|
||||||
txn := NewTxnReq(&FakeRsAPI{}, nil, "ourserver", nil, nil, nil, false, []json.RawMessage{pdu, pdu2}, []gomatrixserverlib.EDU{}, "", "", "")
|
keyRing := &test.NopJSONVerifier{}
|
||||||
|
txn := NewTxnReq(&FakeRsAPI{}, nil, "ourserver", keyRing, nil, nil, false, []json.RawMessage{pdu, pdu2, testData[len(testData)-1]}, []gomatrixserverlib.EDU{}, "", "", "")
|
||||||
|
txnRes, jsonRes := txn.ProcessTransaction(context.Background())
|
||||||
|
|
||||||
|
assert.Nil(t, jsonRes)
|
||||||
|
assert.Equal(t, 1, len(txnRes.PDUs))
|
||||||
|
for _, result := range txnRes.PDUs {
|
||||||
|
assert.Empty(t, result.Error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestProcessTransactionRequestPDUQueryFailure(t *testing.T) {
|
||||||
|
keyRing := &test.NopJSONVerifier{}
|
||||||
|
txn := NewTxnReq(&FakeRsAPI{shouldFailQuery: true}, nil, "ourserver", keyRing, nil, nil, false, []json.RawMessage{testData[len(testData)-1]}, []gomatrixserverlib.EDU{}, "", "", "")
|
||||||
txnRes, jsonRes := txn.ProcessTransaction(context.Background())
|
txnRes, jsonRes := txn.ProcessTransaction(context.Background())
|
||||||
|
|
||||||
assert.Nil(t, jsonRes)
|
assert.Nil(t, jsonRes)
|
||||||
assert.Zero(t, len(txnRes.PDUs))
|
assert.Zero(t, len(txnRes.PDUs))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestProcessTransactionRequestPDUBannedFromRoom(t *testing.T) {
|
||||||
|
keyRing := &test.NopJSONVerifier{}
|
||||||
|
txn := NewTxnReq(&FakeRsAPI{bannedFromRoom: true}, nil, "ourserver", keyRing, nil, nil, false, []json.RawMessage{testData[len(testData)-1]}, []gomatrixserverlib.EDU{}, "", "", "")
|
||||||
|
txnRes, jsonRes := txn.ProcessTransaction(context.Background())
|
||||||
|
|
||||||
|
assert.Nil(t, jsonRes)
|
||||||
|
assert.Equal(t, 1, len(txnRes.PDUs))
|
||||||
|
for _, result := range txnRes.PDUs {
|
||||||
|
assert.NotEmpty(t, result.Error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestProcessTransactionRequestPDUInvalidSignature(t *testing.T) {
|
||||||
|
keyRing := &test.NopJSONVerifier{}
|
||||||
|
txn := NewTxnReq(&FakeRsAPI{}, nil, "ourserver", keyRing, nil, nil, false, []json.RawMessage{invalidSignatures}, []gomatrixserverlib.EDU{}, "", "", "")
|
||||||
|
txnRes, jsonRes := txn.ProcessTransaction(context.Background())
|
||||||
|
|
||||||
|
assert.Nil(t, jsonRes)
|
||||||
|
assert.Equal(t, 1, len(txnRes.PDUs))
|
||||||
|
for _, result := range txnRes.PDUs {
|
||||||
|
assert.NotEmpty(t, result.Error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
func TestProcessTransactionRequestPDUSendFail(t *testing.T) {
|
||||||
|
keyRing := &test.NopJSONVerifier{}
|
||||||
|
txn := NewTxnReq(&FakeRsAPI{shouldEventsFail: true}, nil, "ourserver", keyRing, nil, nil, false, []json.RawMessage{testData[len(testData)-1]}, []gomatrixserverlib.EDU{}, "", "", "")
|
||||||
|
txnRes, jsonRes := txn.ProcessTransaction(context.Background())
|
||||||
|
|
||||||
|
assert.Nil(t, jsonRes)
|
||||||
|
assert.Equal(t, 1, len(txnRes.PDUs))
|
||||||
|
for _, result := range txnRes.PDUs {
|
||||||
|
assert.NotEmpty(t, result.Error)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
func createTransactionWithEDU(edus []gomatrixserverlib.EDU) (TxnReq, nats.JetStreamContext, *config.Dendrite) {
|
func createTransactionWithEDU(edus []gomatrixserverlib.EDU) (TxnReq, nats.JetStreamContext, *config.Dendrite) {
|
||||||
cfg := &config.Dendrite{}
|
cfg := &config.Dendrite{}
|
||||||
cfg.Defaults(config.DefaultOpts{
|
cfg.Defaults(config.DefaultOpts{
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue