-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathmain_test.go
189 lines (161 loc) · 4.14 KB
/
main_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
package main
import (
"crypto/sha256"
"fmt"
"io"
"os"
"path/filepath"
"testing"
)
var (
// nameDir string = "tmp"
// nameDirTar string = "tmp.tar"
// nameDirSnapped string = "tmp.tar.sz"
// nameDirUnsnapped string = "tmp(1)"
// nameReg string = "tmp/tmp/big-file"
// nameRegSnapped string = "tmp/tmp/big-file.sz"
nameDir = "tmp"
nameDirTar = nameDir + ".tar"
nameDirSnapped = nameDirTar + ".sz"
nameDirUnsnapped = nameDir + "(1)"
nameReg = filepath.Join(nameDir, "tmp", "big-file")
nameRegSnapped = nameReg + ".sz"
nameRegUnsnapped = filepath.Join(nameDirUnsnapped, "tmp", "big-file")
nameRegSnappedUnsnapped = nameRegUnsnapped + ".sz"
sumReg = "ba9670d3cf03043c7cb72acfdc2991f63fb1d2eb13e32306ef61c219d4e81ef0"
sumRegSnapped = "ec94e9ebb6771856e0a574ecf735c6c93bd686f11e9d821809246cec45378800"
)
// TestSnap tests snappy compression of a file.
func TestSnap(t *testing.T) {
srcName := nameReg
dstNameExpected := nameRegSnapped
sumName := nameRegSnapped
sumExpected := sumRegSnapped
t.Run("snap", func(t *testing.T) {
dstName, err := compressOrDecompress(srcName)
if err != nil {
t.Error(err)
return
}
if dstName != dstNameExpected {
t.Errorf("Expected `dstName` to be %v but got %v.\n", dstNameExpected, dstName)
return
}
})
t.Run("sha256sum", func(t *testing.T) {
sum, err := sha256sum(sumName)
if err != nil {
t.Error(err)
return
}
if sum != sumExpected {
t.Errorf("Expected `sum` to be %v but got %v.\n", sumExpected, sum)
return
}
})
}
// TestTarAndSnap tests tar archiving and snappy compression of file.
func TestTarAndSnap(t *testing.T) {
srcName := nameDir
tmpName := nameDirTar
dstNameExpected := nameDirSnapped
t.Run("tarAndSnap", func(t *testing.T) {
dstName, err := compressOrDecompress(srcName)
if err != nil {
t.Error(err)
return
}
if dstName != dstNameExpected {
t.Errorf("Expected `dstName` to be %v but got %v.\n", dstNameExpected, dstName)
return
}
if exists(tmpName) {
t.Errorf("Temporary archive %v should have been removed.\n", tmpName)
return
}
})
// snappy compressed files do not have a consistent checksum
}
// TestUnsnapAndUntar tests tar extraction and snappy decompression of file.
func TestUnsnapAndUntar(t *testing.T) {
srcName := nameDirSnapped
tmpName := nameDirTar
dstNameExpected := nameDirUnsnapped
sumName := nameRegUnsnapped
sumExpected := sumReg
sumName2 := nameRegSnappedUnsnapped
sumExpected2 := sumRegSnapped
t.Run("unsnapAndUntar", func(t *testing.T) {
dstName, err := compressOrDecompress(srcName)
if err != nil {
t.Error(err)
return
}
if dstName != dstNameExpected {
t.Errorf("Expected `dstName` to be %v but got %v.\n", dstNameExpected, dstName)
return
}
if exists(tmpName) {
t.Errorf("Temporary archive %v should have been removed.\n", tmpName)
return
}
})
t.Run("sha256sum1", func(t *testing.T) {
sum, err := sha256sum(sumName)
if err != nil {
t.Error(err)
return
}
if sum != sumExpected {
t.Errorf("Expected `sum` to be %v but got %v.\n", sumExpected, sum)
return
}
})
t.Run("sha256sum2", func(t *testing.T) {
sum2, err := sha256sum(sumName2)
if err != nil {
t.Error(err)
return
}
if sum2 != sumExpected2 {
t.Errorf("Expected `sum2` to be %v but got %v.\n", sumExpected2, sum2)
return
}
})
}
// TestCleanup removes files created by this test.
func TestCleanup(t *testing.T) {
paths := []string{
nameRegSnapped,
nameDirSnapped,
nameDirUnsnapped,
}
for _, path := range paths {
if err := os.RemoveAll(path); err != nil {
defer t.Error(err)
}
}
}
func sha256sum(path string) (string, error) {
file, err := os.Open(path)
if err != nil {
return "", err
}
defer file.Close()
hash := sha256.New()
_, err = io.Copy(hash, file)
if err != nil {
return "", err
}
// If running low on RAM, use this instead.
// hash := sha256.New()
// blockSize := sha256.BlockSize
// buf := make([]byte, blockSize)
//
// _, err = io.CopyBuffer(hash, file, buf)
// if err != nil {
// return "", err
// }
sum := fmt.Sprintf("%x", hash.Sum(nil))
return sum, nil
}