Add initial tests for external relayapi interface

This commit is contained in:
Devon Hudson 2022-12-16 12:39:37 -07:00
parent fc365a3e06
commit 21a63203df
No known key found for this signature in database
GPG key ID: CD06B18E77F6A628
4 changed files with 140 additions and 9 deletions

View file

@ -15,6 +15,7 @@
package internal
import (
fedAPI "github.com/matrix-org/dendrite/federationapi/api"
"github.com/matrix-org/dendrite/federationapi/producers"
"github.com/matrix-org/dendrite/relayapi/storage"
rsAPI "github.com/matrix-org/dendrite/roomserver/api"
@ -23,7 +24,7 @@ import (
type RelayInternalAPI struct {
db storage.Database
fedClient *gomatrixserverlib.FederationClient
fedClient fedAPI.FederationClient
rsAPI rsAPI.RoomserverInternalAPI
keyRing *gomatrixserverlib.KeyRing
producer *producers.SyncAPIProducer
@ -33,7 +34,7 @@ type RelayInternalAPI struct {
func NewRelayInternalAPI(
db storage.Database,
fedClient *gomatrixserverlib.FederationClient,
fedClient fedAPI.FederationClient,
rsAPI rsAPI.RoomserverInternalAPI,
keyRing *gomatrixserverlib.KeyRing,
producer *producers.SyncAPIProducer,

View file

@ -0,0 +1,68 @@
// Copyright 2022 The Matrix.org Foundation C.I.C.
//
// 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"
"testing"
fedAPI "github.com/matrix-org/dendrite/federationapi/api"
"github.com/matrix-org/dendrite/internal/sqlutil"
"github.com/matrix-org/dendrite/relayapi/api"
"github.com/matrix-org/dendrite/relayapi/storage"
"github.com/matrix-org/dendrite/relayapi/storage/shared"
"github.com/matrix-org/gomatrixserverlib"
"github.com/stretchr/testify/assert"
)
type testFedClient struct {
fedAPI.FederationClient
}
func (f *testFedClient) GetAsyncEvents(ctx context.Context, u gomatrixserverlib.UserID, prev gomatrixserverlib.RelayEntry, relayServer gomatrixserverlib.ServerName) (res gomatrixserverlib.RespGetAsyncEvents, err error) {
return gomatrixserverlib.RespGetAsyncEvents{
Txn: gomatrixserverlib.Transaction{},
EntryID: 0,
EntriesQueued: false,
}, nil
}
func TestPerformRelayServerSync(t *testing.T) {
testDB := storage.NewFakeRelayDatabase()
db := shared.Database{
Writer: sqlutil.NewDummyWriter(),
RelayQueue: testDB,
RelayQueueJSON: testDB,
}
userID, err := gomatrixserverlib.NewUserID("@local:domain", false)
assert.Nil(t, err, "Invalid userID")
fedClient := &testFedClient{}
relayAPI := NewRelayInternalAPI(
&db, fedClient, nil, nil, nil, false, "",
)
req := api.PerformRelayServerSyncRequest{
UserID: *userID,
RelayServer: gomatrixserverlib.ServerName("relay"),
}
res := api.PerformRelayServerSyncResponse{}
err = relayAPI.PerformRelayServerSync(context.Background(), &req, &res)
assert.NoError(t, err)
}
// TODO : called twice when queued
// TODO : returns err if fed returns err

View file

@ -20,7 +20,6 @@ import (
"github.com/matrix-org/dendrite/federationapi/producers"
keyserverAPI "github.com/matrix-org/dendrite/keyserver/api"
"github.com/matrix-org/dendrite/relayapi/api"
relayAPI "github.com/matrix-org/dendrite/relayapi/api"
"github.com/matrix-org/dendrite/relayapi/internal"
"github.com/matrix-org/dendrite/relayapi/inthttp"
"github.com/matrix-org/dendrite/relayapi/routing"
@ -45,7 +44,7 @@ func AddPublicRoutes(
fedClient *gomatrixserverlib.FederationClient,
keyRing gomatrixserverlib.JSONVerifier,
rsAPI rsAPI.FederationRoomserverAPI,
relayAPI relayAPI.RelayInternalAPI,
relayAPI api.RelayInternalAPI,
fedAPI federationAPI.FederationInternalAPI,
keyAPI keyserverAPI.FederationKeyAPI,
) {

View file

@ -18,7 +18,7 @@ import (
"testing"
"github.com/matrix-org/dendrite/relayapi"
"github.com/matrix-org/dendrite/setup/jetstream"
"github.com/matrix-org/dendrite/setup/config"
"github.com/matrix-org/dendrite/test"
"github.com/matrix-org/dendrite/test/testrig"
"github.com/stretchr/testify/assert"
@ -27,11 +27,7 @@ import (
func TestCreateNewRelayInternalAPI(t *testing.T) {
test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
base, close := testrig.CreateBaseDendrite(t, dbType)
base.Cfg.FederationAPI.PreferDirectFetch = true
base.Cfg.FederationAPI.KeyPerspectives = nil
defer close()
jsctx, _ := base.NATS.Prepare(base.ProcessContext, &base.Cfg.Global.JetStream)
defer jetstream.DeleteAllStreams(jsctx, &base.Cfg.Global.JetStream)
relayAPI := relayapi.NewRelayInternalAPI(
base,
@ -43,3 +39,70 @@ func TestCreateNewRelayInternalAPI(t *testing.T) {
assert.NotNil(t, relayAPI)
})
}
func TestCreateRelayInternalInvalidDatabasePanics(t *testing.T) {
test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
base, close := testrig.CreateBaseDendrite(t, dbType)
if dbType == test.DBTypeSQLite {
base.Cfg.RelayAPI.Database.ConnectionString = "file:"
} else {
base.Cfg.RelayAPI.Database.ConnectionString = "test"
}
defer close()
assert.Panics(t, func() {
relayapi.NewRelayInternalAPI(
base,
nil,
nil,
nil,
nil,
)
})
})
}
func TestCreateRelayInternalRoutes(t *testing.T) {
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
base.Cfg.RelayAPI.InternalAPI.Connect = config.HTTPAddress("http://localhost:8008")
defer close()
relayAPI := relayapi.NewRelayInternalAPI(
base,
nil,
nil,
nil,
nil,
)
assert.NotNil(t, relayAPI)
relayapi.AddInternalRoutes(base.InternalAPIMux, &relayAPI)
}
func TestCreateInvalidRelayPublicRoutesPanics(t *testing.T) {
test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
base, close := testrig.CreateBaseDendrite(t, dbType)
defer close()
assert.Panics(t, func() {
relayapi.AddPublicRoutes(base, nil, nil, nil, nil, nil, nil, nil)
})
})
}
func TestCreateRelayPublicRoutes(t *testing.T) {
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
base.Cfg.RelayAPI.InternalAPI.Connect = config.HTTPAddress("http://localhost:8008")
defer close()
relayAPI := relayapi.NewRelayInternalAPI(
base,
nil,
nil,
nil,
nil,
)
assert.NotNil(t, relayAPI)
relayapi.AddPublicRoutes(base, nil, nil, nil, nil, &relayAPI, nil, nil)
}