Home | History | Annotate | Download | only in zip
      1 // Copyright 2017 Google Inc. All rights reserved.
      2 //
      3 // Licensed under the Apache License, Version 2.0 (the "License");
      4 // you may not use this file except in compliance with the License.
      5 // You may obtain a copy of the License at
      6 //
      7 //     http://www.apache.org/licenses/LICENSE-2.0
      8 //
      9 // Unless required by applicable law or agreed to in writing, software
     10 // distributed under the License is distributed on an "AS IS" BASIS,
     11 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     12 // See the License for the specific language governing permissions and
     13 // limitations under the License.
     14 
     15 package zip
     16 
     17 import (
     18 	"bytes"
     19 	"testing"
     20 )
     21 
     22 var stripZip64Testcases = []struct {
     23 	name string
     24 	in   []byte
     25 	out  []byte
     26 }{
     27 	{
     28 		name: "empty",
     29 		in:   []byte{},
     30 		out:  []byte{},
     31 	},
     32 	{
     33 		name: "trailing data",
     34 		in:   []byte{1, 2, 3},
     35 		out:  []byte{1, 2, 3},
     36 	},
     37 	{
     38 		name: "valid non-zip64 extra",
     39 		in:   []byte{2, 0, 2, 0, 1, 2},
     40 		out:  []byte{2, 0, 2, 0, 1, 2},
     41 	},
     42 	{
     43 		name: "two valid non-zip64 extras",
     44 		in:   []byte{2, 0, 2, 0, 1, 2, 2, 0, 0, 0},
     45 		out:  []byte{2, 0, 2, 0, 1, 2, 2, 0, 0, 0},
     46 	},
     47 	{
     48 		name: "simple zip64 extra",
     49 		in:   []byte{1, 0, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8},
     50 		out:  []byte{},
     51 	},
     52 	{
     53 		name: "zip64 extra and valid non-zip64 extra",
     54 		in:   []byte{1, 0, 8, 0, 1, 2, 3, 4, 5, 6, 7, 8, 2, 0, 0, 0},
     55 		out:  []byte{2, 0, 0, 0},
     56 	},
     57 	{
     58 		name: "invalid extra",
     59 		in:   []byte{0, 0, 8, 0, 0, 0},
     60 		out:  []byte{0, 0, 8, 0, 0, 0},
     61 	},
     62 }
     63 
     64 func TestStripZip64Extras(t *testing.T) {
     65 	for _, testcase := range stripZip64Testcases {
     66 		got := stripZip64Extras(testcase.in)
     67 		if !bytes.Equal(got, testcase.out) {
     68 			t.Errorf("Failed testcase %s\ninput: %v\n want: %v\n  got: %v\n", testcase.name, testcase.in, testcase.out, got)
     69 		}
     70 	}
     71 }
     72