aboutsummaryrefslogtreecommitdiff
path: root/test/user.go
diff options
context:
space:
mode:
authorkegsay <kegan@matrix.org>2022-05-17 13:23:35 +0100
committerGitHub <noreply@github.com>2022-05-17 13:23:35 +0100
commit6de29c1cd23d218f04d2e570932db8967d6adc4f (patch)
treeb95fa478ef9ecd2c21963868a3626063bdff7cbc /test/user.go
parentcd82460513d5abf04e56c01667d56499d4c354be (diff)
bugfix: E2EE device keys could sometimes not be sent to remote servers (#2466)
* Fix flakey sytest 'Local device key changes get to remote servers' * Debug logs * Remove internal/test and use /test only Remove a lot of ancient code too. * Use FederationRoomserverAPI in more places * Use more interfaces in federationapi; begin adding regression test * Linting * Add regression test * Unbreak tests * ALL THE LOGS * Fix a race condition which could cause events to not be sent to servers If a new room event which rewrites state arrives, we remove all joined hosts then re-calculate them. This wasn't done in a transaction so for a brief period we would have no joined hosts. During this interim, key change events which arrive would not be sent to destination servers. This would sporadically fail on sytest. * Unbreak new tests * Linting
Diffstat (limited to 'test/user.go')
-rw-r--r--test/user.go50
1 files changed, 46 insertions, 4 deletions
diff --git a/test/user.go b/test/user.go
index 41a66e1c..0020098a 100644
--- a/test/user.go
+++ b/test/user.go
@@ -15,22 +15,64 @@
package test
import (
+ "crypto/ed25519"
"fmt"
"sync/atomic"
+ "testing"
+
+ "github.com/matrix-org/gomatrixserverlib"
)
var (
userIDCounter = int64(0)
+
+ serverName = gomatrixserverlib.ServerName("test")
+ keyID = gomatrixserverlib.KeyID("ed25519:test")
+ privateKey = ed25519.NewKeyFromSeed([]byte{
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ })
+
+ // private keys that tests can use
+ PrivateKeyA = ed25519.NewKeyFromSeed([]byte{
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 77,
+ })
+ PrivateKeyB = ed25519.NewKeyFromSeed([]byte{
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
+ 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 66,
+ })
)
type User struct {
ID string
+ // key ID and private key of the server who has this user, if known.
+ keyID gomatrixserverlib.KeyID
+ privKey ed25519.PrivateKey
+ srvName gomatrixserverlib.ServerName
+}
+
+type UserOpt func(*User)
+
+func WithSigningServer(srvName gomatrixserverlib.ServerName, keyID gomatrixserverlib.KeyID, privKey ed25519.PrivateKey) UserOpt {
+ return func(u *User) {
+ u.keyID = keyID
+ u.privKey = privKey
+ u.srvName = srvName
+ }
}
-func NewUser() *User {
+func NewUser(t *testing.T, opts ...UserOpt) *User {
counter := atomic.AddInt64(&userIDCounter, 1)
- u := &User{
- ID: fmt.Sprintf("@%d:localhost", counter),
+ var u User
+ for _, opt := range opts {
+ opt(&u)
+ }
+ if u.keyID == "" || u.srvName == "" || u.privKey == nil {
+ t.Logf("NewUser: missing signing server credentials; using default.")
+ WithSigningServer(serverName, keyID, privateKey)(&u)
}
- return u
+ u.ID = fmt.Sprintf("@%d:%s", counter, u.srvName)
+ t.Logf("NewUser: created user %s", u.ID)
+ return &u
}