package frpc

import (
	"testing"

	. "github.com/onsi/gomega"
)

func TestFrpcConfig(t *testing.T) {
	cases := map[string]struct {
		name           string
		localEndpoint  string
		frpsAddr       string
		localPort      int
		frpsPort       int
		expectedConfig string
	}{
		"valid-eks-config": {
			name:          "eks",
			localEndpoint: "78XXXXXXXXXXXXXXXXXXXXXXXXXXXXA4.gr7.us-west-2.eks.amazonaws.com",
			frpsAddr:      "10.10.10.10",
			localPort:     443,
			frpsPort:      8080,
			expectedConfig: `[common]
  server_addr = "10.10.10.10"
  server_port = 8080
  admin_addr = "127.0.0.1"
  admin_port = 7400

[eks]
  type = "tcp"
  local_ip = "78XXXXXXXXXXXXXXXXXXXXXXXXXXXXA4.gr7.us-west-2.eks.amazonaws.com"
  local_port = 443
  remote_port = 443
`,
		},
		"valid-proxy-config": {
			name:          "proxy",
			localEndpoint: "proxy-cluster-proxy.infra",
			frpsAddr:      "10.10.10.10",
			localPort:     80,
			frpsPort:      8080,
			expectedConfig: `[common]
  server_addr = "10.10.10.10"
  server_port = 8080
  admin_addr = "127.0.0.1"
  admin_port = 7400

[proxy]
  type = "tcp"
  local_ip = "proxy-cluster-proxy.infra"
  local_port = 80
  remote_port = 80
`,
		},
	}

	for name, tc := range cases {
		t.Run(name, func(t *testing.T) {
			g := NewGomegaWithT(t)
			g.Expect(frpcConfig(tc.name, tc.localEndpoint, tc.frpsAddr, tc.localPort, tc.frpsPort)).To(Equal(tc.expectedConfig))
		})
	}
}
