package gke

import (
	"testing"

	"github.com/pingcap/tiflow-operator/api/v1alpha1"
	"github.com/stretchr/testify/require"
	corev1 "k8s.io/api/core/v1"

	"github.com/tidbcloud/infra-provider/pkg/config"
)

func TestAddCloudProxyToTiflowCluster(t *testing.T) {
	t.Parallel()

	conf := &config.RootConfig{
		ControllerConfig: config.ControllerConfig{
			TiflowCluster: config.TiflowClusterConfig{
				Master: config.TiflowClusterMasterConfig{
					ShareDb: config.TiflowShareDBConfig{
						ServiceName: "service-test",
						Port:        3336,
					},
				},
			},
		},
	}

	spec := &v1alpha1.ComponentSpec{}
	err := AddCloudSQLProxyToComponentSpec(conf, spec)
	require.NoError(t, err)
	aC := spec.AdditionalContainers
	require.NotNil(t, aC)
	require.Len(t, aC, 1)
	require.Equal(t, "cloud-sql-proxy", aC[0].Name)
	require.Equal(t, []string{"--structured-logs",
		"--credentials-file=/secrets/credentials_json", "--port=3336", "service-test"}, aC[0].Args)
	nonRoot := true
	require.Equal(t, &corev1.SecurityContext{RunAsNonRoot: &nonRoot}, aC[0].SecurityContext)
	require.Len(t, aC[0].VolumeMounts, 1)
	vm := aC[0].VolumeMounts[0]
	require.Equal(t, rdsSecretVolumeName, vm.Name)
	require.True(t, vm.ReadOnly)
	require.Equal(t, "/secrets/", vm.MountPath)
}
