aboutsummaryrefslogtreecommitdiff
path: root/roomserver/internal/query_test.go
diff options
context:
space:
mode:
authorNeil Alexander <neilalexander@users.noreply.github.com>2020-05-01 10:48:17 +0100
committerGitHub <noreply@github.com>2020-05-01 10:48:17 +0100
commite15f6676ac3f76ec2ef679c2df300d6a8e7e668f (patch)
tree0b82339939e8932d46e1ca2cf6024ab55dc7602f /roomserver/internal/query_test.go
parentebbfc125920beb321713e28a2a137d768406fa15 (diff)
Consolidation of roomserver APIs (#994)
* Consolidation of roomserver APIs * Comment out alias tests for now, they are broken * Wire AS API into roomserver again * Roomserver didn't take asAPI param before so return to that * Prevent roomserver asking AS API for alias info * Rename some files * Remove alias_test, incoherent tests and unwanted appservice integration * Remove FS API inject on syncapi component
Diffstat (limited to 'roomserver/internal/query_test.go')
-rw-r--r--roomserver/internal/query_test.go157
1 files changed, 157 insertions, 0 deletions
diff --git a/roomserver/internal/query_test.go b/roomserver/internal/query_test.go
new file mode 100644
index 00000000..211ab508
--- /dev/null
+++ b/roomserver/internal/query_test.go
@@ -0,0 +1,157 @@
+// Copyright 2017 Vector Creations Ltd
+//
+// Licensed under the Apache License, Version 2.0 (the "License");
+// you may not use this file except in compliance with the License.
+// You may obtain a copy of the License at
+//
+// http://www.apache.org/licenses/LICENSE-2.0
+//
+// Unless required by applicable law or agreed to in writing, software
+// distributed under the License is distributed on an "AS IS" BASIS,
+// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+// See the License for the specific language governing permissions and
+// limitations under the License.
+
+package internal
+
+import (
+ "context"
+ "encoding/json"
+ "testing"
+
+ "github.com/matrix-org/dendrite/common/test"
+ "github.com/matrix-org/dendrite/roomserver/types"
+ "github.com/matrix-org/gomatrixserverlib"
+)
+
+// used to implement RoomserverInternalAPIEventDB to test getAuthChain
+type getEventDB struct {
+ eventMap map[string]gomatrixserverlib.Event
+}
+
+func createEventDB() *getEventDB {
+ return &getEventDB{
+ eventMap: make(map[string]gomatrixserverlib.Event),
+ }
+}
+
+// Adds a fake event to the storage with given auth events.
+func (db *getEventDB) addFakeEvent(eventID string, authIDs []string) error {
+ authEvents := []gomatrixserverlib.EventReference{}
+ for _, authID := range authIDs {
+ authEvents = append(authEvents, gomatrixserverlib.EventReference{
+ EventID: authID,
+ })
+ }
+
+ builder := map[string]interface{}{
+ "event_id": eventID,
+ "auth_events": authEvents,
+ }
+
+ eventJSON, err := json.Marshal(&builder)
+ if err != nil {
+ return err
+ }
+
+ event, err := gomatrixserverlib.NewEventFromTrustedJSON(
+ eventJSON, false, gomatrixserverlib.RoomVersionV1,
+ )
+ if err != nil {
+ return err
+ }
+
+ db.eventMap[eventID] = event
+
+ return nil
+}
+
+// Adds multiple events at once, each entry in the map is an eventID and set of
+// auth events that are converted to an event and added.
+func (db *getEventDB) addFakeEvents(graph map[string][]string) error {
+ for eventID, authIDs := range graph {
+ err := db.addFakeEvent(eventID, authIDs)
+ if err != nil {
+ return err
+ }
+ }
+
+ return nil
+}
+
+// EventsFromIDs implements RoomserverInternalAPIEventDB
+func (db *getEventDB) EventsFromIDs(ctx context.Context, eventIDs []string) (res []types.Event, err error) {
+ for _, evID := range eventIDs {
+ res = append(res, types.Event{
+ EventNID: 0,
+ Event: db.eventMap[evID],
+ })
+ }
+
+ return
+}
+
+func TestGetAuthChainSingle(t *testing.T) {
+ db := createEventDB()
+
+ err := db.addFakeEvents(map[string][]string{
+ "a": {},
+ "b": {"a"},
+ "c": {"a", "b"},
+ "d": {"b", "c"},
+ "e": {"a", "d"},
+ })
+
+ if err != nil {
+ t.Fatalf("Failed to add events to db: %v", err)
+ }
+
+ result, err := getAuthChain(context.TODO(), db.EventsFromIDs, []string{"e"})
+ if err != nil {
+ t.Fatalf("getAuthChain failed: %v", err)
+ }
+
+ var returnedIDs []string
+ for _, event := range result {
+ returnedIDs = append(returnedIDs, event.EventID())
+ }
+
+ expectedIDs := []string{"a", "b", "c", "d", "e"}
+
+ if !test.UnsortedStringSliceEqual(expectedIDs, returnedIDs) {
+ t.Fatalf("returnedIDs got '%v', expected '%v'", returnedIDs, expectedIDs)
+ }
+}
+
+func TestGetAuthChainMultiple(t *testing.T) {
+ db := createEventDB()
+
+ err := db.addFakeEvents(map[string][]string{
+ "a": {},
+ "b": {"a"},
+ "c": {"a", "b"},
+ "d": {"b", "c"},
+ "e": {"a", "d"},
+ "f": {"a", "b", "c"},
+ })
+
+ if err != nil {
+ t.Fatalf("Failed to add events to db: %v", err)
+ }
+
+ result, err := getAuthChain(context.TODO(), db.EventsFromIDs, []string{"e", "f"})
+ if err != nil {
+ t.Fatalf("getAuthChain failed: %v", err)
+ }
+
+ var returnedIDs []string
+ for _, event := range result {
+ returnedIDs = append(returnedIDs, event.EventID())
+ }
+
+ expectedIDs := []string{"a", "b", "c", "d", "e", "f"}
+
+ if !test.UnsortedStringSliceEqual(expectedIDs, returnedIDs) {
+ t.Fatalf("returnedIDs got '%v', expected '%v'", returnedIDs, expectedIDs)
+ }
+}