Update types, sytest-whitelist

This commit is contained in:
Neil Alexander 2020-12-10 17:17:02 +00:00
parent a53447751b
commit 05e956f9dd
No known key found for this signature in database
GPG key ID: A02A2019A2BB0944
3 changed files with 44 additions and 29 deletions

View file

@ -128,7 +128,7 @@ func (t *StreamingToken) Log(name string) *LogPosition {
return l return l
} }
func (t *StreamingToken) String() string { func (t StreamingToken) String() string {
posStr := fmt.Sprintf( posStr := fmt.Sprintf(
"s%d_%d_%d_%d", "s%d_%d_%d_%d",
t.PDUPosition, t.TypingPosition, t.PDUPosition, t.TypingPosition,
@ -201,17 +201,16 @@ func (t *StreamingToken) WithUpdates(other StreamingToken) (ret StreamingToken)
} }
type TopologyToken struct { type TopologyToken struct {
Depth StreamPosition Depth StreamPosition
PDUPosition StreamPosition PDUPosition StreamPosition
ReceiptPosition StreamPosition
} }
func (t *TopologyToken) StreamToken() StreamingToken { func (t *TopologyToken) StreamToken() StreamingToken {
return NewStreamToken(t.PDUPosition, 0, t.ReceiptPosition, 0, nil) return NewStreamToken(t.PDUPosition, 0, 0, 0, nil)
} }
func (t *TopologyToken) String() string { func (t TopologyToken) String() string {
return fmt.Sprintf("t%d_%d_%d", t.Depth, t.PDUPosition, t.ReceiptPosition) return fmt.Sprintf("t%d_%d", t.Depth, t.PDUPosition)
} }
// Decrement the topology token to one event earlier. // Decrement the topology token to one event earlier.
@ -248,24 +247,31 @@ func NewTopologyToken(depth, pduPos StreamPosition) TopologyToken {
} }
func NewTopologyTokenFromString(tok string) (token TopologyToken, err error) { func NewTopologyTokenFromString(tok string) (token TopologyToken, err error) {
if len(tok) < 1 {
err = fmt.Errorf("empty topology token")
return
}
if tok[0] != SyncTokenTypeTopology[0] { if tok[0] != SyncTokenTypeTopology[0] {
err = fmt.Errorf("topology token must start with 't'") err = fmt.Errorf("topology token must start with 't'")
return return
} }
parts := strings.Split(tok[1:], "_") parts := strings.Split(tok[1:], "_")
var positions [3]StreamPosition var positions [2]StreamPosition
for i, p := range parts { for i, p := range parts {
if i > len(positions) { if i > len(positions) {
break break
} }
if len(p) == 0 {
err = fmt.Errorf("empty position %d not allowed", i)
return
}
if pos, perr := strconv.Atoi(p); perr == nil { if pos, perr := strconv.Atoi(p); perr == nil {
positions[i] = StreamPosition(pos) positions[i] = StreamPosition(pos)
} }
} }
token = TopologyToken{ token = TopologyToken{
Depth: positions[0], Depth: positions[0],
PDUPosition: positions[1], PDUPosition: positions[1],
ReceiptPosition: positions[2],
} }
return return
} }
@ -288,6 +294,10 @@ func NewStreamToken(
} }
func NewStreamTokenFromString(tok string) (token StreamingToken, err error) { func NewStreamTokenFromString(tok string) (token StreamingToken, err error) {
if len(tok) < 1 {
err = fmt.Errorf("empty stream token")
return
}
if tok[0] != SyncTokenTypeStream[0] { if tok[0] != SyncTokenTypeStream[0] {
err = fmt.Errorf("stream token must start with 's'") err = fmt.Errorf("stream token must start with 's'")
return return
@ -299,6 +309,10 @@ func NewStreamTokenFromString(tok string) (token StreamingToken, err error) {
if i > len(positions) { if i > len(positions) {
break break
} }
if len(p) == 0 {
err = fmt.Errorf("empty position %d not allowed", i)
return
}
if pos, perr := strconv.Atoi(p); perr == nil { if pos, perr := strconv.Atoi(p); perr == nil {
positions[i] = StreamPosition(pos) positions[i] = StreamPosition(pos)
} }

View file

@ -56,17 +56,22 @@ func TestNewSyncTokenWithLogs(t *testing.T) {
} }
} }
/* func TestSyncTokens(t *testing.T) {
func TestNewSyncTokenFromString(t *testing.T) { shouldPass := map[string]string{
shouldPass := map[string]syncToken{ "s4_0_0_0": NewStreamToken(4, 0, 0, 0, nil).String(),
"s4_0": NewStreamToken(4, 0, nil).syncToken, "s3_1_0_0": NewStreamToken(3, 1, 0, 0, nil).String(),
"s3_1": NewStreamToken(3, 1, nil).syncToken, "s3_1_2_3": NewStreamToken(3, 1, 2, 3, nil).String(),
"t3_1": NewTopologyToken(3, 1).syncToken, "t3_1": NewTopologyToken(3, 1).String(),
}
for a, b := range shouldPass {
if a != b {
t.Errorf("expected %q, got %q", a, b)
}
} }
shouldFail := []string{ shouldFail := []string{
"", "",
"s_1",
"s_", "s_",
"a3_4", "a3_4",
"b", "b",
@ -75,23 +80,18 @@ func TestNewSyncTokenFromString(t *testing.T) {
"2", "2",
} }
for test, expected := range shouldPass { for _, f := range append(shouldFail, "t1_2") {
result, _, err := newSyncTokenFromString(test) if _, err := NewStreamTokenFromString(f); err == nil {
if err != nil { t.Errorf("NewStreamTokenFromString %q should have failed", f)
t.Error(err)
}
if result.String() != expected.String() {
t.Errorf("%s expected %v but got %v", test, expected.String(), result.String())
} }
} }
for _, test := range shouldFail { for _, f := range append(shouldFail, "s1_2_3_4") {
if _, _, err := newSyncTokenFromString(test); err == nil { if _, err := NewTopologyTokenFromString(f); err == nil {
t.Errorf("input '%v' should have errored but didn't", test) t.Errorf("NewTopologyTokenFromString %q should have failed", f)
} }
} }
} }
*/
func TestNewInviteResponse(t *testing.T) { func TestNewInviteResponse(t *testing.T) {
event := `{"auth_events":["$SbSsh09j26UAXnjd3RZqf2lyA3Kw2sY_VZJVZQAV9yA","$EwL53onrLwQ5gL8Dv3VrOOCvHiueXu2ovLdzqkNi3lo","$l2wGmz9iAwevBDGpHT_xXLUA5O8BhORxWIGU1cGi1ZM","$GsWFJLXgdlF5HpZeyWkP72tzXYWW3uQ9X28HBuTztHE"],"content":{"avatar_url":"","displayname":"neilalexander","membership":"invite"},"depth":9,"hashes":{"sha256":"8p+Ur4f8vLFX6mkIXhxI0kegPG7X3tWy56QmvBkExAg"},"origin":"matrix.org","origin_server_ts":1602087113066,"prev_events":["$1v-O6tNwhOZcA8bvCYY-Dnj1V2ZDE58lLPxtlV97S28"],"prev_state":[],"room_id":"!XbeXirGWSPXbEaGokF:matrix.org","sender":"@neilalexander:matrix.org","signatures":{"dendrite.neilalexander.dev":{"ed25519:BMJi":"05KQ5lPw0cSFsE4A0x1z7vi/3cc8bG4WHUsFWYkhxvk/XkXMGIYAYkpNThIvSeLfdcHlbm/k10AsBSKH8Uq4DA"},"matrix.org":{"ed25519:a_RXGa":"jeovuHr9E/x0sHbFkdfxDDYV/EyoeLi98douZYqZ02iYddtKhfB7R3WLay/a+D3V3V7IW0FUmPh/A404x5sYCw"}},"state_key":"@neilalexander:dendrite.neilalexander.dev","type":"m.room.member","unsigned":{"age":2512,"invite_room_state":[{"content":{"join_rule":"invite"},"sender":"@neilalexander:matrix.org","state_key":"","type":"m.room.join_rules"},{"content":{"avatar_url":"mxc://matrix.org/BpDaozLwgLnlNStxDxvLzhPr","displayname":"neilalexander","membership":"join"},"sender":"@neilalexander:matrix.org","state_key":"@neilalexander:matrix.org","type":"m.room.member"},{"content":{"name":"Test room"},"sender":"@neilalexander:matrix.org","state_key":"","type":"m.room.name"}]},"_room_version":"5"}` event := `{"auth_events":["$SbSsh09j26UAXnjd3RZqf2lyA3Kw2sY_VZJVZQAV9yA","$EwL53onrLwQ5gL8Dv3VrOOCvHiueXu2ovLdzqkNi3lo","$l2wGmz9iAwevBDGpHT_xXLUA5O8BhORxWIGU1cGi1ZM","$GsWFJLXgdlF5HpZeyWkP72tzXYWW3uQ9X28HBuTztHE"],"content":{"avatar_url":"","displayname":"neilalexander","membership":"invite"},"depth":9,"hashes":{"sha256":"8p+Ur4f8vLFX6mkIXhxI0kegPG7X3tWy56QmvBkExAg"},"origin":"matrix.org","origin_server_ts":1602087113066,"prev_events":["$1v-O6tNwhOZcA8bvCYY-Dnj1V2ZDE58lLPxtlV97S28"],"prev_state":[],"room_id":"!XbeXirGWSPXbEaGokF:matrix.org","sender":"@neilalexander:matrix.org","signatures":{"dendrite.neilalexander.dev":{"ed25519:BMJi":"05KQ5lPw0cSFsE4A0x1z7vi/3cc8bG4WHUsFWYkhxvk/XkXMGIYAYkpNThIvSeLfdcHlbm/k10AsBSKH8Uq4DA"},"matrix.org":{"ed25519:a_RXGa":"jeovuHr9E/x0sHbFkdfxDDYV/EyoeLi98douZYqZ02iYddtKhfB7R3WLay/a+D3V3V7IW0FUmPh/A404x5sYCw"}},"state_key":"@neilalexander:dendrite.neilalexander.dev","type":"m.room.member","unsigned":{"age":2512,"invite_room_state":[{"content":{"join_rule":"invite"},"sender":"@neilalexander:matrix.org","state_key":"","type":"m.room.join_rules"},{"content":{"avatar_url":"mxc://matrix.org/BpDaozLwgLnlNStxDxvLzhPr","displayname":"neilalexander","membership":"join"},"sender":"@neilalexander:matrix.org","state_key":"@neilalexander:matrix.org","type":"m.room.member"},{"content":{"name":"Test room"},"sender":"@neilalexander:matrix.org","state_key":"","type":"m.room.name"}]},"_room_version":"5"}`

View file

@ -503,3 +503,4 @@ Forgetting room does not show up in v2 /sync
Can forget room you've been kicked from Can forget room you've been kicked from
/whois /whois
/joined_members return joined members /joined_members return joined members
A next_batch token can be used in the v1 messages API