package node

import (
	"errors"
	"testing"

	"k8s.io/apimachinery/pkg/util/validation"
)

func TestValidateLabelKey(t *testing.T) {
	for i, te := range []struct {
		in   string
		want error
	}{
		{"foo", nil},
		{"example.com/", ErrLabelEmpty},
		{"foo-bar.baz_barfoo", nil},
		{"-", ErrLabelInvalidFirstCharacter},
		{"-invalid", ErrLabelInvalidFirstCharacter},
		{"invalid-", ErrLabelInvalidLastCharacter},
		{"", ErrLabelEmpty},
		{"accordingtoallknownlawsofaviationthereisnowaythatabeeshouldbeabletofly", ErrLabelTooLong},
		{"example.com/annotation", nil},
		{"/annotation", ErrLabelEmptyPrefix},
		{"_internal.example.com/annotation", errDomainNameInvalid},
		{"./annotation", errDomainNameInvalid},
		{"../annotation", errDomainNameInvalid},
		{"tcp:80.example.com/annotation", errDomainNameInvalid},
		{"80/annotation", errDomainNameEndsInNumber},
		{"github.com/monogon-dev/monogon/annotation", ErrLabelInvalidPrefix},
	} {
		if got := ValidateLabelKey(te.in); !errors.Is(got, te.want) {
			t.Errorf("%d (%q): wanted %v, got %v", i, te.in, te.want, got)
		}
		if ValidateLabelKey(te.in) == nil {
			if errs := validation.IsQualifiedName(te.in); len(errs) != 0 {
				t.Errorf("%d (%q): is not a valid Kubernetes qualified name: %v", i, te.in, errs)
			}
		}
	}
}

func TestValidateLabelValue(t *testing.T) {
	for i, te := range []struct {
		in   string
		want error
	}{
		{"foo", nil},
		{"foo-bar.baz_barfoo", nil},
		{"-", ErrLabelInvalidFirstCharacter},
		{"-invalid", ErrLabelInvalidFirstCharacter},
		{"invalid-", ErrLabelInvalidLastCharacter},
		{"", nil},
		{"accordingtoallknownlawsofaviationthereisnowaythatabeeshouldbeabletofly", ErrLabelTooLong},
		{"example.com/annotation", ErrLabelInvalidCharacter},
		{"/annotation", ErrLabelInvalidFirstCharacter},
		{"_internal.example.com/annotation", ErrLabelInvalidFirstCharacter},
		{"./annotation", ErrLabelInvalidFirstCharacter},
		{"../annotation", ErrLabelInvalidFirstCharacter},
		{"tcp:80.example.com/annotation", ErrLabelInvalidCharacter},
		{"github.com/monogon-dev/monogon/annotation", ErrLabelInvalidCharacter},
	} {
		// Test our implementation against test cases.
		if got := ValidateLabelValue(te.in); !errors.Is(got, te.want) {
			t.Errorf("%d (%q): wanted %v, got %v", i, te.in, te.want, got)
		}
		// Validate test cases against Kubernetes.
		if errs := validation.IsValidLabelValue(te.in); (te.want == nil) != (len(errs) == 0) {
			t.Errorf("%d (%q): wanted %v, kubernetes implementation returned %v", i, te.in, te.want, errs)
		}
	}
}
