package pki

import (
	"testing"

	"github.com/go-test/deep"
)

func TestParseClient(t *testing.T) {
	flagPKIRealm = "hswaw.net"

	tests := []struct {
		name string
		want *ClientInfo
	}{
		// Local cluster
		{"foo.bar.svc.k0.hswaw.net", &ClientInfo{Cluster: "k0.hswaw.net", Principal: "bar.svc", Job: "foo"}},
		{"foo.bar.k0.hswaw.net", nil},

		// Foreign cluster
		{"foo.bar.svc.k1.hswaw.net", &ClientInfo{Cluster: "k1.hswaw.net", Principal: "bar.svc", Job: "foo"}},
		{"foo.bar.k1.hswaw.net", nil},

		// Human admins (admins, as we know, don't have a real job)
		{"q3k.person.hswaw.net", &ClientInfo{Cluster: "person.hswaw.net", Principal: "q3k", Job: ""}},

		// External services
		{"kasownik.external.hswaw.net", &ClientInfo{Cluster: "external.hswaw.net", Principal: "kasownik", Job: ""}},

		// Broken.
		{"foo.hswaw.net", nil},
		{"ldap.hackerspace.pl", nil},
		{"", nil},
		{"..what..plz...don.t.hack.me.hswaw.net", nil},
	}

	for i, te := range tests {
		res, err := parseClientName(te.name)
		if err != nil {
			if te.want != nil {
				t.Errorf("#%d: wanted result, got err %v", i, err)
			}
			continue
		}

		if te.want == nil {
			t.Errorf("#%d: wanted err, got %+v", i, res)
			continue
		}

		if diff := deep.Equal(*te.want, *res); diff != nil {
			t.Errorf("#%d: res diff: %v", i, diff)
			continue
		}
	}
}

func TestCheckPerson(t *testing.T) {
	flagPKIRealm = "hswaw.net"

	res, err := parseClientName("q3k.person.hswaw.net")
	if err != nil {
		t.Fatalf("err: %v", err)
	}

	if want, got := "q3k", res.Person(); want != got {
		t.Fatalf("wanted %q, got %q", want, got)
	}
}
