| // 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_applyAllowLists(t *testing.T) { |
| type args struct { |
| diff zipDiff |
| allowLists []allowList |
| } |
| tests := []struct { |
| name string |
| args args |
| want zipDiff |
| wantErr bool |
| }{ |
| { |
| name: "simple", |
| args: args{ |
| diff: zipDiff{ |
| onlyInA: []*ZipArtifactFile{f1a, f2}, |
| }, |
| allowLists: []allowList{{path: "dir/f1"}}, |
| }, |
| want: zipDiff{ |
| onlyInA: []*ZipArtifactFile{f2}, |
| }, |
| }, |
| { |
| name: "glob", |
| args: args{ |
| diff: zipDiff{ |
| onlyInA: []*ZipArtifactFile{f1a, f2}, |
| }, |
| allowLists: []allowList{{path: "dir/*"}}, |
| }, |
| want: zipDiff{}, |
| }, |
| { |
| name: "modified", |
| args: args{ |
| diff: zipDiff{ |
| modified: [][2]*ZipArtifactFile{{f1a, f1b}}, |
| }, |
| allowLists: []allowList{{path: "dir/*"}}, |
| }, |
| want: zipDiff{}, |
| }, |
| { |
| name: "matching lines", |
| args: args{ |
| diff: zipDiff{ |
| modified: [][2]*ZipArtifactFile{{f1a, f1b}}, |
| }, |
| allowLists: []allowList{{path: "dir/*", ignoreMatchingLines: []string{"foo: .*"}}}, |
| }, |
| want: zipDiff{}, |
| }, |
| } |
| for _, tt := range tests { |
| t.Run(tt.name, func(t *testing.T) { |
| got, err := applyAllowLists(tt.args.diff, tt.args.allowLists) |
| if (err != nil) != tt.wantErr { |
| t.Errorf("Test_applyAllowLists() error = %v, wantErr %v", err, tt.wantErr) |
| return |
| } |
| if !reflect.DeepEqual(got, tt.want) { |
| t.Errorf("Test_applyAllowLists() = %v, want %v", got, tt.want) |
| } |
| }) |
| } |
| } |