blob: 39bf68d09a0441c5c51d07121210548fa98cfd72 [file] [log] [blame]
package ds_ignorestore
import (
"context"
"testing"
"time"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/ds"
ds_testutil "go.skia.org/infra/go/ds/testutil"
"go.skia.org/infra/go/sktest"
"go.skia.org/infra/go/testutils/unittest"
"go.skia.org/infra/golden/go/ignore"
)
func TestDatastoreIgnoreStore(t *testing.T) {
unittest.LargeTest(t)
// Run against the locally running emulator.
cleanup := ds_testutil.InitDatastore(t, ds.IGNORE_RULE, ds.HELPER_RECENT_KEYS)
defer cleanup()
store, err := New(ds.DS)
require.NoError(t, err)
ignoreStoreAll(t, store)
}
func ignoreStoreAll(t sktest.TestingT, store ignore.Store) {
// Add a few instances.
r1 := ignore.NewRule("jon@example.com", time.Now().Add(time.Hour), "config=gpu", "reason")
r2 := ignore.NewRule("jim@example.com", time.Now().Add(time.Minute*10), "config=8888", "No good reason.")
r3 := ignore.NewRule("jon@example.com", time.Now().Add(time.Minute*50), "extra=123&extra=abc", "Ignore multiple.")
r4 := ignore.NewRule("jon@example.com", time.Now().Add(time.Minute*100), "extra=123&extra=abc&config=8888", "Ignore multiple.")
require.NoError(t, store.Create(context.Background(), r1))
require.NoError(t, store.Create(context.Background(), r2))
require.NoError(t, store.Create(context.Background(), r3))
require.NoError(t, store.Create(context.Background(), r4))
allRules, err := store.List(context.Background())
require.NoError(t, err)
require.Equal(t, 4, len(allRules))
r1, r2, r3, r4 = allRules[0], allRules[1], allRules[2], allRules[3]
assert.NotZero(t, r1.ID)
assert.NotZero(t, r2.ID)
assert.NotZero(t, r3.ID)
assert.NotZero(t, r4.ID)
// Remove the third and fourth rule
delCount, err := store.Delete(context.Background(), r3.ID)
require.NoError(t, err)
require.Equal(t, 1, delCount)
allRules, err = store.List(context.Background())
require.NoError(t, err)
require.Equal(t, 3, len(allRules))
delCount, err = store.Delete(context.Background(), r4.ID)
require.NoError(t, err)
require.Equal(t, 1, delCount)
allRules, err = store.List(context.Background())
require.NoError(t, err)
require.Equal(t, 2, len(allRules))
for _, oneRule := range allRules {
require.True(t, (oneRule.ID == r1.ID) || (oneRule.ID == r2.ID))
}
delCount, err = store.Delete(context.Background(), r1.ID)
require.NoError(t, err)
require.Equal(t, 1, delCount)
allRules, err = store.List(context.Background())
require.NoError(t, err)
require.Equal(t, 1, len(allRules))
require.Equal(t, r2.ID, allRules[0].ID)
// Update a rule.
updatedRule := allRules[0]
updatedRule.Note = "an updated rule"
err = store.Update(context.Background(), updatedRule)
require.NoError(t, err, "Update should succeed.")
allRules, err = store.List(context.Background())
require.NoError(t, err)
require.Equal(t, 1, len(allRules))
require.Equal(t, r2.ID, allRules[0].ID)
require.Equal(t, "an updated rule", allRules[0].Note)
// Try to update a rule with an empty ID
updatedRule = ignore.Rule{}
err = store.Update(context.Background(), updatedRule)
require.Error(t, err, "Update should fail for an empty id.")
delCount, err = store.Delete(context.Background(), r2.ID)
require.NoError(t, err)
require.Equal(t, 1, delCount)
allRules, err = store.List(context.Background())
require.NoError(t, err)
require.Equal(t, 0, len(allRules))
// This id doesn't exist, so we shouldn't be able to delete it.
delCount, err = store.Delete(context.Background(), "1000000")
require.NoError(t, err)
require.Equal(t, delCount, 0)
allRules, err = store.List(context.Background())
require.NoError(t, err)
require.Equal(t, 0, len(allRules))
}