From c71491465598397f5f5008d0aa27afaa911cdef3 Mon Sep 17 00:00:00 2001 From: Till Faelligen Date: Thu, 5 May 2022 10:53:19 +0200 Subject: [PATCH] Add EventJSONTable tests --- .../storage/postgres/event_json_table.go | 4 +- roomserver/storage/postgres/storage.go | 4 +- .../storage/sqlite3/event_json_table.go | 4 +- roomserver/storage/sqlite3/storage.go | 4 +- .../storage/tables/event_json_table_test.go | 85 +++++++++++++++++++ 5 files changed, 93 insertions(+), 8 deletions(-) create mode 100644 roomserver/storage/tables/event_json_table_test.go diff --git a/roomserver/storage/postgres/event_json_table.go b/roomserver/storage/postgres/event_json_table.go index b3220effd..d8fc80bce 100644 --- a/roomserver/storage/postgres/event_json_table.go +++ b/roomserver/storage/postgres/event_json_table.go @@ -59,12 +59,12 @@ type eventJSONStatements struct { bulkSelectEventJSONStmt *sql.Stmt } -func createEventJSONTable(db *sql.DB) error { +func CreateEventJSONTable(db *sql.DB) error { _, err := db.Exec(eventJSONSchema) return err } -func prepareEventJSONTable(db *sql.DB) (tables.EventJSON, error) { +func PrepareEventJSONTable(db *sql.DB) (tables.EventJSON, error) { s := &eventJSONStatements{} return s, sqlutil.StatementList{ diff --git a/roomserver/storage/postgres/storage.go b/roomserver/storage/postgres/storage.go index da8d25848..5cab67c21 100644 --- a/roomserver/storage/postgres/storage.go +++ b/roomserver/storage/postgres/storage.go @@ -74,7 +74,7 @@ func (d *Database) create(db *sql.DB) error { if err := createEventTypesTable(db); err != nil { return err } - if err := createEventJSONTable(db); err != nil { + if err := CreateEventJSONTable(db); err != nil { return err } if err := createEventsTable(db); err != nil { @@ -120,7 +120,7 @@ func (d *Database) prepare(db *sql.DB, writer sqlutil.Writer, cache caching.Room if err != nil { return err } - eventJSON, err := prepareEventJSONTable(db) + eventJSON, err := PrepareEventJSONTable(db) if err != nil { return err } diff --git a/roomserver/storage/sqlite3/event_json_table.go b/roomserver/storage/sqlite3/event_json_table.go index f470ea326..086b18bb9 100644 --- a/roomserver/storage/sqlite3/event_json_table.go +++ b/roomserver/storage/sqlite3/event_json_table.go @@ -52,12 +52,12 @@ type eventJSONStatements struct { bulkSelectEventJSONStmt *sql.Stmt } -func createEventJSONTable(db *sql.DB) error { +func CreateEventJSONTable(db *sql.DB) error { _, err := db.Exec(eventJSONSchema) return err } -func prepareEventJSONTable(db *sql.DB) (tables.EventJSON, error) { +func PrepareEventJSONTable(db *sql.DB) (tables.EventJSON, error) { s := &eventJSONStatements{ db: db, } diff --git a/roomserver/storage/sqlite3/storage.go b/roomserver/storage/sqlite3/storage.go index e6cf1a53f..42723058d 100644 --- a/roomserver/storage/sqlite3/storage.go +++ b/roomserver/storage/sqlite3/storage.go @@ -83,7 +83,7 @@ func (d *Database) create(db *sql.DB) error { if err := createEventTypesTable(db); err != nil { return err } - if err := createEventJSONTable(db); err != nil { + if err := CreateEventJSONTable(db); err != nil { return err } if err := createEventsTable(db); err != nil { @@ -129,7 +129,7 @@ func (d *Database) prepare(db *sql.DB, writer sqlutil.Writer, cache caching.Room if err != nil { return err } - eventJSON, err := prepareEventJSONTable(db) + eventJSON, err := PrepareEventJSONTable(db) if err != nil { return err } diff --git a/roomserver/storage/tables/event_json_table_test.go b/roomserver/storage/tables/event_json_table_test.go new file mode 100644 index 000000000..ac3ebbd1c --- /dev/null +++ b/roomserver/storage/tables/event_json_table_test.go @@ -0,0 +1,85 @@ +package tables_test + +import ( + "context" + "fmt" + "reflect" + "testing" + + "github.com/matrix-org/dendrite/internal/sqlutil" + "github.com/matrix-org/dendrite/roomserver/storage/postgres" + "github.com/matrix-org/dendrite/roomserver/storage/sqlite3" + "github.com/matrix-org/dendrite/roomserver/storage/tables" + "github.com/matrix-org/dendrite/roomserver/types" + "github.com/matrix-org/dendrite/setup/config" + + "github.com/matrix-org/dendrite/test" +) + +func mustCreateEventJSONTable(t *testing.T, dbType test.DBType) (tables.EventJSON, func()) { + t.Helper() + connStr, close := test.PrepareDBConnectionString(t, dbType) + db, err := sqlutil.Open(&config.DatabaseOptions{ + ConnectionString: config.DataSource(connStr), + }, sqlutil.NewExclusiveWriter()) + if err != nil { + t.Fatalf("failed to open db: %s", err) + } + + var ( + tab tables.EventJSON + ) + switch dbType { + case test.DBTypePostgres: + err = postgres.CreateEventJSONTable(db) + if err != nil { + t.Fatalf("failed to create table: %v", err) + } + tab, err = postgres.PrepareEventJSONTable(db) + if err != nil { + t.Fatalf("failed to prepare statements: %v", err) + } + case test.DBTypeSQLite: + err = sqlite3.CreateEventJSONTable(db) + if err != nil { + t.Fatalf("failed to create table: %v", err) + } + tab, err = sqlite3.PrepareEventJSONTable(db) + if err != nil { + t.Fatalf("failed to prepare statements: %v", err) + } + } + if err != nil { + t.Fatalf("failed to make new table: %s", err) + } + return tab, close +} + +func TestEventJSONTable(t *testing.T) { + ctx := context.Background() + test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) { + tab, close := mustCreateEventJSONTable(t, dbType) + defer close() + // insert some dummy data + for i := 0; i < 10; i++ { + err := tab.InsertEventJSON(ctx, nil, types.EventNID(i), []byte(fmt.Sprintf(`{"value": %d }`, i))) + if err != nil { + t.Fatalf("failed to insert event json: %v", err) + } + } + // and fetch them again + eventJSONPair, err := tab.BulkSelectEventJSON(ctx, nil, types.EventNIDs{1, 2, 3, 4, 5}) + if err != nil { + t.Fatalf("failed to get event json: %v", err) + } + if len(eventJSONPair) != 5 { + t.Fatalf("expected 5 events, got %d", len(eventJSONPair)) + } + for _, x := range eventJSONPair { + want := []byte(fmt.Sprintf(`{"value": %d }`, x.EventNID)) + if !reflect.DeepEqual(x.EventJSON, want) { + t.Fatalf("unexpected eventJSON %v, want %v", string(x.EventJSON), string(want)) + } + } + }) +}