github.com/varialus/godfly@v0.0.0-20130904042352-1934f9f095ab/src/pkg/compress/gzip/gunzip_test.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 package gzip 6 7 import ( 8 "bytes" 9 "io" 10 "testing" 11 ) 12 13 type gunzipTest struct { 14 name string 15 desc string 16 raw string 17 gzip []byte 18 err error 19 } 20 21 var gunzipTests = []gunzipTest{ 22 { // has 1 empty fixed-huffman block 23 "empty.txt", 24 "empty.txt", 25 "", 26 []byte{ 27 0x1f, 0x8b, 0x08, 0x08, 0xf7, 0x5e, 0x14, 0x4a, 28 0x00, 0x03, 0x65, 0x6d, 0x70, 0x74, 0x79, 0x2e, 29 0x74, 0x78, 0x74, 0x00, 0x03, 0x00, 0x00, 0x00, 30 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 31 }, 32 nil, 33 }, 34 { // has 1 non-empty fixed huffman block 35 "hello.txt", 36 "hello.txt", 37 "hello world\n", 38 []byte{ 39 0x1f, 0x8b, 0x08, 0x08, 0xc8, 0x58, 0x13, 0x4a, 40 0x00, 0x03, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2e, 41 0x74, 0x78, 0x74, 0x00, 0xcb, 0x48, 0xcd, 0xc9, 42 0xc9, 0x57, 0x28, 0xcf, 0x2f, 0xca, 0x49, 0xe1, 43 0x02, 0x00, 0x2d, 0x3b, 0x08, 0xaf, 0x0c, 0x00, 44 0x00, 0x00, 45 }, 46 nil, 47 }, 48 { // concatenation 49 "hello.txt", 50 "hello.txt x2", 51 "hello world\n" + 52 "hello world\n", 53 []byte{ 54 0x1f, 0x8b, 0x08, 0x08, 0xc8, 0x58, 0x13, 0x4a, 55 0x00, 0x03, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2e, 56 0x74, 0x78, 0x74, 0x00, 0xcb, 0x48, 0xcd, 0xc9, 57 0xc9, 0x57, 0x28, 0xcf, 0x2f, 0xca, 0x49, 0xe1, 58 0x02, 0x00, 0x2d, 0x3b, 0x08, 0xaf, 0x0c, 0x00, 59 0x00, 0x00, 60 0x1f, 0x8b, 0x08, 0x08, 0xc8, 0x58, 0x13, 0x4a, 61 0x00, 0x03, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2e, 62 0x74, 0x78, 0x74, 0x00, 0xcb, 0x48, 0xcd, 0xc9, 63 0xc9, 0x57, 0x28, 0xcf, 0x2f, 0xca, 0x49, 0xe1, 64 0x02, 0x00, 0x2d, 0x3b, 0x08, 0xaf, 0x0c, 0x00, 65 0x00, 0x00, 66 }, 67 nil, 68 }, 69 { // has a fixed huffman block with some length-distance pairs 70 "shesells.txt", 71 "shesells.txt", 72 "she sells seashells by the seashore\n", 73 []byte{ 74 0x1f, 0x8b, 0x08, 0x08, 0x72, 0x66, 0x8b, 0x4a, 75 0x00, 0x03, 0x73, 0x68, 0x65, 0x73, 0x65, 0x6c, 76 0x6c, 0x73, 0x2e, 0x74, 0x78, 0x74, 0x00, 0x2b, 77 0xce, 0x48, 0x55, 0x28, 0x4e, 0xcd, 0xc9, 0x29, 78 0x06, 0x92, 0x89, 0xc5, 0x19, 0x60, 0x56, 0x52, 79 0xa5, 0x42, 0x09, 0x58, 0x18, 0x28, 0x90, 0x5f, 80 0x94, 0xca, 0x05, 0x00, 0x76, 0xb0, 0x3b, 0xeb, 81 0x24, 0x00, 0x00, 0x00, 82 }, 83 nil, 84 }, 85 { // has dynamic huffman blocks 86 "gettysburg", 87 "gettysburg", 88 " Four score and seven years ago our fathers brought forth on\n" + 89 "this continent, a new nation, conceived in Liberty, and dedicated\n" + 90 "to the proposition that all men are created equal.\n" + 91 " Now we are engaged in a great Civil War, testing whether that\n" + 92 "nation, or any nation so conceived and so dedicated, can long\n" + 93 "endure.\n" + 94 " We are met on a great battle-field of that war.\n" + 95 " We have come to dedicate a portion of that field, as a final\n" + 96 "resting place for those who here gave their lives that that\n" + 97 "nation might live. It is altogether fitting and proper that\n" + 98 "we should do this.\n" + 99 " But, in a larger sense, we can not dedicate — we can not\n" + 100 "consecrate — we can not hallow — this ground.\n" + 101 " The brave men, living and dead, who struggled here, have\n" + 102 "consecrated it, far above our poor power to add or detract.\n" + 103 "The world will little note, nor long remember what we say here,\n" + 104 "but it can never forget what they did here.\n" + 105 " It is for us the living, rather, to be dedicated here to the\n" + 106 "unfinished work which they who fought here have thus far so\n" + 107 "nobly advanced. It is rather for us to be here dedicated to\n" + 108 "the great task remaining before us — that from these honored\n" + 109 "dead we take increased devotion to that cause for which they\n" + 110 "gave the last full measure of devotion —\n" + 111 " that we here highly resolve that these dead shall not have\n" + 112 "died in vain — that this nation, under God, shall have a new\n" + 113 "birth of freedom — and that government of the people, by the\n" + 114 "people, for the people, shall not perish from this earth.\n" + 115 "\n" + 116 "Abraham Lincoln, November 19, 1863, Gettysburg, Pennsylvania\n", 117 []byte{ 118 0x1f, 0x8b, 0x08, 0x08, 0xd1, 0x12, 0x2b, 0x4a, 119 0x00, 0x03, 0x67, 0x65, 0x74, 0x74, 0x79, 0x73, 120 0x62, 0x75, 0x72, 0x67, 0x00, 0x65, 0x54, 0xcd, 121 0x6e, 0xd4, 0x30, 0x10, 0xbe, 0xfb, 0x29, 0xe6, 122 0x01, 0x42, 0xa5, 0x0a, 0x09, 0xc1, 0x11, 0x90, 123 0x40, 0x48, 0xa8, 0xe2, 0x80, 0xd4, 0xf3, 0x24, 124 0x9e, 0x24, 0x56, 0xbd, 0x9e, 0xc5, 0x76, 0x76, 125 0x95, 0x1b, 0x0f, 0xc1, 0x13, 0xf2, 0x24, 0x7c, 126 0x63, 0x77, 0x9b, 0x4a, 0x5c, 0xaa, 0x6e, 0x6c, 127 0xcf, 0x7c, 0x7f, 0x33, 0x44, 0x5f, 0x74, 0xcb, 128 0x54, 0x26, 0xcd, 0x42, 0x9c, 0x3c, 0x15, 0xb9, 129 0x48, 0xa2, 0x5d, 0x38, 0x17, 0xe2, 0x45, 0xc9, 130 0x4e, 0x67, 0xae, 0xab, 0xe0, 0xf7, 0x98, 0x75, 131 0x5b, 0xd6, 0x4a, 0xb3, 0xe6, 0xba, 0x92, 0x26, 132 0x57, 0xd7, 0x50, 0x68, 0xd2, 0x54, 0x43, 0x92, 133 0x54, 0x07, 0x62, 0x4a, 0x72, 0xa5, 0xc4, 0x35, 134 0x68, 0x1a, 0xec, 0x60, 0x92, 0x70, 0x11, 0x4f, 135 0x21, 0xd1, 0xf7, 0x30, 0x4a, 0xae, 0xfb, 0xd0, 136 0x9a, 0x78, 0xf1, 0x61, 0xe2, 0x2a, 0xde, 0x55, 137 0x25, 0xd4, 0xa6, 0x73, 0xd6, 0xb3, 0x96, 0x60, 138 0xef, 0xf0, 0x9b, 0x2b, 0x71, 0x8c, 0x74, 0x02, 139 0x10, 0x06, 0xac, 0x29, 0x8b, 0xdd, 0x25, 0xf9, 140 0xb5, 0x71, 0xbc, 0x73, 0x44, 0x0f, 0x7a, 0xa5, 141 0xab, 0xb4, 0x33, 0x49, 0x0b, 0x2f, 0xbd, 0x03, 142 0xd3, 0x62, 0x17, 0xe9, 0x73, 0xb8, 0x84, 0x48, 143 0x8f, 0x9c, 0x07, 0xaa, 0x52, 0x00, 0x6d, 0xa1, 144 0xeb, 0x2a, 0xc6, 0xa0, 0x95, 0x76, 0x37, 0x78, 145 0x9a, 0x81, 0x65, 0x7f, 0x46, 0x4b, 0x45, 0x5f, 146 0xe1, 0x6d, 0x42, 0xe8, 0x01, 0x13, 0x5c, 0x38, 147 0x51, 0xd4, 0xb4, 0x38, 0x49, 0x7e, 0xcb, 0x62, 148 0x28, 0x1e, 0x3b, 0x82, 0x93, 0x54, 0x48, 0xf1, 149 0xd2, 0x7d, 0xe4, 0x5a, 0xa3, 0xbc, 0x99, 0x83, 150 0x44, 0x4f, 0x3a, 0x77, 0x36, 0x57, 0xce, 0xcf, 151 0x2f, 0x56, 0xbe, 0x80, 0x90, 0x9e, 0x84, 0xea, 152 0x51, 0x1f, 0x8f, 0xcf, 0x90, 0xd4, 0x60, 0xdc, 153 0x5e, 0xb4, 0xf7, 0x10, 0x0b, 0x26, 0xe0, 0xff, 154 0xc4, 0xd1, 0xe5, 0x67, 0x2e, 0xe7, 0xc8, 0x93, 155 0x98, 0x05, 0xb8, 0xa8, 0x45, 0xc0, 0x4d, 0x09, 156 0xdc, 0x84, 0x16, 0x2b, 0x0d, 0x9a, 0x21, 0x53, 157 0x04, 0x8b, 0xd2, 0x0b, 0xbd, 0xa2, 0x4c, 0xa7, 158 0x60, 0xee, 0xd9, 0xe1, 0x1d, 0xd1, 0xb7, 0x4a, 159 0x30, 0x8f, 0x63, 0xd5, 0xa5, 0x8b, 0x33, 0x87, 160 0xda, 0x1a, 0x18, 0x79, 0xf3, 0xe3, 0xa6, 0x17, 161 0x94, 0x2e, 0xab, 0x6e, 0xa0, 0xe3, 0xcd, 0xac, 162 0x50, 0x8c, 0xca, 0xa7, 0x0d, 0x76, 0x37, 0xd1, 163 0x23, 0xe7, 0x05, 0x57, 0x8b, 0xa4, 0x22, 0x83, 164 0xd9, 0x62, 0x52, 0x25, 0xad, 0x07, 0xbb, 0xbf, 165 0xbf, 0xff, 0xbc, 0xfa, 0xee, 0x20, 0x73, 0x91, 166 0x29, 0xff, 0x7f, 0x02, 0x71, 0x62, 0x84, 0xb5, 167 0xf6, 0xb5, 0x25, 0x6b, 0x41, 0xde, 0x92, 0xb7, 168 0x76, 0x3f, 0x91, 0x91, 0x31, 0x1b, 0x41, 0x84, 169 0x62, 0x30, 0x0a, 0x37, 0xa4, 0x5e, 0x18, 0x3a, 170 0x99, 0x08, 0xa5, 0xe6, 0x6d, 0x59, 0x22, 0xec, 171 0x33, 0x39, 0x86, 0x26, 0xf5, 0xab, 0x66, 0xc8, 172 0x08, 0x20, 0xcf, 0x0c, 0xd7, 0x47, 0x45, 0x21, 173 0x0b, 0xf6, 0x59, 0xd5, 0xfe, 0x5c, 0x8d, 0xaa, 174 0x12, 0x7b, 0x6f, 0xa1, 0xf0, 0x52, 0x33, 0x4f, 175 0xf5, 0xce, 0x59, 0xd3, 0xab, 0x66, 0x10, 0xbf, 176 0x06, 0xc4, 0x31, 0x06, 0x73, 0xd6, 0x80, 0xa2, 177 0x78, 0xc2, 0x45, 0xcb, 0x03, 0x65, 0x39, 0xc9, 178 0x09, 0xd1, 0x06, 0x04, 0x33, 0x1a, 0x5a, 0xf1, 179 0xde, 0x01, 0xb8, 0x71, 0x83, 0xc4, 0xb5, 0xb3, 180 0xc3, 0x54, 0x65, 0x33, 0x0d, 0x5a, 0xf7, 0x9b, 181 0x90, 0x7c, 0x27, 0x1f, 0x3a, 0x58, 0xa3, 0xd8, 182 0xfd, 0x30, 0x5f, 0xb7, 0xd2, 0x66, 0xa2, 0x93, 183 0x1c, 0x28, 0xb7, 0xe9, 0x1b, 0x0c, 0xe1, 0x28, 184 0x47, 0x26, 0xbb, 0xe9, 0x7d, 0x7e, 0xdc, 0x96, 185 0x10, 0x92, 0x50, 0x56, 0x7c, 0x06, 0xe2, 0x27, 186 0xb4, 0x08, 0xd3, 0xda, 0x7b, 0x98, 0x34, 0x73, 187 0x9f, 0xdb, 0xf6, 0x62, 0xed, 0x31, 0x41, 0x13, 188 0xd3, 0xa2, 0xa8, 0x4b, 0x3a, 0xc6, 0x1d, 0xe4, 189 0x2f, 0x8c, 0xf8, 0xfb, 0x97, 0x64, 0xf4, 0xb6, 190 0x2f, 0x80, 0x5a, 0xf3, 0x56, 0xe0, 0x40, 0x50, 191 0xd5, 0x19, 0xd0, 0x1e, 0xfc, 0xca, 0xe5, 0xc9, 192 0xd4, 0x60, 0x00, 0x81, 0x2e, 0xa3, 0xcc, 0xb6, 193 0x52, 0xf0, 0xb4, 0xdb, 0x69, 0x99, 0xce, 0x7a, 194 0x32, 0x4c, 0x08, 0xed, 0xaa, 0x10, 0x10, 0xe3, 195 0x6f, 0xee, 0x99, 0x68, 0x95, 0x9f, 0x04, 0x71, 196 0xb2, 0x49, 0x2f, 0x62, 0xa6, 0x5e, 0xb4, 0xef, 197 0x02, 0xed, 0x4f, 0x27, 0xde, 0x4a, 0x0f, 0xfd, 198 0xc1, 0xcc, 0xdd, 0x02, 0x8f, 0x08, 0x16, 0x54, 199 0xdf, 0xda, 0xca, 0xe0, 0x82, 0xf1, 0xb4, 0x31, 200 0x7a, 0xa9, 0x81, 0xfe, 0x90, 0xb7, 0x3e, 0xdb, 201 0xd3, 0x35, 0xc0, 0x20, 0x80, 0x33, 0x46, 0x4a, 202 0x63, 0xab, 0xd1, 0x0d, 0x29, 0xd2, 0xe2, 0x84, 203 0xb8, 0xdb, 0xfa, 0xe9, 0x89, 0x44, 0x86, 0x7c, 204 0xe8, 0x0b, 0xe6, 0x02, 0x6a, 0x07, 0x9b, 0x96, 205 0xd0, 0xdb, 0x2e, 0x41, 0x4c, 0xa1, 0xd5, 0x57, 206 0x45, 0x14, 0xfb, 0xe3, 0xa6, 0x72, 0x5b, 0x87, 207 0x6e, 0x0c, 0x6d, 0x5b, 0xce, 0xe0, 0x2f, 0xe2, 208 0x21, 0x81, 0x95, 0xb0, 0xe8, 0xb6, 0x32, 0x0b, 209 0xb2, 0x98, 0x13, 0x52, 0x5d, 0xfb, 0xec, 0x63, 210 0x17, 0x8a, 0x9e, 0x23, 0x22, 0x36, 0xee, 0xcd, 211 0xda, 0xdb, 0xcf, 0x3e, 0xf1, 0xc7, 0xf1, 0x01, 212 0x12, 0x93, 0x0a, 0xeb, 0x6f, 0xf2, 0x02, 0x15, 213 0x96, 0x77, 0x5d, 0xef, 0x9c, 0xfb, 0x88, 0x91, 214 0x59, 0xf9, 0x84, 0xdd, 0x9b, 0x26, 0x8d, 0x80, 215 0xf9, 0x80, 0x66, 0x2d, 0xac, 0xf7, 0x1f, 0x06, 216 0xba, 0x7f, 0xff, 0xee, 0xed, 0x40, 0x5f, 0xa5, 217 0xd6, 0xbd, 0x8c, 0x5b, 0x46, 0xd2, 0x7e, 0x48, 218 0x4a, 0x65, 0x8f, 0x08, 0x42, 0x60, 0xf7, 0x0f, 219 0xb9, 0x16, 0x0b, 0x0c, 0x1a, 0x06, 0x00, 0x00, 220 }, 221 nil, 222 }, 223 { // has 1 non-empty fixed huffman block then garbage 224 "hello.txt", 225 "hello.txt + garbage", 226 "hello world\n", 227 []byte{ 228 0x1f, 0x8b, 0x08, 0x08, 0xc8, 0x58, 0x13, 0x4a, 229 0x00, 0x03, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2e, 230 0x74, 0x78, 0x74, 0x00, 0xcb, 0x48, 0xcd, 0xc9, 231 0xc9, 0x57, 0x28, 0xcf, 0x2f, 0xca, 0x49, 0xe1, 232 0x02, 0x00, 0x2d, 0x3b, 0x08, 0xaf, 0x0c, 0x00, 233 0x00, 0x00, 'g', 'a', 'r', 'b', 'a', 'g', 'e', '!', '!', '!', 234 }, 235 ErrHeader, 236 }, 237 { // has 1 non-empty fixed huffman block not enough header 238 "hello.txt", 239 "hello.txt + garbage", 240 "hello world\n", 241 []byte{ 242 0x1f, 0x8b, 0x08, 0x08, 0xc8, 0x58, 0x13, 0x4a, 243 0x00, 0x03, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2e, 244 0x74, 0x78, 0x74, 0x00, 0xcb, 0x48, 0xcd, 0xc9, 245 0xc9, 0x57, 0x28, 0xcf, 0x2f, 0xca, 0x49, 0xe1, 246 0x02, 0x00, 0x2d, 0x3b, 0x08, 0xaf, 0x0c, 0x00, 247 0x00, 0x00, gzipID1, 248 }, 249 io.ErrUnexpectedEOF, 250 }, 251 { // has 1 non-empty fixed huffman block but corrupt checksum 252 "hello.txt", 253 "hello.txt + corrupt checksum", 254 "hello world\n", 255 []byte{ 256 0x1f, 0x8b, 0x08, 0x08, 0xc8, 0x58, 0x13, 0x4a, 257 0x00, 0x03, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2e, 258 0x74, 0x78, 0x74, 0x00, 0xcb, 0x48, 0xcd, 0xc9, 259 0xc9, 0x57, 0x28, 0xcf, 0x2f, 0xca, 0x49, 0xe1, 260 0x02, 0x00, 0xff, 0xff, 0xff, 0xff, 0x0c, 0x00, 261 0x00, 0x00, 262 }, 263 ErrChecksum, 264 }, 265 { // has 1 non-empty fixed huffman block but corrupt size 266 "hello.txt", 267 "hello.txt + corrupt size", 268 "hello world\n", 269 []byte{ 270 0x1f, 0x8b, 0x08, 0x08, 0xc8, 0x58, 0x13, 0x4a, 271 0x00, 0x03, 0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x2e, 272 0x74, 0x78, 0x74, 0x00, 0xcb, 0x48, 0xcd, 0xc9, 273 0xc9, 0x57, 0x28, 0xcf, 0x2f, 0xca, 0x49, 0xe1, 274 0x02, 0x00, 0x2d, 0x3b, 0x08, 0xaf, 0xff, 0x00, 275 0x00, 0x00, 276 }, 277 ErrChecksum, 278 }, 279 } 280 281 func TestDecompressor(t *testing.T) { 282 b := new(bytes.Buffer) 283 for _, tt := range gunzipTests { 284 in := bytes.NewBuffer(tt.gzip) 285 gzip, err := NewReader(in) 286 if err != nil { 287 t.Errorf("%s: NewReader: %s", tt.name, err) 288 continue 289 } 290 defer gzip.Close() 291 if tt.name != gzip.Name { 292 t.Errorf("%s: got name %s", tt.name, gzip.Name) 293 } 294 b.Reset() 295 n, err := io.Copy(b, gzip) 296 if err != tt.err { 297 t.Errorf("%s: io.Copy: %v want %v", tt.name, err, tt.err) 298 } 299 s := b.String() 300 if s != tt.raw { 301 t.Errorf("%s: got %d-byte %q want %d-byte %q", tt.name, n, s, len(tt.raw), tt.raw) 302 } 303 } 304 }