(t *testing.T)
| 93 | } |
| 94 | |
| 95 | func 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() |
nothing calls this directly
no test coverage detected