merged from gramsrv upstream
This commit is contained in:
parent
79c64ee916
commit
21a0856587
651 changed files with 54774 additions and 4590 deletions
|
|
@ -41,7 +41,7 @@ func TestDurableSessionLayerSurvivesRestartAndRejectsOldSelectorRollback(t *test
|
|||
t.Fatalf("restart restore = (%d,%d,%v,%v)", layer, msgID, found, err)
|
||||
}
|
||||
layer, msgID, publish, err := restarted.AdvanceNegotiatedSessionLayerEvidence(ctx, authKeyID, 10, 225, olderID)
|
||||
if err != nil || layer != 227 || msgID != newerID || !publish {
|
||||
if err != nil || layer != 227 || msgID != newerID || publish {
|
||||
t.Fatalf("old selector after restart = (%d,%d,%v,%v)", layer, msgID, publish, err)
|
||||
}
|
||||
key, found, err := keys.Get(ctx, authKeyID)
|
||||
|
|
@ -50,6 +50,34 @@ func TestDurableSessionLayerSurvivesRestartAndRejectsOldSelectorRollback(t *test
|
|||
}
|
||||
}
|
||||
|
||||
func TestDurableSessionLayerSameGenerationSkipsSharedPublication(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
keys := memory.NewAuthKeyStore()
|
||||
authKeyID := [8]byte{1, 0xb3}
|
||||
if err := keys.Save(ctx, store.AuthKeyData{ID: authKeyID}); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
now := time.Now().UTC()
|
||||
msgIDs := proto.NewMessageIDGen(func() time.Time { return now })
|
||||
firstID := int64(msgIDs.New(proto.MessageFromClient))
|
||||
secondID := int64(msgIDs.New(proto.MessageFromClient))
|
||||
r := New(Config{}, Deps{AuthKeySessionLayers: keys}, zaptest.NewLogger(t), clock.System)
|
||||
if layer, msgID, publish, err := r.AdvanceNegotiatedSessionLayerEvidence(ctx, authKeyID, 11, 227, firstID); err != nil || layer != 227 || msgID != firstID || !publish {
|
||||
t.Fatalf("first generation = (%d,%d,%v,%v)", layer, msgID, publish, err)
|
||||
}
|
||||
first, found, err := keys.GetSessionLayer(ctx, authKeyID, 11)
|
||||
if err != nil || !found {
|
||||
t.Fatalf("first row = (%+v,%v,%v)", first, found, err)
|
||||
}
|
||||
if layer, msgID, publish, err := r.AdvanceNegotiatedSessionLayerEvidence(ctx, authKeyID, 11, 227, secondID); err != nil || layer != 227 || msgID != secondID || publish {
|
||||
t.Fatalf("same generation = (%d,%d,%v,%v)", layer, msgID, publish, err)
|
||||
}
|
||||
second, found, err := keys.GetSessionLayer(ctx, authKeyID, 11)
|
||||
if err != nil || !found || second.ObservationID != first.ObservationID {
|
||||
t.Fatalf("same-generation row = (%+v,%v,%v), first observation %d", second, found, err, first.ObservationID)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDurableSessionLayerResolveRefreshesStaleRouterFromSharedStore(t *testing.T) {
|
||||
ctx := context.Background()
|
||||
keys := memory.NewAuthKeyStore()
|
||||
|
|
@ -94,12 +122,12 @@ func TestDurableSessionLayerFutureProfileCanBeCorrectedByGreaterSelector(t *test
|
|||
now := time.Now().UTC()
|
||||
futureID := int64(proto.NewMessageIDGen(func() time.Time { return now }).New(proto.MessageFromClient))
|
||||
correctID := int64(proto.NewMessageIDGen(func() time.Time { return now.Add(time.Second) }).New(proto.MessageFromClient))
|
||||
if _, applied, err := keys.AdvanceSessionLayer(ctx, authKeyID, 20, 229, futureID); err != nil || !applied {
|
||||
if _, applied, err := keys.AdvanceSessionLayer(ctx, authKeyID, 20, 230, futureID); err != nil || !applied {
|
||||
t.Fatalf("seed future evidence = applied %v err %v", applied, err)
|
||||
}
|
||||
r := New(Config{}, Deps{AuthKeySessionLayers: keys}, zaptest.NewLogger(t), clock.System)
|
||||
layer, msgID, found, err := r.ResolveNegotiatedSessionLayerEvidence(ctx, authKeyID, 20)
|
||||
if err != nil || !found || layer != 229 || msgID != futureID {
|
||||
if err != nil || !found || layer != 230 || msgID != futureID {
|
||||
t.Fatalf("future restore = (%d,%d,%v,%v)", layer, msgID, found, err)
|
||||
}
|
||||
if _, _, cached := r.NegotiatedSessionLayerEvidence(authKeyID, 20); cached {
|
||||
|
|
@ -177,6 +205,36 @@ func TestDurableSessionLayerCacheOrdersRebuiltRowsByObservationID(t *testing.T)
|
|||
}
|
||||
}
|
||||
|
||||
func TestDurableSessionLayerCacheAdvancesHighWaterWithinObservation(t *testing.T) {
|
||||
now := time.Now().UTC()
|
||||
r := New(Config{}, Deps{}, zaptest.NewLogger(t), clock.System)
|
||||
authKeyID := [8]byte{3, 0xc6}
|
||||
const sessionID = int64(306)
|
||||
first := store.AuthKeySessionLayer{
|
||||
Layer: 227, MessageID: 10_000, ObservationID: 10, ExpiresAt: now.Add(time.Minute),
|
||||
}
|
||||
if err := r.cacheResolvedDurableSessionLayer(authKeyID, sessionID, first); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
advanced := first
|
||||
advanced.MessageID = 20_000
|
||||
advanced.ExpiresAt = now.Add(2 * time.Minute)
|
||||
if err := r.cacheResolvedDurableSessionLayer(authKeyID, sessionID, advanced); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if layer, msgID, found := r.NegotiatedSessionLayerEvidence(authKeyID, sessionID); !found || layer != 227 || msgID != 20_000 {
|
||||
t.Fatalf("same-observation advance = (%d,%d,%v)", layer, msgID, found)
|
||||
}
|
||||
stale := first
|
||||
stale.MessageID = 15_000
|
||||
if err := r.cacheResolvedDurableSessionLayer(authKeyID, sessionID, stale); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if layer, msgID, found := r.NegotiatedSessionLayerEvidence(authKeyID, sessionID); !found || layer != 227 || msgID != 20_000 {
|
||||
t.Fatalf("stale same-observation read rolled cache back = (%d,%d,%v)", layer, msgID, found)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDurableSessionLayerAvailabilityErrorCarriesStructuralMarker(t *testing.T) {
|
||||
boom := errors.New("database unavailable")
|
||||
r := New(Config{}, Deps{AuthKeySessionLayers: unavailableSessionLayerStore{err: boom}}, zaptest.NewLogger(t), clock.System)
|
||||
|
|
@ -201,7 +259,7 @@ func TestDurableInheritedLayerRevalidatesEachNewSession(t *testing.T) {
|
|||
if layer, found, err := r.ResolveInheritedAuthKeyLayer(ctx, authKeyID); err != nil || !found || layer != 225 {
|
||||
t.Fatalf("initial default = (%d,%v,%v)", layer, found, err)
|
||||
}
|
||||
auth.authKeyClientInfos[authKeyID] = domain.AuthKeyClientInfo{Layer: 229, LayerObservationID: 2}
|
||||
auth.authKeyClientInfos[authKeyID] = domain.AuthKeyClientInfo{Layer: 230, LayerObservationID: 2}
|
||||
if layer, found, err := r.ResolveInheritedAuthKeyLayer(ctx, authKeyID); err != nil || !found || layer != 0 {
|
||||
t.Fatalf("future authoritative default = (%d,%v,%v)", layer, found, err)
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue