@@ -228,6 +228,95 @@ public async Task ExecuteTask_WhenFailedToMonitorContainer_ExpectTaskToBeAccepte
228228 runner . Dispose ( ) ;
229229 }
230230
231+ [ Fact ( DisplayName = "ExecuteTask - do not pull the image when the specified image exists" ) ]
232+ public async Task ExecuteTask_WhenImageExists_ExpectNotToPull ( )
233+ {
234+ var payloadFiles = new List < VirtualFileInfo > ( )
235+ {
236+ new VirtualFileInfo ( "file.dcm" , "path/to/file.dcm" , "etag" , 1000 )
237+ } ;
238+ var contianerId = Guid . NewGuid ( ) . ToString ( ) ;
239+
240+ _dockerClient . Setup ( p => p . Images . CreateImageAsync (
241+ It . IsAny < ImagesCreateParameters > ( ) ,
242+ It . IsAny < AuthConfig > ( ) ,
243+ It . IsAny < IProgress < JSONMessage > > ( ) ,
244+ It . IsAny < CancellationToken > ( ) ) ) ;
245+ _dockerClient . Setup ( p => p . Images . ListImagesAsync (
246+ It . IsAny < ImagesListParameters > ( ) ,
247+ It . IsAny < CancellationToken > ( ) ) )
248+ . ReturnsAsync ( new List < ImagesListResponse > ( ) { new ImagesListResponse ( ) } ) ;
249+ _dockerClient . Setup ( p => p . Containers . CreateContainerAsync (
250+ It . IsAny < CreateContainerParameters > ( ) ,
251+ It . IsAny < CancellationToken > ( ) ) )
252+ . ReturnsAsync ( new CreateContainerResponse { ID = contianerId , Warnings = new List < string > ( ) { "warning" } } ) ;
253+
254+ _storageService . Setup ( p => p . ListObjectsAsync ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < bool > ( ) , It . IsAny < CancellationToken > ( ) ) )
255+ . ReturnsAsync ( payloadFiles ) ;
256+ _storageService . Setup ( p => p . GetObjectAsync ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) )
257+ . ReturnsAsync ( new MemoryStream ( Encoding . UTF8 . GetBytes ( "hello" ) ) ) ;
258+
259+ var message = GenerateTaskDispatchEventWithValidArguments ( ) ;
260+
261+ var runner = new DockerPlugin ( _serviceScopeFactory . Object , _logger . Object , message ) ;
262+ var result = await runner . ExecuteTask ( CancellationToken . None ) . ConfigureAwait ( false ) ;
263+
264+ _dockerClient . Verify ( p => p . Images . CreateImageAsync (
265+ It . IsAny < ImagesCreateParameters > ( ) ,
266+ It . IsAny < AuthConfig > ( ) ,
267+ It . IsAny < IProgress < JSONMessage > > ( ) ,
268+ It . IsAny < CancellationToken > ( ) ) , Times . Never ( ) ) ;
269+ _dockerClient . Verify ( p => p . Images . ListImagesAsync (
270+ It . IsAny < ImagesListParameters > ( ) ,
271+ It . IsAny < CancellationToken > ( ) ) , Times . Once ( ) ) ;
272+ runner . Dispose ( ) ;
273+ }
274+
275+ [ Fact ( DisplayName = "ExecuteTask - pull the image when force by the user even the specified image exists" ) ]
276+ public async Task ExecuteTask_WhenAlwaysPullIsSet_ExpectToPullEvenWhenImageExists ( )
277+ {
278+ var payloadFiles = new List < VirtualFileInfo > ( )
279+ {
280+ new VirtualFileInfo ( "file.dcm" , "path/to/file.dcm" , "etag" , 1000 )
281+ } ;
282+ var contianerId = Guid . NewGuid ( ) . ToString ( ) ;
283+
284+ _dockerClient . Setup ( p => p . Images . CreateImageAsync (
285+ It . IsAny < ImagesCreateParameters > ( ) ,
286+ It . IsAny < AuthConfig > ( ) ,
287+ It . IsAny < IProgress < JSONMessage > > ( ) ,
288+ It . IsAny < CancellationToken > ( ) ) ) ;
289+ _dockerClient . Setup ( p => p . Images . ListImagesAsync (
290+ It . IsAny < ImagesListParameters > ( ) ,
291+ It . IsAny < CancellationToken > ( ) ) )
292+ . ReturnsAsync ( new List < ImagesListResponse > ( ) { new ImagesListResponse ( ) } ) ;
293+ _dockerClient . Setup ( p => p . Containers . CreateContainerAsync (
294+ It . IsAny < CreateContainerParameters > ( ) ,
295+ It . IsAny < CancellationToken > ( ) ) )
296+ . ReturnsAsync ( new CreateContainerResponse { ID = contianerId , Warnings = new List < string > ( ) { "warning" } } ) ;
297+
298+ _storageService . Setup ( p => p . ListObjectsAsync ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < bool > ( ) , It . IsAny < CancellationToken > ( ) ) )
299+ . ReturnsAsync ( payloadFiles ) ;
300+ _storageService . Setup ( p => p . GetObjectAsync ( It . IsAny < string > ( ) , It . IsAny < string > ( ) , It . IsAny < CancellationToken > ( ) ) )
301+ . ReturnsAsync ( new MemoryStream ( Encoding . UTF8 . GetBytes ( "hello" ) ) ) ;
302+
303+ var message = GenerateTaskDispatchEventWithValidArguments ( ) ;
304+ message . TaskPluginArguments . Add ( Keys . AlwaysPull , bool . TrueString ) ;
305+
306+ var runner = new DockerPlugin ( _serviceScopeFactory . Object , _logger . Object , message ) ;
307+ var result = await runner . ExecuteTask ( CancellationToken . None ) . ConfigureAwait ( false ) ;
308+
309+ _dockerClient . Verify ( p => p . Images . CreateImageAsync (
310+ It . IsAny < ImagesCreateParameters > ( ) ,
311+ It . IsAny < AuthConfig > ( ) ,
312+ It . IsAny < IProgress < JSONMessage > > ( ) ,
313+ It . IsAny < CancellationToken > ( ) ) , Times . Once ( ) ) ;
314+ _dockerClient . Verify ( p => p . Images . ListImagesAsync (
315+ It . IsAny < ImagesListParameters > ( ) ,
316+ It . IsAny < CancellationToken > ( ) ) , Times . Never ( ) ) ;
317+ runner . Dispose ( ) ;
318+ }
319+
231320 [ Fact ( DisplayName = "ExecuteTask - when called with a valid event expect task to be accepted and monitored in the background" ) ]
232321 public async Task ExecuteTask_WhenCalledWithValidEvent_ExpectTaskToBeAcceptedAndMonitored ( )
233322 {
0 commit comments