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