2022-02-11 18:40:14 +01:00
|
|
|
package input_test
|
|
|
|
|
|
|
|
import (
|
|
|
|
"context"
|
|
|
|
"os"
|
|
|
|
"testing"
|
|
|
|
"time"
|
|
|
|
|
|
|
|
"github.com/matrix-org/dendrite/internal/caching"
|
|
|
|
"github.com/matrix-org/dendrite/roomserver/api"
|
|
|
|
"github.com/matrix-org/dendrite/roomserver/internal/input"
|
|
|
|
"github.com/matrix-org/dendrite/roomserver/storage"
|
|
|
|
"github.com/matrix-org/dendrite/setup/config"
|
2022-04-08 11:12:30 +02:00
|
|
|
"github.com/matrix-org/dendrite/setup/jetstream"
|
|
|
|
"github.com/matrix-org/dendrite/setup/process"
|
2022-02-11 18:40:14 +01:00
|
|
|
"github.com/matrix-org/gomatrixserverlib"
|
2022-04-08 11:12:30 +02:00
|
|
|
"github.com/nats-io/nats.go"
|
2022-02-11 18:40:14 +01:00
|
|
|
)
|
|
|
|
|
2022-04-08 11:12:30 +02:00
|
|
|
var js nats.JetStreamContext
|
|
|
|
var jc *nats.Conn
|
|
|
|
|
|
|
|
func TestMain(m *testing.M) {
|
|
|
|
var pc *process.ProcessContext
|
|
|
|
pc, js, jc = jetstream.PrepareForTests()
|
|
|
|
code := m.Run()
|
|
|
|
pc.ShutdownDendrite()
|
|
|
|
pc.WaitForComponentsToFinish()
|
|
|
|
os.Exit(code)
|
2022-02-11 18:40:14 +01:00
|
|
|
}
|
|
|
|
|
|
|
|
func TestSingleTransactionOnInput(t *testing.T) {
|
|
|
|
deadline, _ := t.Deadline()
|
|
|
|
if max := time.Now().Add(time.Second * 3); deadline.After(max) {
|
|
|
|
deadline = max
|
|
|
|
}
|
|
|
|
ctx, cancel := context.WithDeadline(context.Background(), deadline)
|
|
|
|
defer cancel()
|
|
|
|
|
|
|
|
event, err := gomatrixserverlib.NewEventFromTrustedJSON(
|
|
|
|
[]byte(`{"auth_events":[],"content":{"creator":"@neilalexander:dendrite.matrix.org","room_version":"6"},"depth":1,"hashes":{"sha256":"jqOqdNEH5r0NiN3xJtj0u5XUVmRqq9YvGbki1wxxuuM"},"origin":"dendrite.matrix.org","origin_server_ts":1644595362726,"prev_events":[],"prev_state":[],"room_id":"!jSZZRknA6GkTBXNP:dendrite.matrix.org","sender":"@neilalexander:dendrite.matrix.org","signatures":{"dendrite.matrix.org":{"ed25519:6jB2aB":"bsQXO1wketf1OSe9xlndDIWe71W9KIundc6rBw4KEZdGPW7x4Tv4zDWWvbxDsG64sS2IPWfIm+J0OOozbrWIDw"}},"state_key":"","type":"m.room.create"}`),
|
|
|
|
false, gomatrixserverlib.RoomVersionV6,
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
in := api.InputRoomEvent{
|
|
|
|
Kind: api.KindOutlier, // don't panic if we generate an output event
|
|
|
|
Event: event.Headered(gomatrixserverlib.RoomVersionV6),
|
|
|
|
}
|
|
|
|
cache, err := caching.NewInMemoryLRUCache(false)
|
|
|
|
if err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
db, err := storage.Open(
|
2022-05-03 17:35:06 +02:00
|
|
|
nil,
|
2022-02-11 18:40:14 +01:00
|
|
|
&config.DatabaseOptions{
|
2022-04-08 11:12:30 +02:00
|
|
|
ConnectionString: "",
|
2022-02-11 18:40:14 +01:00
|
|
|
MaxOpenConnections: 1,
|
|
|
|
MaxIdleConnections: 1,
|
|
|
|
},
|
|
|
|
cache,
|
|
|
|
)
|
|
|
|
if err != nil {
|
|
|
|
t.Logf("PostgreSQL not available (%s), skipping", err)
|
|
|
|
t.SkipNow()
|
|
|
|
}
|
|
|
|
inputter := &input.Inputer{
|
2022-04-08 11:12:30 +02:00
|
|
|
DB: db,
|
|
|
|
JetStream: js,
|
|
|
|
NATSClient: jc,
|
2022-02-11 18:40:14 +01:00
|
|
|
}
|
|
|
|
res := &api.InputRoomEventsResponse{}
|
|
|
|
inputter.InputRoomEvents(
|
|
|
|
ctx,
|
|
|
|
&api.InputRoomEventsRequest{
|
|
|
|
InputRoomEvents: []api.InputRoomEvent{in},
|
|
|
|
Asynchronous: false,
|
|
|
|
},
|
|
|
|
res,
|
|
|
|
)
|
|
|
|
// If we fail here then it's because we've hit the test deadline,
|
|
|
|
// so we probably deadlocked
|
|
|
|
if err := res.Err(); err != nil {
|
|
|
|
t.Fatal(err)
|
|
|
|
}
|
|
|
|
}
|