package dns_test

import (
	"testing"

	"github.com/hashicorp/consul/agent/dns"
	"github.com/stretchr/testify/require"
)

func TestValidLabel(t *testing.T) {
	cases := map[string]bool{
		"CrEaTeD":           true,
		"created":           true,
		"create-deleted":    true,
		"foo":               true,
		"":                  false,
		"_foo_":             false,
		"-foo":              false,
		"foo-":              false,
		"-foo-":             false,
		"-foo-bar-":         false,
		"no spaces allowed": false,
		"thisvaluecontainsalotofcharactersbutnottoomanyandthecaseisatrue":  true,  // 63 chars
		"thisvaluecontainstoomanycharactersandisthusinvalidandtestisfalse": false, // 64 chars
	}

	t.Run("*", func(t *testing.T) {
		t.Run("IsValidLabel", func(t *testing.T) {
			require.False(t, dns.IsValidLabel("*"))
		})
		t.Run("ValidateLabel", func(t *testing.T) {
			require.Error(t, dns.ValidateLabel("*"))
		})
	})

	for name, expect := range cases {
		t.Run(name, func(t *testing.T) {
			t.Run("IsValidDNSLabel", func(t *testing.T) {
				require.Equal(t, expect, dns.IsValidLabel(name))
			})
			t.Run("ValidateLabel", func(t *testing.T) {
				if expect {
					require.NoError(t, dns.ValidateLabel(name))
				} else {
					require.Error(t, dns.ValidateLabel(name))
				}
			})
		})
	}
}