Просмотр исходного кода

ticket unmarshal test and test refactor

Jonathan Turner 9 лет назад
Родитель
Сommit
7919e71b52
5 измененных файлов с 97 добавлено и 68 удалено
  1. 26 38
      messages/KDCReq_test.go
  2. 13 0
      testdata/test_vectors.go
  3. 22 30
      types/Authenticator_test.go
  4. 5 0
      types/Ticket.go
  5. 31 0
      types/Ticket_test.go

+ 26 - 38
messages/KDCReq_test.go

@@ -11,13 +11,7 @@ import (
 	"time"
 )
 
-const (
-	tf      = "20060102150405"
-	trealm  = "ATHENA.MIT.EDU"
-	tcipher = "krbASN.1 test message"
-)
-
-func unmarshal(t *testing.T, v string) KDCReq {
+func unmarshalKDCReq_test(t *testing.T, v string) KDCReq {
 	//t.Logf("Starting unmarshal tests of %s", v)
 	b, err := hex.DecodeString(testdata.TestVectors[v])
 	if err != nil {
@@ -31,62 +25,56 @@ func unmarshal(t *testing.T, v string) KDCReq {
 }
 
 func TestUnmarshalASReq_full(t *testing.T) {
-	//Parse the test time value into a time.Time type
-	//tt, _ := time.Parse(tf, "19940610060317")
-
-	m := unmarshal(t, "encode_krb5_as_req")
+	m := unmarshalKDCReq_test(t, "encode_krb5_as_req")
 	assert.Equal(t, 2, len(m.PAData), "PAData does not have the expected number of entries")
 	assert.Equal(t, 13, m.PAData[0].PADataType, "PADataType of first PAData entry is not as expected")
 	assert.Equal(t, "pa-data", string(m.PAData[0].PADataValue), "PADataValue of first PAData entry is not as expected")
 	assert.Equal(t, 13, m.PAData[1].PADataType, "PADataType of second PAData entry is not as expected")
 	assert.Equal(t, "pa-data", string(m.PAData[1].PADataValue), "PADataValue of second PAData entry is not as expected")
-	assert.Equal(t, 1, m.ReqBody.CName.NameType, "CName NameType not as expected")
-	assert.Equal(t, 2, len(m.ReqBody.CName.NameString), "CName does not have the expected number of NameStrings")
-	assert.Equal(t, "hftsai", m.ReqBody.CName.NameString[0], "CName first entry not as expected")
-	assert.Equal(t, "extra", m.ReqBody.CName.NameString[1], "CName second entry not as expected")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, m.ReqBody.CName.NameType, "CName NameType not as expected")
+	assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(m.ReqBody.CName.NameString), "CName does not have the expected number of NameStrings")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, m.ReqBody.CName.NameString, "CName name strings not as expected")
 }
 
 func TestUnmarshalASReqDecode_optionalsNULLexceptsecond_ticket(t *testing.T) {
 	//Parse the test time value into a time.Time type
-	tt, _ := time.Parse(tf, "19940610060317")
+	tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
 
-	m := unmarshal(t, "encode_krb5_as_req(optionalsNULLexceptsecond_ticket)")
-	assert.Equal(t, 5, m.PVNO, "PVNO not as expected")
+	m := unmarshalKDCReq_test(t, "encode_krb5_as_req(optionalsNULLexceptsecond_ticket)")
+	assert.Equal(t, testdata.TEST_KVNO, m.PVNO, "PVNO not as expected")
 	assert.Equal(t, 10, m.MsgType, "MsgType not as expected")
 	assert.Equal(t, "fedcba98", hex.EncodeToString(m.ReqBody.KDCOptions.Bytes), "KDCOptions in request body not as expected")
-	assert.Equal(t, trealm, m.ReqBody.Realm, "Ticket Realm not as expected")
+	assert.Equal(t, testdata.TEST_REALM, m.ReqBody.Realm, "Ticket Realm not as expected")
 	assert.Equal(t, tt, m.ReqBody.Till, "Till time is not as expected")
-	assert.Equal(t, 42, m.ReqBody.Nonce, "Nonce value is not as expected")
+	assert.Equal(t, testdata.TEST_NONCE, m.ReqBody.Nonce, "Nonce value is not as expected")
 	assert.Equal(t, []int{0, 1}, m.ReqBody.EType, "Etype list not as expected")
 	assert.Equal(t, 2, len(m.ReqBody.AdditionalTickets), "Number of additional tickets not as expected")
 	for i, tkt := range m.ReqBody.AdditionalTickets {
-		assert.Equal(t, 5, tkt.TktVNO, fmt.Sprintf("Additional ticket (%v) ticket-vno not as expected", i+1))
-		assert.Equal(t, trealm, tkt.Realm, fmt.Sprintf("Additional ticket (%v) realm not as expected", i+1))
-		assert.Equal(t, 1, tkt.SName.NameType, fmt.Sprintf("Additional ticket (%v) SName NameType not as expected", i+1))
-		assert.Equal(t, 2, len(tkt.SName.NameString), fmt.Sprintf("Additional ticket (%v) SName does not have the expected number of NameStrings", i+1))
-		assert.Equal(t, "hftsai", tkt.SName.NameString[0], fmt.Sprintf("Additional ticket (%v) SName first entry not as expected", i+1))
-		assert.Equal(t, "extra", tkt.SName.NameString[1], fmt.Sprintf("Additional ticket (%v) SName second entry not as expected", i+1))
-		assert.Equal(t, 0, tkt.EncPart.EType, fmt.Sprintf("Additional ticket (%v) encPart etype not as expected", i+1))
-		assert.Equal(t, 5, tkt.EncPart.KVNO, fmt.Sprintf("Additional ticket (%v) encPart KVNO not as expected", i+1))
-		assert.Equal(t, []byte(tcipher), tkt.EncPart.Cipher, fmt.Sprintf("Additional ticket (%v) encPart etype not as expected", i+1))
+		assert.Equal(t, testdata.TEST_KVNO, tkt.TktVNO, fmt.Sprintf("Additional ticket (%v) ticket-vno not as expected", i+1))
+		assert.Equal(t, testdata.TEST_REALM, tkt.Realm, fmt.Sprintf("Additional ticket (%v) realm not as expected", i+1))
+		assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, tkt.SName.NameType, fmt.Sprintf("Additional ticket (%v) SName NameType not as expected", i+1))
+		assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(tkt.SName.NameString), fmt.Sprintf("Additional ticket (%v) SName does not have the expected number of NameStrings", i+1))
+		assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, tkt.SName.NameString, fmt.Sprintf("Additional ticket (%v) SName name string entries not as expected", i+1))
+		assert.Equal(t, testdata.TEST_ETYPE, tkt.EncPart.EType, fmt.Sprintf("Additional ticket (%v) encPart etype not as expected", i+1))
+		assert.Equal(t, testdata.TEST_KVNO, tkt.EncPart.KVNO, fmt.Sprintf("Additional ticket (%v) encPart KVNO not as expected", i+1))
+		assert.Equal(t, []byte(testdata.TEST_CIPHERTEXT), tkt.EncPart.Cipher, fmt.Sprintf("Additional ticket (%v) encPart cipher not as expected", i+1))
 	}
 }
 
 func TestUnmarshalASReqDecode_optionalsNULLexceptserver(t *testing.T) {
 	//Parse the test time value into a time.Time type
-	tt, _ := time.Parse(tf, "19940610060317")
+	tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
 
-	m := unmarshal(t, "encode_krb5_as_req(optionalsNULLexceptserver)")
-	assert.Equal(t, 5, m.PVNO, "PVNO not as expected")
+	m := unmarshalKDCReq_test(t, "encode_krb5_as_req(optionalsNULLexceptserver)")
+	assert.Equal(t, testdata.TEST_KVNO, m.PVNO, "PVNO not as expected")
 	assert.Equal(t, 10, m.MsgType, "MsgType not as expected")
 	assert.Equal(t, "fedcba90", hex.EncodeToString(m.ReqBody.KDCOptions.Bytes), "KDCOptions in request body not as expected")
-	assert.Equal(t, trealm, m.ReqBody.Realm, "Ticket Realm not as expected")
-	assert.Equal(t, 1, m.ReqBody.SName.NameType, "SName NameType not as expected")
-	assert.Equal(t, 2, len(m.ReqBody.SName.NameString), "SName does not have the expected number of NameStrings")
-	assert.Equal(t, "hftsai", m.ReqBody.SName.NameString[0], "SName first entry not as expected")
-	assert.Equal(t, "extra", m.ReqBody.SName.NameString[1], "SName second entry not as expected")
+	assert.Equal(t, testdata.TEST_REALM, m.ReqBody.Realm, "Ticket Realm not as expected")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, m.ReqBody.SName.NameType, "SName NameType not as expected")
+	assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(m.ReqBody.SName.NameString), "SName does not have the expected number of NameStrings")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, m.ReqBody.SName.NameString, "SName entries not as expected")
 	assert.Equal(t, tt, m.ReqBody.Till, "Till time is not as expected")
