github.com/google/syzkaller@v0.0.0-20251211124644-a066d2bc4b02/syz-cluster/pkg/db/session_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 TestSeriesInsertSession(t *testing.T) {
    14  	client, ctx := NewTransientDB(t)
    15  	sessionRepo := NewSessionRepository(client)
    16  	seriesRepo := NewSeriesRepository(client)
    17  
    18  	series := &Series{ExtID: "some-series"}
    19  	err := seriesRepo.Insert(ctx, series, nil)
    20  	assert.NoError(t, err)
    21  
    22  	withSession := func(need int) {
    23  		list, err := seriesRepo.ListLatest(ctx, SeriesFilter{Limit: 10}, time.Time{})
    24  		assert.NoError(t, err)
    25  		var cnt int
    26  		for _, item := range list {
    27  			if item.Session != nil {
    28  				cnt++
    29  			}
    30  		}
    31  		assert.Equal(t, cnt, need)
    32  	}
    33  
    34  	// This series is indeed without a session.
    35  	withSession(0)
    36  
    37  	// Add a new session.
    38  	session := &Session{SeriesID: series.ID}
    39  	err = sessionRepo.Insert(ctx, session)
    40  	assert.NoError(t, err)
    41  
    42  	// The sessions is not started yet.
    43  	withSession(0)
    44  
    45  	// Now start it.
    46  	err = sessionRepo.Start(ctx, session.ID)
    47  	assert.NoError(t, err)
    48  	withSession(1)
    49  }
    50  
    51  func TestQueryWaitingSessions(t *testing.T) {
    52  	client, ctx := NewTransientDB(t)
    53  	sessionRepo := NewSessionRepository(client)
    54  	seriesRepo := NewSeriesRepository(client)
    55  
    56  	series := &Series{ExtID: "some-series"}
    57  	err := seriesRepo.Insert(ctx, series, nil)
    58  	assert.NoError(t, err)
    59  
    60  	nthTime := func(i int) time.Time {
    61  		return time.Date(2009, time.January, 1, 1, i, 0, 0, time.UTC)
    62  	}
    63  
    64  	for i := 0; i < 5; i++ {
    65  		session := &Session{
    66  			SeriesID:  series.ID,
    67  			CreatedAt: nthTime(i),
    68  		}
    69  		err = sessionRepo.Insert(ctx, session)
    70  		assert.NoError(t, err)
    71  	}
    72  
    73  	var next *NextSession
    74  	for i := 0; i < 5; i++ {
    75  		var list []*Session
    76  		list, next, err = sessionRepo.ListWaiting(ctx, next, 1)
    77  		assert.NoError(t, err)
    78  		assert.Len(t, list, 1)
    79  		assert.Equal(t, nthTime(i), list[0].CreatedAt)
    80  	}
    81  }