1
- package cache_test
1
+ package cache
2
2
3
3
import (
4
- "testing"
5
- "time"
6
-
7
- "github.com/aquasecurity/fanal/cache"
8
4
"github.com/aquasecurity/fanal/types"
9
5
"github.com/aws/aws-sdk-go/service/s3"
10
6
"github.com/aws/aws-sdk-go/service/s3/s3iface"
11
7
"github.com/aws/aws-sdk-go/service/s3/s3manager"
8
+ "golang.org/x/xerrors"
9
+ "reflect"
10
+ "testing"
11
+ "time"
12
12
)
13
13
14
14
type mockS3Client struct {
@@ -19,9 +19,8 @@ func (m *mockS3Client) PutObject(*s3.PutObjectInput) (*s3.PutObjectOutput, error
19
19
return & s3.PutObjectOutput {}, nil
20
20
}
21
21
22
- func (m * mockS3Client ) WaitUntilObjectExists (* s3.HeadObjectInput ) error {
23
- return nil
24
-
22
+ func (m * mockS3Client ) HeadObject (* s3.HeadObjectInput ) (* s3.HeadObjectOutput , error ) {
23
+ return & s3.HeadObjectOutput {}, nil
25
24
}
26
25
27
26
func TestS3Cache_PutBlob (t * testing.T ) {
@@ -63,7 +62,7 @@ func TestS3Cache_PutBlob(t *testing.T) {
63
62
}
64
63
for _ , tt := range tests {
65
64
t .Run (tt .name , func (t * testing.T ) {
66
- c := cache . NewS3Cache (tt .fields .BucketName , tt .fields .Prefix , tt .fields .S3 , tt .fields .Downloader )
65
+ c := NewS3Cache (tt .fields .BucketName , tt .fields .Prefix , tt .fields .S3 , tt .fields .Downloader )
67
66
if err := c .PutBlob (tt .args .blobID , tt .args .blobInfo ); (err != nil ) != tt .wantErr {
68
67
t .Errorf ("S3Cache.PutBlob() error = %v, wantErr %v" , err , tt .wantErr )
69
68
}
@@ -116,10 +115,116 @@ func TestS3Cache_PutArtifact(t *testing.T) {
116
115
}
117
116
for _ , tt := range tests {
118
117
t .Run (tt .name , func (t * testing.T ) {
119
- c := cache . NewS3Cache (tt .fields .BucketName , tt .fields .Prefix , tt .fields .S3 , tt .fields .Downloader )
118
+ c := NewS3Cache (tt .fields .BucketName , tt .fields .Prefix , tt .fields .S3 , tt .fields .Downloader )
120
119
if err := c .PutArtifact (tt .args .artifactID , tt .args .artifactConfig ); (err != nil ) != tt .wantErr {
121
120
t .Errorf ("S3Cache.PutArtifact() error = %v, wantErr %v" , err , tt .wantErr )
122
121
}
123
122
})
124
123
}
125
124
}
125
+
126
+ func TestS3Cache_getIndex (t * testing.T ) {
127
+ mockSvc := & mockS3Client {}
128
+
129
+ type fields struct {
130
+ S3 s3iface.S3API
131
+ Downloader * s3manager.Downloader
132
+ BucketName string
133
+ Prefix string
134
+ }
135
+ type args struct {
136
+ key string
137
+ keyType string
138
+ }
139
+ tests := []struct {
140
+ name string
141
+ fields fields
142
+ args args
143
+ wantErr bool
144
+ }{
145
+ {
146
+ name : "happy path" ,
147
+ fields : fields {
148
+ S3 : mockSvc ,
149
+ BucketName : "test" ,
150
+ Prefix : "prefix" ,
151
+ },
152
+ args : args {
153
+ key : "key" ,
154
+ keyType : "artifactBucket" ,
155
+ },
156
+ wantErr : false ,
157
+ },
158
+ }
159
+ for _ , tt := range tests {
160
+ t .Run (tt .name , func (t * testing.T ) {
161
+ c := NewS3Cache (tt .fields .BucketName , tt .fields .Prefix , tt .fields .S3 , tt .fields .Downloader )
162
+ if err := c .getIndex (tt .args .key , tt .args .keyType ); (err != nil ) != tt .wantErr {
163
+ t .Errorf ("S3Cache.getIndex() error = %v, wantErr %v" , err , tt .wantErr )
164
+ }
165
+ })
166
+ }
167
+ }
168
+
169
+ type mockS3ClientMissingBlobs struct {
170
+ s3iface.S3API
171
+ }
172
+
173
+ func (m * mockS3ClientMissingBlobs ) PutObject (* s3.PutObjectInput ) (* s3.PutObjectOutput , error ) {
174
+ return & s3.PutObjectOutput {}, nil
175
+ }
176
+
177
+ func (m * mockS3ClientMissingBlobs ) HeadObject (* s3.HeadObjectInput ) (* s3.HeadObjectOutput , error ) {
178
+ return & s3.HeadObjectOutput {}, xerrors .Errorf ("the object doesn't exist in S3" )
179
+ }
180
+
181
+ func TestS3Cache_MissingBlobs (t * testing.T ) {
182
+ mockSvc := & mockS3ClientMissingBlobs {}
183
+
184
+ type fields struct {
185
+ S3 s3iface.S3API
186
+ Downloader * s3manager.Downloader
187
+ BucketName string
188
+ Prefix string
189
+ }
190
+ type args struct {
191
+ artifactID string
192
+ blobIDs []string
193
+ }
194
+ tests := []struct {
195
+ name string
196
+ fields fields
197
+ args args
198
+ want bool
199
+ wantStringSlice []string
200
+ wantErr bool
201
+ }{{
202
+ name : "happy path" ,
203
+ fields : fields {
204
+ S3 : mockSvc ,
205
+ BucketName : "test" ,
206
+ Prefix : "prefix" ,
207
+ },
208
+ args : args {artifactID : "sha256:58701fd185bda36cab0557bb6438661831267aa4a9e0b54211c4d5317a48aff4" , blobIDs : []string {"sha256:24df0d4e20c0f42d3703bf1f1db2bdd77346c7956f74f423603d651e8e5ae8a7" }},
209
+ want : true ,
210
+ wantStringSlice : []string {"sha256:24df0d4e20c0f42d3703bf1f1db2bdd77346c7956f74f423603d651e8e5ae8a7" },
211
+ wantErr : false ,
212
+ },
213
+ }
214
+ for _ , tt := range tests {
215
+ t .Run (tt .name , func (t * testing.T ) {
216
+ c := NewS3Cache (tt .fields .BucketName , tt .fields .Prefix , tt .fields .S3 , tt .fields .Downloader )
217
+ got , got1 , err := c .MissingBlobs (tt .args .artifactID , tt .args .blobIDs )
218
+ if (err != nil ) != tt .wantErr {
219
+ t .Errorf ("S3Cache.MissingBlobs() error = %v, wantErr %v" , err , tt .wantErr )
220
+ return
221
+ }
222
+ if got != tt .want {
223
+ t .Errorf ("S3Cache.MissingBlobs() got = %v, want %v" , got , tt .want )
224
+ }
225
+ if ! reflect .DeepEqual (got1 , tt .wantStringSlice ) {
226
+ t .Errorf ("S3Cache.MissingBlobs() got1 = %v, want %v" , got1 , tt .wantStringSlice )
227
+ }
228
+ })
229
+ }
230
+ }
0 commit comments