-	assert.Equal(t, 42, m.ReqBody.Nonce, "Nonce value is not as expected")
+	assert.Equal(t, testdata.TEST_NONCE, m.ReqBody.Nonce, "Nonce value is not as expected")
 	assert.Equal(t, []int{0, 1}, m.ReqBody.EType, "Etype list not as expected")
 }
 

+ 13 - 0
testdata/test_vectors.go

@@ -1,5 +1,18 @@
 package testdata
 
+const (
+	TEST_REALM                  = "ATHENA.MIT.EDU"
+	TEST_CIPHERTEXT             = "krbASN.1 test message"
+	TEST_TIME_FORMAT            = "20060102150405"
+	TEST_TIME                   = "19940610060317"
+	TEST_PRINCIPALNAME_NAMETYPE = 1
+	TEST_KVNO                   = 5
+	TEST_ETYPE                  = 0
+	TEST_NONCE                  = 42
+)
+
+var TEST_PRINCIPALNAME_NAMESTRING = []string{"hftsai", "extra"}
+
 //The test vectors have been sourced from https://github.com/krb5/krb5/blob/master/src/tests/asn.1/reference_encode.out
 var TestVectors = map[string]string{
 	"encode_krb5_authenticator":                                  "6281A130819EA003020105A1101B0E415448454E412E4D49542E454455A21A3018A003020101A111300F1B066866747361691B056578747261A30F300DA003020101A106040431323334A405020301E240A511180F31393934303631303036303331375AA6133011A003020101A10A04083132333435363738A703020111A8243022300FA003020101A1080406666F6F626172300FA003020101A1080406666F6F626172",

+ 22 - 30
types/Authenticator_test.go

@@ -9,12 +9,7 @@ import (
 	"time"
 )
 
-const (
-	tf     = "20060102150405"
-	trealm = "ATHENA.MIT.EDU"
-)
-
-func unmarshal(t *testing.T, v string) Authenticator {
+func unmarshalAuthenticator_test(t *testing.T, v string) Authenticator {
 	var a Authenticator
 	//t.Logf("Starting unmarshal tests of %s", v)
 	b, err := hex.DecodeString(testdata.TestVectors[v])
@@ -28,16 +23,15 @@ func unmarshal(t *testing.T, v string) Authenticator {
 	return a
 }
 func TestUnmarshalAuthenticator(t *testing.T) {
-	a := unmarshal(t, "encode_krb5_authenticator")
+	a := unmarshalAuthenticator_test(t, "encode_krb5_authenticator")
 	//Parse the test time value into a time.Time type
-	tt, _ := time.Parse(tf, "19940610060317")
+	tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
 
-	assert.Equal(t, 5, a.AVNO, "Authenticator version number not as expected")
-	assert.Equal(t, trealm, a.CRealm, "CRealm not as expected")
-	assert.Equal(t, 1, a.CName.NameType, "CName NameType not as expected")
-	assert.Equal(t, 2, len(a.CName.NameString), "CName does not have the expected number of NameStrings")
-	assert.Equal(t, "hftsai", a.CName.NameString[0], "CName first entry not as expected")
-	assert.Equal(t, "extra", a.CName.NameString[1], "CName second entry not as expected")
+	assert.Equal(t, testdata.TEST_KVNO, a.AVNO, "Authenticator version number not as expected")
+	assert.Equal(t, testdata.TEST_REALM, a.CRealm, "CRealm not as expected")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, a.CName.NameType, "CName NameType not as expected")
+	assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.CName.NameString), "CName does not have the expected number of NameStrings")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.CName.NameString, "CName entries not as expected")
 	assert.Equal(t, 1, a.Cksum.CksumType, "Checksum type not as expected")
 	assert.Equal(t, []byte("1234"), a.Cksum.Checksum, "Checsum not as expected")
 	assert.Equal(t, 123456, a.Cusec, "Client microseconds not as expected")
