feat: sync multilayer td integration
This commit is contained in:
parent
20a310f6ca
commit
766c5db992
491 changed files with 26235 additions and 35340 deletions
72
internal/store/authkey_test.go
Normal file
72
internal/store/authkey_test.go
Normal file
|
|
@ -0,0 +1,72 @@
|
|||
package store
|
||||
|
||||
import (
|
||||
"errors"
|
||||
"testing"
|
||||
"time"
|
||||
)
|
||||
|
||||
func TestMergeAuthKeyLayerObservations(t *testing.T) {
|
||||
tests := []struct {
|
||||
name string
|
||||
tempLayer int
|
||||
tempID int64
|
||||
permLayer int
|
||||
permID int64
|
||||
wantLayer int
|
||||
wantID int64
|
||||
wantErr error
|
||||
}{
|
||||
{name: "temporary newer", tempLayer: 227, tempID: 20, permLayer: 220, permID: 10, wantLayer: 227, wantID: 20},
|
||||
{name: "permanent newer", tempLayer: 220, tempID: 10, permLayer: 227, permID: 20, wantLayer: 227, wantID: 20},
|
||||
{name: "equal ordered observation", tempLayer: 225, tempID: 30, permLayer: 225, permID: 30, wantLayer: 225, wantID: 30},
|
||||
{name: "equal ordered conflict", tempLayer: 220, tempID: 30, permLayer: 227, permID: 30, wantErr: ErrAuthKeySessionLayerConflict},
|
||||
{name: "legacy permanent wins", tempLayer: 220, permLayer: 227, wantLayer: 227},
|
||||
{name: "legacy permanent zero wins", tempLayer: 220, wantLayer: 0},
|
||||
{name: "negative observation", tempLayer: 220, tempID: -1, permLayer: 227, wantErr: ErrAuthKeySessionLayerInvalid},
|
||||
{name: "ordered zero layer", tempLayer: 0, tempID: 1, permLayer: 227, wantErr: ErrAuthKeySessionLayerInvalid},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
gotLayer, gotID, err := MergeAuthKeyLayerObservations(tt.tempLayer, tt.tempID, tt.permLayer, tt.permID)
|
||||
if tt.wantErr != nil {
|
||||
if !errors.Is(err, tt.wantErr) {
|
||||
t.Fatalf("merge error = %v, want %v", err, tt.wantErr)
|
||||
}
|
||||
return
|
||||
}
|
||||
if err != nil || gotLayer != tt.wantLayer || gotID != tt.wantID {
|
||||
t.Fatalf("merge = (%d,%d,%v), want (%d,%d,nil)", gotLayer, gotID, err, tt.wantLayer, tt.wantID)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestAuthKeySessionLayerExpiryIsOwnedByClientMessageID(t *testing.T) {
|
||||
const (
|
||||
seconds = int64(2_000_000_000)
|
||||
fractional = int64(123_456_788) // non-zero and client-owned (mod 4 == 0)
|
||||
)
|
||||
msgID := (seconds << 32) | fractional
|
||||
got, ok := AuthKeySessionLayerExpiry(msgID)
|
||||
want := time.Unix(seconds, int64(int32(msgID))).UTC().Add(301 * time.Second)
|
||||
if !ok || !got.Equal(want) {
|
||||
t.Fatalf("expiry = (%v,%v), want (%v,true)", got, ok, want)
|
||||
}
|
||||
for _, invalid := range []int64{0, -4, seconds << 32, msgID + 1, msgID + 3} {
|
||||
if expiry, ok := AuthKeySessionLayerExpiry(invalid); ok || !expiry.IsZero() {
|
||||
t.Fatalf("invalid msg_id %d expiry = (%v,%v)", invalid, expiry, ok)
|
||||
}
|
||||
}
|
||||
now := time.Unix(seconds, 0).UTC()
|
||||
if expiry, ok := AuthKeySessionLayerEvidenceFresh(now, msgID); !ok || !expiry.Equal(want) {
|
||||
t.Fatalf("fresh evidence = (%v,%v), want (%v,true)", expiry, ok, want)
|
||||
}
|
||||
stale := (now.Add(-302*time.Second).Unix() << 32) | 4
|
||||
tooFuture := (now.Add(31*time.Second).Unix() << 32) | 4
|
||||
for _, invalid := range []int64{stale, tooFuture} {
|
||||
if expiry, ok := AuthKeySessionLayerEvidenceFresh(now, invalid); ok || !expiry.IsZero() {
|
||||
t.Fatalf("out-of-window msg_id %d evidence = (%v,%v)", invalid, expiry, ok)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue