keytab_test.go 3.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package keytab
  2. import (
  3. "encoding/hex"
  4. "os"
  5. "path/filepath"
  6. "testing"
  7. "time"
  8. "github.com/stretchr/testify/assert"
  9. "gopkg.in/jcmturner/gokrb5.v7/test/testdata"
  10. )
  11. func TestUnmarshal(t *testing.T) {
  12. t.Parallel()
  13. b, _ := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
  14. kt := New()
  15. err := kt.Unmarshal(b)
  16. if err != nil {
  17. t.Fatalf("Error parsing keytab data: %v\n", err)
  18. }
  19. assert.Equal(t, uint8(2), kt.version, "Keytab version not as expected")
  20. assert.Equal(t, uint32(1), kt.Entries[0].KVNO, "KVNO not as expected")
  21. assert.Equal(t, uint8(1), kt.Entries[0].KVNO8, "KVNO8 not as expected")
  22. assert.Equal(t, time.Unix(1505669592, 0), kt.Entries[0].Timestamp, "Timestamp not as expected")
  23. assert.Equal(t, int32(17), kt.Entries[0].Key.KeyType, "Key's EType not as expected")
  24. assert.Equal(t, "698c4df8e9f60e7eea5a21bf4526ad25", hex.EncodeToString(kt.Entries[0].Key.KeyValue), "Key material not as expected")
  25. assert.Equal(t, int16(1), kt.Entries[0].Principal.NumComponents, "Number of components in principal not as expected")
  26. assert.Equal(t, int32(1), kt.Entries[0].Principal.NameType, "Name type of principal not as expected")
  27. assert.Equal(t, "TEST.GOKRB5", kt.Entries[0].Principal.Realm, "Realm of principal not as expected")
  28. assert.Equal(t, "testuser1", kt.Entries[0].Principal.Components[0], "Component in principal not as expected")
  29. }
  30. func TestMarshal(t *testing.T) {
  31. t.Parallel()
  32. b, _ := hex.DecodeString(testdata.TESTUSER1_KEYTAB)
  33. kt := New()
  34. err := kt.Unmarshal(b)
  35. if err != nil {
  36. t.Fatalf("Error parsing keytab data: %v\n", err)
  37. }
  38. mb, err := kt.Marshal()
  39. if err != nil {
  40. t.Fatalf("Error marshaling: %v", err)
  41. }
  42. assert.Equal(t, b, mb, "Marshaled bytes not the same as input bytes")
  43. err = kt.Unmarshal(mb)
  44. if err != nil {
  45. t.Fatalf("Error parsing marshaled bytes: %v", err)
  46. }
  47. }
  48. func TestLoad(t *testing.T) {
  49. t.Parallel()
  50. f := "test/testdata/testuser1.testtab"
  51. cwd, _ := os.Getwd()
  52. dir := os.Getenv("TRAVIS_BUILD_DIR")
  53. if dir != "" {
  54. f = dir + "/" + f
  55. } else if filepath.Base(cwd) == "keytab" {
  56. f = "../" + f
  57. }
  58. kt, err := Load(f)
  59. if err != nil {
  60. t.Fatalf("could not load keytab: %v", err)
  61. }
  62. assert.Equal(t, uint8(2), kt.version, "keytab version not as expected")
  63. assert.Equal(t, 12, len(kt.Entries), "keytab entry count not as expected: %+v", *kt)
  64. for _, e := range kt.Entries {
  65. if e.Principal.Realm != "TEST.GOKRB5" {
  66. t.Error("principal realm not as expected")
  67. }
  68. if e.Principal.NameType != int32(1) {
  69. t.Error("name type not as expected")
  70. }
  71. if e.Principal.NumComponents != int16(1) {
  72. t.Error("number of component not as expected")
  73. }
  74. if len(e.Principal.Components) != 1 {
  75. t.Error("number of component not as expected")
  76. }
  77. if e.Principal.Components[0] != "testuser1" {
  78. t.Error("principal components not as expected")
  79. }
  80. if e.Timestamp.IsZero() {
  81. t.Error("entry timestamp incorrect")
  82. }
  83. if e.KVNO == uint32(0) {
  84. t.Error("entry kvno not as expected")
  85. }
  86. if e.KVNO8 == uint8(0) {
  87. t.Error("entry kvno8 not as expected")
  88. }
  89. }
  90. }