enrollmentkey_test.go 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197
  1. package logic
  2. import (
  3. "testing"
  4. "time"
  5. "github.com/gravitl/netmaker/database"
  6. "github.com/stretchr/testify/assert"
  7. )
  8. func TestCreateEnrollmentKey(t *testing.T) {
  9. database.InitializeDatabase()
  10. defer database.CloseDB()
  11. t.Run("Can_Not_Create_Key", func(t *testing.T) {
  12. newKey, err := CreateEnrollmentKey(0, time.Time{}, nil, nil, false)
  13. assert.Nil(t, newKey)
  14. assert.NotNil(t, err)
  15. assert.Equal(t, err, EnrollmentKeyErrors.InvalidCreate)
  16. })
  17. t.Run("Can_Create_Key_Uses", func(t *testing.T) {
  18. newKey, err := CreateEnrollmentKey(1, time.Time{}, nil, nil, false)
  19. assert.Nil(t, err)
  20. assert.Equal(t, 1, newKey.UsesRemaining)
  21. assert.True(t, newKey.IsValid())
  22. })
  23. t.Run("Can_Create_Key_Time", func(t *testing.T) {
  24. newKey, err := CreateEnrollmentKey(0, time.Now().Add(time.Minute), nil, nil, false)
  25. assert.Nil(t, err)
  26. assert.True(t, newKey.IsValid())
  27. })
  28. t.Run("Can_Create_Key_Unlimited", func(t *testing.T) {
  29. newKey, err := CreateEnrollmentKey(0, time.Time{}, nil, nil, true)
  30. assert.Nil(t, err)
  31. assert.True(t, newKey.IsValid())
  32. })
  33. t.Run("Can_Create_Key_WithNetworks", func(t *testing.T) {
  34. newKey, err := CreateEnrollmentKey(0, time.Time{}, []string{"mynet", "skynet"}, nil, true)
  35. assert.Nil(t, err)
  36. assert.True(t, newKey.IsValid())
  37. assert.True(t, len(newKey.Networks) == 2)
  38. })
  39. t.Run("Can_Create_Key_WithTags", func(t *testing.T) {
  40. newKey, err := CreateEnrollmentKey(0, time.Time{}, nil, []string{"tag1", "tag2"}, true)
  41. assert.Nil(t, err)
  42. assert.True(t, newKey.IsValid())
  43. assert.True(t, len(newKey.Tags) == 2)
  44. })
  45. removeAllEnrollments()
  46. }
  47. func TestDelete_EnrollmentKey(t *testing.T) {
  48. database.InitializeDatabase()
  49. defer database.CloseDB()
  50. newKey, _ := CreateEnrollmentKey(0, time.Time{}, []string{"mynet", "skynet"}, nil, true)
  51. t.Run("Can_Delete_Key", func(t *testing.T) {
  52. assert.True(t, newKey.IsValid())
  53. err := DeleteEnrollmentKey(newKey.Value)
  54. assert.Nil(t, err)
  55. oldKey, err := GetEnrollmentKey(newKey.Value)
  56. assert.Nil(t, oldKey)
  57. assert.NotNil(t, err)
  58. assert.Equal(t, err, EnrollmentKeyErrors.NoKeyFound)
  59. })
  60. t.Run("Can_Not_Delete_Invalid_Key", func(t *testing.T) {
  61. err := DeleteEnrollmentKey("notakey")
  62. assert.NotNil(t, err)
  63. assert.Equal(t, err, EnrollmentKeyErrors.NoKeyFound)
  64. })
  65. removeAllEnrollments()
  66. }
  67. func TestDecrement_EnrollmentKey(t *testing.T) {
  68. database.InitializeDatabase()
  69. defer database.CloseDB()
  70. newKey, _ := CreateEnrollmentKey(1, time.Time{}, nil, nil, false)
  71. t.Run("Check_initial_uses", func(t *testing.T) {
  72. assert.True(t, newKey.IsValid())
  73. assert.Equal(t, newKey.UsesRemaining, 1)
  74. })
  75. t.Run("Check can decrement", func(t *testing.T) {
  76. assert.Equal(t, newKey.UsesRemaining, 1)
  77. k, err := decrementEnrollmentKey(newKey.Value)
  78. assert.Nil(t, err)
  79. newKey = k
  80. })
  81. t.Run("Check can not decrement", func(t *testing.T) {
  82. assert.Equal(t, newKey.UsesRemaining, 0)
  83. _, err := decrementEnrollmentKey(newKey.Value)
  84. assert.NotNil(t, err)
  85. assert.Equal(t, err, EnrollmentKeyErrors.NoUsesRemaining)
  86. })
  87. removeAllEnrollments()
  88. }
  89. func TestUsability_EnrollmentKey(t *testing.T) {
  90. database.InitializeDatabase()
  91. defer database.CloseDB()
  92. key1, _ := CreateEnrollmentKey(1, time.Time{}, nil, nil, false)
  93. key2, _ := CreateEnrollmentKey(0, time.Now().Add(time.Minute<<4), nil, nil, false)
  94. key3, _ := CreateEnrollmentKey(0, time.Time{}, nil, nil, true)
  95. t.Run("Check if valid use key can be used", func(t *testing.T) {
  96. assert.Equal(t, key1.UsesRemaining, 1)
  97. ok := TryToUseEnrollmentKey(key1)
  98. assert.True(t, ok)
  99. assert.Equal(t, 0, key1.UsesRemaining)
  100. })
  101. t.Run("Check if valid time key can be used", func(t *testing.T) {
  102. assert.True(t, !key2.Expiration.IsZero())
  103. ok := TryToUseEnrollmentKey(key2)
  104. assert.True(t, ok)
  105. })
  106. t.Run("Check if valid unlimited key can be used", func(t *testing.T) {
  107. assert.True(t, key3.Unlimited)
  108. ok := TryToUseEnrollmentKey(key3)
  109. assert.True(t, ok)
  110. })
  111. t.Run("check invalid key can not be used", func(t *testing.T) {
  112. ok := TryToUseEnrollmentKey(key1)
  113. assert.False(t, ok)
  114. })
  115. }
  116. func removeAllEnrollments() {
  117. database.DeleteAllRecords(database.ENROLLMENT_KEYS_TABLE_NAME)
  118. }
  119. //Test that cheks if it can tokenize
  120. //Test that cheks if it can't tokenize
  121. func TestTokenize_EnrollmentKeys(t *testing.T) {
  122. database.InitializeDatabase()
  123. defer database.CloseDB()
  124. newKey, _ := CreateEnrollmentKey(0, time.Time{}, []string{"mynet", "skynet"}, nil, true)
  125. const defaultValue = "MwEtpqTSrGd4HTO3ahYDTExKAehh6udJ"
  126. const b64value = "eyJzZXJ2ZXIiOiJhcGkubXlzZXJ2ZXIuY29tIiwidmFsdWUiOiJNd0V0cHFUU3JHZDRIVE8zYWhZRFRFeEtBZWhoNnVkSiJ9"
  127. const serverAddr = "api.myserver.com"
  128. t.Run("Can_Not_Tokenize_Nil_Key", func(t *testing.T) {
  129. err := Tokenize(nil, "ServerAddress")
  130. assert.NotNil(t, err)
  131. assert.Equal(t, err, EnrollmentKeyErrors.FailedToTokenize)
  132. })
  133. t.Run("Can_Not_Tokenize_Empty_Server_Address", func(t *testing.T) {
  134. err := Tokenize(newKey, "")
  135. assert.NotNil(t, err)
  136. assert.Equal(t, err, EnrollmentKeyErrors.FailedToTokenize)
  137. })
  138. t.Run("Can_Tokenize", func(t *testing.T) {
  139. err := Tokenize(newKey, serverAddr)
  140. assert.Nil(t, err)
  141. assert.True(t, len(newKey.Token) > 0)
  142. })
  143. t.Run("Is_Correct_B64_Token", func(t *testing.T) {
  144. newKey.Value = defaultValue
  145. err := Tokenize(newKey, serverAddr)
  146. assert.Nil(t, err)
  147. assert.Equal(t, newKey.Token, b64value)
  148. })
  149. removeAllEnrollments()
  150. }
  151. func TestDeTokenize_EnrollmentKeys(t *testing.T) {
  152. database.InitializeDatabase()
  153. defer database.CloseDB()
  154. newKey, _ := CreateEnrollmentKey(0, time.Time{}, []string{"mynet", "skynet"}, nil, true)
  155. //const defaultValue = "MwEtpqTSrGd4HTO3ahYDTExKAehh6udJ"
  156. const b64Value = "eyJzZXJ2ZXIiOiJhcGkubXlzZXJ2ZXIuY29tIiwidmFsdWUiOiJNd0V0cHFUU3JHZDRIVE8zYWhZRFRFeEtBZWhoNnVkSiJ9"
  157. const serverAddr = "api.myserver.com"
  158. t.Run("Can_Not_DeTokenize", func(t *testing.T) {
  159. value, err := DeTokenize("")
  160. assert.Nil(t, value)
  161. assert.NotNil(t, err)
  162. assert.Equal(t, err, EnrollmentKeyErrors.FailedToDeTokenize)
  163. })
  164. t.Run("Can_Not_Find_Key", func(t *testing.T) {
  165. value, err := DeTokenize(b64Value)
  166. assert.Nil(t, value)
  167. assert.NotNil(t, err)
  168. assert.Equal(t, err, EnrollmentKeyErrors.NoKeyFound)
  169. })
  170. t.Run("Can_DeTokenize", func(t *testing.T) {
  171. err := Tokenize(newKey, serverAddr)
  172. assert.Nil(t, err)
  173. output, err := DeTokenize(newKey.Token)
  174. assert.Nil(t, err)
  175. assert.NotNil(t, output)
  176. assert.Equal(t, newKey.Value, output.Value)
  177. })
  178. removeAllEnrollments()
  179. }