Skip to content

Commit cb1ed60

Browse files
Merge pull request gocsaf#545 from csaf-poc/expand-util-tests
Extend unit test coverage in util
2 parents 5c6736b + 3084cdb commit cb1ed60

File tree

6 files changed

+578
-1
lines changed

6 files changed

+578
-1
lines changed

util/csv_test.go

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
// This file is Free Software under the Apache-2.0 License
2+
// without warranty, see README.md and LICENSES/Apache-2.0.txt for details.
3+
//
4+
// SPDX-License-Identifier: Apache-2.0
5+
//
6+
// SPDX-FileCopyrightText: 2022 German Federal Office for Information Security (BSI) <https://www.bsi.bund.de>
7+
// Software-Engineering: 2022 Intevation GmbH <https://intevation.de>
8+
9+
package util
10+
11+
import (
12+
"bytes"
13+
"testing"
14+
)
15+
16+
func TestCSV(t *testing.T) {
17+
buf := new(bytes.Buffer)
18+
csvWriter := NewFullyQuotedCSWWriter(buf)
19+
for _, x := range [][]string{{"a", "b", "c"}, {"d", "e", "f"}} {
20+
if err := csvWriter.Write(x); err != nil {
21+
t.Error(err)
22+
}
23+
}
24+
25+
csvWriter.Flush()
26+
if err := csvWriter.Error(); err != nil {
27+
t.Error(err)
28+
}
29+
for _, want := range []string{`"a","b","c"`, `"d","e","f"`} {
30+
got, err := buf.ReadString('\n')
31+
if err != nil {
32+
t.Error(err)
33+
}
34+
if got[:len(got)-1] != want {
35+
t.Errorf("FullyQuotedCSWWriter: Expected %q but got %q.", want, got)
36+
}
37+
}
38+
}

util/file_test.go

Lines changed: 136 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,8 @@ package util
1010

1111
import (
1212
"bytes"
13+
"os"
14+
"path/filepath"
1315
"testing"
1416
)
1517

@@ -55,8 +57,51 @@ func TestConformingFileName(t *testing.T) {
5557
}
5658
}
5759

