Ctrl K
ComunidadGuías…

cli/aibridged_reload_internal_test.go

Rama main · réplica de lectura del repositorio original.

Archivo original ↗Preguntar a KiBot
//go:build !slim

package cli

import (
	"context"
	"testing"

	"github.com/prometheus/client_golang/prometheus"
	promtest "github.com/prometheus/client_golang/prometheus/testutil"
	"github.com/stretchr/testify/require"
	"go.uber.org/mock/gomock"
	"golang.org/x/xerrors"

	"cdr.dev/slog/v3/sloggers/slogtest"
	"github.com/coder/coder/v2/aibridge"
	"github.com/coder/coder/v2/coderd/aibridged"
	"github.com/coder/coder/v2/coderd/aibridged/aibridgedmock"
	"github.com/coder/coder/v2/coderd/aibridged/proto"
	"github.com/coder/coder/v2/codersdk"
)

func TestProviderRPCReloaderPublication(t *testing.T) {
	t.Parallel()
	for _, fail := range []bool{false, true} {
		name := "Success"
		if fail {
			name = "Failure"
		}
		t.Run(name, func(t *testing.T) {
			t.Parallel()
			client := aibridgedmock.NewMockDRPCClient(gomock.NewController(t))
			client.EXPECT().GetAIProviders(gomock.Any(), gomock.Any()).Return(&proto.GetAIProvidersResponse{}, nil)
			metrics := aibridged.NewMetrics(prometheus.NewRegistry())
			publishErr := xerrors.New("publish failed")
			called := false
			reloader := NewProviderRPCReloader(func(ctx context.Context, providers []aibridge.Provider) error {
				called = true
				require.Equal(t, t.Context(), ctx)
				require.Empty(t, providers)
				if fail {
					return publishErr
				}
				return nil
			}, func(context.Context) (aibridged.DRPCClient, error) {
				return client, nil
			}, codersdk.AIBridgeConfig{}, slogtest.Make(t, nil), nil, metrics)

			err := reloader.Reload(t.Context())
			require.True(t, called)
			require.Positive(t, promtest.ToFloat64(metrics.ProvidersLastReloadTimestampSeconds))
			if fail {
				require.ErrorIs(t, err, publishErr)
				require.Zero(t, promtest.ToFloat64(metrics.ProvidersLastReloadSuccessTimestampSeconds))
			} else {
				require.NoError(t, err)
				require.Positive(t, promtest.ToFloat64(metrics.ProvidersLastReloadSuccessTimestampSeconds))
			}
		})
	}
}