1package pgpassfile
2
3import (
4	"bytes"
5	"strings"
6	"testing"
7
8	"github.com/stretchr/testify/assert"
9	"github.com/stretchr/testify/require"
10)
11
12func unescape(s string) string {
13	s = strings.Replace(s, `\:`, `:`, -1)
14	s = strings.Replace(s, `\\`, `\`, -1)
15	return s
16}
17
18var passfile = [][]string{
19	{"test1", "5432", "larrydb", "larry", "whatstheidea"},
20	{"test1", "5432", "moedb", "moe", "imbecile"},
21	{"test1", "5432", "curlydb", "curly", "nyuknyuknyuk"},
22	{"test2", "5432", "*", "shemp", "heymoe"},
23	{"test2", "5432", "*", "*", `test\\ing\:`},
24	{"localhost", "*", "*", "*", "sesam"},
25	{"test3", "*", "", "", "swordfish"}, // user will be filled later
26}
27
28func TestParsePassFile(t *testing.T) {
29	buf := bytes.NewBufferString(`# A comment
30	test1:5432:larrydb:larry:whatstheidea
31	test1:5432:moedb:moe:imbecile
32	test1:5432:curlydb:curly:nyuknyuknyuk
33	test2:5432:*:shemp:heymoe
34	test2:5432:*:*:test\\ing\:
35	localhost:*:*:*:sesam
36		`)
37
38	passfile, err := ParsePassfile(buf)
39	require.Nil(t, err)
40
41	assert.Len(t, passfile.Entries, 6)
42
43	assert.Equal(t, "whatstheidea", passfile.FindPassword("test1", "5432", "larrydb", "larry"))
44	assert.Equal(t, "imbecile", passfile.FindPassword("test1", "5432", "moedb", "moe"))
45	assert.Equal(t, `test\ing:`, passfile.FindPassword("test2", "5432", "something", "else"))
46	assert.Equal(t, "sesam", passfile.FindPassword("localhost", "9999", "foo", "bare"))
47
48	assert.Equal(t, "", passfile.FindPassword("wrong", "5432", "larrydb", "larry"))
49	assert.Equal(t, "", passfile.FindPassword("test1", "wrong", "larrydb", "larry"))
50	assert.Equal(t, "", passfile.FindPassword("test1", "5432", "wrong", "larry"))
51	assert.Equal(t, "", passfile.FindPassword("test1", "5432", "larrydb", "wrong"))
52}
53