Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code | Sign in
(1633)

Side by Side Diff: src/pkg/archive/tar/tar_test.go

Issue 7305072: code review 7305072: archive/tar: add Header.FileInfo method. Add more cases... (Closed)
Patch Set: diff -r d4024b084e0c https://code.google.com/p/go Created 11 years, 1 month ago
Left:
Right:
Use n/p to move between diff chunks; N/P to move between comments. Please Sign in to add in-line comments.
Jump to:
View unified diff | Download patch
« no previous file with comments | « src/pkg/archive/tar/common.go ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2012 The Go Authors. All rights reserved. 1 // Copyright 2012 The Go Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style 2 // Use of this source code is governed by a BSD-style
3 // license that can be found in the LICENSE file. 3 // license that can be found in the LICENSE file.
4 4
5 package tar 5 package tar
6 6
7 import ( 7 import (
8 "bytes" 8 "bytes"
9 "io/ioutil" 9 "io/ioutil"
10 "os" 10 "os"
(...skipping 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 t.Errorf("Header mismatch.\n got %+v\nwant %+v", rHdr, hdr) 114 t.Errorf("Header mismatch.\n got %+v\nwant %+v", rHdr, hdr)
115 } 115 }
116 rData, err := ioutil.ReadAll(tr) 116 rData, err := ioutil.ReadAll(tr)
117 if err != nil { 117 if err != nil {
118 t.Fatalf("Read: %v", err) 118 t.Fatalf("Read: %v", err)
119 } 119 }
120 if !bytes.Equal(rData, data) { 120 if !bytes.Equal(rData, data) {
121 t.Errorf("Data mismatch.\n got %q\nwant %q", rData, data) 121 t.Errorf("Data mismatch.\n got %q\nwant %q", rData, data)
122 } 122 }
123 } 123 }
124
125 type headerRoundTripTest struct {
126 h *Header
127 fm os.FileMode
128 }
129
130 func TestHeaderRoundTrip(t *testing.T) {
131 golden := []headerRoundTripTest{
132 // regular file.
133 {
134 h: &Header{
135 Name: "test.txt",
136 Mode: 0644 | c_ISREG,
137 Size: 12,
138 ModTime: time.Unix(1360600916, 0),
139 Typeflag: TypeReg,
140 },
141 fm: 0644,
142 },
143 // hard link.
144 {
145 h: &Header{
146 Name: "hard.txt",
147 Mode: 0644 | c_ISLNK,
148 Size: 0,
149 ModTime: time.Unix(1360600916, 0),
150 Typeflag: TypeLink,
151 },
152 fm: 0644 | os.ModeSymlink,
153 },
154 // symbolic link.
155 {
156 h: &Header{
157 Name: "link.txt",
158 Mode: 0777 | c_ISLNK,
159 Size: 0,
160 ModTime: time.Unix(1360600852, 0),
161 Typeflag: TypeSymlink,
162 },
163 fm: 0777 | os.ModeSymlink,
164 },
165 // character device node.
166 {
167 h: &Header{
168 Name: "dev/null",
169 Mode: 0666 | c_ISCHR,
170 Size: 0,
171 ModTime: time.Unix(1360578951, 0),
172 Typeflag: TypeChar,
173 },
174 fm: 0666 | os.ModeDevice | os.ModeCharDevice,
175 },
176 // block device node.
177 {
178 h: &Header{
179 Name: "dev/sda",
180 Mode: 0660 | c_ISBLK,
181 Size: 0,
182 ModTime: time.Unix(1360578954, 0),
183 Typeflag: TypeBlock,
184 },
185 fm: 0660 | os.ModeDevice,
186 },
187 // directory.
188 {
189 h: &Header{
190 Name: "dir/",
191 Mode: 0755 | c_ISDIR,
192 Size: 0,
193 ModTime: time.Unix(1360601116, 0),
194 Typeflag: TypeDir,
195 },
196 fm: 0755 | os.ModeDir,
197 },
198 // fifo node.
199 {
200 h: &Header{
201 Name: "dev/initctl",
202 Mode: 0600 | c_ISFIFO,
203 Size: 0,
204 ModTime: time.Unix(1360578949, 0),
205 Typeflag: TypeFifo,
206 },
207 fm: 0600 | os.ModeNamedPipe,
208 },
209 // setuid.
210 {
211 h: &Header{
212 Name: "bin/su",
213 Mode: 0755 | c_ISREG | c_ISUID,
214 Size: 23232,
215 ModTime: time.Unix(1355405093, 0),
216 Typeflag: TypeReg,
217 },
218 fm: 0755 | os.ModeSetuid,
219 },
220 // setguid.
221 {
222 h: &Header{
223 Name: "group.txt",
224 Mode: 0750 | c_ISREG | c_ISGID,
225 Size: 0,
226 ModTime: time.Unix(1360602346, 0),
227 Typeflag: TypeReg,
228 },
229 fm: 0750 | os.ModeSetgid,
230 },
231 // sticky.
232 {
233 h: &Header{
234 Name: "sticky.txt",
235 Mode: 0600 | c_ISREG | c_ISVTX,
236 Size: 7,
237 ModTime: time.Unix(1360602540, 0),
238 Typeflag: TypeReg,
239 },
240 fm: 0600 | os.ModeSticky,
241 },
242 }
243
244 for i, g := range golden {
245 fi := g.h.FileInfo()
246 h2, err := FileInfoHeader(fi, "")
247 if err != nil {
248 t.Error(err)
249 continue
250 }
251 if got, want := h2.Name, g.h.Name; got != want {
252 t.Errorf("i=%d: Name: got %v, want %v", i, got, want)
253 }
254 if got, want := h2.Size, g.h.Size; got != want {
255 t.Errorf("i=%d: Size: got %v, want %v", i, got, want)
256 }
257 if got, want := h2.Mode, g.h.Mode; got != want {
258 t.Errorf("i=%d: Mode: got %o, want %o", i, got, want)
259 }
260 if got, want := fi.Mode(), g.fm; got != want {
261 t.Errorf("i=%d: fi.Mode: got %o, want %o", i, got, want)
262 }
263 if got, want := h2.ModTime, g.h.ModTime; got != want {
264 t.Errorf("i=%d: ModTime: got %v, want %v", i, got, want)
265 }
266 if sysh, ok := fi.Sys().(*Header); !ok || sysh != g.h {
267 t.Errorf("i=%d: Sys didn't return original *Header", i)
268 }
269 }
270 }
OLDNEW
« no previous file with comments | « src/pkg/archive/tar/common.go ('k') | no next file » | no next file with comments »

Powered by Google App Engine
RSS Feeds Recent Issues | This issue
This is Rietveld f62528b