MCPcopy Create free account
hub / github.com/couchbase/sync_gateway / TestLateSequenceHandling

Function TestLateSequenceHandling

db/change_cache_test.go:95–166  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

93}
94
95func TestLateSequenceHandling(t *testing.T) {
96
97 context, ctx := setupTestDBWithCacheOptions(t, DefaultCacheOptions())
98 defer context.Close(ctx)
99
100 collection := GetSingleDatabaseCollection(t, context.DatabaseContext)
101 collectionID := collection.GetCollectionID()
102
103 stats, err := base.NewSyncGatewayStats()
104 require.NoError(t, err)
105 dbstats, err := stats.NewDBStats("", false, false, false, nil, nil)
106 require.NoError(t, err)
107
108 cache := newSingleChannelCache(collection, channels.NewID("Test1", collectionID), 0, dbstats.CacheStats)
109 assert.True(t, cache != nil)
110
111 // Empty late sequence cache should return empty set
112 startSequence := cache.RegisterLateSequenceClient()
113 entries, lastSeq, err := cache.GetLateSequencesSince(startSequence)
114 assert.Len(t, entries, 0)
115 assert.Equal(t, uint64(0), lastSeq)
116 assert.True(t, err == nil)
117
118 cache.AddLateSequence(testLogEntry(5, "foo", "1-a"))
119 cache.AddLateSequence(testLogEntry(8, "foo2", "1-a"))
120
121 // Retrieve since 0
122 entries, lastSeq, err = cache.GetLateSequencesSince(0)
123 log.Println("entries:", entries)
124 assert.Len(t, entries, 2)
125 assert.Equal(t, uint64(8), lastSeq)
126 assert.Equal(t, uint64(1), cache.lateLogs[2].getListenerCount())
127 assert.True(t, err == nil)
128
129 // Add Sequences. Will trigger purge on old sequences without listeners
130 cache.AddLateSequence(testLogEntry(2, "foo3", "1-a"))
131 cache.AddLateSequence(testLogEntry(7, "foo4", "1-a"))
132 assert.Len(t, cache.lateLogs, 3)
133 assert.Equal(t, uint64(8), cache.lateLogs[0].logEntry.Sequence)
134 assert.Equal(t, uint64(2), cache.lateLogs[1].logEntry.Sequence)
135 assert.Equal(t, uint64(7), cache.lateLogs[2].logEntry.Sequence)
136 assert.Equal(t, uint64(1), cache.lateLogs[0].getListenerCount())
137
138 // Retrieve since previous
139 entries, lastSeq, err = cache.GetLateSequencesSince(lastSeq)
140 log.Println("entries:", entries)
141 assert.Len(t, entries, 2)
142 assert.Equal(t, uint64(7), lastSeq)
143 assert.Equal(t, uint64(0), cache.lateLogs[0].getListenerCount())
144 assert.Equal(t, uint64(1), cache.lateLogs[2].getListenerCount())
145 log.Println("cache.lateLogs:", cache.lateLogs)
146 assert.True(t, err == nil)
147
148 // Purge. We have a listener sitting at seq=7, so purge should only clear previous
149 cache.AddLateSequence(testLogEntry(15, "foo5", "1-a"))
150 cache.AddLateSequence(testLogEntry(11, "foo6", "1-a"))
151 log.Println("cache.lateLogs:", cache.lateLogs)
152 cache.purgeLateLogEntries()

Callers

nothing calls this directly

Calls 15

NewSyncGatewayStatsFunction · 0.92
NewIDFunction · 0.92
DefaultCacheOptionsFunction · 0.85
newSingleChannelCacheFunction · 0.85
testLogEntryFunction · 0.85
NewDBStatsMethod · 0.80
AddLateSequenceMethod · 0.80
getListenerCountMethod · 0.80
purgeLateLogEntriesMethod · 0.80
CloseMethod · 0.65

Tested by

no test coverage detected