Ticket_test.go 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113
  1. package types
  2. import (
  3. "encoding/hex"
  4. "github.com/jcmturner/gokrb5/testdata"
  5. "github.com/stretchr/testify/assert"
  6. "testing"
  7. "time"
  8. "fmt"
  9. )
  10. func TestUnmarshalTicket(t *testing.T) {
  11. var a Ticket
  12. v := "encode_krb5_ticket"
  13. b, err := hex.DecodeString(testdata.TestVectors[v])
  14. if err != nil {
  15. t.Fatalf("Test vector read error of %s: %v\n", v, err)
  16. }
  17. err = a.Unmarshal(b)
  18. if err != nil {
  19. t.Fatalf("Unmarshal error of %s: %v\n", v, err)
  20. }
  21. assert.Equal(t, testdata.TEST_KVNO, a.TktVNO, "Ticket version number not as expected")
  22. assert.Equal(t, testdata.TEST_REALM, a.Realm, "Realm not as expected")
  23. assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, a.SName.NameType, "CName NameType not as expected")
  24. assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.SName.NameString), "SName does not have the expected number of NameStrings")
  25. assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.SName.NameString, "SName name strings not as expected")
  26. assert.Equal(t, testdata.TEST_ETYPE, a.EncPart.EType, "Etype of Ticket EncPart not as expected")
  27. assert.Equal(t, testdata.TEST_KVNO, a.EncPart.KVNO, "KNVO of Ticket EncPart not as expected")
  28. assert.Equal(t, []byte(testdata.TEST_CIPHERTEXT), a.EncPart.Cipher, "Cipher of Ticket EncPart not as expected")
  29. }
  30. func TestUnmarshalEncTicketPart(t *testing.T) {
  31. var a EncTicketPart
  32. v := "encode_krb5_enc_tkt_part"
  33. b, err := hex.DecodeString(testdata.TestVectors[v])
  34. if err != nil {
  35. t.Fatalf("Test vector read error of %s: %v\n", v, err)
  36. }
  37. err = a.Unmarshal(b)
  38. if err != nil {
  39. t.Fatalf("Unmarshal error of %s: %v\n", v, err)
  40. }
  41. //Parse the test time value into a time.Time type
  42. tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
  43. assert.Equal(t, "fedcba98", hex.EncodeToString(a.Flags.Bytes), "Flags not as expected")
  44. assert.Equal(t, 1, a.Key.KeyType, "Key type not as expected")
  45. assert.Equal(t, []byte("12345678"), a.Key.KeyValue, "Key value not as expected")
  46. assert.Equal(t, testdata.TEST_REALM, a.CRealm, "CRealm not as expected")
  47. assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, a.CName.NameType, "CName type not as expected")
  48. assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.CName.NameString, "CName string entries not as expected")
  49. assert.Equal(t, 1, a.Transited.TRType, "Transisted type not as expected")
  50. assert.Equal(t, []byte("EDU,MIT.,ATHENA.,WASHINGTON.EDU,CS."), a.Transited.Contents, "Transisted content not as expected")
  51. assert.Equal(t, tt, a.AuthTime, "Auth time not as expected")
  52. assert.Equal(t, tt, a.StartTime, "Start time not as expected")
  53. assert.Equal(t, tt, a.EndTime, "End time not as expected")
  54. assert.Equal(t, tt, a.RenewTill, "Renew Till time not as expected")
  55. assert.Equal(t, 2, len(a.CAddr), "Number of client addresses not as expected")
  56. for i, addr := range a.CAddr {
  57. assert.Equal(t, 2, addr.AddrType, fmt.Sprintf("Host address type not as expected for address item %d", i+1))
  58. assert.Equal(t, "12d00023", hex.EncodeToString(addr.Address), fmt.Sprintf("Host address not as expected for address item %d", i+1))
  59. }
  60. for i, ele := range a.AuthorizationData{
  61. assert.Equal(t, 1, ele.ADType, fmt.Sprintf("Authorization data type of element %d not as expected", i+1))
  62. assert.Equal(t, []byte(testdata.TEST_AUTHORIZATION_DATA_VALUE), ele.ADData, fmt.Sprintf("Authorization data of element %d not as expected", i+1))
  63. }
  64. }
  65. func TestUnmarshalEncTicketPart_optionalsNULL(t *testing.T) {
  66. var a EncTicketPart
  67. v := "encode_krb5_enc_tkt_part(optionalsNULL)"
  68. b, err := hex.DecodeString(testdata.TestVectors[v])
  69. if err != nil {
  70. t.Fatalf("Test vector read error of %s: %v\n", v, err)
  71. }
  72. err = a.Unmarshal(b)
  73. if err != nil {
  74. t.Fatalf("Unmarshal error of %s: %v\n", v, err)
  75. }
  76. //Parse the test time value into a time.Time type
  77. tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
  78. assert.Equal(t, "fedcba98", hex.EncodeToString(a.Flags.Bytes), "Flags not as expected")
  79. assert.Equal(t, 1, a.Key.KeyType, "Key type not as expected")
  80. assert.Equal(t, []byte("12345678"), a.Key.KeyValue, "Key value not as expected")
  81. assert.Equal(t, testdata.TEST_REALM, a.CRealm, "CRealm not as expected")
  82. assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMETYPE, a.CName.NameType, "CName type not as expected")
  83. assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.CName.NameString, "CName string entries not as expected")
  84. assert.Equal(t, 1, a.Transited.TRType, "Transisted type not as expected")
  85. assert.Equal(t, []byte("EDU,MIT.,ATHENA.,WASHINGTON.EDU,CS."), a.Transited.Contents, "Transisted content not as expected")
  86. assert.Equal(t, tt, a.AuthTime, "Auth time not as expected")
  87. assert.Equal(t, tt, a.EndTime, "End time not as expected")
  88. }
  89. func TestMarshalTicket(t *testing.T) {
  90. var a Ticket
  91. v := "encode_krb5_ticket"
  92. b, err := hex.DecodeString(testdata.TestVectors[v])
  93. if err != nil {
  94. t.Fatalf("Test vector read error of %s: %v\n", v, err)
  95. }
  96. err = a.Unmarshal(b)
  97. if err != nil {
  98. t.Fatalf("Unmarshal error of %s: %v\n", v, err)
  99. }
  100. mb, err := a.Marshal()
  101. if err != nil {
  102. t.Fatalf("Marshal of ticket errored: %v", err)
  103. }
  104. assert.Equal(t, b, mb, "Marshalled bytes not as expected")
  105. }