1// Copyright 2014-2017 Ulrich Kunitz. 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 5package xz 6 7import ( 8 "bytes" 9 "io" 10 "io/ioutil" 11 "os" 12 "testing" 13) 14 15func TestReaderSimple(t *testing.T) { 16 const file = "fox.xz" 17 xz, err := os.Open(file) 18 if err != nil { 19 t.Fatalf("os.Open(%q) error %s", file, err) 20 } 21 r, err := NewReader(xz) 22 if err != nil { 23 t.Fatalf("NewReader error %s", err) 24 } 25 var buf bytes.Buffer 26 if _, err = io.Copy(&buf, r); err != nil { 27 t.Fatalf("io.Copy error %s", err) 28 } 29} 30 31func TestReaderSingleStream(t *testing.T) { 32 data, err := ioutil.ReadFile("fox.xz") 33 if err != nil { 34 t.Fatalf("ReadFile error %s", err) 35 } 36 xz := bytes.NewReader(data) 37 rc := ReaderConfig{SingleStream: true} 38 r, err := rc.NewReader(xz) 39 if err != nil { 40 t.Fatalf("NewReader error %s", err) 41 } 42 var buf bytes.Buffer 43 if _, err = io.Copy(&buf, r); err != nil { 44 t.Fatalf("io.Copy error %s", err) 45 } 46 buf.Reset() 47 data = append(data, 0) 48 xz = bytes.NewReader(data) 49 r, err = rc.NewReader(xz) 50 if err != nil { 51 t.Fatalf("NewReader error %s", err) 52 } 53 if _, err = io.Copy(&buf, r); err != errUnexpectedData { 54 t.Fatalf("io.Copy returned %v; want %v", err, errUnexpectedData) 55 } 56} 57 58func TestReaaderMultipleStreams(t *testing.T) { 59 data, err := ioutil.ReadFile("fox.xz") 60 if err != nil { 61 t.Fatalf("ReadFile error %s", err) 62 } 63 m := make([]byte, 0, 4*len(data)+4*4) 64 m = append(m, data...) 65 m = append(m, data...) 66 m = append(m, 0, 0, 0, 0) 67 m = append(m, data...) 68 m = append(m, 0, 0, 0, 0) 69 m = append(m, 0, 0, 0, 0) 70 m = append(m, data...) 71 m = append(m, 0, 0, 0, 0) 72 xz := bytes.NewReader(m) 73 r, err := NewReader(xz) 74 if err != nil { 75 t.Fatalf("NewReader error %s", err) 76 } 77 var buf bytes.Buffer 78 if _, err = io.Copy(&buf, r); err != nil { 79 t.Fatalf("io.Copy error %s", err) 80 } 81} 82