package gardener

import (
	"testing"

	. "github.com/onsi/gomega"
)

func TestGetSubCIDR(t *testing.T) {
	g := NewGomegaWithT(t)

	cidr := "10.240.0.0/12"
	subBits := 6

	sub, err := getSubCIDR(cidr, subBits, 0)
	g.Expect(err).Should(Succeed())
	g.Expect(sub).Should(Equal("10.240.0.0/18"))

	sub, err = getSubCIDR(cidr, subBits, 1)
	g.Expect(err).Should(Succeed())
	g.Expect(sub).Should(Equal("10.240.64.0/18"))

	sub, err = getSubCIDR("10.251.1.0/31", 1, 0)
	g.Expect(err).Should(Succeed())
	g.Expect(sub).Should(Equal("10.251.1.0/32"))

	_, err = getSubCIDR("10.251.1.0/31", 2, 0)
	g.Expect(err).ShouldNot(Succeed())
}

func TestGetGCPCIDR(t *testing.T) {
	g := NewGomegaWithT(t)

	worker, lb, err := getGCPCIDR("10.240.0.0/18", "asia-east1")
	g.Expect(err).Should(Succeed())
	g.Expect(worker).Should(Equal([]string{"10.240.0.0/19"}))
	g.Expect(lb).Should(Equal([]string{"10.240.32.0/19"}))
}

func TestGetAWSCIDR(t *testing.T) {
	g := NewGomegaWithT(t)

	cidr := "10.240.0.0/18"
	workers, publics, internals, err := GetAWSCIDR(cidr, "us-east-2", 3)
	g.Expect(err).Should(Succeed())
	g.Expect(workers).Should(Equal([]string{"10.240.0.0/21", "10.240.16.0/21", "10.240.32.0/21"}))
	g.Expect(publics).Should(Equal([]string{"10.240.8.0/22", "10.240.24.0/22", "10.240.40.0/22"}))
	g.Expect(internals).Should(Equal([]string{"10.240.12.0/22", "10.240.28.0/22", "10.240.44.0/22"}))
}
