github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/syz-cluster/pkg/db/build_repo_test.go (about) 1 // Copyright 2024 syzkaller project authors. All rights reserved. 2 // Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file. 3 4 package db 5 6 import ( 7 "testing" 8 "time" 9 10 "github.com/stretchr/testify/assert" 11 ) 12 13 func TestLastSuccessfulBuild(t *testing.T) { 14 client, ctx := NewTransientDB(t) 15 repo := NewBuildRepository(client) 16 17 params := &LastBuildParams{ 18 Arch: "amd64", 19 TreeName: "mainline", 20 ConfigName: "kasan", 21 Status: BuildSuccess, 22 } 23 build, err := repo.LastBuiltTree(ctx, params) 24 assert.NoError(t, err) 25 assert.Nil(t, build) 26 27 // Insert a non-successful. 28 err = repo.Insert(ctx, &Build{ 29 Arch: "amd64", 30 TreeName: "mainline", 31 CommitHash: "bad", 32 CommitDate: time.Now(), 33 ConfigName: "kasan", 34 Status: BuildFailed, 35 }) 36 assert.NoError(t, err) 37 38 // It should not be queried. 39 build, err = repo.LastBuiltTree(ctx, params) 40 assert.NoError(t, err) 41 assert.Nil(t, build) 42 43 // .. but if don't specify the status, it should be there. 44 build, err = repo.LastBuiltTree(ctx, &LastBuildParams{ 45 TreeName: "mainline", 46 }) 47 assert.NoError(t, err) 48 assert.NotNil(t, build) 49 50 // Insert the correct one. 51 err = repo.Insert(ctx, &Build{ 52 Arch: "amd64", 53 TreeName: "mainline", 54 CommitHash: "good", 55 CommitDate: time.Now(), 56 ConfigName: "kasan", 57 Status: BuildSuccess, 58 }) 59 assert.NoError(t, err) 60 61 // It should be in the output. 62 build, err = repo.LastBuiltTree(ctx, params) 63 assert.NoError(t, err) 64 assert.Equal(t, "good", build.CommitHash) 65 66 // But not for different arguments. 67 build, err = repo.LastBuiltTree(ctx, &LastBuildParams{ 68 Arch: "arm64", 69 TreeName: "mainline", 70 ConfigName: "kasan", 71 }) 72 assert.NoError(t, err) 73 assert.Nil(t, build) 74 }