|
|
@@ -1,23 +1,69 @@
|
|
|
package messages
|
|
|
|
|
|
+import (
|
|
|
+ "encoding/hex"
|
|
|
+ "github.com/jcmturner/gokrb5/testdata"
|
|
|
+ "github.com/jcmturner/gokrb5/types"
|
|
|
+ "github.com/stretchr/testify/assert"
|
|
|
+ "testing"
|
|
|
+ "time"
|
|
|
+)
|
|
|
|
|
|
-/*
|
|
|
-KRB-ERROR ::= [APPLICATION 30] SEQUENCE {
|
|
|
- pvno [0] INTEGER (5),
|
|
|
- msg-type [1] INTEGER (30),
|
|
|
- ctime [2] KerberosTime OPTIONAL,
|
|
|
- cusec [3] Microseconds OPTIONAL,
|
|
|
- stime [4] KerberosTime,
|
|
|
- susec [5] Microseconds,
|
|
|
- error-code [6] Int32,
|
|
|
- crealm [7] Realm OPTIONAL,
|
|
|
- cname [8] PrincipalName OPTIONAL,
|
|
|
- realm [9] Realm -- service realm --,
|
|
|
- sname [10] PrincipalName -- service name --,
|
|
|
- e-text [11] KerberosString OPTIONAL,
|
|
|
- e-data [12] OCTET STRING OPTIONAL
|
|
|
+func TestUnmarshalKRBError(t *testing.T) {
|
|
|
+ var a KRBError
|
|
|
+ v := "encode_krb5_error"
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+ //Parse the test time value into a time.Time type
|
|
|
+ tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
|
|
|
+
|
|
|
+ assert.Equal(t, testdata.TEST_KVNO, a.PVNO, "PVNO is not as expected")
|
|
|
+ assert.Equal(t, types.KrbDictionary.MsgTypesByName["KRB_ERROR"], a.MsgType, "Message type is not as expected")
|
|
|
+ assert.Equal(t, tt, a.CTime, "CTime not as expected")
|
|
|
+ assert.Equal(t, 123456, a.Cusec, "Client microseconds not as expected")
|
|
|
+ assert.Equal(t, tt, a.STime, "STime not as expected")
|
|
|
+ assert.Equal(t, 123456, a.Susec, "Service microseconds not as expected")
|
|
|
+ assert.Equal(t, 60, a.ErrorCode, "Error code 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, testdata.TEST_REALM, a.Realm, "Realm not as expected")
|
|
|
+ assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, a.SName.NameType, "Ticket SName NameType not as expected")
|
|
|
+ assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.SName.NameString), "Ticket SName does not have the expected number of NameStrings")
|
|
|
+ assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.SName.NameString, "Ticket SName name string entries not as expected")
|
|
|
+ assert.Equal(t, "krb5data", a.EText, "EText not as expected")
|
|
|
+ assert.Equal(t, []byte("krb5data"), a.EData, "EData not as expected")
|
|
|
}
|
|
|
-*/
|
|
|
|
|
|
-//encode_krb5_error
|
|
|
-//encode_krb5_error(optionalsNULL)
|
|
|
+func TestUnmarshalKRBError_optionalsNULL(t *testing.T) {
|
|
|
+ var a KRBError
|
|
|
+ v := "encode_krb5_error(optionalsNULL)"
|
|
|
+ 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)
|
|
|
+ }
|
|
|
+ //Parse the test time value into a time.Time type
|
|
|
+ tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
|
|
|
+
|
|
|
+ assert.Equal(t, testdata.TEST_KVNO, a.PVNO, "PVNO is not as expected")
|
|
|
+ assert.Equal(t, types.KrbDictionary.MsgTypesByName["KRB_ERROR"], a.MsgType, "Message type is not as expected")
|
|
|
+ assert.Equal(t, 123456, a.Cusec, "Client microseconds not as expected")
|
|
|
+ assert.Equal(t, tt, a.STime, "STime not as expected")
|
|
|
+ assert.Equal(t, 123456, a.Susec, "Service microseconds not as expected")
|
|
|
+ assert.Equal(t, 60, a.ErrorCode, "Error code 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, "Ticket SName NameType not as expected")
|
|
|
+ assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.SName.NameString), "Ticket SName does not have the expected number of NameStrings")
|
|
|
+ assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.SName.NameString, "Ticket SName name string entries not as expected")
|
|
|
+}
|