|
|
@@ -0,0 +1,80 @@
|
|
|
+// +build integration
|
|
|
+// To turn on this test use -tags=integration in go test command
|
|
|
+
|
|
|
+package client
|
|
|
+
|
|
|
+import (
|
|
|
+ "testing"
|
|
|
+ "encoding/hex"
|
|
|
+ "github.com/jcmturner/gokrb5/keytab"
|
|
|
+ "github.com/jcmturner/gokrb5/config"
|
|
|
+ "github.com/jcmturner/gokrb5/testdata"
|
|
|
+ "github.com/stretchr/testify/assert"
|
|
|
+)
|
|
|
+
|
|
|
+func TestClient_SuccessfulLogin(t *testing.T) {
|
|
|
+ b, err := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
|
|
|
+ kt, _ := keytab.Parse(b)
|
|
|
+ c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF)
|
|
|
+ cl := NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
|
|
|
+ cl.WithConfig(c)
|
|
|
+
|
|
|
+ err = cl.Login()
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error on login: %v\n", err)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_FailedLogin(t *testing.T) {
|
|
|
+ b, err := hex.DecodeString(testdata.TESTUSER1_WRONGPASSWD)
|
|
|
+ kt, _ := keytab.Parse(b)
|
|
|
+ c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF)
|
|
|
+ cl := NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
|
|
|
+ cl.WithConfig(c)
|
|
|
+
|
|
|
+ err = cl.Login()
|
|
|
+ if err == nil {
|
|
|
+ t.Fatal("Login with incorrect password did not error")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_NetworkTimeout(t *testing.T) {
|
|
|
+ b, err := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
|
|
|
+ kt, _ := keytab.Parse(b)
|
|
|
+ c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF_BAD_KDC_ADDRESS)
|
|
|
+ cl := NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
|
|
|
+ cl.WithConfig(c)
|
|
|
+
|
|
|
+ err = cl.Login()
|
|
|
+ if err == nil {
|
|
|
+ t.Fatal("Login with incorrect KDC address did not error")
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func TestClient_GetServiceTicket(t *testing.T) {
|
|
|
+ b, err := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
|
|
|
+ kt, _ := keytab.Parse(b)
|
|
|
+ c, _ := config.NewConfigFromString(testdata.TEST_KRB5CONF)
|
|
|
+ cl := NewClientWithKeytab("testuser1", "TEST.GOKRB5", kt)
|
|
|
+ cl.WithConfig(c)
|
|
|
+
|
|
|
+ err = cl.Login()
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error on login: %v\n", err)
|
|
|
+ }
|
|
|
+ spn := "HTTP/host.test.gokrb5"
|
|
|
+ tkt, key, err := cl.GetServiceTicket(spn)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error getting service ticket: %v\n", err)
|
|
|
+ }
|
|
|
+ assert.Equal(t, spn, tkt.SName.GetPrincipalNameString())
|
|
|
+ assert.Equal(t, 18, key.KeyType)
|
|
|
+
|
|
|
+ //Check cache use - should get the same values back again
|
|
|
+ tkt2, key2, err := cl.GetServiceTicket(spn)
|
|
|
+ if err != nil {
|
|
|
+ t.Fatalf("Error getting service ticket: %v\n", err)
|
|
|
+ }
|
|
|
+ assert.Equal(t, tkt.EncPart.Cipher, tkt2.EncPart.Cipher)
|
|
|
+ assert.Equal(t, key.KeyValue, key2.KeyValue)
|
|
|
+}
|