blob: 8b9fe65fdd3e5cd95b4e11842a7b33d6ebe4265f [file] [log] [blame]
package caches
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/now"
"go.skia.org/infra/go/testutils/unittest"
"go.skia.org/infra/skcq/go/db"
db_mocks "go.skia.org/infra/skcq/go/db/mocks"
"go.skia.org/infra/skcq/go/types"
)
func TestCurrentChangesCache(t *testing.T) {
unittest.SmallTest(t)
ctx := context.Background()
cacheMap := map[string]*types.CurrentlyProcessingChange{}
unixTime := int64(1598467386)
testTime := time.Unix(unixTime, 0).UTC()
changeEquivalentPatchset := "test/change"
// Mock time now.
ctx = context.WithValue(ctx, now.ContextKey, testTime)
// Mock db.
dbClient := &db_mocks.DB{}
dbClient.On("GetCurrentChanges", ctx).Return(cacheMap, nil).Twice()
dbClient.On("PutCurrentChanges", ctx, cacheMap).Return(nil).Times(3)
dbClient.On("UpdateChangeAttemptAsAbandoned", ctx, int64(123), int64(5), db.GetChangesCol(false), now.Now(ctx).Unix()).Return(nil).Times(3)
// Test GetCurrentChangesCache.
ccCache, err := GetCurrentChangesCache(ctx, dbClient)
require.NoError(t, err)
require.NotNil(t, ccCache)
require.Len(t, ccCache.Get(), 0)
// Test Add with dry-run.
startTime, newEntry, err := ccCache.Add(ctx, changeEquivalentPatchset, "subject", "owner", "repo", "branch", true, false, int64(123), int64(5))
require.NoError(t, err)
require.Equal(t, unixTime, startTime)
require.True(t, newEntry)
require.Len(t, ccCache.Get(), 1)
require.True(t, ccCache.Get()[changeEquivalentPatchset].DryRun)
// Test Add with the same attempt in CQ-run now to replace the previous run.
startTime, newEntry, err = ccCache.Add(ctx, changeEquivalentPatchset, "subject", "owner", "repo", "branch", false, false, int64(123), int64(5))
require.NoError(t, err)
require.Equal(t, unixTime, startTime)
require.True(t, newEntry)
require.Len(t, ccCache.Get(), 1)
require.False(t, ccCache.Get()[changeEquivalentPatchset].DryRun)
// Test Remove.
err = ccCache.Remove(ctx, changeEquivalentPatchset)
require.NoError(t, err)
require.Len(t, ccCache.Get(), 0)
}