client_claims_test.go 8.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143
  1. package pac
  2. import (
  3. "encoding/hex"
  4. "testing"
  5. "github.com/stretchr/testify/assert"
  6. "gopkg.in/jcmturner/gokrb5.v7/test/testdata"
  7. "gopkg.in/jcmturner/rpc.v1/mstypes"
  8. )
  9. const (
  10. ClaimsEntryIDStr = "ad://ext/sAMAccountName:88d5d9085ea5c0c0"
  11. ClaimsEntryValueStr = "testuser1"
  12. ClaimsEntryIDInt64 = "ad://ext/msDS-SupportedE:88d5dea8f1af5f19"
  13. ClaimsEntryValueInt64 int64 = 28
  14. ClaimsEntryIDUInt64 = "ad://ext/objectClass:88d5de791e7b27e6"
  15. )
  16. func TestPAC_ClientClaimsInfoStr_Unmarshal(t *testing.T) {
  17. t.Parallel()
  18. b, err := hex.DecodeString(testdata.MarshaledPAC_ClientClaimsInfoStr)
  19. if err != nil {
  20. t.Fatal("Could not decode test data hex string")
  21. }
  22. var k ClientClaimsInfo
  23. err = k.Unmarshal(b)
  24. if err != nil {
  25. t.Fatalf("Error unmarshaling test data: %v", err)
  26. }
  27. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrayCount, "claims array count not as expected")
  28. assert.Equal(t, mstypes.ClaimsSourceTypeAD, k.ClaimsSet.ClaimsArrays[0].ClaimsSourceType, "claims source type not as expected")
  29. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrays[0].ClaimsCount, "claims count not as expected")
  30. assert.Equal(t, uint16(3), k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].Type, "claims entry type not as expected")
  31. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeString.ValueCount, "claims value count not as expected")
  32. assert.Equal(t, ClaimsEntryIDStr, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].ID, "claims entry ID not as expected")
  33. assert.Equal(t, []mstypes.LPWSTR{{Value: ClaimsEntryValueStr}}, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeString.Value, "claims value not as expected")
  34. assert.Equal(t, mstypes.CompressionFormatNone, k.ClaimsSetMetadata.CompressionFormat, "compression format not as expected")
  35. }
  36. func TestPAC_ClientClaimsMultiValueUint_Unmarshal(t *testing.T) {
  37. t.Parallel()
  38. b, err := hex.DecodeString(testdata.MarshaledPAC_ClientClaimsInfoMultiUint)
  39. if err != nil {
  40. t.Fatal("Could not decode test data hex string")
  41. }
  42. var k ClientClaimsInfo
  43. err = k.Unmarshal(b)
  44. if err != nil {
  45. t.Fatalf("Error unmarshaling test data: %v", err)
  46. }
  47. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrayCount, "claims array count not as expected")
  48. assert.Equal(t, mstypes.ClaimsSourceTypeAD, k.ClaimsSet.ClaimsArrays[0].ClaimsSourceType, "claims source type not as expected")
  49. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrays[0].ClaimsCount, "claims count not as expected")
  50. assert.Equal(t, mstypes.ClaimTypeIDUInt64, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].Type, "claims entry type not as expected")
  51. assert.Equal(t, uint32(4), k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeUInt64.ValueCount, "claims value count not as expected")
  52. assert.Equal(t, ClaimsEntryIDUInt64, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].ID, "claims entry ID not as expected")
  53. assert.Equal(t, []uint64{655369, 65543, 65542, 65536}, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeUInt64.Value, "claims value not as expected")
  54. assert.Equal(t, mstypes.CompressionFormatNone, k.ClaimsSetMetadata.CompressionFormat, "compression format not as expected")
  55. }
  56. func TestPAC_ClientClaimsInt_Unmarshal(t *testing.T) {
  57. t.Parallel()
  58. b, err := hex.DecodeString(testdata.MarshaledPAC_ClientClaimsInfoInt)
  59. if err != nil {
  60. t.Fatal("Could not decode test data hex string")
  61. }
  62. var k ClientClaimsInfo
  63. err = k.Unmarshal(b)
  64. if err != nil {
  65. t.Fatalf("Error unmarshaling test data: %v", err)
  66. }
  67. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrayCount, "claims array count not as expected")
  68. assert.Equal(t, mstypes.ClaimsSourceTypeAD, k.ClaimsSet.ClaimsArrays[0].ClaimsSourceType, "claims source type not as expected")
  69. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrays[0].ClaimsCount, "claims count not as expected")
  70. assert.Equal(t, mstypes.ClaimTypeIDInt64, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].Type, "claims entry type not as expected")
  71. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeInt64.ValueCount, "claims value count not as expected")
  72. assert.Equal(t, ClaimsEntryIDInt64, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].ID, "claims entry ID not as expected")
  73. assert.Equal(t, []int64{ClaimsEntryValueInt64}, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeInt64.Value, "claims value not as expected")
  74. assert.Equal(t, mstypes.CompressionFormatNone, k.ClaimsSetMetadata.CompressionFormat, "compression format not as expected")
  75. }
  76. func TestPAC_ClientClaimsMultiValueStr_Unmarshal(t *testing.T) {
  77. t.Parallel()
  78. b, err := hex.DecodeString(testdata.MarshaledPAC_ClientClaimsInfoMultiStr)
  79. if err != nil {
  80. t.Fatal("Could not decode test data hex string")
  81. }
  82. var k ClientClaimsInfo
  83. err = k.Unmarshal(b)
  84. if err != nil {
  85. t.Fatalf("Error unmarshaling test data: %v", err)
  86. }
  87. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrayCount, "claims array count not as expected")
  88. assert.Equal(t, mstypes.ClaimsSourceTypeAD, k.ClaimsSet.ClaimsArrays[0].ClaimsSourceType, "claims source type not as expected")
  89. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrays[0].ClaimsCount, "claims count not as expected")
  90. assert.Equal(t, mstypes.ClaimTypeIDString, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].Type, "claims entry type not as expected")
  91. assert.Equal(t, uint32(4), k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeString.ValueCount, "claims value count not as expected")
  92. assert.Equal(t, "ad://ext/otherIpPhone:88d5de9f6b4af985", k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].ID, "claims entry ID not as expected")
  93. assert.Equal(t, []mstypes.LPWSTR{{Value: "str1"}, {Value: "str2"}, {Value: "str3"}, {Value: "str4"}}, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeString.Value, "claims value not as expected")
  94. assert.Equal(t, mstypes.CompressionFormatNone, k.ClaimsSetMetadata.CompressionFormat, "compression format not as expected")
  95. }
  96. func TestPAC_ClientClaimsInfoMultiEntry_Unmarshal(t *testing.T) {
  97. // Has an int and a str claim type
  98. t.Parallel()
  99. b, err := hex.DecodeString(testdata.MarshaledPAC_ClientClaimsInfoMulti)
  100. if err != nil {
  101. t.Fatal("Could not decode test data hex string")
  102. }
  103. var k ClientClaimsInfo
  104. err = k.Unmarshal(b)
  105. if err != nil {
  106. t.Fatalf("Error unmarshaling test data: %v", err)
  107. }
  108. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrayCount, "claims array count not as expected")
  109. assert.Equal(t, mstypes.ClaimsSourceTypeAD, k.ClaimsSet.ClaimsArrays[0].ClaimsSourceType, "claims source type not as expected")
  110. assert.Equal(t, uint32(2), k.ClaimsSet.ClaimsArrays[0].ClaimsCount, "claims count not as expected")
  111. assert.Equal(t, uint16(1), k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].Type, "claims entry type not as expected")
  112. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeInt64.ValueCount, "claims value count not as expected")
  113. assert.Equal(t, ClaimsEntryIDInt64, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].ID, "claims entry ID not as expected")
  114. assert.Equal(t, []int64{int64(28)}, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[0].TypeInt64.Value, "claims value not as expected")
  115. assert.Equal(t, uint16(3), k.ClaimsSet.ClaimsArrays[0].ClaimEntries[1].Type, "claims entry type not as expected")
  116. assert.Equal(t, uint32(1), k.ClaimsSet.ClaimsArrays[0].ClaimEntries[1].TypeString.ValueCount, "claims value count not as expected")
  117. assert.Equal(t, ClaimsEntryIDStr, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[1].ID, "claims entry ID not as expected")
  118. assert.Equal(t, []mstypes.LPWSTR{{Value: ClaimsEntryValueStr}}, k.ClaimsSet.ClaimsArrays[0].ClaimEntries[1].TypeString.Value, "claims value not as expected")
  119. assert.Equal(t, mstypes.CompressionFormatNone, k.ClaimsSetMetadata.CompressionFormat, "compression format not as expected")
  120. }
  121. // Compressed claims not yet supported.
  122. //func TestPAC_ClientClaimsInfo_Unmarshal_UnsupportedCompression(t *testing.T) {
  123. // t.Parallel()
  124. // b, err := hex.DecodeString(testdata.MarshaledPAC_ClientClaimsInfo_XPRESS_HUFF)
  125. // if err != nil {
  126. // t.Fatal("Could not decode test data hex string")
  127. // }
  128. // var k ClientClaimsInfo
  129. // err = k.Unmarshal(b)
  130. // if err != nil {
  131. // t.Fatalf("Error unmarshaling test data: %v", err)
  132. // }
  133. // assert.Equal(t, mstypes.CompressionFormatXPressHuff, k.ClaimsSetMetadata.CompressionFormat, "compression format not as expected")
  134. //}