| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- //go:build integration
- package repository
- import (
- "context"
- "testing"
- "time"
- "github.com/Wei-Shaw/sub2api/internal/config"
- "github.com/Wei-Shaw/sub2api/internal/service"
- "github.com/stretchr/testify/require"
- )
- func TestSchedulerSnapshotOutboxReplay(t *testing.T) {
- ctx := context.Background()
- rdb := testRedis(t)
- client := testEntClient(t)
- _, _ = integrationDB.ExecContext(ctx, "TRUNCATE scheduler_outbox")
- accountRepo := newAccountRepositoryWithSQL(client, integrationDB, nil)
- outboxRepo := NewSchedulerOutboxRepository(integrationDB)
- cache := NewSchedulerCache(rdb)
- cfg := &config.Config{
- RunMode: config.RunModeStandard,
- Gateway: config.GatewayConfig{
- Scheduling: config.GatewaySchedulingConfig{
- OutboxPollIntervalSeconds: 1,
- FullRebuildIntervalSeconds: 0,
- DbFallbackEnabled: true,
- },
- },
- }
- account := &service.Account{
- Name: "outbox-replay-" + time.Now().Format("150405.000000"),
- Platform: service.PlatformOpenAI,
- Type: service.AccountTypeAPIKey,
- Status: service.StatusActive,
- Schedulable: true,
- Concurrency: 3,
- Priority: 1,
- Credentials: map[string]any{},
- Extra: map[string]any{},
- }
- require.NoError(t, accountRepo.Create(ctx, account))
- require.NoError(t, cache.SetAccount(ctx, account))
- svc := service.NewSchedulerSnapshotService(cache, outboxRepo, accountRepo, nil, cfg)
- svc.Start()
- t.Cleanup(svc.Stop)
- require.NoError(t, accountRepo.UpdateLastUsed(ctx, account.ID))
- updated, err := accountRepo.GetByID(ctx, account.ID)
- require.NoError(t, err)
- require.NotNil(t, updated.LastUsedAt)
- expectedUnix := updated.LastUsedAt.Unix()
- require.Eventually(t, func() bool {
- cached, err := cache.GetAccount(ctx, account.ID)
- if err != nil || cached == nil || cached.LastUsedAt == nil {
- return false
- }
- return cached.LastUsedAt.Unix() == expectedUnix
- }, 5*time.Second, 100*time.Millisecond)
- }
|