mirror of
https://github.com/matrix-org/dendrite.git
synced 2026-01-20 20:43:09 -06:00
Incremental renaming refactor of relay server
This commit is contained in:
parent
1b2a043993
commit
7b2cbc7133
|
|
@ -575,7 +575,7 @@ func (m *RelayServerRetriever) GetQueriedServerStatus() map[gomatrixserverlib.Se
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *RelayServerRetriever) queryRelayServers(relayServers []gomatrixserverlib.ServerName) {
|
func (m *RelayServerRetriever) queryRelayServers(relayServers []gomatrixserverlib.ServerName) {
|
||||||
logrus.Info("querying relay servers for async_events")
|
logrus.Info("querying relay servers for any available transactions")
|
||||||
for _, server := range relayServers {
|
for _, server := range relayServers {
|
||||||
userID, err := gomatrixserverlib.NewUserID("@user:"+string(m.ServerName), false)
|
userID, err := gomatrixserverlib.NewUserID("@user:"+string(m.ServerName), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -422,7 +422,7 @@ func (m *RelayServerRetriever) syncRelayServers(stop <-chan bool, running atomic
|
||||||
}
|
}
|
||||||
|
|
||||||
func (m *RelayServerRetriever) queryRelayServers(relayServers []gomatrixserverlib.ServerName) {
|
func (m *RelayServerRetriever) queryRelayServers(relayServers []gomatrixserverlib.ServerName) {
|
||||||
logrus.Info("querying relay servers for async_events")
|
logrus.Info("querying relay servers for any available transactions")
|
||||||
for _, server := range relayServers {
|
for _, server := range relayServers {
|
||||||
userID, err := gomatrixserverlib.NewUserID("@user:"+string(m.ServerName), false)
|
userID, err := gomatrixserverlib.NewUserID("@user:"+string(m.ServerName), false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -91,8 +91,8 @@ type FederationClient interface {
|
||||||
gomatrixserverlib.KeyClient
|
gomatrixserverlib.KeyClient
|
||||||
SendTransaction(ctx context.Context, t gomatrixserverlib.Transaction) (res gomatrixserverlib.RespSend, err error)
|
SendTransaction(ctx context.Context, t gomatrixserverlib.Transaction) (res gomatrixserverlib.RespSend, err error)
|
||||||
|
|
||||||
SendAsyncTransaction(ctx context.Context, u gomatrixserverlib.UserID, t gomatrixserverlib.Transaction, forwardingServer gomatrixserverlib.ServerName) (res gomatrixserverlib.EmptyResp, err error)
|
P2PSendTransactionToRelay(ctx context.Context, u gomatrixserverlib.UserID, t gomatrixserverlib.Transaction, forwardingServer gomatrixserverlib.ServerName) (res gomatrixserverlib.EmptyResp, err error)
|
||||||
GetAsyncEvents(ctx context.Context, u gomatrixserverlib.UserID, prev gomatrixserverlib.RelayEntry, relayServer gomatrixserverlib.ServerName) (res gomatrixserverlib.RespGetAsyncEvents, err error)
|
P2PGetTransactionFromRelay(ctx context.Context, u gomatrixserverlib.UserID, prev gomatrixserverlib.RelayEntry, relayServer gomatrixserverlib.ServerName) (res gomatrixserverlib.RespGetRelayTxn, err error)
|
||||||
|
|
||||||
// Perform operations
|
// Perform operations
|
||||||
LookupRoomAlias(ctx context.Context, origin, s gomatrixserverlib.ServerName, roomAlias string) (res gomatrixserverlib.RespDirectory, err error)
|
LookupRoomAlias(ctx context.Context, origin, s gomatrixserverlib.ServerName, roomAlias string) (res gomatrixserverlib.RespDirectory, err error)
|
||||||
|
|
|
||||||
|
|
@ -418,7 +418,7 @@ func (oq *destinationQueue) nextTransaction(
|
||||||
return userErr, false
|
return userErr, false
|
||||||
}
|
}
|
||||||
for _, relayServer := range relayServers {
|
for _, relayServer := range relayServers {
|
||||||
_, asyncErr := oq.client.SendAsyncTransaction(ctx, *userID, t, relayServer)
|
_, asyncErr := oq.client.P2PSendTransactionToRelay(ctx, *userID, t, relayServer)
|
||||||
if asyncErr != nil {
|
if asyncErr != nil {
|
||||||
err = asyncErr
|
err = asyncErr
|
||||||
} else {
|
} else {
|
||||||
|
|
|
||||||
|
|
@ -89,7 +89,7 @@ func (f *stubFederationClient) SendTransaction(ctx context.Context, t gomatrixse
|
||||||
return gomatrixserverlib.RespSend{}, result
|
return gomatrixserverlib.RespSend{}, result
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *stubFederationClient) SendAsyncTransaction(ctx context.Context, u gomatrixserverlib.UserID, t gomatrixserverlib.Transaction, forwardingServer gomatrixserverlib.ServerName) (res gomatrixserverlib.EmptyResp, err error) {
|
func (f *stubFederationClient) P2PSendTransactionToRelay(ctx context.Context, u gomatrixserverlib.UserID, t gomatrixserverlib.Transaction, forwardingServer gomatrixserverlib.ServerName) (res gomatrixserverlib.EmptyResp, err error) {
|
||||||
var result error
|
var result error
|
||||||
if !f.shouldTxAsyncSucceed {
|
if !f.shouldTxAsyncSucceed {
|
||||||
result = fmt.Errorf("async transaction failed")
|
result = fmt.Errorf("async transaction failed")
|
||||||
|
|
|
||||||
|
|
@ -31,19 +31,19 @@ func (r *RelayInternalAPI) PerformRelayServerSync(
|
||||||
response *api.PerformRelayServerSyncResponse,
|
response *api.PerformRelayServerSyncResponse,
|
||||||
) error {
|
) error {
|
||||||
prevEntry := gomatrixserverlib.RelayEntry{EntryID: -1}
|
prevEntry := gomatrixserverlib.RelayEntry{EntryID: -1}
|
||||||
asyncResponse, err := r.fedClient.GetAsyncEvents(ctx, request.UserID, prevEntry, request.RelayServer)
|
asyncResponse, err := r.fedClient.P2PGetTransactionFromRelay(ctx, request.UserID, prevEntry, request.RelayServer)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Errorf("GetAsyncEvents: %s", err.Error())
|
logrus.Errorf("P2PGetTransactionFromRelay: %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r.processTransaction(&asyncResponse.Txn)
|
r.processTransaction(&asyncResponse.Txn)
|
||||||
|
|
||||||
for asyncResponse.EntriesQueued {
|
for asyncResponse.EntriesQueued {
|
||||||
logrus.Infof("Retrieving next entry from relay, previous: %v", prevEntry)
|
logrus.Infof("Retrieving next entry from relay, previous: %v", prevEntry)
|
||||||
asyncResponse, err = r.fedClient.GetAsyncEvents(ctx, request.UserID, prevEntry, request.RelayServer)
|
asyncResponse, err = r.fedClient.P2PGetTransactionFromRelay(ctx, request.UserID, prevEntry, request.RelayServer)
|
||||||
prevEntry = gomatrixserverlib.RelayEntry{EntryID: asyncResponse.EntryID}
|
prevEntry = gomatrixserverlib.RelayEntry{EntryID: asyncResponse.EntryID}
|
||||||
if err != nil {
|
if err != nil {
|
||||||
logrus.Errorf("GetAsyncEvents: %s", err.Error())
|
logrus.Errorf("P2PGetTransactionFromRelay: %s", err.Error())
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
r.processTransaction(&asyncResponse.Txn)
|
r.processTransaction(&asyncResponse.Txn)
|
||||||
|
|
|
||||||
|
|
@ -35,10 +35,10 @@ type testFedClient struct {
|
||||||
queueDepth uint
|
queueDepth uint
|
||||||
}
|
}
|
||||||
|
|
||||||
func (f *testFedClient) GetAsyncEvents(ctx context.Context, u gomatrixserverlib.UserID, prev gomatrixserverlib.RelayEntry, relayServer gomatrixserverlib.ServerName) (res gomatrixserverlib.RespGetAsyncEvents, err error) {
|
func (f *testFedClient) P2PGetTransactionFromRelay(ctx context.Context, u gomatrixserverlib.UserID, prev gomatrixserverlib.RelayEntry, relayServer gomatrixserverlib.ServerName) (res gomatrixserverlib.RespGetRelayTxn, err error) {
|
||||||
f.queryCount++
|
f.queryCount++
|
||||||
if !f.shouldFail {
|
if !f.shouldFail {
|
||||||
res = gomatrixserverlib.RespGetAsyncEvents{
|
res = gomatrixserverlib.RespGetRelayTxn{
|
||||||
Txn: gomatrixserverlib.Transaction{},
|
Txn: gomatrixserverlib.Transaction{},
|
||||||
EntryID: 0,
|
EntryID: 0,
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -24,21 +24,21 @@ import (
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AsyncEventsResponse struct {
|
type RelayTxnResponse struct {
|
||||||
Txn gomatrixserverlib.Transaction `json:"transaction"`
|
Txn gomatrixserverlib.Transaction `json:"transaction"`
|
||||||
EntryID int64 `json:"entry_id,omitempty"`
|
EntryID int64 `json:"entry_id,omitempty"`
|
||||||
EntriesQueued bool `json:"entries_queued"`
|
EntriesQueued bool `json:"entries_queued"`
|
||||||
}
|
}
|
||||||
|
|
||||||
// GetAsyncEvents implements /_matrix/federation/v1/async_events/{userID}
|
// GetTxnFromRelay implements /_matrix/federation/v1/relay_txn/{userID}
|
||||||
// This endpoint can be extracted into a separate relay server service.
|
// This endpoint can be extracted into a separate relay server service.
|
||||||
func GetAsyncEvents(
|
func GetTxnFromRelay(
|
||||||
httpReq *http.Request,
|
httpReq *http.Request,
|
||||||
fedReq *gomatrixserverlib.FederationRequest,
|
fedReq *gomatrixserverlib.FederationRequest,
|
||||||
relayAPI api.RelayInternalAPI,
|
relayAPI api.RelayInternalAPI,
|
||||||
userID gomatrixserverlib.UserID,
|
userID gomatrixserverlib.UserID,
|
||||||
) util.JSONResponse {
|
) util.JSONResponse {
|
||||||
logrus.Infof("Handling async_events for %s", userID.Raw())
|
logrus.Infof("Handling relay_txn for %s", userID.Raw())
|
||||||
|
|
||||||
entryProvided := false
|
entryProvided := false
|
||||||
var previousEntry gomatrixserverlib.RelayEntry
|
var previousEntry gomatrixserverlib.RelayEntry
|
||||||
|
|
@ -67,7 +67,7 @@ func GetAsyncEvents(
|
||||||
|
|
||||||
return util.JSONResponse{
|
return util.JSONResponse{
|
||||||
Code: http.StatusOK,
|
Code: http.StatusOK,
|
||||||
JSON: AsyncEventsResponse{
|
JSON: RelayTxnResponse{
|
||||||
Txn: response.Txn,
|
Txn: response.Txn,
|
||||||
EntryID: response.EntryID,
|
EntryID: response.EntryID,
|
||||||
EntriesQueued: response.EntriesQueued,
|
EntriesQueued: response.EntriesQueued,
|
||||||
|
|
@ -33,7 +33,7 @@ func createAsyncQuery(
|
||||||
prevEntry gomatrixserverlib.RelayEntry,
|
prevEntry gomatrixserverlib.RelayEntry,
|
||||||
) gomatrixserverlib.FederationRequest {
|
) gomatrixserverlib.FederationRequest {
|
||||||
var federationPathPrefixV1 = "/_matrix/federation/v1"
|
var federationPathPrefixV1 = "/_matrix/federation/v1"
|
||||||
path := federationPathPrefixV1 + "/async_events/" + userID.Raw()
|
path := federationPathPrefixV1 + "/relay_txn/" + userID.Raw()
|
||||||
request := gomatrixserverlib.NewFederationRequest("GET", userID.Domain(), "relay", path)
|
request := gomatrixserverlib.NewFederationRequest("GET", userID.Domain(), "relay", path)
|
||||||
request.SetContent(prevEntry)
|
request.SetContent(prevEntry)
|
||||||
|
|
||||||
|
|
@ -61,10 +61,10 @@ func TestGetAsyncEmptyDatabaseReturnsNothing(t *testing.T) {
|
||||||
)
|
)
|
||||||
|
|
||||||
request := createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: -1})
|
request := createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: -1})
|
||||||
response := routing.GetAsyncEvents(httpReq, &request, relayAPI, *userID)
|
response := routing.GetTxnFromRelay(httpReq, &request, relayAPI, *userID)
|
||||||
assert.Equal(t, http.StatusOK, response.Code)
|
assert.Equal(t, http.StatusOK, response.Code)
|
||||||
|
|
||||||
jsonResponse := response.JSON.(routing.AsyncEventsResponse)
|
jsonResponse := response.JSON.(routing.RelayTxnResponse)
|
||||||
assert.Equal(t, false, jsonResponse.EntriesQueued)
|
assert.Equal(t, false, jsonResponse.EntriesQueued)
|
||||||
assert.Equal(t, gomatrixserverlib.Transaction{}, jsonResponse.Txn)
|
assert.Equal(t, gomatrixserverlib.Transaction{}, jsonResponse.Txn)
|
||||||
|
|
||||||
|
|
@ -102,19 +102,19 @@ func TestGetAsyncReturnsSavedTransaction(t *testing.T) {
|
||||||
)
|
)
|
||||||
|
|
||||||
request := createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: -1})
|
request := createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: -1})
|
||||||
response := routing.GetAsyncEvents(httpReq, &request, relayAPI, *userID)
|
response := routing.GetTxnFromRelay(httpReq, &request, relayAPI, *userID)
|
||||||
assert.Equal(t, http.StatusOK, response.Code)
|
assert.Equal(t, http.StatusOK, response.Code)
|
||||||
|
|
||||||
jsonResponse := response.JSON.(routing.AsyncEventsResponse)
|
jsonResponse := response.JSON.(routing.RelayTxnResponse)
|
||||||
assert.True(t, jsonResponse.EntriesQueued)
|
assert.True(t, jsonResponse.EntriesQueued)
|
||||||
assert.Equal(t, transaction, jsonResponse.Txn)
|
assert.Equal(t, transaction, jsonResponse.Txn)
|
||||||
|
|
||||||
// And once more to clear the queue
|
// And once more to clear the queue
|
||||||
request = createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: jsonResponse.EntryID})
|
request = createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: jsonResponse.EntryID})
|
||||||
response = routing.GetAsyncEvents(httpReq, &request, relayAPI, *userID)
|
response = routing.GetTxnFromRelay(httpReq, &request, relayAPI, *userID)
|
||||||
assert.Equal(t, http.StatusOK, response.Code)
|
assert.Equal(t, http.StatusOK, response.Code)
|
||||||
|
|
||||||
jsonResponse = response.JSON.(routing.AsyncEventsResponse)
|
jsonResponse = response.JSON.(routing.RelayTxnResponse)
|
||||||
assert.False(t, jsonResponse.EntriesQueued)
|
assert.False(t, jsonResponse.EntriesQueued)
|
||||||
assert.Equal(t, gomatrixserverlib.Transaction{}, jsonResponse.Txn)
|
assert.Equal(t, gomatrixserverlib.Transaction{}, jsonResponse.Txn)
|
||||||
|
|
||||||
|
|
@ -165,27 +165,27 @@ func TestGetAsyncReturnsMultipleSavedTransactions(t *testing.T) {
|
||||||
)
|
)
|
||||||
|
|
||||||
request := createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: -1})
|
request := createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: -1})
|
||||||
response := routing.GetAsyncEvents(httpReq, &request, relayAPI, *userID)
|
response := routing.GetTxnFromRelay(httpReq, &request, relayAPI, *userID)
|
||||||
assert.Equal(t, http.StatusOK, response.Code)
|
assert.Equal(t, http.StatusOK, response.Code)
|
||||||
|
|
||||||
jsonResponse := response.JSON.(routing.AsyncEventsResponse)
|
jsonResponse := response.JSON.(routing.RelayTxnResponse)
|
||||||
assert.True(t, jsonResponse.EntriesQueued)
|
assert.True(t, jsonResponse.EntriesQueued)
|
||||||
assert.Equal(t, transaction, jsonResponse.Txn)
|
assert.Equal(t, transaction, jsonResponse.Txn)
|
||||||
|
|
||||||
request = createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: jsonResponse.EntryID})
|
request = createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: jsonResponse.EntryID})
|
||||||
response = routing.GetAsyncEvents(httpReq, &request, relayAPI, *userID)
|
response = routing.GetTxnFromRelay(httpReq, &request, relayAPI, *userID)
|
||||||
assert.Equal(t, http.StatusOK, response.Code)
|
assert.Equal(t, http.StatusOK, response.Code)
|
||||||
|
|
||||||
jsonResponse = response.JSON.(routing.AsyncEventsResponse)
|
jsonResponse = response.JSON.(routing.RelayTxnResponse)
|
||||||
assert.True(t, jsonResponse.EntriesQueued)
|
assert.True(t, jsonResponse.EntriesQueued)
|
||||||
assert.Equal(t, transaction2, jsonResponse.Txn)
|
assert.Equal(t, transaction2, jsonResponse.Txn)
|
||||||
|
|
||||||
// And once more to clear the queue
|
// And once more to clear the queue
|
||||||
request = createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: jsonResponse.EntryID})
|
request = createAsyncQuery(*userID, gomatrixserverlib.RelayEntry{EntryID: jsonResponse.EntryID})
|
||||||
response = routing.GetAsyncEvents(httpReq, &request, relayAPI, *userID)
|
response = routing.GetTxnFromRelay(httpReq, &request, relayAPI, *userID)
|
||||||
assert.Equal(t, http.StatusOK, response.Code)
|
assert.Equal(t, http.StatusOK, response.Code)
|
||||||
|
|
||||||
jsonResponse = response.JSON.(routing.AsyncEventsResponse)
|
jsonResponse = response.JSON.(routing.RelayTxnResponse)
|
||||||
assert.False(t, jsonResponse.EntriesQueued)
|
assert.False(t, jsonResponse.EntriesQueued)
|
||||||
assert.Equal(t, gomatrixserverlib.Transaction{}, jsonResponse.Txn)
|
assert.Equal(t, gomatrixserverlib.Transaction{}, jsonResponse.Txn)
|
||||||
|
|
||||||
|
|
@ -30,8 +30,8 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
const (
|
const (
|
||||||
ForwardAsyncRouteName = "ForwardAsync"
|
SendRelayTransactionRouteName = "SendRelayTxn"
|
||||||
AsyncEventsRouteName = "AsyncEvents"
|
GetRelayTransactionRouteName = "GetRelayTxn"
|
||||||
)
|
)
|
||||||
|
|
||||||
// Setup registers HTTP handlers with the given ServeMux.
|
// Setup registers HTTP handlers with the given ServeMux.
|
||||||
|
|
@ -50,8 +50,8 @@ func Setup(
|
||||||
) {
|
) {
|
||||||
v1fedmux := fedMux.PathPrefix("/v1").Subrouter()
|
v1fedmux := fedMux.PathPrefix("/v1").Subrouter()
|
||||||
|
|
||||||
v1fedmux.Handle("/forward_async/{txnID}/{userID}", MakeRelayAPI(
|
v1fedmux.Handle("/send_relay/{txnID}/{userID}", MakeRelayAPI(
|
||||||
"relay_forward_async", "", cfg.Matrix.IsLocalServerName, keys,
|
"send_relay_transaction", "", cfg.Matrix.IsLocalServerName, keys,
|
||||||
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
|
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
|
||||||
userID, err := gomatrixserverlib.NewUserID(vars["userID"], false)
|
userID, err := gomatrixserverlib.NewUserID(vars["userID"], false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -60,15 +60,15 @@ func Setup(
|
||||||
JSON: jsonerror.InvalidUsername("Username was invalid"),
|
JSON: jsonerror.InvalidUsername("Username was invalid"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return ForwardAsync(
|
return SendTxnToRelay(
|
||||||
httpReq, request, relayAPI, gomatrixserverlib.TransactionID(vars["txnID"]),
|
httpReq, request, relayAPI, gomatrixserverlib.TransactionID(vars["txnID"]),
|
||||||
*userID,
|
*userID,
|
||||||
)
|
)
|
||||||
},
|
},
|
||||||
)).Methods(http.MethodPut, http.MethodOptions).Name(ForwardAsyncRouteName)
|
)).Methods(http.MethodPut, http.MethodOptions).Name(SendRelayTransactionRouteName)
|
||||||
|
|
||||||
v1fedmux.Handle("/async_events/{userID}", MakeRelayAPI(
|
v1fedmux.Handle("/relay_txn/{userID}", MakeRelayAPI(
|
||||||
"relay_async_events", "", cfg.Matrix.IsLocalServerName, keys,
|
"get_relay_transaction", "", cfg.Matrix.IsLocalServerName, keys,
|
||||||
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
|
func(httpReq *http.Request, request *gomatrixserverlib.FederationRequest, vars map[string]string) util.JSONResponse {
|
||||||
userID, err := gomatrixserverlib.NewUserID(vars["userID"], false)
|
userID, err := gomatrixserverlib.NewUserID(vars["userID"], false)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -77,9 +77,9 @@ func Setup(
|
||||||
JSON: jsonerror.InvalidUsername("Username was invalid"),
|
JSON: jsonerror.InvalidUsername("Username was invalid"),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return GetAsyncEvents(httpReq, request, relayAPI, *userID)
|
return GetTxnFromRelay(httpReq, request, relayAPI, *userID)
|
||||||
},
|
},
|
||||||
)).Methods(http.MethodGet, http.MethodOptions).Name(AsyncEventsRouteName)
|
)).Methods(http.MethodGet, http.MethodOptions).Name(GetRelayTransactionRouteName)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MakeRelayAPI makes an http.Handler that checks matrix relay authentication.
|
// MakeRelayAPI makes an http.Handler that checks matrix relay authentication.
|
||||||
|
|
|
||||||
|
|
@ -34,12 +34,12 @@ import (
|
||||||
"github.com/stretchr/testify/assert"
|
"github.com/stretchr/testify/assert"
|
||||||
)
|
)
|
||||||
|
|
||||||
type forwardAsyncContent struct {
|
type sendRelayContent struct {
|
||||||
PDUs []json.RawMessage `json:"pdus"`
|
PDUs []json.RawMessage `json:"pdus"`
|
||||||
EDUs []gomatrixserverlib.EDU `json:"edus"`
|
EDUs []gomatrixserverlib.EDU `json:"edus"`
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleForwardAsync(t *testing.T) {
|
func TestHandleSendRelay(t *testing.T) {
|
||||||
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
|
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
|
||||||
defer close()
|
defer close()
|
||||||
|
|
||||||
|
|
@ -60,13 +60,13 @@ func TestHandleForwardAsync(t *testing.T) {
|
||||||
}
|
}
|
||||||
routing.Setup(fedMux, &cfg, r, keyRing)
|
routing.Setup(fedMux, &cfg, r, keyRing)
|
||||||
|
|
||||||
handler := fedMux.Get(routing.ForwardAsyncRouteName).GetHandler().ServeHTTP
|
handler := fedMux.Get(routing.SendRelayTransactionRouteName).GetHandler().ServeHTTP
|
||||||
_, sk, _ := ed25519.GenerateKey(nil)
|
_, sk, _ := ed25519.GenerateKey(nil)
|
||||||
keyID := signing.KeyID
|
keyID := signing.KeyID
|
||||||
pk := sk.Public().(ed25519.PublicKey)
|
pk := sk.Public().(ed25519.PublicKey)
|
||||||
serverName := gomatrixserverlib.ServerName(hex.EncodeToString(pk))
|
serverName := gomatrixserverlib.ServerName(hex.EncodeToString(pk))
|
||||||
req := gomatrixserverlib.NewFederationRequest("PUT", serverName, "remote", "/forward_async/1234/@user:local")
|
req := gomatrixserverlib.NewFederationRequest("PUT", serverName, "remote", "/send_relay/1234/@user:local")
|
||||||
content := forwardAsyncContent{}
|
content := sendRelayContent{}
|
||||||
err := req.SetContent(content)
|
err := req.SetContent(content)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Error: %s", err.Error())
|
t.Fatalf("Error: %s", err.Error())
|
||||||
|
|
@ -85,7 +85,7 @@ func TestHandleForwardAsync(t *testing.T) {
|
||||||
assert.Equal(t, 200, res.StatusCode)
|
assert.Equal(t, 200, res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleForwardAsyncBadUserID(t *testing.T) {
|
func TestHandleSendRelayBadUserID(t *testing.T) {
|
||||||
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
|
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
|
||||||
defer close()
|
defer close()
|
||||||
|
|
||||||
|
|
@ -106,13 +106,13 @@ func TestHandleForwardAsyncBadUserID(t *testing.T) {
|
||||||
}
|
}
|
||||||
routing.Setup(fedMux, &cfg, r, keyRing)
|
routing.Setup(fedMux, &cfg, r, keyRing)
|
||||||
|
|
||||||
handler := fedMux.Get(routing.ForwardAsyncRouteName).GetHandler().ServeHTTP
|
handler := fedMux.Get(routing.SendRelayTransactionRouteName).GetHandler().ServeHTTP
|
||||||
_, sk, _ := ed25519.GenerateKey(nil)
|
_, sk, _ := ed25519.GenerateKey(nil)
|
||||||
keyID := signing.KeyID
|
keyID := signing.KeyID
|
||||||
pk := sk.Public().(ed25519.PublicKey)
|
pk := sk.Public().(ed25519.PublicKey)
|
||||||
serverName := gomatrixserverlib.ServerName(hex.EncodeToString(pk))
|
serverName := gomatrixserverlib.ServerName(hex.EncodeToString(pk))
|
||||||
req := gomatrixserverlib.NewFederationRequest("PUT", serverName, "remote", "/forward_async/1234/user")
|
req := gomatrixserverlib.NewFederationRequest("PUT", serverName, "remote", "/send_relay/1234/user")
|
||||||
content := forwardAsyncContent{}
|
content := sendRelayContent{}
|
||||||
err := req.SetContent(content)
|
err := req.SetContent(content)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatalf("Error: %s", err.Error())
|
t.Fatalf("Error: %s", err.Error())
|
||||||
|
|
@ -131,7 +131,7 @@ func TestHandleForwardAsyncBadUserID(t *testing.T) {
|
||||||
assert.NotEqual(t, 200, res.StatusCode)
|
assert.NotEqual(t, 200, res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleAsyncEvents(t *testing.T) {
|
func TestHandleRelayTxn(t *testing.T) {
|
||||||
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
|
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
|
||||||
defer close()
|
defer close()
|
||||||
|
|
||||||
|
|
@ -152,12 +152,12 @@ func TestHandleAsyncEvents(t *testing.T) {
|
||||||
}
|
}
|
||||||
routing.Setup(fedMux, &cfg, r, keyRing)
|
routing.Setup(fedMux, &cfg, r, keyRing)
|
||||||
|
|
||||||
handler := fedMux.Get(routing.AsyncEventsRouteName).GetHandler().ServeHTTP
|
handler := fedMux.Get(routing.GetRelayTransactionRouteName).GetHandler().ServeHTTP
|
||||||
_, sk, _ := ed25519.GenerateKey(nil)
|
_, sk, _ := ed25519.GenerateKey(nil)
|
||||||
keyID := signing.KeyID
|
keyID := signing.KeyID
|
||||||
pk := sk.Public().(ed25519.PublicKey)
|
pk := sk.Public().(ed25519.PublicKey)
|
||||||
serverName := gomatrixserverlib.ServerName(hex.EncodeToString(pk))
|
serverName := gomatrixserverlib.ServerName(hex.EncodeToString(pk))
|
||||||
req := gomatrixserverlib.NewFederationRequest("GET", serverName, "remote", "/async_events/@user:local")
|
req := gomatrixserverlib.NewFederationRequest("GET", serverName, "remote", "/relay_txn/@user:local")
|
||||||
content := gomatrixserverlib.RelayEntry{EntryID: 0}
|
content := gomatrixserverlib.RelayEntry{EntryID: 0}
|
||||||
err := req.SetContent(content)
|
err := req.SetContent(content)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -177,7 +177,7 @@ func TestHandleAsyncEvents(t *testing.T) {
|
||||||
assert.Equal(t, 200, res.StatusCode)
|
assert.Equal(t, 200, res.StatusCode)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestHandleAsyncEventsBadUserID(t *testing.T) {
|
func TestHandleRelayTxnBadUserID(t *testing.T) {
|
||||||
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
|
base, close := testrig.CreateBaseDendrite(t, test.DBTypeSQLite)
|
||||||
defer close()
|
defer close()
|
||||||
|
|
||||||
|
|
@ -198,12 +198,12 @@ func TestHandleAsyncEventsBadUserID(t *testing.T) {
|
||||||
}
|
}
|
||||||
routing.Setup(fedMux, &cfg, r, keyRing)
|
routing.Setup(fedMux, &cfg, r, keyRing)
|
||||||
|
|
||||||
handler := fedMux.Get(routing.AsyncEventsRouteName).GetHandler().ServeHTTP
|
handler := fedMux.Get(routing.GetRelayTransactionRouteName).GetHandler().ServeHTTP
|
||||||
_, sk, _ := ed25519.GenerateKey(nil)
|
_, sk, _ := ed25519.GenerateKey(nil)
|
||||||
keyID := signing.KeyID
|
keyID := signing.KeyID
|
||||||
pk := sk.Public().(ed25519.PublicKey)
|
pk := sk.Public().(ed25519.PublicKey)
|
||||||
serverName := gomatrixserverlib.ServerName(hex.EncodeToString(pk))
|
serverName := gomatrixserverlib.ServerName(hex.EncodeToString(pk))
|
||||||
req := gomatrixserverlib.NewFederationRequest("GET", serverName, "remote", "/async_events/user")
|
req := gomatrixserverlib.NewFederationRequest("GET", serverName, "remote", "/relay_txn/user")
|
||||||
content := gomatrixserverlib.RelayEntry{EntryID: 0}
|
content := gomatrixserverlib.RelayEntry{EntryID: 0}
|
||||||
err := req.SetContent(content)
|
err := req.SetContent(content)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
|
||||||
|
|
@ -25,9 +25,9 @@ import (
|
||||||
"github.com/sirupsen/logrus"
|
"github.com/sirupsen/logrus"
|
||||||
)
|
)
|
||||||
|
|
||||||
// ForwardAsync implements /_matrix/federation/v1/forward_async/{txnID}/{userID}
|
// SendTxnToRelay implements PUT /_matrix/federation/v1/relay_txn/{txnID}/{userID}
|
||||||
// This endpoint can be extracted into a separate relay server service.
|
// This endpoint can be extracted into a separate relay server service.
|
||||||
func ForwardAsync(
|
func SendTxnToRelay(
|
||||||
httpReq *http.Request,
|
httpReq *http.Request,
|
||||||
fedReq *gomatrixserverlib.FederationRequest,
|
fedReq *gomatrixserverlib.FederationRequest,
|
||||||
relayAPI api.RelayInternalAPI,
|
relayAPI api.RelayInternalAPI,
|
||||||
|
|
@ -50,7 +50,7 @@ func createFederationRequest(
|
||||||
content interface{},
|
content interface{},
|
||||||
) gomatrixserverlib.FederationRequest {
|
) gomatrixserverlib.FederationRequest {
|
||||||
var federationPathPrefixV1 = "/_matrix/federation/v1"
|
var federationPathPrefixV1 = "/_matrix/federation/v1"
|
||||||
path := federationPathPrefixV1 + "/forward_async/" + string(txnID) + "/" + userID.Raw()
|
path := federationPathPrefixV1 + "/send_relay/" + string(txnID) + "/" + userID.Raw()
|
||||||
request := gomatrixserverlib.NewFederationRequest("PUT", origin, destination, path)
|
request := gomatrixserverlib.NewFederationRequest("PUT", origin, destination, path)
|
||||||
request.SetContent(content)
|
request.SetContent(content)
|
||||||
|
|
||||||
|
|
@ -75,7 +75,7 @@ func TestForwardEmptyReturnsOk(t *testing.T) {
|
||||||
&db, nil, nil, nil, nil, false, "",
|
&db, nil, nil, nil, nil, false, "",
|
||||||
)
|
)
|
||||||
|
|
||||||
response := routing.ForwardAsync(httpReq, &request, relayAPI, "1", *userID)
|
response := routing.SendTxnToRelay(httpReq, &request, relayAPI, "1", *userID)
|
||||||
|
|
||||||
assert.Equal(t, 200, response.Code)
|
assert.Equal(t, 200, response.Code)
|
||||||
}
|
}
|
||||||
|
|
@ -104,7 +104,7 @@ func TestForwardBadJSONReturnsError(t *testing.T) {
|
||||||
&db, nil, nil, nil, nil, false, "",
|
&db, nil, nil, nil, nil, false, "",
|
||||||
)
|
)
|
||||||
|
|
||||||
response := routing.ForwardAsync(httpReq, &request, relayAPI, "1", *userID)
|
response := routing.SendTxnToRelay(httpReq, &request, relayAPI, "1", *userID)
|
||||||
|
|
||||||
assert.NotEqual(t, 200, response.Code)
|
assert.NotEqual(t, 200, response.Code)
|
||||||
}
|
}
|
||||||
|
|
@ -138,7 +138,7 @@ func TestForwardTooManyPDUsReturnsError(t *testing.T) {
|
||||||
&db, nil, nil, nil, nil, false, "",
|
&db, nil, nil, nil, nil, false, "",
|
||||||
)
|
)
|
||||||
|
|
||||||
response := routing.ForwardAsync(httpReq, &request, relayAPI, "1", *userID)
|
response := routing.SendTxnToRelay(httpReq, &request, relayAPI, "1", *userID)
|
||||||
|
|
||||||
assert.NotEqual(t, 200, response.Code)
|
assert.NotEqual(t, 200, response.Code)
|
||||||
}
|
}
|
||||||
|
|
@ -172,7 +172,7 @@ func TestForwardTooManyEDUsReturnsError(t *testing.T) {
|
||||||
&db, nil, nil, nil, nil, false, "",
|
&db, nil, nil, nil, nil, false, "",
|
||||||
)
|
)
|
||||||
|
|
||||||
response := routing.ForwardAsync(httpReq, &request, relayAPI, "1", *userID)
|
response := routing.SendTxnToRelay(httpReq, &request, relayAPI, "1", *userID)
|
||||||
|
|
||||||
assert.NotEqual(t, 200, response.Code)
|
assert.NotEqual(t, 200, response.Code)
|
||||||
}
|
}
|
||||||
|
|
@ -195,7 +195,7 @@ func TestUniqueTransactionStoredInDatabase(t *testing.T) {
|
||||||
&db, nil, nil, nil, nil, false, "",
|
&db, nil, nil, nil, nil, false, "",
|
||||||
)
|
)
|
||||||
|
|
||||||
response := routing.ForwardAsync(
|
response := routing.SendTxnToRelay(
|
||||||
httpReq, &request, relayAPI, txn.TransactionID, *userID)
|
httpReq, &request, relayAPI, txn.TransactionID, *userID)
|
||||||
transaction, _, err := db.GetAsyncTransaction(context.TODO(), *userID)
|
transaction, _, err := db.GetAsyncTransaction(context.TODO(), *userID)
|
||||||
assert.NoError(t, err, "Failed retrieving transaction")
|
assert.NoError(t, err, "Failed retrieving transaction")
|
||||||
Loading…
Reference in a new issue