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(`
		bindAddr = "0.0.0.0"
		bindPort = %d
		transport.heartbeatTimeout = -1
		transport.tcpMuxKeepaliveInterval = 2
		`, serverPort)

		remotePort := f.AllocPort()
		clientConf := fmt.Sprintf(`
		serverPort = %d
		log.level = "trace"
		transport.heartbeatInterval = -1
		transport.heartbeatTimeout = -1
		transport.tcpMuxKeepaliveInterval = 2

		[[proxies]]
		name = "tcp"
		type = "tcp"
		localPort = %d
		remotePort = %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()
	})
})