Authenticator_test.go 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899
  1. package types
  2. import (
  3. "encoding/hex"
  4. "fmt"
  5. "testing"
  6. "time"
  7. "github.com/stretchr/testify/assert"
  8. "gopkg.in/jcmturner/gokrb5.v7/iana"
  9. "gopkg.in/jcmturner/gokrb5.v7/iana/adtype"
  10. "gopkg.in/jcmturner/gokrb5.v7/iana/nametype"
  11. "gopkg.in/jcmturner/gokrb5.v7/test/testdata"
  12. )
  13. func unmarshalAuthenticatorTest(t *testing.T, v string) Authenticator {
  14. var a Authenticator
  15. //t.Logf("Starting unmarshal tests of %s", v)
  16. b, err := hex.DecodeString(v)
  17. if err != nil {
  18. t.Fatalf("Test vector read error: %v", err)
  19. }
  20. err = a.Unmarshal(b)
  21. if err != nil {
  22. t.Fatalf("Unmarshal error: %v", err)
  23. }
  24. return a
  25. }
  26. func TestUnmarshalAuthenticator(t *testing.T) {
  27. t.Parallel()
  28. a := unmarshalAuthenticatorTest(t, testdata.MarshaledKRB5authenticator)
  29. //Parse the test time value into a time.Time type
  30. tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
  31. assert.Equal(t, iana.PVNO, a.AVNO, "Authenticator version number not as expected")
  32. assert.Equal(t, testdata.TEST_REALM, a.CRealm, "CRealm not as expected")
  33. assert.Equal(t, nametype.KRB_NT_PRINCIPAL, a.CName.NameType, "CName NameType not as expected")
  34. assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.CName.NameString), "CName does not have the expected number of NameStrings")
  35. assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.CName.NameString, "CName entries not as expected")
  36. assert.Equal(t, int32(1), a.Cksum.CksumType, "Checksum type not as expected")
  37. assert.Equal(t, []byte("1234"), a.Cksum.Checksum, "Checsum not as expected")
  38. assert.Equal(t, 123456, a.Cusec, "Client microseconds not as expected")
  39. assert.Equal(t, tt, a.CTime, "Client time not as expected")
  40. assert.Equal(t, int32(1), a.SubKey.KeyType, "Subkey type not as expected")
  41. assert.Equal(t, []byte("12345678"), a.SubKey.KeyValue, "Subkey value not as expected")
  42. assert.Equal(t, 2, len(a.AuthorizationData), "Number of Authorization data items not as expected")
  43. for i, entry := range a.AuthorizationData {
  44. assert.Equal(t, adtype.ADIfRelevant, entry.ADType, fmt.Sprintf("Authorization type of entry %d not as expected", i+1))
  45. assert.Equal(t, []byte(testdata.TEST_AUTHORIZATION_DATA_VALUE), entry.ADData, fmt.Sprintf("Authorization data of entry %d not as expected", i+1))
  46. }
  47. }
  48. func TestUnmarshalAuthenticator_optionalsempty(t *testing.T) {
  49. t.Parallel()
  50. a := unmarshalAuthenticatorTest(t, testdata.MarshaledKRB5authenticatorOptionalsEmpty)
  51. //Parse the test time value into a time.Time type
  52. tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
  53. assert.Equal(t, iana.PVNO, a.AVNO, "Authenticator version number not as expected")
  54. assert.Equal(t, testdata.TEST_REALM, a.CRealm, "CRealm not as expected")
  55. assert.Equal(t, nametype.KRB_NT_PRINCIPAL, a.CName.NameType, "CName NameType not as expected")
  56. assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.CName.NameString), "CName does not have the expected number of NameStrings")
  57. assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.CName.NameString, "CName entries not as expected")
  58. assert.Equal(t, 123456, a.Cusec, "Client microseconds not as expected")
  59. assert.Equal(t, tt, a.CTime, "Client time not as expected")
  60. }
  61. func TestUnmarshalAuthenticator_optionalsNULL(t *testing.T) {
  62. t.Parallel()
  63. a := unmarshalAuthenticatorTest(t, testdata.MarshaledKRB5authenticatorOptionalsNULL)
  64. //Parse the test time value into a time.Time type
  65. tt, _ := time.Parse(testdata.TEST_TIME_FORMAT, testdata.TEST_TIME)
  66. assert.Equal(t, iana.PVNO, a.AVNO, "Authenticator version number not as expected")
  67. assert.Equal(t, testdata.TEST_REALM, a.CRealm, "CRealm not as expected")
  68. assert.Equal(t, nametype.KRB_NT_PRINCIPAL, a.CName.NameType, "CName NameType not as expected")
  69. assert.Equal(t, len(testdata.TEST_PRINCIPALNAME_NAMESTRING), len(a.CName.NameString), "CName does not have the expected number of NameStrings")
  70. assert.Equal(t, testdata.TEST_PRINCIPALNAME_NAMESTRING, a.CName.NameString, "CName entries not as expected")
  71. assert.Equal(t, 123456, a.Cusec, "Client microseconds not as expected")
  72. assert.Equal(t, tt, a.CTime, "Client time not as expected")
  73. }
  74. func TestMarshalAuthenticator(t *testing.T) {
  75. t.Parallel()
  76. var a Authenticator
  77. b, err := hex.DecodeString(testdata.MarshaledKRB5authenticator)
  78. if err != nil {
  79. t.Fatalf("Test vector read error: %v", err)
  80. }
  81. err = a.Unmarshal(b)
  82. if err != nil {
  83. t.Fatalf("Unmarshal error: %v", err)
  84. }
  85. mb, err := a.Marshal()
  86. if err != nil {
  87. t.Fatalf("Marshal of ticket errored: %v", err)
  88. }
  89. assert.Equal(t, b, mb, "Marshal bytes of Authenticator not as expected")
  90. }