package loadbalancer

import (
	"fmt"
	"net/http"

	. "github.com/onsi/ginkgo"
	. "github.com/onsi/gomega"

	"github.com/pingcap/test-infra/sdk/e2etest/framework"
)

var _ = Describe("LoadBalancer Test", func() {
	Context("LoadBalancer.Create", func() {
		f := framework.NewDefaultFramework("testbed-loadbalancer-create")

		It("LoadBalancer's testbed should equal to testbed's name", func() {
			lb := f.CreateLoadBalancer(f.CreateTestbed(), "key", "value", 80)
			Expect(lb.Testbed).Should(Equal(f.Testbed()))
		})
	})

	Context("LoadBalancer.Endpoint", func() {
		f := framework.NewDefaultFramework("testbed-loadbalancer-endpoint")

		It("LoadBalancer's endpoint should work", func() {
			testbed := f.CreateTestbed()
			port := 80
			labelKey, labelValue := "weird-key", "weird-value"

			workloadNode := f.CreateWorkloadNodeWithLabel(testbed, labelKey, labelValue)
			lb := f.CreateLoadBalancer(testbed, labelKey, labelValue, port)

			err := f.WaitForWorkloadNodeReady(workloadNode, framework.TestContext.ResourceWaitReadyTimeout)
			framework.ExpectNoError(err)

			lbHost, lbport := lb.Endpoint()
			_, err = http.Get(fmt.Sprintf("http://%s:%d", lbHost, lbport))
			framework.ExpectNoError(err)
		})
	})
})
