aboutsummaryrefslogtreecommitdiff
path: root/src/archive/tar/reader_test.go
diff options
context:
space:
mode:
authorJoe Tsai <joetsai@digital-static.net>2015-09-28 13:49:35 -0700
committerBrad Fitzpatrick <bradfitz@golang.org>2015-12-02 00:29:33 +0000
commit38f8e4407c3626a9509760089b82eecb4d0f2d48 (patch)
tree546377e739b97476e960605522913e08f63b6059 /src/archive/tar/reader_test.go
parenta4f057bcc3d305218e1fe4291f8c86cff55e19ca (diff)
downloadgo-38f8e4407c3626a9509760089b82eecb4d0f2d48.tar.xz
archive/tar: move parse/format methods to standalone receiver
Motivations for this change: * It allows these functions to be used outside of Reader/Writer. * It allows these functions to be more easily unit tested. Change-Id: Iebe2b70bdb8744371c9ffa87c24316cbbf025b59 Reviewed-on: https://go-review.googlesource.com/15113 Reviewed-by: Russ Cox <rsc@golang.org> Run-TryBot: Joe Tsai <joetsai@digital-static.net> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
Diffstat (limited to 'src/archive/tar/reader_test.go')
-rw-r--r--src/archive/tar/reader_test.go57
1 files changed, 53 insertions, 4 deletions
diff --git a/src/archive/tar/reader_test.go b/src/archive/tar/reader_test.go
index 387c92fd25..b3fc68cc7b 100644
--- a/src/archive/tar/reader_test.go
+++ b/src/archive/tar/reader_test.go
@@ -298,10 +298,7 @@ var untarTests = []*untarTest{
},
{
file: "testdata/issue11169.tar",
- // TODO(dsnet): Currently the library does not detect that this file is
- // malformed. Instead it incorrectly believes that file just ends.
- // At least the library doesn't crash anymore.
- // err: ErrHeader,
+ err: ErrHeader,
},
{
file: "testdata/issue12435.tar",
@@ -991,3 +988,55 @@ func TestReadHeaderOnly(t *testing.T) {
}
}
}
+
+func TestParsePAXRecord(t *testing.T) {
+ var medName = strings.Repeat("CD", 50)
+ var longName = strings.Repeat("AB", 100)
+
+ var vectors = []struct {
+ input string
+ residual string
+ outputKey string
+ outputVal string
+ ok bool
+ }{
+ {"6 k=v\n\n", "\n", "k", "v", true},
+ {"19 path=/etc/hosts\n", "", "path", "/etc/hosts", true},
+ {"210 path=" + longName + "\nabc", "abc", "path", longName, true},
+ {"110 path=" + medName + "\n", "", "path", medName, true},
+ {"9 foo=ba\n", "", "foo", "ba", true},
+ {"11 foo=bar\n\x00", "\x00", "foo", "bar", true},
+ {"18 foo=b=\nar=\n==\x00\n", "", "foo", "b=\nar=\n==\x00", true},
+ {"27 foo=hello9 foo=ba\nworld\n", "", "foo", "hello9 foo=ba\nworld", true},
+ {"27 ☺☻☹=日a本b語ç\nmeow mix", "meow mix", "☺☻☹", "日a本b語ç", true},
+ {"17 \x00hello=\x00world\n", "", "\x00hello", "\x00world", true},
+ {"1 k=1\n", "1 k=1\n", "", "", false},
+ {"6 k~1\n", "6 k~1\n", "", "", false},
+ {"6_k=1\n", "6_k=1\n", "", "", false},
+ {"6 k=1 ", "6 k=1 ", "", "", false},
+ {"632 k=1\n", "632 k=1\n", "", "", false},
+ {"16 longkeyname=hahaha\n", "16 longkeyname=hahaha\n", "", "", false},
+ {"3 somelongkey=\n", "3 somelongkey=\n", "", "", false},
+ {"50 tooshort=\n", "50 tooshort=\n", "", "", false},
+ }
+
+ for _, v := range vectors {
+ key, val, res, err := parsePAXRecord(v.input)
+ ok := (err == nil)
+ if v.ok != ok {
+ if v.ok {
+ t.Errorf("parsePAXRecord(%q): got parsing failure, want success", v.input)
+ } else {
+ t.Errorf("parsePAXRecord(%q): got parsing success, want failure", v.input)
+ }
+ }
+ if ok && (key != v.outputKey || val != v.outputVal) {
+ t.Errorf("parsePAXRecord(%q): got (%q: %q), want (%q: %q)",
+ v.input, key, val, v.outputKey, v.outputVal)
+ }
+ if res != v.residual {
+ t.Errorf("parsePAXRecord(%q): got residual %q, want residual %q",
+ v.input, res, v.residual)
+ }
+ }
+}