github.com/u-root/u-root@v7.0.1-0.20200915234505-ad7babab0a8e+incompatible/pkg/gzip/gunzip_test.go (about)

     1  // Copyright 2017-2018 the u-root 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  func Test_Decompress(t *testing.T) {
    14  	type args struct {
    15  		r         io.Reader
    16  		blocksize int
    17  		processes int
    18  	}
    19  	tests := []struct {
    20  		name    string
    21  		args    args
    22  		wantW   []byte
    23  		wantErr bool
    24  	}{
    25  		{
    26  			name: "Basic Decompress",
    27  			args: args{
    28  				r:         bytes.NewReader([]byte("\x1f\x8b\b\x00\x00\tn\x88\x02\xff\nI-.Q\x80\x13\x00\x00\x00\x00\xff\xff\x01\x00\x00\xff\xffG?\xfc\xcc\x0e\x00\x00\x00")),
    29  				blocksize: 128,
    30  				processes: 1,
    31  			},
    32  			wantW:   []byte("Test Test Test"),
    33  			wantErr: false,
    34  		},
    35  		{
    36  			name: "Zeros",
    37  			args: args{
    38  				r:         bytes.NewReader([]byte("\x1f\x8b\b\x00\x00\tn\x88\x02\xff2 \x1d\x00\x00\x00\x00\xff\xff\x01\x00\x00\xff\xffR6\xe3\xeb3\x00\x00\x00")),
    39  				blocksize: 128,
    40  				processes: 1,
    41  			},
    42  			wantW:   []byte("000000000000000000000000000000000000000000000000000"),
    43  			wantErr: false,
    44  		},
    45  		{
    46  			name: "Nil",
    47  			args: args{
    48  				r:         bytes.NewReader([]byte(nil)),
    49  				blocksize: 128,
    50  				processes: 1,
    51  			},
    52  			wantErr: true,
    53  		},
    54  		{
    55  			name: "Corrupt input",
    56  			args: args{
    57  				r:         bytes.NewReader([]byte("\x1f\x8b\b\x00\x00\t\x88\x04\xff\x00\x00\x00\xff\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00")),
    58  				blocksize: 128,
    59  				processes: 1,
    60  			},
    61  			wantErr: true,
    62  		},
    63  		{
    64  			name: "Invalid header trailing garbage",
    65  			args: args{
    66  				r:         bytes.NewReader([]byte("\x1f\x8b\b\x00\x00\tn\x88\x04\xff\x00\x00\x00\xff\xff\x01\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00")),
    67  				blocksize: 128,
    68  				processes: 1,
    69  			},
    70  			wantErr: true,
    71  		},
    72  	}
    73  	for _, tt := range tests {
    74  		t.Run(tt.name, func(t *testing.T) {
    75  			w := &bytes.Buffer{}
    76  			if err := Decompress(tt.args.r, w, tt.args.blocksize, tt.args.processes); (err != nil) != tt.wantErr {
    77  				t.Errorf("Decompress() error = %v, wantErr %v", err, tt.wantErr)
    78  				return
    79  			}
    80  			gotW := w.Bytes()
    81  			if !bytes.Equal(gotW, tt.wantW) {
    82  				t.Errorf("Decompress() = %q, want %q", gotW, tt.wantW)
    83  			}
    84  		})
    85  	}
    86  }