@@ -52,31 +46,29 @@ func TestUnmarshalAuthenticator(t *testing.T) {
 }
 
 func TestUnmarshalAuthenticator_optionalsempty(t *testing.T) {
-	a := unmarshal(t, "encode_krb5_authenticator(optionalsempty)")
+	a := unmarshalAuthenticator_test(t, "encode_krb5_authenticator(optionalsempty)")
 	//Parse the test time value into a time.Time type
-	tt, _ := time.Parse(tf, "19940610060317")
+	tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
 
-	assert.Equal(t, 5, a.AVNO, "Authenticator version number not as expected")
-	assert.Equal(t, trealm, a.CRealm, "CRealm not as expected")
-	assert.Equal(t, 1, a.CName.NameType, "CName NameType not as expected")
-	assert.Equal(t, 2, len(a.CName.NameString), "CName does not have the expected number of NameStrings")
-	assert.Equal(t, "hftsai", a.CName.NameString[0], "CName first entry not as expected")
-	assert.Equal(t, "extra", a.CName.NameString[1], "CName second entry not as expected")
+	assert.Equal(t, testdata.TEST_KVNO, a.AVNO, "Authenticator version number not as expected")
+	assert.Equal(t, testdata.TEST_REALM, a.CRealm, "CRealm not as expected")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, a.CName.NameType, "CName NameType not as expected")
+	assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.CName.NameString), "CName does not have the expected number of NameStrings")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.CName.NameString, "CName entries not as expected")
 	assert.Equal(t, 123456, a.Cusec, "Client microseconds not as expected")
 	assert.Equal(t, tt, a.CTime, "Client time not as expected")
 }
 
 func TestUnmarshalAuthenticator_optionalsNULL(t *testing.T) {
-	a := unmarshal(t, "encode_krb5_authenticator(optionalsNULL)")
+	a := unmarshalAuthenticator_test(t, "encode_krb5_authenticator(optionalsNULL)")
 	//Parse the test time value into a time.Time type
-	tt, _ := time.Parse(tf, "19940610060317")
+	tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
 
-	assert.Equal(t, 5, a.AVNO, "Authenticator version number not as expected")
-	assert.Equal(t, trealm, a.CRealm, "CRealm not as expected")
-	assert.Equal(t, 1, a.CName.NameType, "CName NameType not as expected")
-	assert.Equal(t, 2, len(a.CName.NameString), "CName does not have the expected number of NameStrings")
-	assert.Equal(t, "hftsai", a.CName.NameString[0], "CName first entry not as expected")
-	assert.Equal(t, "extra", a.CName.NameString[1], "CName second entry not as expected")
+	assert.Equal(t, testdata.TEST_KVNO, a.AVNO, "Authenticator version number not as expected")
+	assert.Equal(t, testdata.TEST_REALM, a.CRealm, "CRealm not as expected")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, a.CName.NameType, "CName NameType not as expected")
+	assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.CName.NameString), "CName does not have the expected number of NameStrings")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.CName.NameString, "CName entries not as expected")
 	assert.Equal(t, 123456, a.Cusec, "Client microseconds not as expected")
 	assert.Equal(t, tt, a.CTime, "Client time not as expected")
 }

