github.com/maenmax/kairep@v0.0.0-20210218001208-55bf3df36788/src/golang.org/x/crypto/ssh/agent/keyring_test.go (about)

     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  
     5  package agent
     6  
     7  import (
     8  	"testing"
     9  )
    10  
    11  func addTestKey(t *testing.T, a Agent, keyName string) {
    12  	err := a.Add(AddedKey{
    13  		PrivateKey: testPrivateKeys[keyName],
    14  		Comment:    keyName,
    15  	})
    16  	if err != nil {
    17  		t.Fatalf("failed to add key %q: %v", keyName, err)
    18  	}
    19  }
    20  
    21  func removeTestKey(t *testing.T, a Agent, keyName string) {
    22  	err := a.Remove(testPublicKeys[keyName])
    23  	if err != nil {
    24  		t.Fatalf("failed to remove key %q: %v", keyName, err)
    25  	}
    26  }
    27  
    28  func validateListedKeys(t *testing.T, a Agent, expectedKeys []string) {
    29  	listedKeys, err := a.List()
    30  	if err != nil {
    31  		t.Fatalf("failed to list keys: %v", err)
    32  		return
    33  	}
    34  	actualKeys := make(map[string]bool)
    35  	for _, key := range listedKeys {
    36  		actualKeys[key.Comment] = true
    37  	}
    38  
    39  	matchedKeys := make(map[string]bool)
    40  	for _, expectedKey := range expectedKeys {
    41  		if !actualKeys[expectedKey] {
    42  			t.Fatalf("expected key %q, but was not found", expectedKey)
    43  		} else {
    44  			matchedKeys[expectedKey] = true
    45  		}
    46  	}
    47  
    48  	for actualKey := range actualKeys {
    49  		if !matchedKeys[actualKey] {
    50  			t.Fatalf("key %q was found, but was not expected", actualKey)
    51  		}
    52  	}
    53  }
    54  
    55  func TestKeyringAddingAndRemoving(t *testing.T) {
    56  	keyNames := []string{"dsa", "ecdsa", "rsa", "user"}
    57  
    58  	// add all test private keys
    59  	k := NewKeyring()
    60  	for _, keyName := range keyNames {
    61  		addTestKey(t, k, keyName)
    62  	}
    63  	validateListedKeys(t, k, keyNames)
    64  
    65  	// remove a key in the middle
    66  	keyToRemove := keyNames[1]
    67  	keyNames = append(keyNames[:1], keyNames[2:]...)
    68  
    69  	removeTestKey(t, k, keyToRemove)
    70  	validateListedKeys(t, k, keyNames)
    71  
    72  	// remove all keys
    73  	err := k.RemoveAll()
    74  	if err != nil {
    75  		t.Fatalf("failed to remove all keys: %v", err)
    76  	}
    77  	validateListedKeys(t, k, []string{})
    78  }