mirror of
https://github.com/idanoo/autobrr
synced 2025-07-23 08:49:13 +00:00
feat(feeds): optimize existing cache items check (#2078)
* feat(feeds): optimize existing items cache check * feat(feeds): remove ttl from repo method ExistingItems * feat(feeds): add db integration test for ExistingItems * feat(feeds): improve release and filter processing * feat(feeds): fix failing test
This commit is contained in:
parent
92ddb919a5
commit
46f6fbe5cc
8 changed files with 266 additions and 45 deletions
|
@ -155,6 +155,107 @@ func TestFeedCacheRepo_Exists(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func TestFeedCacheRepo_ExistingItems(t *testing.T) {
|
||||
for dbType, db := range testDBs {
|
||||
|
||||
log := setupLoggerForTest()
|
||||
repo := NewFeedCacheRepo(log, db)
|
||||
feedRepo := NewFeedRepo(log, db)
|
||||
indexerRepo := NewIndexerRepo(log, db)
|
||||
mockData := getMockFeed()
|
||||
indexerMockData := getMockIndexer()
|
||||
|
||||
t.Run(fmt.Sprintf("ExistingItems_SingleItem_Multi_Keys [%s]", dbType), func(t *testing.T) {
|
||||
// Setup
|
||||
indexer, err := indexerRepo.Store(t.Context(), indexerMockData)
|
||||
assert.NoError(t, err)
|
||||
mockData.IndexerID = int(indexer.ID)
|
||||
|
||||
err = feedRepo.Store(t.Context(), mockData)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = repo.Put(mockData.ID, "test_key", []byte("test_value"), time.Now().Add(time.Hour))
|
||||
assert.NoError(t, err)
|
||||
|
||||
keys := []string{"test_key", "test_key_2"}
|
||||
|
||||
// Execute
|
||||
items, err := repo.ExistingItems(t.Context(), mockData.ID, keys)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, items, 1)
|
||||
//assert.True(t, exists)
|
||||
|
||||
// Cleanup
|
||||
_ = feedRepo.Delete(t.Context(), mockData.ID)
|
||||
_ = indexerRepo.Delete(t.Context(), int(indexer.ID))
|
||||
_ = repo.Delete(t.Context(), mockData.ID, "test_key")
|
||||
})
|
||||
|
||||
t.Run(fmt.Sprintf("ExistingItems_MultipleItems [%s]", dbType), func(t *testing.T) {
|
||||
// Setup
|
||||
indexer, err := indexerRepo.Store(t.Context(), indexerMockData)
|
||||
assert.NoError(t, err)
|
||||
mockData.IndexerID = int(indexer.ID)
|
||||
|
||||
err = feedRepo.Store(t.Context(), mockData)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = repo.Put(mockData.ID, "test_key", []byte("test_value"), time.Now().Add(time.Hour))
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = repo.Put(mockData.ID, "test_key_2", []byte("test_value_2"), time.Now().Add(time.Hour))
|
||||
assert.NoError(t, err)
|
||||
|
||||
keys := []string{"test_key", "test_key_2"}
|
||||
|
||||
// Execute
|
||||
items, err := repo.ExistingItems(t.Context(), mockData.ID, keys)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, items, 2)
|
||||
|
||||
// Cleanup
|
||||
_ = feedRepo.Delete(t.Context(), mockData.ID)
|
||||
_ = indexerRepo.Delete(t.Context(), int(indexer.ID))
|
||||
_ = repo.Delete(t.Context(), mockData.ID, "test_key")
|
||||
})
|
||||
|
||||
t.Run(fmt.Sprintf("ExistingItems_MultipleItems_Single_Key [%s]", dbType), func(t *testing.T) {
|
||||
// Setup
|
||||
indexer, err := indexerRepo.Store(t.Context(), indexerMockData)
|
||||
assert.NoError(t, err)
|
||||
mockData.IndexerID = int(indexer.ID)
|
||||
|
||||
err = feedRepo.Store(t.Context(), mockData)
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = repo.Put(mockData.ID, "test_key", []byte("test_value"), time.Now().Add(time.Hour))
|
||||
assert.NoError(t, err)
|
||||
|
||||
err = repo.Put(mockData.ID, "test_key_2", []byte("test_value_2"), time.Now().Add(time.Hour))
|
||||
assert.NoError(t, err)
|
||||
|
||||
keys := []string{"test_key"}
|
||||
|
||||
// Execute
|
||||
items, err := repo.ExistingItems(t.Context(), mockData.ID, keys)
|
||||
assert.NoError(t, err)
|
||||
assert.Len(t, items, 1)
|
||||
|
||||
// Cleanup
|
||||
_ = feedRepo.Delete(t.Context(), mockData.ID)
|
||||
_ = indexerRepo.Delete(t.Context(), int(indexer.ID))
|
||||
_ = repo.Delete(t.Context(), mockData.ID, "test_key")
|
||||
})
|
||||
|
||||
t.Run(fmt.Sprintf("ExistsItems_Nonexistent_Key [%s]", dbType), func(t *testing.T) {
|
||||
// Execute
|
||||
exists, err := repo.Exists(-1, "nonexistent_key")
|
||||
assert.NoError(t, err)
|
||||
assert.False(t, exists)
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestFeedCacheRepo_Put(t *testing.T) {
|
||||
for dbType, db := range testDBs {
|
||||
log := setupLoggerForTest()
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue