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

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"
 	"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)
 	//t.Logf("Starting unmarshal tests of %s", v)
 	b, err := hex.DecodeString(testdata.TestVectors[v])
 	b, err := hex.DecodeString(testdata.TestVectors[v])
 	if err != nil {
 	if err != nil {
@@ -31,62 +25,56 @@ func unmarshal(t *testing.T, v string) KDCReq {
 }
 }
 
 
 func TestUnmarshalASReq_full(t *testing.T) {
 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, 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, 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, "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, 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, "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) {
 func TestUnmarshalASReqDecode_optionalsNULLexceptsecond_ticket(t *testing.T) {
 	//Parse the test time value into a time.Time type
 	//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, 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, "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, 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, []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")
 	assert.Equal(t, 2, len(m.ReqBody.AdditionalTickets), "Number of additional tickets not as expected")
 	for i, tkt := range m.ReqBody.AdditionalTickets {
 	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) {
 func TestUnmarshalASReqDecode_optionalsNULLexceptserver(t *testing.T) {
 	//Parse the test time value into a time.Time type
 	//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, 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, "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, 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, []int{0, 1}, m.ReqBody.EType, "Etype list not as expected")
 }
 }
 
 

+ 13 - 0
testdata/test_vectors.go

@@ -1,5 +1,18 @@
 package testdata
 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
 //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{
 var TestVectors = map[string]string{
 	"encode_krb5_authenticator":                                  "6281A130819EA003020105A1101B0E415448454E412E4D49542E454455A21A3018A003020101A111300F1B066866747361691B056578747261A30F300DA003020101A106040431323334A405020301E240A511180F31393934303631303036303331375AA6133011A003020101A10A04083132333435363738A703020111A8243022300FA003020101A1080406666F6F626172300FA003020101A1080406666F6F626172",
 	"encode_krb5_authenticator":                                  "6281A130819EA003020105A1101B0E415448454E412E4D49542E454455A21A3018A003020101A111300F1B066866747361691B056578747261A30F300DA003020101A106040431323334A405020301E240A511180F31393934303631303036303331375AA6133011A003020101A10A04083132333435363738A703020111A8243022300FA003020101A1080406666F6F626172300FA003020101A1080406666F6F626172",

+ 22 - 30
types/Authenticator_test.go

@@ -9,12 +9,7 @@ import (
 	"time"
 	"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
 	var a Authenticator
 	//t.Logf("Starting unmarshal tests of %s", v)
 	//t.Logf("Starting unmarshal tests of %s", v)
 	b, err := hex.DecodeString(testdata.TestVectors[v])
 	b, err := hex.DecodeString(testdata.TestVectors[v])
@@ -28,16 +23,15 @@ func unmarshal(t *testing.T, v string) Authenticator {
 	return a
 	return a
 }
 }
 func TestUnmarshalAuthenticator(t *testing.T) {
 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
 	//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, 1, a.Cksum.CksumType, "Checksum type not as expected")
 	assert.Equal(t, []byte("1234"), a.Cksum.Checksum, "Checsum 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")
 	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) {
 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
 	//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, 123456, a.Cusec, "Client microseconds not as expected")
 	assert.Equal(t, tt, a.CTime, "Client time not as expected")
 	assert.Equal(t, tt, a.CTime, "Client time not as expected")
 }
 }
 
 
 func TestUnmarshalAuthenticator_optionalsNULL(t *testing.T) {
 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
 	//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, 123456, a.Cusec, "Client microseconds not as expected")
 	assert.Equal(t, tt, a.CTime, "Client time 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"`
 	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) {
 func UnmarshalTicket(b []byte) (t Ticket, err error) {
 	_, err = asn1.UnmarshalWithParams(b, &t, fmt.Sprintf("application,explicit,tag:%d", asnAppTag.Ticket))
 	_, err = asn1.UnmarshalWithParams(b, &t, fmt.Sprintf("application,explicit,tag:%d", asnAppTag.Ticket))
 	return
 	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")
+}