package features

import (
	"fmt"
	"time"

	"github.com/onsi/ginkgo/v2"

	"github.com/fatedier/frp/test/e2e/framework"
)

var _ = ginkgo.Describe("[Feature: Heartbeat]", func() {
	f := framework.NewDefaultFramework()

	ginkgo.It("disable application layer heartbeat", func() {
		serverPort := f.AllocPort()
		serverConf := fmt.Sprintf(`
		[common]
		bind_addr = 0.0.0.0
		bind_port = %d
		heartbeat_timeout = -1
		tcp_mux_keepalive_interval = 2
		`, serverPort)

		remotePort := f.AllocPort()
		clientConf := fmt.Sprintf(`
		[common]
		server_port = %d
		log_level = trace
		heartbeat_interval = -1
		heartbeat_timeout = -1
		tcp_mux_keepalive_interval = 2

		[tcp]
		type = tcp
		local_port = %d
		remote_port = %d
		`, serverPort, f.PortByName(framework.TCPEchoServerPort), remotePort)

		// run frps and frpc
		f.RunProcesses([]string{serverConf}, []string{clientConf})

		framework.NewRequestExpect(f).Protocol("tcp").Port(remotePort).Ensure()

		time.Sleep(5 * time.Second)
		framework.NewRequestExpect(f).Protocol("tcp").Port(remotePort).Ensure()
	})
})
