Authenticator_test.go 4.5 KB

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