mirror of
https://github.com/element-hq/dendrite.git
synced 2025-09-14 21:32:23 +03:00
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
This commit is contained in:
parent
cd82460513
commit
6de29c1cd2
48 changed files with 566 additions and 618 deletions
52
test/user.go
52
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
|
||||
}
|
||||
|
||||
func NewUser() *User {
|
||||
counter := atomic.AddInt64(&userIDCounter, 1)
|
||||
u := &User{
|
||||
ID: fmt.Sprintf("@%d:localhost", counter),
|
||||
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
|
||||
}
|
||||
return u
|
||||
}
|
||||
|
||||
func NewUser(t *testing.T, opts ...UserOpt) *User {
|
||||
counter := atomic.AddInt64(&userIDCounter, 1)
|
||||
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)
|
||||
}
|
||||
u.ID = fmt.Sprintf("@%d:%s", counter, u.srvName)
|
||||
t.Logf("NewUser: created user %s", u.ID)
|
||||
return &u
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue