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
| // Copyright 2019 Google Inc. All rights reserved.
| //
| // Licensed under the Apache License, Version 2.0 (the "License");
| // you may not use this file except in compliance with the License.
| // You may obtain a copy of the License at
| //
| // http://www.apache.org/licenses/LICENSE-2.0
| //
| // Unless required by applicable law or agreed to in writing, software
| // distributed under the License is distributed on an "AS IS" BASIS,
| // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
| // See the License for the specific language governing permissions and
| // limitations under the License.
|
| package main
|
| import (
| "archive/zip"
| "bytes"
| "reflect"
| "testing"
| )
|
| func bytesToZipArtifactFile(name string, data []byte) *ZipArtifactFile {
| buf := &bytes.Buffer{}
| w := zip.NewWriter(buf)
| f, err := w.Create(name)
| if err != nil {
| panic(err)
| }
| _, err = f.Write(data)
| if err != nil {
| panic(err)
| }
|
| w.Close()
|
| r, err := zip.NewReader(bytes.NewReader(buf.Bytes()), int64(buf.Len()))
| if err != nil {
| panic(err)
| }
|
| return &ZipArtifactFile{r.File[0]}
| }
|
| var f1a = bytesToZipArtifactFile("dir/f1", []byte(`
| a
| foo: bar
| c
| `))
|
| var f1b = bytesToZipArtifactFile("dir/f1", []byte(`
| a
| foo: baz
| c
| `))
|
| var f2 = bytesToZipArtifactFile("dir/f2", nil)
|
| func Test_applyWhitelists(t *testing.T) {
| type args struct {
| diff zipDiff
| whitelists []whitelist
| }
| tests := []struct {
| name string
| args args
| want zipDiff
| wantErr bool
| }{
| {
| name: "simple",
| args: args{
| diff: zipDiff{
| onlyInA: []*ZipArtifactFile{f1a, f2},
| },
| whitelists: []whitelist{{path: "dir/f1"}},
| },
| want: zipDiff{
| onlyInA: []*ZipArtifactFile{f2},
| },
| },
| {
| name: "glob",
| args: args{
| diff: zipDiff{
| onlyInA: []*ZipArtifactFile{f1a, f2},
| },
| whitelists: []whitelist{{path: "dir/*"}},
| },
| want: zipDiff{},
| },
| {
| name: "modified",
| args: args{
| diff: zipDiff{
| modified: [][2]*ZipArtifactFile{{f1a, f1b}},
| },
| whitelists: []whitelist{{path: "dir/*"}},
| },
| want: zipDiff{},
| },
| {
| name: "matching lines",
| args: args{
| diff: zipDiff{
| modified: [][2]*ZipArtifactFile{{f1a, f1b}},
| },
| whitelists: []whitelist{{path: "dir/*", ignoreMatchingLines: []string{"foo: .*"}}},
| },
| want: zipDiff{},
| },
| }
| for _, tt := range tests {
| t.Run(tt.name, func(t *testing.T) {
| got, err := applyWhitelists(tt.args.diff, tt.args.whitelists)
| if (err != nil) != tt.wantErr {
| t.Errorf("applyWhitelists() error = %v, wantErr %v", err, tt.wantErr)
| return
| }
| if !reflect.DeepEqual(got, tt.want) {
| t.Errorf("applyWhitelists() = %v, want %v", got, tt.want)
| }
| })
| }
| }
|
|