blob: 8125ee62438bd5eaca36e84ee21ec95786b78447 [file] [log] [blame]
package datakitchensink_test
import (
"bytes"
"context"
"encoding/hex"
"testing"
"github.com/stretchr/testify/assert"
"github.com/stretchr/testify/require"
"go.skia.org/infra/go/paramtools"
"go.skia.org/infra/go/testutils/unittest"
"go.skia.org/infra/golden/go/sql"
dks "go.skia.org/infra/golden/go/sql/datakitchensink"
"go.skia.org/infra/golden/go/sql/schema"
"go.skia.org/infra/golden/go/sql/sqltest"
"go.skia.org/infra/golden/go/types"
)
func TestBuild_DataIsValidAndMatchesSchema(t *testing.T) {
unittest.LargeTest(t)
ctx := context.Background()
db := sqltest.NewCockroachDBForTestsWithProductionSchema(ctx, t)
data := dks.Build()
require.NoError(t, sqltest.BulkInsertDataTables(ctx, db, data))
// Spot check the data.
row := db.QueryRow(ctx, "SELECT count(*) from TraceValues")
count := 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 166, count)
row = db.QueryRow(ctx, "SELECT count(*) from Traces WHERE corpus = $1", "round")
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 15, count)
row = db.QueryRow(ctx, "SELECT count(*) from Traces WHERE matches_any_ignore_rule = $1", true)
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 2, count)
row = db.QueryRow(ctx, "SELECT count(*) from Traces WHERE matches_any_ignore_rule = $1", false)
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 39, count)
row = db.QueryRow(ctx, "SELECT count(*) from Traces WHERE matches_any_ignore_rule IS NULL")
count = -1
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 0, count)
row = db.QueryRow(ctx, "SELECT count(*) from Expectations WHERE label = $1", string(schema.LabelPositive))
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 9, count)
row = db.QueryRow(ctx, "SELECT count(*) from Expectations WHERE label = $1", string(schema.LabelNegative))
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 4, count)
row = db.QueryRow(ctx, "SELECT count(*) from Expectations WHERE label = $1", string(schema.LabelUntriaged))
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 7, count)
row = db.QueryRow(ctx, "SELECT count(*) from Changelists")
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 4, count)
row = db.QueryRow(ctx, "SELECT count(*) from Patchsets")
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 5, count)
row = db.QueryRow(ctx, "SELECT count(*) from Tryjobs")
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 8, count)
row = db.QueryRow(ctx, "SELECT count(*) from GitCommits")
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 14, count)
row = db.QueryRow(ctx, "SELECT count(*) from CommitsWithData")
count = 0
assert.NoError(t, row.Scan(&count))
assert.Equal(t, 10, count)
}
func TestGroupingIDs_HardCodedValuesMatchComputedValuesAndAreInComputedData(t *testing.T) {
unittest.MediumTest(t)
data := dks.Build()
test := func(name, hardCodedHex string, hardCodedID []byte, groupingKeys paramtools.Params) {
t.Run(name, func(t *testing.T) {
_, idBytes := sql.SerializeMap(groupingKeys)
assert.Equal(t, idBytes, hardCodedID)
expectedID := hex.EncodeToString(idBytes)
assert.Equal(t, expectedID, hardCodedHex)
// Make sure grouping exists in the data tables and matches the keys we specified.
found := false
for _, g := range data.Groupings {
if bytes.Equal(g.GroupingID, idBytes) {
found = true
assert.Equal(t, g.Keys, groupingKeys)
}
}
assert.True(t, found, "grouping was not in sample data tables")
})
}
test("CircleGroupingIDHex", dks.CircleGroupingIDHex, dks.CircleGroupingID, paramtools.Params{
types.CorpusField: dks.RoundCorpus,
types.PrimaryKeyField: dks.CircleTest,
})
test("TriangleGroupingIDHex", dks.TriangleGroupingIDHex, dks.TriangleGroupingID, paramtools.Params{
types.CorpusField: dks.CornersCorpus,
types.PrimaryKeyField: dks.TriangleTest,
})
test("SquareGroupingIDHex", dks.SquareGroupingIDHex, dks.SquareGroupingID, paramtools.Params{
types.CorpusField: dks.CornersCorpus,
types.PrimaryKeyField: dks.SquareTest,
})
test("RoundRectGroupingIDHex", dks.RoundRectGroupingIDHex, dks.RoundRectGroupingID, paramtools.Params{
types.CorpusField: dks.RoundCorpus,
types.PrimaryKeyField: dks.RoundRectTest,
})
test("TextSevenGroupingIDHex", dks.TextSevenGroupingIDHex, dks.TextSevenGroupingID, paramtools.Params{
types.CorpusField: dks.TextCorpus,
types.PrimaryKeyField: dks.SevenTest,
})
}