| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119 |
- package service
- import (
- "context"
- "testing"
- "github.com/Wei-Shaw/sub2api/internal/pkg/ctxkey"
- "github.com/stretchr/testify/require"
- )
- func TestRequestMetadataWriteAndRead_NoBridge(t *testing.T) {
- ctx := context.Background()
- ctx = WithIsMaxTokensOneHaikuRequest(ctx, true, false)
- ctx = WithThinkingEnabled(ctx, true, false)
- ctx = WithPrefetchedStickySession(ctx, 123, 456, false)
- ctx = WithSingleAccountRetry(ctx, true, false)
- ctx = WithAccountSwitchCount(ctx, 2, false)
- isHaiku, ok := IsMaxTokensOneHaikuRequestFromContext(ctx)
- require.True(t, ok)
- require.True(t, isHaiku)
- thinking, ok := ThinkingEnabledFromContext(ctx)
- require.True(t, ok)
- require.True(t, thinking)
- accountID, ok := PrefetchedStickyAccountIDFromContext(ctx)
- require.True(t, ok)
- require.Equal(t, int64(123), accountID)
- groupID, ok := PrefetchedStickyGroupIDFromContext(ctx)
- require.True(t, ok)
- require.Equal(t, int64(456), groupID)
- singleRetry, ok := SingleAccountRetryFromContext(ctx)
- require.True(t, ok)
- require.True(t, singleRetry)
- switchCount, ok := AccountSwitchCountFromContext(ctx)
- require.True(t, ok)
- require.Equal(t, 2, switchCount)
- require.Nil(t, ctx.Value(ctxkey.IsMaxTokensOneHaikuRequest))
- require.Nil(t, ctx.Value(ctxkey.ThinkingEnabled))
- require.Nil(t, ctx.Value(ctxkey.PrefetchedStickyAccountID))
- require.Nil(t, ctx.Value(ctxkey.PrefetchedStickyGroupID))
- require.Nil(t, ctx.Value(ctxkey.SingleAccountRetry))
- require.Nil(t, ctx.Value(ctxkey.AccountSwitchCount))
- }
- func TestRequestMetadataWrite_BridgeLegacyKeys(t *testing.T) {
- ctx := context.Background()
- ctx = WithIsMaxTokensOneHaikuRequest(ctx, true, true)
- ctx = WithThinkingEnabled(ctx, true, true)
- ctx = WithPrefetchedStickySession(ctx, 123, 456, true)
- ctx = WithSingleAccountRetry(ctx, true, true)
- ctx = WithAccountSwitchCount(ctx, 2, true)
- require.Equal(t, true, ctx.Value(ctxkey.IsMaxTokensOneHaikuRequest))
- require.Equal(t, true, ctx.Value(ctxkey.ThinkingEnabled))
- require.Equal(t, int64(123), ctx.Value(ctxkey.PrefetchedStickyAccountID))
- require.Equal(t, int64(456), ctx.Value(ctxkey.PrefetchedStickyGroupID))
- require.Equal(t, true, ctx.Value(ctxkey.SingleAccountRetry))
- require.Equal(t, 2, ctx.Value(ctxkey.AccountSwitchCount))
- }
- func TestRequestMetadataRead_LegacyFallbackAndStats(t *testing.T) {
- beforeHaiku, beforeThinking, beforeAccount, beforeGroup, beforeSingleRetry, beforeSwitchCount := RequestMetadataFallbackStats()
- ctx := context.Background()
- ctx = context.WithValue(ctx, ctxkey.IsMaxTokensOneHaikuRequest, true)
- ctx = context.WithValue(ctx, ctxkey.ThinkingEnabled, true)
- ctx = context.WithValue(ctx, ctxkey.PrefetchedStickyAccountID, int64(321))
- ctx = context.WithValue(ctx, ctxkey.PrefetchedStickyGroupID, int64(654))
- ctx = context.WithValue(ctx, ctxkey.SingleAccountRetry, true)
- ctx = context.WithValue(ctx, ctxkey.AccountSwitchCount, int64(3))
- isHaiku, ok := IsMaxTokensOneHaikuRequestFromContext(ctx)
- require.True(t, ok)
- require.True(t, isHaiku)
- thinking, ok := ThinkingEnabledFromContext(ctx)
- require.True(t, ok)
- require.True(t, thinking)
- accountID, ok := PrefetchedStickyAccountIDFromContext(ctx)
- require.True(t, ok)
- require.Equal(t, int64(321), accountID)
- groupID, ok := PrefetchedStickyGroupIDFromContext(ctx)
- require.True(t, ok)
- require.Equal(t, int64(654), groupID)
- singleRetry, ok := SingleAccountRetryFromContext(ctx)
- require.True(t, ok)
- require.True(t, singleRetry)
- switchCount, ok := AccountSwitchCountFromContext(ctx)
- require.True(t, ok)
- require.Equal(t, 3, switchCount)
- afterHaiku, afterThinking, afterAccount, afterGroup, afterSingleRetry, afterSwitchCount := RequestMetadataFallbackStats()
- require.Equal(t, beforeHaiku+1, afterHaiku)
- require.Equal(t, beforeThinking+1, afterThinking)
- require.Equal(t, beforeAccount+1, afterAccount)
- require.Equal(t, beforeGroup+1, afterGroup)
- require.Equal(t, beforeSingleRetry+1, afterSingleRetry)
- require.Equal(t, beforeSwitchCount+1, afterSwitchCount)
- }
- func TestRequestMetadataRead_PreferMetadataOverLegacy(t *testing.T) {
- ctx := context.WithValue(context.Background(), ctxkey.ThinkingEnabled, false)
- ctx = WithThinkingEnabled(ctx, true, false)
- thinking, ok := ThinkingEnabledFromContext(ctx)
- require.True(t, ok)
- require.True(t, thinking)
- require.Equal(t, false, ctx.Value(ctxkey.ThinkingEnabled))
- }
|