package cmd import ( "fmt" "net/http" "strings" "testing" "github.com/gogf/gf/v2/frame/g" "github.com/gogf/gf/v2/net/ghttp" "github.com/gogf/gf/v2/os/gcfg" ) func TestInternalChannelTestWithoutTokenReachesRequestValidation(t *testing.T) { oldAdapter := g.Cfg().GetAdapter() adapter, err := gcfg.NewAdapterContent(`{"internal":{}}`) if err != nil { t.Fatal(err) } g.Cfg().SetAdapter(adapter) t.Cleanup(func() { g.Cfg().SetAdapter(oldAdapter) }) server := ghttp.GetServer(t.Name()) server.SetAddr("127.0.0.1:0") bindHTTPRoutes(server) if err := server.Start(); err != nil { t.Fatal(err) } t.Cleanup(func() { _ = server.Shutdown() }) response, err := http.Post(fmt.Sprintf("http://127.0.0.1:%d/internal/channel/test", server.GetListenedPort()), "application/json", strings.NewReader(`{}`)) if err != nil { t.Fatal(err) } defer response.Body.Close() if response.StatusCode == http.StatusForbidden { t.Fatalf("request was rejected before existing parameter validation: status=%d", response.StatusCode) } } func TestBindHTTPRoutesRegistersChannelControlRoutes(t *testing.T) { server := ghttp.GetServer("chan-channel-control-route-test") server.SetAddr("127.0.0.1:0") bindHTTPRoutes(server) if err := server.Start(); err != nil { t.Fatalf("start HTTP server: %v", err) } t.Cleanup(func() { if err := server.Shutdown(); err != nil { t.Errorf("shutdown HTTP server: %v", err) } }) want := map[string]bool{ "/internal/channel/test": false, "/internal/channel/refresh": false, "/internal/channel/remove": false, } for _, route := range server.GetRoutes() { if _, ok := want[route.Route]; ok && strings.EqualFold(route.Method, "POST") { want[route.Route] = true } } for route, found := range want { if !found { t.Fatalf("POST %s route was not registered: %+v", route, server.GetRoutes()) } } }