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  }