mirror of https://github.com/fatedier/frp
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
136 lines
3.6 KiB
136 lines
3.6 KiB
package basic |
|
|
|
import ( |
|
"context" |
|
"fmt" |
|
"strconv" |
|
"strings" |
|
"time" |
|
|
|
"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/request" |
|
) |
|
|
|
var _ = ginkgo.Describe("[Feature: ClientManage]", func() { |
|
f := framework.NewDefaultFramework() |
|
|
|
ginkgo.It("Update && Reload API", func() { |
|
serverConf := consts.DefaultServerConfig |
|
|
|
adminPort := f.AllocPort() |
|
|
|
p1Port := f.AllocPort() |
|
p2Port := f.AllocPort() |
|
p3Port := f.AllocPort() |
|
|
|
clientConf := consts.DefaultClientConfig + fmt.Sprintf(` |
|
webServer.port = %d |
|
|
|
[[proxies]] |
|
name = "p1" |
|
type = "tcp" |
|
localPort = {{ .%s }} |
|
remotePort = %d |
|
|
|
[[proxies]] |
|
name = "p2" |
|
type = "tcp" |
|
localPort = {{ .%s }} |
|
remotePort = %d |
|
|
|
[[proxies]] |
|
name = "p3" |
|
type = "tcp" |
|
localPort = {{ .%s }} |
|
remotePort = %d |
|
`, adminPort, |
|
framework.TCPEchoServerPort, p1Port, |
|
framework.TCPEchoServerPort, p2Port, |
|
framework.TCPEchoServerPort, p3Port) |
|
|
|
f.RunProcesses([]string{serverConf}, []string{clientConf}) |
|
|
|
framework.NewRequestExpect(f).Port(p1Port).Ensure() |
|
framework.NewRequestExpect(f).Port(p2Port).Ensure() |
|
framework.NewRequestExpect(f).Port(p3Port).Ensure() |
|
|
|
client := f.APIClientForFrpc(adminPort) |
|
conf, err := client.GetConfig(context.Background()) |
|
framework.ExpectNoError(err) |
|
|
|
newP2Port := f.AllocPort() |
|
// change p2 port and remove p3 proxy |
|
newClientConf := strings.ReplaceAll(conf, strconv.Itoa(p2Port), strconv.Itoa(newP2Port)) |
|
p3Index := strings.LastIndex(newClientConf, "[[proxies]]") |
|
if p3Index >= 0 { |
|
newClientConf = newClientConf[:p3Index] |
|
} |
|
|
|
err = client.UpdateConfig(context.Background(), newClientConf) |
|
framework.ExpectNoError(err) |
|
|
|
err = client.Reload(context.Background(), true) |
|
framework.ExpectNoError(err) |
|
time.Sleep(time.Second) |
|
|
|
framework.NewRequestExpect(f).Port(p1Port).Explain("p1 port").Ensure() |
|
framework.NewRequestExpect(f).Port(p2Port).Explain("original p2 port").ExpectError(true).Ensure() |
|
framework.NewRequestExpect(f).Port(newP2Port).Explain("new p2 port").Ensure() |
|
framework.NewRequestExpect(f).Port(p3Port).Explain("p3 port").ExpectError(true).Ensure() |
|
}) |
|
|
|
ginkgo.It("healthz", func() { |
|
serverConf := consts.DefaultServerConfig |
|
|
|
dashboardPort := f.AllocPort() |
|
clientConf := consts.DefaultClientConfig + fmt.Sprintf(` |
|
webServer.addr = "0.0.0.0" |
|
webServer.port = %d |
|
webServer.user = "admin" |
|
webServer.password = "admin" |
|
`, dashboardPort) |
|
|
|
f.RunProcesses([]string{serverConf}, []string{clientConf}) |
|
|
|
framework.NewRequestExpect(f).RequestModify(func(r *request.Request) { |
|
r.HTTP().HTTPPath("/healthz") |
|
}).Port(dashboardPort).ExpectResp([]byte("")).Ensure() |
|
|
|
framework.NewRequestExpect(f).RequestModify(func(r *request.Request) { |
|
r.HTTP().HTTPPath("/") |
|
}).Port(dashboardPort). |
|
Ensure(framework.ExpectResponseCode(401)) |
|
}) |
|
|
|
ginkgo.It("stop", func() { |
|
serverConf := consts.DefaultServerConfig |
|
|
|
adminPort := f.AllocPort() |
|
testPort := f.AllocPort() |
|
clientConf := consts.DefaultClientConfig + fmt.Sprintf(` |
|
webServer.port = %d |
|
|
|
[[proxies]] |
|
name = "test" |
|
type = "tcp" |
|
localPort = {{ .%s }} |
|
remotePort = %d |
|
`, adminPort, framework.TCPEchoServerPort, testPort) |
|
|
|
f.RunProcesses([]string{serverConf}, []string{clientConf}) |
|
|
|
framework.NewRequestExpect(f).Port(testPort).Ensure() |
|
|
|
client := f.APIClientForFrpc(adminPort) |
|
err := client.Stop(context.Background()) |
|
framework.ExpectNoError(err) |
|
|
|
time.Sleep(3 * time.Second) |
|
|
|
// frpc stopped so the port is not listened, expect error |
|
framework.NewRequestExpect(f).Port(testPort).ExpectError(true).Ensure() |
|
}) |
|
})
|
|
|