58-
func TestNWriter(t *testing.T) {
60+
func TestIDMatchesFilename(t *testing.T) {
61+
pathEval := NewPathEval()
62+
63+
doc := make(map[string]any)
64+
doc["document"] = map[string]any{
65+
"tracking": map[string]any{
66+
"id": "valid.json",
67+
},
68+
}
69+
70+
if err := IDMatchesFilename(pathEval, doc, "valid.json"); err != nil {
71+
t.Errorf("IDMatchesFilename: Expected nil, got %q", err)
72+
}
73+
74+
if err := IDMatchesFilename(pathEval, doc, "different_file_name.json"); err == nil {
75+
t.Error("IDMatchesFilename: Expected error, got nil")
76+
}
5977

78+
doc["document"] = map[string]any{
79+
"tracking": map[string]any{},
80+
}
81+
if err := IDMatchesFilename(pathEval, doc, "valid.json"); err == nil {
82+
t.Error("IDMatchesFilename: Expected error, got nil")
83+
}
84+
}
85+
86+
func TestPathExists(t *testing.T) {
87+
got, err := PathExists("/this/path/does/not/exist")
88+
if err != nil {
89+
t.Error(err)
90+
}
91+
if got != false {
92+
t.Error("PathExists: Expected false, got true")
93+
}
94+
dir := t.TempDir()
95+
got, err = PathExists(dir)
96+
if err != nil {
97+
t.Error(err)
98+
}
99+
if got != true {
100+
t.Error("PathExists: Expected true, got false")
101+
}
102+
}
103+
104+
func TestNWriter(t *testing.T) {
60105
msg := []byte("Gruß!\n")
61106

62107
first, second := msg[:len(msg)/2], msg[len(msg)/2:]
@@ -78,3 +123,93 @@ func TestNWriter(t *testing.T) {
78123
t.Errorf("Expected %q, but got %q", msg, out)
79124
}
80125
}
126+
127+
func TestWriteToFile(t *testing.T) {
128+
filename := filepath.Join(t.TempDir(), "test_file")
129+
wt := bytes.NewBufferString("test_data")
130+
if err := WriteToFile(filename, wt); err != nil {
131+
t.Error(err)
132+
}
133+
fileData, err := os.ReadFile(filename)
134+
if err != nil {
135+
t.Error(err)
136+
}
137+
if !bytes.Equal(fileData, []byte("test_data")) {
138+
t.Errorf("DeepCopy: Expected test_data, got %v", fileData)
139+
}
140+
}
141+
142+
func TestMakeUniqFile(t *testing.T) {
143+
dir := t.TempDir()
144+
_, file, err := MakeUniqFile(dir)
145+
if err != nil {
146+
t.Error(err)
147+
}
148+
if _, err = file.Write([]byte("test_data")); err != nil {
149+
t.Error(err)
150+
}
151+
if err = file.Close(); err != nil {
152+
t.Error(err)
153+
}
154+
}
155+
156+
func Test_mkUniq(t *testing.T) {
157+
dir := t.TempDir()
158+
name, err := mkUniq(dir+"/", func(name string) error {
159+
return nil
160+
})
161+
if err != nil {
162+
t.Error(err)
163+
}
164+
firstTime := true
165+
name1, err := mkUniq(dir+"/", func(_ string) error {
166+
if firstTime {
167+
firstTime = false
168+
return os.ErrExist
169+
}
170+
return nil
171+
})
172+
if err != nil {
173+
t.Error(err)
174+
}
175+
if name == name1 {
176+
t.Errorf("mkUniq: Expected unique names, got %v and %v", name, name1)
177+
}
178+
}
179+
180+
func TestDeepCopy(t *testing.T) {
181+
dir := t.TempDir()
182+
if err := os.MkdirAll(filepath.Join(dir, "src/folder0"), 0755); err != nil {
183+
t.Fatal(err)
184+
}
185+
if err := os.MkdirAll(filepath.Join(dir, "dst"), 0755); err != nil {
186+
t.Fatal(err)
187+
}
188+
if err := os.MkdirAll(filepath.Join(dir, "dst1"), 0755); err != nil {
189+
t.Fatal(err)
190+
}
191+
if err := os.WriteFile(filepath.Join(dir, "src/folder0/test_file"), []byte("test_data"), 0755); err != nil {
192+
t.Fatal(err)
193+
}
194+
195+
if err := DeepCopy(filepath.Join(dir, "dst"), filepath.Join(dir, "src")); err != nil {
196+
t.Error(err)
197+
}
198+
199+
fileData, err := os.ReadFile(filepath.Join(dir, "dst/folder0/test_file"))
200+
if err != nil {
201+
t.Error(err)
202+
}
203+
204+
if !bytes.Equal(fileData, []byte("test_data")) {
205+
t.Errorf("DeepCopy: Expected test_data, got %v", fileData)
206+
}
207+
208+
if err = DeepCopy("/path/does/not/exist", filepath.Join(dir, "src")); err == nil {
209+
t.Error("DeepCopy: Expected error, got nil")
210+
}
211+
212+
if err = DeepCopy(filepath.Join(dir, "dst1"), "/path/does/not/exist"); err == nil {
213+
t.Error("DeepCopy: Expected error, got nil")
214+
}
215+
}

util/hash_test.go

Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
// This file is Free Software under the Apache-2.0 License
2+
// without warranty, see README.md and LICENSES/Apache-2.0.txt for details.
3+
//
4+
// SPDX-License-Identifier: Apache-2.0
5+
//
6+
// SPDX-FileCopyrightText: 2022 German Federal Office for Information Security (BSI) <https://www.bsi.bund.de>
7+
// Software-Engineering: 2022 Intevation GmbH <https://intevation.de>
8+
9+
package util
10+
11+
import (
12+
"hash"
13+
"os"
14+
"path/filepath"
15+
"reflect"
16+
"strings"
17+
"testing"
18+
)
19+
20+
func TestHashFromReader(t *testing.T) {
21+
r := strings.NewReader("deadbeef")
22+
want := []byte{0xde, 0xad, 0xbe, 0xef}
23+
if got, err := HashFromReader(r); !reflect.DeepEqual(want, got) {
24+
if err != nil {
25+
t.Error(err)
26+
}
27+
t.Errorf("HashFromReader: Expected %v, got %v", want, got)
28+
}
29+
}
30+
31+
func TestHashFromFile(t *testing.T) {
32+
dir := t.TempDir()
33+
filePath := filepath.Join(dir, "test_file")
34+
testFile, err := os.Create(filePath)
35+
if err != nil {
36+
t.Error(err)
37+
}
38+
39+
testFile.WriteString("deadbeef")
40+
want := []byte{0xde, 0xad, 0xbe, 0xef}
41+
42+
testFile.Close()
43+
44+
if got, err := HashFromFile(filePath); !reflect.DeepEqual(want, got) {
45+
if err != nil {
46+
t.Error(err)
47+
}
48+
t.Errorf("HashFromFile: Expected %v, got %v", want, got)
49+
}
50+
}
51+
52+
type deadbeefHash struct {
53+
hash.Hash
54+
}
55+
56+
func (deadbeefHash) Write(p []byte) (int, error) { return len(p), nil }
57+
func (deadbeefHash) Sum(_ []byte) []byte { return []byte{0xde, 0xad, 0xbe, 0xef} }
58+
59+
func TestWriteHashToFile(t *testing.T) {
60+
dir := t.TempDir()
61+
filePath := filepath.Join(dir, "test_file")
62+
63+
hashArg := deadbeefHash{}
64+
nameArg := "name"
65+
want := "deadbeef " + nameArg + "\n"
66+
67+
if err := WriteHashToFile(filePath, nameArg, hashArg, []byte{}); err != nil {
68+
t.Error(err)
69+
}
70+
testFile, err := os.Open(filePath)
71+
if err != nil {
72+
t.Error(err)
73+
}
74+
defer testFile.Close()
75+
fileContent, err := os.ReadFile(filePath)
76+
if err != nil {
77+
t.Error(err)
78+
}
79+
if got := string(fileContent); got != want {
80+
t.Errorf("WriteHashToFile: Expected %v, got %v", want, got)
81+
}
82+
}
83+
84+
func TestWriteHashSumToFile(t *testing.T) {
85+
dir := t.TempDir()
86+
filePath := filepath.Join(dir, "test_file")
87+
88+
sum := []byte{0xde, 0xad, 0xbe, 0xef}
89+
nameArg := "name"
90+
want := "deadbeef " + nameArg + "\n"
91+
92+
if err := WriteHashSumToFile(filePath, nameArg, sum); err != nil {
93+
t.Error(err)
94+
}
95+
testFile, err := os.Open(filePath)
96+
if err != nil {
97+
t.Error(err)
98+
}
99+
defer testFile.Close()
100+
fileContent, err := os.ReadFile(filePath)
101+
if err != nil {
102+
t.Error(err)
103+
}
104+
if got := string(fileContent); got != want {
105+
t.Errorf("WriteHashSumToFile: Expected %v, got %v", want, got)
106+
}
107+
}

0 commit comments

Comments
 (0)