blob: e57c1c29f0990fb56eb5d64d0fa32c6769953d8f [file] [log] [blame]
package ds
import (
"context"
"testing"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/testutils/unittest"
)
func TestMigrateData(t *testing.T) {
// disabled: https://bugs.chromium.org/p/skia/issues/detail?id=9061
unittest.ManualTest(t)
unittest.RequiresDatastoreEmulator(t)
ctx := context.TODO()
// Create the source project.
require.NoError(t, InitForTesting("src-project", "test-namespace"))
srcClient := DS
// Populate the source.
nEntries := 1200
maxID := int64(nEntries * 10)
entitiesSrc, cleanupSrc := addRandEntities(t, srcClient, nEntries, maxID)
defer cleanupSrc()
srcCount, err := srcClient.Count(ctx, NewQuery(TEST_KIND))
require.NoError(t, err)
require.Equal(t, nEntries, srcCount)
// Create the destination project.
require.NoError(t, InitForTesting("dest-project", "test-namespace"))
destClient := DS
defer func() {
_, err := DeleteAll(destClient, TEST_KIND, true)
require.NoError(t, err)
}()
destCountEmpty, err := destClient.Count(ctx, NewQuery(TEST_KIND))
require.NoError(t, err)
require.Equal(t, 0, destCountEmpty)
// Migrate from source to destination reusing the old keys.
require.NoError(t, MigrateData(ctx, srcClient, destClient, TEST_KIND, false /* createNewKey */))
wait(t, destClient, TEST_KIND, nEntries)
destCountPopulated, err := destClient.Count(ctx, NewQuery(TEST_KIND))
require.NoError(t, err)
require.Equal(t, nEntries, destCountPopulated)
// Spot check to make sure source and destination data match.
for _, entitySrc := range []*testEntity{entitiesSrc[0], entitiesSrc[10], entitiesSrc[nEntries-1]} {
entityDest := &testEntity{}
require.NoError(t, destClient.Get(ctx, entitySrc.Key, entityDest))
require.Equal(t, entitySrc.Key, entityDest.Key)
require.Equal(t, entitySrc.Random, entityDest.Random)
require.Equal(t, entitySrc.Sortable, entityDest.Sortable)
}
// Cleanup.
_, err = DeleteAll(destClient, TEST_KIND, true)
require.NoError(t, err)
// Migrate from source to destination by creating new keys.
require.NoError(t, MigrateData(ctx, srcClient, destClient, TEST_KIND, true /* createNewKey */))
wait(t, destClient, TEST_KIND, nEntries)
destCountPopulated, err = destClient.Count(ctx, NewQuery(TEST_KIND))
require.NoError(t, err)
require.Equal(t, nEntries, destCountPopulated)
}