+ 5 - 0
types/Ticket.go

@@ -36,6 +36,11 @@ type TransitedEncoding struct {
 	Contents []byte `asn1:"explicit,tag:1"`
 }
 
+func (t *Ticket) Unmarshal(b []byte) error {
+	_, err := asn1.UnmarshalWithParams(b, t, fmt.Sprintf("application,explicit,tag:%d", asnAppTag.Ticket))
+	return err
+}
+
 func UnmarshalTicket(b []byte) (t Ticket, err error) {
 	_, err = asn1.UnmarshalWithParams(b, &t, fmt.Sprintf("application,explicit,tag:%d", asnAppTag.Ticket))
 	return

+ 31 - 0
types/Ticket_test.go

@@ -0,0 +1,31 @@
+package types
+
+import (
+	"encoding/hex"
+	"github.com/jcmturner/gokrb5/testdata"
+	"github.com/stretchr/testify/assert"
+	"testing"
+)
+
+func TestUnmarshalTicket(t *testing.T) {
+	var a Ticket
+	v := "encode_krb5_ticket"
+	//t.Logf("Starting unmarshal tests of %s", v)
+	b, err := hex.DecodeString(testdata.TestVectors[v])
+	if err != nil {
+		t.Fatalf("Test vector read error of %s: %v\n", v, err)
+	}
+	err = a.Unmarshal(b)
+	if err != nil {
+		t.Fatalf("Unmarshal error of %s: %v\n", v, err)
+	}
+
+	assert.Equal(t, testdata.TEST_KVNO, a.TktVNO, "Ticket version number not as expected")
+	assert.Equal(t, testdata.TEST_REALM, a.Realm, "Realm not as expected")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, a.SName.NameType, "CName NameType not as expected")
+	assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.SName.NameString), "SName does not have the expected number of NameStrings")
+	assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.SName.NameString, "SName name strings not as expected")
+	assert.Equal(t, testdata.TEST_ETYPE, a.EncPart.EType, "Etype of Ticket EncPart not as expected")
+	assert.Equal(t, testdata.TEST_KVNO, a.EncPart.KVNO, "KNVO of Ticket EncPart not as expected")
+	assert.Equal(t, []byte(testdata.TEST_CIPHERTEXT), a.EncPart.Cipher, "Cipher of Ticket EncPart not as expected")
+}