package keyring import ( "bytes" "io/ioutil" "os" "regexp" "testing" ) const ( ExpectedListKeysRegex = "sec: [[:alnum:]]{8}:[[:space:]]*foo[[:space:]]*\\(pm\\)[[:space:]]*\npub: [[:alnum:]]{8}:[[:space:]]*foo[[:space:]]*\\(pm\\)[[:space:]]*" ) func TestNewKeyPair(t *testing.T) { tmpdir, err := ioutil.TempDir("", "") if err != nil { t.Fatalf("Couldn't create tmpdir") } defer os.RemoveAll(tmpdir) var newKeyPair = []struct { r, n, e string expected bool }{ {"", "", "", false}, {"", "foo", "", false}, {"", "foo", "bad<>email", false}, {tmpdir, "foo", "bar", true}, } for _, rt := range newKeyPair { actual := NewKeyPair(rt.r, rt.n, rt.e) if (actual == nil) != rt.expected { t.Errorf( "failed NewKeyPair with an error: %v\n\troot: %s\n\tname: %s\n\temail:%s\n\texpected: %t\n\t actual: %t", actual, rt.r, rt.n, rt.e, (actual == nil), rt.expected, ) } } } func TestListKeys(t *testing.T) { tmpdir, err := ioutil.TempDir("", "") if err != nil { t.Fatalf("Couldn't create tmpdir") } defer os.RemoveAll(tmpdir) err = NewKeyPair(tmpdir, "foo", "bar") if err != nil { t.Fatalf("Couldn't create New Key Pair") } var newKeyPair = []struct { r string regex string w *bytes.Buffer expected bool }{ {"", "", bytes.NewBuffer(nil), false}, {tmpdir, ExpectedListKeysRegex, bytes.NewBuffer(nil), true}, } for _, rt := range newKeyPair { actual := ListKeys(rt.r, rt.w) if (actual == nil) != rt.expected { t.Errorf( "failed ListKeys with an error: %v\n\troot: %s\n\texpected: %t\n\t actual: %t", actual, rt.r, (actual == nil), rt.expected, ) } if rt.expected { matched, err := regexp.MatchString(rt.regex, rt.w.String()) if err != nil { t.Fatalf("error%v, ", err) } if !matched { t.Errorf("did not match") t.Errorf("ListKeys did not match expected regex; wanted: [%q], got: [%s]", rt.regex, rt.w.String()) } } } }