123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168 |
- package basic
- import (
- "context"
- "fmt"
- "github.com/onsi/ginkgo/v2"
- "github.com/fatedier/frp/test/e2e/framework"
- "github.com/fatedier/frp/test/e2e/framework/consts"
- "github.com/fatedier/frp/test/e2e/pkg/port"
- )
- var _ = ginkgo.Describe("[Feature: Config]", func() {
- f := framework.NewDefaultFramework()
- ginkgo.Describe("Template", func() {
- ginkgo.It("render by env", func() {
- serverConf := consts.DefaultServerConfig
- clientConf := consts.DefaultClientConfig
- portName := port.GenName("TCP")
- serverConf += fmt.Sprintf(`
- auth.token = "{{ %s{{ .Envs.FRP_TOKEN }}%s }}"
- `, "`", "`")
- clientConf += fmt.Sprintf(`
- auth.token = "{{ %s{{ .Envs.FRP_TOKEN }}%s }}"
- [[proxies]]
- name = "tcp"
- type = "tcp"
- localPort = {{ .%s }}
- remotePort = {{ .%s }}
- `, "`", "`", framework.TCPEchoServerPort, portName)
- f.SetEnvs([]string{"FRP_TOKEN=123"})
- f.RunProcesses([]string{serverConf}, []string{clientConf})
- framework.NewRequestExpect(f).PortName(portName).Ensure()
- })
- ginkgo.It("Range ports mapping", func() {
- serverConf := consts.DefaultServerConfig
- clientConf := consts.DefaultClientConfig
- adminPort := f.AllocPort()
- localPortsRange := "13010-13012,13014"
- remotePortsRange := "23010-23012,23014"
- escapeTemplate := func(s string) string {
- return "{{ `" + s + "` }}"
- }
- clientConf += fmt.Sprintf(`
- webServer.port = %d
- %s
- [[proxies]]
- name = "tcp-%s"
- type = "tcp"
- localPort = %s
- remotePort = %s
- %s
- `, adminPort,
- escapeTemplate(fmt.Sprintf(`{{- range $_, $v := parseNumberRangePair "%s" "%s" }}`, localPortsRange, remotePortsRange)),
- escapeTemplate("{{ $v.First }}"),
- escapeTemplate("{{ $v.First }}"),
- escapeTemplate("{{ $v.Second }}"),
- escapeTemplate("{{- end }}"),
- )
- f.RunProcesses([]string{serverConf}, []string{clientConf})
- client := f.APIClientForFrpc(adminPort)
- checkProxyFn := func(name string, localPort, remotePort int) {
- status, err := client.GetProxyStatus(context.Background(), name)
- framework.ExpectNoError(err)
- framework.ExpectContainSubstring(status.LocalAddr, fmt.Sprintf(":%d", localPort))
- framework.ExpectContainSubstring(status.RemoteAddr, fmt.Sprintf(":%d", remotePort))
- }
- checkProxyFn("tcp-13010", 13010, 23010)
- checkProxyFn("tcp-13011", 13011, 23011)
- checkProxyFn("tcp-13012", 13012, 23012)
- checkProxyFn("tcp-13014", 13014, 23014)
- })
- })
- ginkgo.Describe("Includes", func() {
- ginkgo.It("split tcp proxies into different files", func() {
- serverPort := f.AllocPort()
- serverConfigPath := f.GenerateConfigFile(fmt.Sprintf(`
- bindAddr = "0.0.0.0"
- bindPort = %d
- `, serverPort))
- remotePort := f.AllocPort()
- proxyConfigPath := f.GenerateConfigFile(fmt.Sprintf(`
- [[proxies]]
- name = "tcp"
- type = "tcp"
- localPort = %d
- remotePort = %d
- `, f.PortByName(framework.TCPEchoServerPort), remotePort))
- remotePort2 := f.AllocPort()
- proxyConfigPath2 := f.GenerateConfigFile(fmt.Sprintf(`
- [[proxies]]
- name = "tcp2"
- type = "tcp"
- localPort = %d
- remotePort = %d
- `, f.PortByName(framework.TCPEchoServerPort), remotePort2))
- clientConfigPath := f.GenerateConfigFile(fmt.Sprintf(`
- serverPort = %d
- includes = ["%s","%s"]
- `, serverPort, proxyConfigPath, proxyConfigPath2))
- _, _, err := f.RunFrps("-c", serverConfigPath)
- framework.ExpectNoError(err)
- _, _, err = f.RunFrpc("-c", clientConfigPath)
- framework.ExpectNoError(err)
- framework.NewRequestExpect(f).Port(remotePort).Ensure()
- framework.NewRequestExpect(f).Port(remotePort2).Ensure()
- })
- })
- ginkgo.Describe("Support Formats", func() {
- ginkgo.It("YAML", func() {
- serverConf := fmt.Sprintf(`
- bindPort: {{ .%s }}
- log:
- level: trace
- `, port.GenName("Server"))
- remotePort := f.AllocPort()
- clientConf := fmt.Sprintf(`
- serverPort: {{ .%s }}
- log:
- level: trace
- proxies:
- - name: tcp
- type: tcp
- localPort: {{ .%s }}
- remotePort: %d
- `, port.GenName("Server"), framework.TCPEchoServerPort, remotePort)
- f.RunProcesses([]string{serverConf}, []string{clientConf})
- framework.NewRequestExpect(f).Port(remotePort).Ensure()
- })
- ginkgo.It("JSON", func() {
- serverConf := fmt.Sprintf(`{"bindPort": {{ .%s }}, "log": {"level": "trace"}}`, port.GenName("Server"))
- remotePort := f.AllocPort()
- clientConf := fmt.Sprintf(`{"serverPort": {{ .%s }}, "log": {"level": "trace"},
- "proxies": [{"name": "tcp", "type": "tcp", "localPort": {{ .%s }}, "remotePort": %d}]}`,
- port.GenName("Server"), framework.TCPEchoServerPort, remotePort)
- f.RunProcesses([]string{serverConf}, []string{clientConf})
- framework.NewRequestExpect(f).Port(remotePort).Ensure()
- })
- })
- })
|