keyring_test.go 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122
  1. // Copyright 2015 The Go Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style
  3. // license that can be found in the LICENSE file.
  4. package agent
  5. import "testing"
  6. func addTestKey(t *testing.T, a Agent, keyName string) {
  7. err := a.Add(AddedKey{
  8. PrivateKey: testPrivateKeys[keyName],
  9. Comment: keyName,
  10. })
  11. if err != nil {
  12. t.Fatalf("failed to add key %q: %v", keyName, err)
  13. }
  14. }
  15. func removeTestKey(t *testing.T, a Agent, keyName string) {
  16. err := a.Remove(testPublicKeys[keyName])
  17. if err != nil {
  18. t.Fatalf("failed to remove key %q: %v", keyName, err)
  19. }
  20. }
  21. func validateListedKeys(t *testing.T, a Agent, expectedKeys []string) {
  22. listedKeys, err := a.List()
  23. if err != nil {
  24. t.Fatalf("failed to list keys: %v", err)
  25. return
  26. }
  27. if len(listedKeys) != len(expectedKeys) {
  28. t.Fatalf("expeted %d key, got %d", len(expectedKeys), len(listedKeys))
  29. return
  30. }
  31. actualKeys := make(map[string]bool)
  32. for _, key := range listedKeys {
  33. actualKeys[key.Comment] = true
  34. }
  35. matchedKeys := make(map[string]bool)
  36. for _, expectedKey := range expectedKeys {
  37. if !actualKeys[expectedKey] {
  38. t.Fatalf("expected key %q, but was not found", expectedKey)
  39. } else {
  40. matchedKeys[expectedKey] = true
  41. }
  42. }
  43. for actualKey := range actualKeys {
  44. if !matchedKeys[actualKey] {
  45. t.Fatalf("key %q was found, but was not expected", actualKey)
  46. }
  47. }
  48. }
  49. func TestKeyringAddingAndRemoving(t *testing.T) {
  50. keyNames := []string{"dsa", "ecdsa", "rsa", "user"}
  51. // add all test private keys
  52. k := NewKeyring()
  53. for _, keyName := range keyNames {
  54. addTestKey(t, k, keyName)
  55. }
  56. validateListedKeys(t, k, keyNames)
  57. // remove a key in the middle
  58. keyToRemove := keyNames[1]
  59. keyNames = append(keyNames[:1], keyNames[2:]...)
  60. removeTestKey(t, k, keyToRemove)
  61. validateListedKeys(t, k, keyNames)
  62. // remove all keys
  63. err := k.RemoveAll()
  64. if err != nil {
  65. t.Fatalf("failed to remove all keys: %v", err)
  66. }
  67. validateListedKeys(t, k, []string{})
  68. }
  69. func TestAddDuplicateKey(t *testing.T) {
  70. keyNames := []string{"rsa", "user"}
  71. k := NewKeyring()
  72. for _, keyName := range keyNames {
  73. addTestKey(t, k, keyName)
  74. }
  75. validateListedKeys(t, k, keyNames)
  76. // Add the keys again.
  77. for _, keyName := range keyNames {
  78. addTestKey(t, k, keyName)
  79. }
  80. validateListedKeys(t, k, keyNames)
  81. // Add an existing key with an updated comment.
  82. keyName := keyNames[0]
  83. addedKey := AddedKey{
  84. PrivateKey: testPrivateKeys[keyName],
  85. Comment: "comment updated",
  86. }
  87. err := k.Add(addedKey)
  88. if err != nil {
  89. t.Fatalf("failed to add key %q: %v", keyName, err)
  90. }
  91. // Check the that key is found and the comment was updated.
  92. keys, err := k.List()
  93. if err != nil {
  94. t.Fatalf("failed to list keys: %v", err)
  95. }
  96. if len(keys) != len(keyNames) {
  97. t.Fatalf("expected %d keys, got %d", len(keyNames), len(keys))
  98. }
  99. isFound := false
  100. for _, key := range keys {
  101. if key.Comment == addedKey.Comment {
  102. isFound = true
  103. }
  104. }
  105. if !isFound {
  106. t.Fatal("key with the updated comment not found")
  107. }
  108. }