aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPimyn Girgis <pimyn@google.com>2025-12-31 10:55:26 +0100
committerAleksandr Nogikh <nogikh@google.com>2026-01-08 08:55:35 +0000
commit06ac10d7e8f3efdc1393e5a7dda65f405d93afd4 (patch)
tree545829f2fe64541f6230c8dbeda8c9add019f164
parentc58cecdc85ba1bbd56a8c0aa39e0e03a34b0aba1 (diff)
syz-cluster: add tests for series and patch name filtering
Adds unit tests for the series and patch name filtering functionality in the database repository.
-rw-r--r--syz-cluster/pkg/db/series_repo_test.go88
1 files changed, 88 insertions, 0 deletions
diff --git a/syz-cluster/pkg/db/series_repo_test.go b/syz-cluster/pkg/db/series_repo_test.go
index 576d48b94..b6bc74ca6 100644
--- a/syz-cluster/pkg/db/series_repo_test.go
+++ b/syz-cluster/pkg/db/series_repo_test.go
@@ -174,6 +174,94 @@ func TestSeriesRepositoryList(t *testing.T) {
})
}
+// nolint: dupl
+func TestSeriesRepositorySearch(t *testing.T) {
+ client, ctx := NewTransientDB(t)
+ repo := NewSeriesRepository(client)
+
+ series1 := &Series{
+ ExtID: "series-search-1",
+ Title: "Kernel Series for ARM64",
+ PublishedAt: time.Date(2020, time.January, 1, 1, 0, 0, 0, time.UTC),
+ }
+ patches1 := []*Patch{
+ {
+ Title: "arm64: patch for CPU",
+ Seq: 1,
+ },
+ {
+ Title: "arm64: another patch for memory",
+ Seq: 2,
+ },
+ }
+ err := repo.Insert(ctx, series1, func() ([]*Patch, error) {
+ return patches1, nil
+ })
+ assert.NoError(t, err)
+
+ series2 := &Series{
+ ExtID: "series-search-2",
+ Title: "X86 Specific Patch Series",
+ PublishedAt: time.Date(2020, time.January, 1, 2, 0, 0, 0, time.UTC),
+ }
+ patches2 := []*Patch{
+ {
+ Title: "x86: new feature",
+ Seq: 1,
+ },
+ }
+ err = repo.Insert(ctx, series2, func() ([]*Patch, error) {
+ return patches2, nil
+ })
+ assert.NoError(t, err)
+
+ series3 := &Series{
+ ExtID: "series-search-3",
+ Title: "Generic Bug Fixes",
+ PublishedAt: time.Date(2020, time.January, 1, 3, 0, 0, 0, time.UTC),
+ }
+ patches3 := []*Patch{
+ {
+ Title: "net: fix double free",
+ Seq: 1,
+ },
+ }
+ err = repo.Insert(ctx, series3, func() ([]*Patch, error) {
+ return patches3, nil
+ })
+ assert.NoError(t, err)
+
+ t.Run("by_series_name", func(t *testing.T) {
+ list, err := repo.ListLatest(ctx, SeriesFilter{Name: "Kernel Series"}, time.Time{})
+ assert.NoError(t, err)
+ assert.Len(t, list, 1)
+ assert.Equal(t, series1.Title, list[0].Series.Title)
+ })
+ t.Run("by_patch_name", func(t *testing.T) {
+ list, err := repo.ListLatest(ctx, SeriesFilter{Name: "double free"}, time.Time{})
+ assert.NoError(t, err)
+ assert.Len(t, list, 1)
+ assert.Equal(t, series3.Title, list[0].Series.Title)
+ })
+ t.Run("no_match", func(t *testing.T) {
+ list, err := repo.ListLatest(ctx, SeriesFilter{Name: "nonexistent"}, time.Time{})
+ assert.NoError(t, err)
+ assert.Len(t, list, 0)
+ })
+ t.Run("empty_search_string", func(t *testing.T) {
+ list, err := repo.ListLatest(ctx, SeriesFilter{Name: ""}, time.Time{})
+ assert.NoError(t, err)
+ assert.Len(t, list, 3) // All series should be returned if search strings are empty.
+ })
+ t.Run("search_across_series_and_patch", func(t *testing.T) {
+ list, err := repo.ListLatest(ctx, SeriesFilter{Name: "patch"}, time.Time{})
+ assert.NoError(t, err)
+ assert.Len(t, list, 2)
+ assert.Equal(t, series2.Title, list[0].Series.Title)
+ assert.Equal(t, series1.Title, list[1].Series.Title)
+ })
+}
+
func TestSeriesRepositoryUpdate(t *testing.T) {
client, ctx := NewTransientDB(t)
repo := NewSeriesRepository(client)