ccache_test.go 3.9 KB

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