aboutsummaryrefslogtreecommitdiff
path: root/federationapi/routing/profile_test.go
diff options
context:
space:
mode:
authordevonh <devon.dmytro@gmail.com>2023-01-23 17:55:12 +0000
committerGitHub <noreply@github.com>2023-01-23 17:55:12 +0000
commit5b73592f5a4dddf64184fcbe33f4c1835c656480 (patch)
treeb6dac51b6be7a1e591f24881ee1bfae1b92088e9 /federationapi/routing/profile_test.go
parent48fa869fa3578741d1d5775d30f24f6b097ab995 (diff)
Initial Store & Forward Implementation (#2917)
This adds store & forward relays into dendrite for p2p. A few things have changed: - new relay api serves new http endpoints for s&f federation - updated outbound federation queueing which will attempt to forward using s&f if appropriate - database entries to track s&f relays for other nodes
Diffstat (limited to 'federationapi/routing/profile_test.go')
-rw-r--r--federationapi/routing/profile_test.go94
1 files changed, 94 insertions, 0 deletions
diff --git a/federationapi/routing/profile_test.go b/federationapi/routing/profile_test.go
new file mode 100644
index 00000000..76365608
--- /dev/null
+++ b/federationapi/routing/profile_test.go
@@ -0,0 +1,94 @@
+// 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 routing_test
+
+import (
+ "context"
+ "encoding/hex"
+ "io"
+ "net/http/httptest"
+ "net/url"
+ "testing"
+
+ "github.com/gorilla/mux"
+ "github.com/matrix-org/dendrite/cmd/dendrite-demo-yggdrasil/signing"
+ fedAPI "github.com/matrix-org/dendrite/federationapi"
+ fedInternal "github.com/matrix-org/dendrite/federationapi/internal"
+ "github.com/matrix-org/dendrite/federationapi/routing"
+ "github.com/matrix-org/dendrite/internal/httputil"
+ "github.com/matrix-org/dendrite/test"
+ "github.com/matrix-org/dendrite/test/testrig"
+ userAPI "github.com/matrix-org/dendrite/userapi/api"
+ "github.com/matrix-org/gomatrixserverlib"
+ "github.com/stretchr/testify/assert"
+ "golang.org/x/crypto/ed25519"
+)
+
+type fakeUserAPI struct {
+ userAPI.FederationUserAPI
+}
+
+func (u *fakeUserAPI) QueryProfile(ctx context.Context, req *userAPI.QueryProfileRequest, res *userAPI.QueryProfileResponse) error {
+ return nil
+}
+
+func TestHandleQueryProfile(t *testing.T) {
+ test.WithAllDatabases(t, func(t *testing.T, dbType test.DBType) {
+ base, close := testrig.CreateBaseDendrite(t, dbType)
+ defer close()
+
+ fedMux := mux.NewRouter().SkipClean(true).PathPrefix(httputil.PublicFederationPathPrefix).Subrouter().UseEncodedPath()
+ base.PublicFederationAPIMux = fedMux
+ base.Cfg.FederationAPI.Matrix.SigningIdentity.ServerName = testOrigin
+ base.Cfg.FederationAPI.Matrix.Metrics.Enabled = false
+ fedClient := fakeFedClient{}
+ serverKeyAPI := &signing.YggdrasilKeys{}
+ keyRing := serverKeyAPI.KeyRing()
+ fedapi := fedAPI.NewInternalAPI(base, &fedClient, nil, nil, keyRing, true)
+ userapi := fakeUserAPI{}
+ r, ok := fedapi.(*fedInternal.FederationInternalAPI)
+ if !ok {
+ panic("This is a programming error.")
+ }
+ routing.Setup(base, nil, r, keyRing, &fedClient, &userapi, nil, &base.Cfg.MSCs, nil, nil)
+
+ handler := fedMux.Get(routing.QueryProfileRouteName).GetHandler().ServeHTTP
+ _, sk, _ := ed25519.GenerateKey(nil)
+ keyID := signing.KeyID
+ pk := sk.Public().(ed25519.PublicKey)
+ serverName := gomatrixserverlib.ServerName(hex.EncodeToString(pk))
+ req := gomatrixserverlib.NewFederationRequest("GET", serverName, testOrigin, "/query/profile?user_id="+url.QueryEscape("@user:"+string(testOrigin)))
+ type queryContent struct{}
+ content := queryContent{}
+ err := req.SetContent(content)
+ if err != nil {
+ t.Fatalf("Error: %s", err.Error())
+ }
+ req.Sign(serverName, gomatrixserverlib.KeyID(keyID), sk)
+ httpReq, err := req.HTTPRequest()
+ if err != nil {
+ t.Fatalf("Error: %s", err.Error())
+ }
+ // vars := map[string]string{"room_alias": "#room:server"}
+ w := httptest.NewRecorder()
+ // httpReq = mux.SetURLVars(httpReq, vars)
+ handler(w, httpReq)
+
+ res := w.Result()
+ data, _ := io.ReadAll(res.Body)
+ println(string(data))
+ assert.Equal(t, 200, res.StatusCode)
+ })
+}