annotate file/file_test.go @ 15:9b4ec6b5c23e

Add tests for multipass files.
author Paul Fisher <paul@pfish.zone>
date Thu, 29 Oct 2015 23:56:53 -0400
parents
children bfc035bd5132
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
15
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
1 package file
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
2
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
3 import (
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
4 "fmt"
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
5 "io/ioutil"
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
6 "os"
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
7 "path"
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
8 "testing"
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
9 "time"
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
10
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
11 "pfish.zone/go/multipass/auth"
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
12 )
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
13
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
14 var tempdir string
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
15
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
16 const (
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
17 filemode = 0644
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
18
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
19 shadowSpooky = "123:bogushash:c3Bvb2t5"
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
20 shadowWhatever = "456:anotherhash:d2hhdGV2ZXI="
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
21 )
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
22
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
23 var (
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
24 aSpooky *auth.Entry
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
25 aWhatever *auth.Entry
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
26 )
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
27
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
28 func init() {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
29 s, err := auth.EntryFromShadow(shadowSpooky)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
30 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
31 panic(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
32 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
33 aSpooky = s
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
34 w, err := auth.EntryFromShadow(shadowWhatever)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
35 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
36 panic(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
37 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
38 aWhatever = w
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
39 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
40
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
41 func TestMain(m *testing.M) {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
42 dir, err := ioutil.TempDir(os.TempDir(), "multipass-")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
43 maxDelay = 2 * time.Second
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
44 tempdir = dir
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
45 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
46 panic("couldn't create temp dir")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
47 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
48 m.Run()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
49 os.RemoveAll(tempdir)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
50 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
51
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
52 type testfile struct {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
53 t *testing.T
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
54 dir string
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
55 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
56
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
57 func mktest(t *testing.T, dir string) *testfile {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
58 f := &testfile{t, dir}
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
59 os.Mkdir(f.dirpath(), 0700)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
60 return f
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
61 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
62
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
63 func (f *testfile) dirpath() string {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
64 return path.Join(tempdir, f.dir)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
65 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
66
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
67 func (f *testfile) filepath() string {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
68 return path.Join(f.dirpath(), "file")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
69 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
70
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
71 func (f *testfile) read() string {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
72 contents, err := ioutil.ReadFile(f.filepath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
73 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
74 f.t.Fatalf("couldn't read output file: %q", err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
75 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
76 return string(contents)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
77 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
78
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
79 func (f *testfile) write(data string) {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
80 err := ioutil.WriteFile(f.filepath(), []byte(data), filemode)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
81 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
82 f.t.Fatalf("couldn't write output file: %q", err)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
83 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
84 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
85
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
86 func (f *testfile) perms() os.FileMode {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
87 stat, err := os.Stat(f.filepath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
88 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
89 f.t.Fatalf("couldn't stat output file: %q", err)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
90 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
91 return stat.Mode().Perm()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
92 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
93
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
94 func (f *testfile) cleanup() {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
95 os.RemoveAll(f.dirpath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
96 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
97
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
98 func TestCreate(t *testing.T) {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
99 f := mktest(t, "create")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
100 defer f.cleanup()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
101 s := New(f.filepath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
102 err := s.Add(aSpooky)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
103 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
104 t.Fatal(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
105 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
106 if f.perms() != filemode {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
107 t.Errorf("want perms %q; got %q", filemode, f.perms())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
108 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
109 want := fmt.Sprintf("%s\n%s\n", Banner, shadowSpooky)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
110 got := f.read()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
111 if want != got {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
112 t.Errorf("bad file contents: want %q; got %q", want, got)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
113 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
114 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
115
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
116 func TestAppend(t *testing.T) {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
117 f := mktest(t, "append")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
118 defer f.cleanup()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
119 f.write(fmt.Sprintf("%s\n%s\n", Banner, shadowSpooky))
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
120 s := New(f.filepath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
121 err := s.Add(aWhatever)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
122 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
123 t.Fatal(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
124 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
125 want := fmt.Sprintf("%s\n%s\n%s\n", Banner, shadowWhatever, shadowSpooky)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
126 got := f.read()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
127 if want != got {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
128 t.Errorf("bad file contents: want %q; got %q", want, got)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
129 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
130 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
131
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
132 func TestRemove(t *testing.T) {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
133 f := mktest(t, "remove")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
134 defer f.cleanup()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
135 f.write(fmt.Sprintf("%s\n%s\n%s\n", Banner, shadowWhatever, shadowSpooky))
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
136 s := New(f.filepath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
137 err := s.Remove(456)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
138 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
139 t.Fatal(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
140 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
141 want := fmt.Sprintf("%s\n%s\n", Banner, shadowSpooky)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
142 got := f.read()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
143 if want != got {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
144 t.Errorf("bad file contents: want %q; got %q", want, got)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
145 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
146
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
147 // Removing a nonexistent entry is idempotent.
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
148 err = s.Remove(456)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
149 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
150 t.Fatal(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
151 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
152 got = f.read()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
153 if want != got {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
154 t.Errorf("bad file contents: want %q; got %q", want, got)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
155 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
156
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
157 // Removing the remaining entry leaves an empty file.
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
158 err = s.Remove(123)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
159 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
160 t.Fatal(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
161 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
162 want = fmt.Sprintf("%s\n", Banner)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
163 got = f.read()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
164 if want != got {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
165 t.Errorf("bad file contents: want %q; got %q", want, got)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
166 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
167 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
168
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
169 func TestList(t *testing.T) {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
170 f := mktest(t, "list")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
171 defer f.cleanup()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
172 s := New(f.filepath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
173 entries, err := s.AllEntries()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
174 if len(entries) != 0 {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
175 t.Errorf("want 0 entries; got %q", entries)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
176 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
177
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
178 f.write(fmt.Sprintf("%s\n%s\n%s\n", Banner, shadowWhatever, shadowSpooky))
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
179 entries, err = s.AllEntries()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
180 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
181 t.Fatal(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
182 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
183 if len(entries) != 2 {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
184 t.Fatalf("want len(entries) == 2; got entries = %q", entries)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
185 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
186 if *entries[0] != *aWhatever || *entries[1] != *aSpooky {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
187 t.Fatalf("want {aWhatever, aSpooky}; got %q", entries)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
188 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
189 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
190
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
191 func TestAuthenticate(t *testing.T) {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
192 f := mktest(t, "auth")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
193 defer f.cleanup()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
194 s := New(f.filepath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
195 eA, passA, err := auth.NewEntry("a")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
196 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
197 t.Fatalf(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
198 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
199 eB, passB, err := auth.NewEntry("b")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
200 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
201 t.Fatalf(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
202 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
203 err = s.Add(eA)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
204 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
205 t.Fatalf(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
206 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
207 err = s.Add(eB)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
208 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
209 t.Fatalf(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
210 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
211 good, err := s.Authenticate(passA)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
212 if !good {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
213 t.Errorf("couldn't authenticate password A")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
214 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
215 good, err = s.Authenticate(passB)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
216 if !good {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
217 t.Errorf("couldn't authenticate password B")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
218 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
219 bad, err := s.Authenticate("boo")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
220 if bad {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
221 t.Errorf("authenticated bad password")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
222 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
223 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
224
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
225 type clobberEvent int
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
226
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
227 const (
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
228 unlocked clobberEvent = iota
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
229 written
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
230 failed
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
231 )
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
232
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
233 func TestNoClobber(t *testing.T) {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
234 f := mktest(t, "clobber")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
235 defer f.cleanup()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
236 f.write(fmt.Sprintf("%s\n", Banner))
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
237 s := New(f.filepath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
238 // put a file in the system's new-file so it won't overwrite it.
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
239 err := ioutil.WriteFile(s.newFilename(), nil, filemode)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
240 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
241 t.Fatalf(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
242 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
243 events := make(chan clobberEvent, 10)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
244 go func() {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
245 err := s.Add(aWhatever)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
246 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
247 events <- failed
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
248 return
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
249 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
250 events <- written
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
251 }()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
252 time.Sleep(time.Second)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
253 events <- unlocked
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
254 err = os.Remove(s.newFilename())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
255 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
256 t.Fatalf(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
257 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
258 ev := <-events
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
259 if unlocked != ev {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
260 t.Errorf("event 0: %q; got %q", unlocked, ev)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
261 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
262 ev = <-events
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
263 if written != ev {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
264 t.Errorf("event 1: %q; got %q", written, ev)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
265 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
266
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
267 want := fmt.Sprintf("%s\n%s\n", Banner, shadowWhatever)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
268 got := f.read()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
269 if want != got {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
270 t.Errorf("bad contents: want %q; got %q", want, got)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
271 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
272 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
273
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
274 func TestGiveUp(t *testing.T) {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
275 f := mktest(t, "giveup")
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
276 defer f.cleanup()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
277 f.write(fmt.Sprintf("%s\n", Banner))
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
278 s := New(f.filepath())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
279 // put a file in the system's new-file so it won't overwrite it.
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
280 err := ioutil.WriteFile(s.newFilename(), nil, filemode)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
281 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
282 t.Fatalf(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
283 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
284 events := make(chan clobberEvent, 10)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
285 go func() {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
286 err := s.Add(aWhatever)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
287 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
288 events <- failed
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
289 return
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
290 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
291 events <- written
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
292 }()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
293 time.Sleep(5 * time.Second)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
294 events <- unlocked
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
295 err = os.Remove(s.newFilename())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
296 if err != nil {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
297 t.Fatalf(err.Error())
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
298 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
299 ev := <-events
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
300 if failed != ev {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
301 t.Errorf("event 0: want %q; got %q", failed, ev)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
302 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
303 ev = <-events
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
304 if unlocked != ev {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
305 t.Errorf("event 1: want %q; got %q", unlocked, ev)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
306 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
307
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
308 want := fmt.Sprintf("%s\n", Banner)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
309 got := f.read()
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
310 if want != got {
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
311 t.Errorf("bad contents: want %q; got %q", want, got)
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
312 }
9b4ec6b5c23e Add tests for multipass files.
Paul Fisher <paul@pfish.zone>
parents:
diff changeset
313 }