mirror of https://github.com/fatedier/frp
fatedier
4 years ago
committed by
GitHub
21 changed files with 616 additions and 50 deletions
@ -0,0 +1,198 @@ |
|||||||
|
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) |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
}) |
||||||
|
}) |
@ -0,0 +1,95 @@ |
|||||||
|
package basic |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
|
||||||
|
"github.com/fatedier/frp/test/e2e/framework" |
||||||
|
"github.com/fatedier/frp/test/e2e/framework/consts" |
||||||
|
|
||||||
|
. "github.com/onsi/ginkgo" |
||||||
|
) |
||||||
|
|
||||||
|
type generalTestConfigures struct { |
||||||
|
server string |
||||||
|
client string |
||||||
|
expectError bool |
||||||
|
} |
||||||
|
|
||||||
|
func defineClientServerTest(desc string, f *framework.Framework, configures *generalTestConfigures) { |
||||||
|
It(desc, func() { |
||||||
|
serverConf := consts.DefaultServerConfig |
||||||
|
clientConf := consts.DefaultClientConfig |
||||||
|
|
||||||
|
serverConf += fmt.Sprintf(` |
||||||
|
%s |
||||||
|
`, configures.server) |
||||||
|
|
||||||
|
clientConf += fmt.Sprintf(` |
||||||
|
%s |
||||||
|
|
||||||
|
[tcp] |
||||||
|
type = tcp |
||||||
|
local_port = {{ .%s }} |
||||||
|
remote_port = {{ .%s }} |
||||||
|
|
||||||
|
[udp] |
||||||
|
type = udp |
||||||
|
local_port = {{ .%s }} |
||||||
|
remote_port = {{ .%s }} |
||||||
|
`, configures.client, |
||||||
|
framework.TCPEchoServerPort, framework.GenPortName("TCP"), |
||||||
|
framework.UDPEchoServerPort, framework.GenPortName("UDP"), |
||||||
|
) |
||||||
|
|
||||||
|
f.RunProcesses([]string{serverConf}, []string{clientConf}) |
||||||
|
|
||||||
|
if !configures.expectError { |
||||||
|
framework.ExpectTCPRequest(f.UsedPorts[framework.GenPortName("TCP")], |
||||||
|
[]byte(consts.TestString), []byte(consts.TestString), connTimeout, "tcp proxy") |
||||||
|
framework.ExpectUDPRequest(f.UsedPorts[framework.GenPortName("UDP")], |
||||||
|
[]byte(consts.TestString), []byte(consts.TestString), connTimeout, "udp proxy") |
||||||
|
} else { |
||||||
|
framework.ExpectTCPRequestError(f.UsedPorts[framework.GenPortName("TCP")], |
||||||
|
[]byte(consts.TestString), connTimeout, "tcp proxy") |
||||||
|
framework.ExpectUDPRequestError(f.UsedPorts[framework.GenPortName("UDP")], |
||||||
|
[]byte(consts.TestString), connTimeout, "udp proxy") |
||||||
|
} |
||||||
|
}) |
||||||
|
} |
||||||
|
|
||||||
|
var _ = Describe("[Feature: Client-Server]", func() { |
||||||
|
f := framework.NewDefaultFramework() |
||||||
|
|
||||||
|
Describe("Protocol", func() { |
||||||
|
supportProtocols := []string{"tcp", "kcp", "websocket"} |
||||||
|
for _, protocol := range supportProtocols { |
||||||
|
configures := &generalTestConfigures{ |
||||||
|
server: fmt.Sprintf(` |
||||||
|
kcp_bind_port = {{ .%s }} |
||||||
|
protocol = %s" |
||||||
|
`, consts.PortServerName, protocol), |
||||||
|
client: "protocol = " + protocol, |
||||||
|
} |
||||||
|
defineClientServerTest(protocol, f, configures) |
||||||
|
} |
||||||
|
}) |
||||||
|
|
||||||
|
Describe("Authentication", func() { |
||||||
|
func() { |
||||||
|
configures := &generalTestConfigures{ |
||||||
|
server: "token = 123456", |
||||||
|
client: "token = 123456", |
||||||
|
} |
||||||
|
defineClientServerTest("Token Correct", f, configures) |
||||||
|
}() |
||||||
|
|
||||||
|
func() { |
||||||
|
configures := &generalTestConfigures{ |
||||||
|
server: "token = 123456", |
||||||
|
client: "token = invalid", |
||||||
|
expectError: true, |
||||||
|
} |
||||||
|
defineClientServerTest("Token Incorrect", f, configures) |
||||||
|
}() |
||||||
|
}) |
||||||
|
}) |
@ -0,0 +1,76 @@ |
|||||||
|
package plugin |
||||||
|
|
||||||
|
import ( |
||||||
|
"fmt" |
||||||
|
"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: Client-Plugins]", func() { |
||||||
|
f := framework.NewDefaultFramework() |
||||||
|
|
||||||
|
Describe("UnixDomainSocket", func() { |
||||||
|
It("Expose a unix domain socket echo server", func() { |
||||||
|
serverConf := consts.DefaultServerConfig |
||||||
|
clientConf := consts.DefaultClientConfig |
||||||
|
|
||||||
|
getProxyConf := func(proxyName string, portName string, extra string) string { |
||||||
|
return fmt.Sprintf(` |
||||||
|
[%s] |
||||||
|
type = tcp |
||||||
|
remote_port = {{ .%s }} |
||||||
|
plugin = unix_domain_socket |
||||||
|
plugin_unix_path = {{ .%s }} |
||||||
|
`+extra, proxyName, portName, framework.UDSEchoServerAddr) |
||||||
|
} |
||||||
|
|
||||||
|
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.ExpectTCPRequest(f.UsedPorts[test.portName], |
||||||
|
[]byte(consts.TestString), []byte(consts.TestString), |
||||||
|
connTimeout, test.proxyName) |
||||||
|
} |
||||||
|
}) |
||||||
|
}) |
||||||
|
}) |
Loading…
Reference in new issue