ccache_test.go 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118
  1. package credentials
  2. import (
  3. "encoding/hex"
  4. "github.com/stretchr/testify/assert"
  5. "gopkg.in/jcmturner/gokrb5.v2/iana/nametype"
  6. "gopkg.in/jcmturner/gokrb5.v2/testdata"
  7. "gopkg.in/jcmturner/gokrb5.v2/types"
  8. "testing"
  9. )
  10. func TestParse(t *testing.T) {
  11. b, err := hex.DecodeString(testdata.CCACHE_TEST)
  12. if err != nil {
  13. t.Fatal("Error decoding test data")
  14. }
  15. c, err := ParseCCache(b)
  16. if err != nil {
  17. t.Fatalf("Error parsing cache: %v", err)
  18. }
  19. assert.Equal(t, uint8(4), c.Version, "Version not as expected")
  20. assert.Equal(t, 1, len(c.Header.fields), "Number of header fields not as expected")
  21. assert.Equal(t, uint16(1), c.Header.fields[0].tag, "Header tag not as expected")
  22. assert.Equal(t, uint16(8), c.Header.fields[0].length, "Length of header not as expected")
  23. assert.Equal(t, "TEST.GOKRB5", c.DefaultPrincipal.Realm, "Default client principal realm not as expected")
  24. assert.Equal(t, "testuser1", c.DefaultPrincipal.PrincipalName.GetPrincipalNameString(), "Default client principaal name not as expected")
  25. assert.Equal(t, 3, len(c.Credentials), "Number of credentials not as expected")
  26. tgtpn := types.PrincipalName{
  27. NameType: nametype.KRB_NT_SRV_INST,
  28. NameString: []string{"krbtgt", "TEST.GOKRB5"},
  29. }
  30. assert.True(t, c.Contains(tgtpn), "Cache does not contain TGT credential")
  31. httppn := types.PrincipalName{
  32. NameType: nametype.KRB_NT_PRINCIPAL,
  33. NameString: []string{"HTTP", "host.test.gokrb5"},
  34. }
  35. assert.True(t, c.Contains(httppn), "Cache does not contain HTTP SPN credential")
  36. }
  37. func TestCCache_GetClientPrincipalName(t *testing.T) {
  38. b, err := hex.DecodeString(testdata.CCACHE_TEST)
  39. if err != nil {
  40. t.Fatal("Error decoding test data")
  41. }
  42. c, err := ParseCCache(b)
  43. if err != nil {
  44. t.Fatalf("Error parsing cache: %v", err)
  45. }
  46. pn := types.PrincipalName{
  47. NameType: nametype.KRB_NT_PRINCIPAL,
  48. NameString: []string{"testuser1"},
  49. }
  50. assert.Equal(t, pn, c.GetClientPrincipalName(), "Client PrincipalName not as expected")
  51. }
  52. func TestCCache_GetClientCredentials(t *testing.T) {
  53. b, err := hex.DecodeString(testdata.CCACHE_TEST)
  54. if err != nil {
  55. t.Fatal("Error decoding test data")
  56. }
  57. c, err := ParseCCache(b)
  58. if err != nil {
  59. t.Fatalf("Error parsing cache: %v", err)
  60. }
  61. pn := types.PrincipalName{
  62. NameType: nametype.KRB_NT_PRINCIPAL,
  63. NameString: []string{"testuser1"},
  64. }
  65. cred := c.GetClientCredentials()
  66. assert.Equal(t, "TEST.GOKRB5", cred.Realm, "Client realm in credential not as expected")
  67. assert.Equal(t, pn, cred.CName, "Client Principal Name not as expected")
  68. assert.Equal(t, "testuser1", cred.Username, "Username not as expected")
  69. }
  70. func TestCCache_GetClientRealm(t *testing.T) {
  71. b, err := hex.DecodeString(testdata.CCACHE_TEST)
  72. if err != nil {
  73. t.Fatal("Error decoding test data")
  74. }
  75. c, err := ParseCCache(b)
  76. if err != nil {
  77. t.Fatalf("Error parsing cache: %v", err)
  78. }
  79. assert.Equal(t, "TEST.GOKRB5", c.GetClientRealm(), "Client realm not as expected")
  80. }
  81. func TestCCache_GetEntry(t *testing.T) {
  82. b, err := hex.DecodeString(testdata.CCACHE_TEST)
  83. if err != nil {
  84. t.Fatal("Error decoding test data")
  85. }
  86. c, err := ParseCCache(b)
  87. if err != nil {
  88. t.Fatalf("Error parsing cache: %v", err)
  89. }
  90. httppn := types.PrincipalName{
  91. NameType: nametype.KRB_NT_PRINCIPAL,
  92. NameString: []string{"HTTP", "host.test.gokrb5"},
  93. }
  94. cred, ok := c.GetEntry(httppn)
  95. if !ok {
  96. t.Fatal("Could not get entry from CCache as not found")
  97. }
  98. assert.Equal(t, httppn, cred.Server.PrincipalName, "Credential does not have the right server principal name")
  99. }
  100. func TestCCache_GetEntries(t *testing.T) {
  101. b, err := hex.DecodeString(testdata.CCACHE_TEST)
  102. if err != nil {
  103. t.Fatal("Error decoding test data")
  104. }
  105. c, err := ParseCCache(b)
  106. if err != nil {
  107. t.Fatalf("Error parsing cache: %v", err)
  108. }
  109. creds := c.GetEntries()
  110. assert.Equal(t, 2, len(creds), "Number of credentials entries not as expected")
  111. }