manager_test.go

 1package lsp
 2
 3import (
 4	"testing"
 5	"time"
 6
 7	"github.com/charmbracelet/crush/internal/csync"
 8	"github.com/stretchr/testify/require"
 9)
10
11func TestUnavailableBackoff(t *testing.T) {
12	t.Parallel()
13
14	base := time.Date(2026, 3, 26, 0, 0, 0, 0, time.UTC)
15	now := base
16
17	manager := &Manager{
18		unavailable: csync.NewMap[string, time.Time](),
19		now:         func() time.Time { return now },
20	}
21
22	require.False(t, manager.recentlyUnavailable("gopls"))
23
24	manager.markUnavailable("gopls")
25	require.True(t, manager.recentlyUnavailable("gopls"))
26
27	now = now.Add(unavailableRetryDelay + time.Second)
28	require.False(t, manager.recentlyUnavailable("gopls"))
29	_, exists := manager.unavailable.Get("gopls")
30	require.False(t, exists)
31
32	manager.markUnavailable("gopls")
33	manager.clearUnavailable("gopls")
34	require.False(t, manager.recentlyUnavailable("gopls"))
35}