123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198 |
- package basic
- import (
- "fmt"
- "strings"
- "time"
- "github.com/fatedier/frp/test/e2e/framework"
- "github.com/fatedier/frp/test/e2e/framework/consts"
- . "github.com/onsi/ginkgo"
- )
- var connTimeout = 2 * time.Second
- var _ = Describe("[Feature: Basic]", func() {
- f := framework.NewDefaultFramework()
- Describe("TCP && UDP", func() {
- types := []string{"tcp", "udp"}
- for _, t := range types {
- proxyType := t
- It(fmt.Sprintf("Expose a %s echo server", strings.ToUpper(proxyType)), func() {
- serverConf := consts.DefaultServerConfig
- clientConf := consts.DefaultClientConfig
- localPortName := ""
- protocol := "tcp"
- switch proxyType {
- case "tcp":
- localPortName = framework.TCPEchoServerPort
- protocol = "tcp"
- case "udp":
- localPortName = framework.UDPEchoServerPort
- protocol = "udp"
- }
- getProxyConf := func(proxyName string, portName string, extra string) string {
- return fmt.Sprintf(`
- [%s]
- type = %s
- local_port = {{ .%s }}
- remote_port = {{ .%s }}
- `+extra, proxyName, proxyType, localPortName, portName)
- }
- tests := []struct {
- proxyName string
- portName string
- extraConfig string
- }{
- {
- proxyName: "normal",
- portName: framework.GenPortName("Normal"),
- },
- {
- proxyName: "with-encryption",
- portName: framework.GenPortName("WithEncryption"),
- extraConfig: "use_encryption = true",
- },
- {
- proxyName: "with-compression",
- portName: framework.GenPortName("WithCompression"),
- extraConfig: "use_compression = true",
- },
- {
- proxyName: "with-encryption-and-compression",
- portName: framework.GenPortName("WithEncryptionAndCompression"),
- extraConfig: `
- use_encryption = true
- use_compression = true
- `,
- },
- }
- // build all client config
- for _, test := range tests {
- clientConf += getProxyConf(test.proxyName, test.portName, test.extraConfig) + "\n"
- }
- // run frps and frpc
- f.RunProcesses([]string{serverConf}, []string{clientConf})
- for _, test := range tests {
- framework.ExpectRequest(protocol, f.UsedPorts[test.portName],
- []byte(consts.TestString), []byte(consts.TestString), connTimeout, test.proxyName)
- }
- })
- }
- })
- Describe("STCP && SUDP", func() {
- types := []string{"stcp", "sudp"}
- for _, t := range types {
- proxyType := t
- It(fmt.Sprintf("Expose echo server with %s", strings.ToUpper(proxyType)), func() {
- serverConf := consts.DefaultServerConfig
- clientServerConf := consts.DefaultClientConfig
- clientVisitorConf := consts.DefaultClientConfig
- localPortName := ""
- protocol := "tcp"
- switch proxyType {
- case "stcp":
- localPortName = framework.TCPEchoServerPort
- protocol = "tcp"
- case "sudp":
- localPortName = framework.UDPEchoServerPort
- protocol = "udp"
- }
- correctSK := "abc"
- wrongSK := "123"
- getProxyServerConf := func(proxyName string, extra string) string {
- return fmt.Sprintf(`
- [%s]
- type = %s
- role = server
- sk = %s
- local_port = {{ .%s }}
- `+extra, proxyName, proxyType, correctSK, localPortName)
- }
- getProxyVisitorConf := func(proxyName string, portName, visitorSK, extra string) string {
- return fmt.Sprintf(`
- [%s]
- type = %s
- role = visitor
- server_name = %s
- sk = %s
- bind_port = {{ .%s }}
- `+extra, proxyName, proxyType, proxyName, visitorSK, portName)
- }
- tests := []struct {
- proxyName string
- bindPortName string
- visitorSK string
- extraConfig string
- expectError bool
- }{
- {
- proxyName: "normal",
- bindPortName: framework.GenPortName("Normal"),
- visitorSK: correctSK,
- },
- {
- proxyName: "with-encryption",
- bindPortName: framework.GenPortName("WithEncryption"),
- visitorSK: correctSK,
- extraConfig: "use_encryption = true",
- },
- {
- proxyName: "with-compression",
- bindPortName: framework.GenPortName("WithCompression"),
- visitorSK: correctSK,
- extraConfig: "use_compression = true",
- },
- {
- proxyName: "with-encryption-and-compression",
- bindPortName: framework.GenPortName("WithEncryptionAndCompression"),
- visitorSK: correctSK,
- extraConfig: `
- use_encryption = true
- use_compression = true
- `,
- },
- {
- proxyName: "with-error-sk",
- bindPortName: framework.GenPortName("WithErrorSK"),
- visitorSK: wrongSK,
- expectError: true,
- },
- }
- // build all client config
- for _, test := range tests {
- clientServerConf += getProxyServerConf(test.proxyName, test.extraConfig) + "\n"
- }
- for _, test := range tests {
- clientVisitorConf += getProxyVisitorConf(test.proxyName, test.bindPortName, test.visitorSK, test.extraConfig) + "\n"
- }
- // run frps and frpc
- f.RunProcesses([]string{serverConf}, []string{clientServerConf, clientVisitorConf})
- for _, test := range tests {
- expectResp := []byte(consts.TestString)
- if test.expectError {
- framework.ExpectRequestError(protocol, f.UsedPorts[test.bindPortName],
- []byte(consts.TestString), connTimeout, test.proxyName)
- continue
- }
- framework.ExpectRequest(protocol, f.UsedPorts[test.bindPortName],
- []byte(consts.TestString), expectResp, connTimeout, test.proxyName)
- }
- })
- }
- })
- })
|