Fix pretty-print keys to not print "." if there is no GUN.

Signed-off-by: Ying Li <ying.li@docker.com>
This commit is contained in:
Ying Li 2016-01-15 13:40:06 -08:00
parent 877d47bb5c
commit dd0223f7cf
2 changed files with 26 additions and 19 deletions

View File

@ -98,7 +98,10 @@ func prettyPrintKeys(keyStores []trustmanager.KeyStore, writer io.Writer) {
for keyPath, role := range store.ListKeys() {
gun := ""
if role != data.CanonicalRootRole {
gun = filepath.Dir(keyPath)
dirPath := filepath.Dir(keyPath)
if dirPath != "." { // no gun
gun = dirPath
}
}
info = append(info, keyInfo{
role: role,
@ -108,6 +111,7 @@ func prettyPrintKeys(keyStores []trustmanager.KeyStore, writer io.Writer) {
})
}
}
if len(info) == 0 {
writer.Write([]byte("No signing keys found.\n"))
return

View File

@ -93,30 +93,33 @@ func TestPrettyPrintRootAndSigningKeys(t *testing.T) {
longNameShortened := "..." + strings.Repeat("z", 37)
// just use the same key for testing
key, err := trustmanager.GenerateED25519Key(rand.Reader)
assert.NoError(t, err)
keys := make([]data.PrivateKey, 3)
for i := 0; i < 3; i++ {
key, err := trustmanager.GenerateED25519Key(rand.Reader)
assert.NoError(t, err)
keys[i] = key
}
root := data.CanonicalRootRole
// add keys to the key stores
err = keyStores[0].AddKey(key.ID(), root, key)
assert.NoError(t, err)
err = keyStores[1].AddKey(key.ID(), root, key)
assert.NoError(t, err)
err = keyStores[0].AddKey(strings.Repeat("a/", 30)+key.ID(), "targets", key)
assert.NoError(t, err)
err = keyStores[1].AddKey("short/gun/"+key.ID(), "snapshot", key)
assert.NoError(t, err)
assert.NoError(t, keyStores[0].AddKey(keys[0].ID(), root, keys[0]))
assert.NoError(t, keyStores[1].AddKey(keys[0].ID(), root, keys[0]))
assert.NoError(t, keyStores[0].AddKey(strings.Repeat("a/", 30)+keys[0].ID(), "targets", keys[0]))
assert.NoError(t, keyStores[1].AddKey("short/gun/"+keys[0].ID(), "snapshot", keys[0]))
assert.NoError(t, keyStores[0].AddKey(keys[1].ID(), "targets/a", keys[1]))
assert.NoError(t, keyStores[0].AddKey(keys[2].ID(), "invalidRole", keys[2]))
expected := [][]string{
{root, key.ID(), keyStores[0].Name()},
{root, key.ID(), longNameShortened},
{"targets", "..." + strings.Repeat("/a", 11), key.ID(), keyStores[0].Name()},
{"snapshot", "short/gun", key.ID(), longNameShortened},
// root always comes first
{root, keys[0].ID(), keyStores[0].Name()},
{root, keys[0].ID(), longNameShortened},
// these have no gun, so they come first
{"invalidRole", keys[2].ID(), keyStores[0].Name()},
{"targets/a", keys[1].ID(), keyStores[0].Name()},
// these have guns, and are sorted then by guns
{"targets", "..." + strings.Repeat("/a", 11), keys[0].ID(), keyStores[0].Name()},
{"snapshot", "short/gun", keys[0].ID(), longNameShortened},
}
var b bytes.Buffer