package Ġno . u io . ifi . locale ga . s 3 mq Ċ Ċ import Ġcom . github . f rid u jo . rabbitmq . mock . Mock ConnectionFactory Ċ import Ġcom . rabbitmq . client .* Ċ import Ġmu . Kotlin Logging Ċ import Ġno . u io . ifi . locale ga . s 3 mq . consum ers . S 3 MQ Consumer Ċ import Ġjava . io . File Ċ import Ġjava . util . concurrent . TimeUnit Ċ import Ġkotlin . test .* Ċ Ċ const Ġval ĠEX CHANGE _ FROM Ġ= Ġ" leg a " Ċ const Ġval ĠQ UE UE _ FROM Ġ= Ġ" leg a _ inbox " Ċ const Ġval ĠEX CHANGE _ TO Ġ= Ġ" ce ga " Ċ const Ġval ĠQ UE UE _ TO Ġ= Ġ" ce ga _ inbox " Ċ const Ġval ĠROUT ING _ KEY Ġ= Ġ" files . inbox " Ċ Ċ const Ġval ĠMESSAGE _ IN Ġ= Ġ""" ĊĠĠĠ Ġ{ ĊĠĠ Ġ" Records ":[ ĊĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠ Ġ" event Version ":" 2 . 0 ", ĊĠĠĠĠĠĠĠĠ Ġ" event Source ":" aws : s 3 ", ĊĠĠĠĠĠĠĠĠ Ġ" aws Region ":" ", ĊĠĠĠĠĠĠĠĠ Ġ" event Time ":" 2 0 1 6 - 0 9 - 0 8 T 2 2 : 3 4 : 3 8 . 2 2 6 Z ", ĊĠĠĠĠĠĠĠĠ Ġ" eventName ":" s 3 : Object Created : Put ", ĊĠĠĠĠĠĠĠĠ Ġ" user Identity ":{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" principal Id ":" min io " ĊĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠ Ġ" request Parameters ":{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" source IPAddress ":" 1 0 . 1 . 1 0 . 1 5 0 : 4 4 5 7 6 " ĊĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠ Ġ" response Elements ":{ ĊĊĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠ Ġ" s 3 ":{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" s 3 Schema Version ":" 1 . 0 ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" configuration Id ":" Config ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" bucket ":{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" name ":" BUCKET _ NAME ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" owner Identity ":{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" principal Id ":" min io " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" arn ":" arn : aws : s 3 ::: images " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" object ":{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" key ":" OBJECT _ KEY ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" size ": 2 0 0 4 3 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" sequ encer ":" 1 4 7 2 7 9 E AF 9 F 4 0 9 3 3 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠ Ġ], ĊĠĠ Ġ" level ":" info ", ĊĠĠ Ġ" msg ":" ", ĊĠĠ Ġ" time ":" 2 0 1 6 - 0 9 - 0 8 T 1 5 : 3 4 : 3 8 - 0 7 : 0 0 " Ċ } Ċ """ Ċ Ċ const Ġval ĠMESSAGE _ OUT Ġ= ĊĠĠĠ Ġ""" {" encrypted _ checksum s ":[{" type ":" sha 2 5 6 "," value ":" e 3 b 0 c 4 4 2 9 8 fc 1 c 1 4 9 af bf 4 c 8 9 9 6 fb 9 2 4 2 7 ae 4 1 e 4 6 4 9 b 9 3 4 ca 4 9 5 9 9 1 b 7 8 5 2 b 8 5 5 "}], " file _ last _ modified ": 1 4 7 3 3 7 4 0 7 8 ," filepath ":" FILE _ PATH "," filesize ": 2 0 0 4 3 6 ," operation ":" upload "," user ":" USER _ NAME "} """ Ċ Ċ class ĠS 3 MQ Consumer Tests Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġlog Ġ= ĠKotlin Logging . logger Ġ{} ĊĊĠĠĠ Ġprivate Ġval Ġfactory : ĠConnection Factory Ġ= ĠMock ConnectionFactory () ĊĠĠĠ Ġprivate Ġval Ġconnection Ġ= Ġfactory . new Connection () ĊĠĠĠ Ġprivate Ġval Ġchannel Ġ= Ġconnection . create Channel () ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġin box Location : ĠString ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġin box Dir : ĠFile ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbucket Dir : ĠFile ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġuser Dir : ĠFile ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġtemp File : ĠFile ĊĊĠĠĠ Ġ@ Before Test ĊĠĠĠ Ġfun Ġsetup () Ġ{ ĊĠĠĠĠĠĠĠ Ġchannel . exchange Declare ( EX CHANGE _ FROM , ĠBuiltin Exchange Type . TOPIC ) ĊĠĠĠĠĠĠĠ Ġchannel . queue Declare ( QUEUE _ FROM , Ġtrue , Ġtrue , Ġfalse , Ġnull ) ĊĠĠĠĠĠĠĠ Ġchannel . queue Bind ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ UE UE _ FROM , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEX CHANGE _ FROM , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠROUT ING _ KEY ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġchannel . exchange Declare ( EX CHANGE _ TO , ĠBuiltin Exchange Type . TOPIC ) ĊĠĠĠĠĠĠĠ Ġchannel . queue Declare ( QUEUE _ TO , Ġtrue , Ġtrue , Ġfalse , Ġnull ) ĊĠĠĠĠĠĠĠ Ġchannel . queue Bind ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ UE UE _ TO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEX CHANGE _ TO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠROUT ING _ KEY ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġin box Dir Ġ= Ġcreate TempDir ( prefix Ġ= Ġ" inbox ", Ġsuffix Ġ= Ġ"") ĊĠĠĠĠĠĠĠ Ġbucket Dir Ġ= Ġcreate TempDir ( prefix Ġ= Ġ" bucket ", Ġsuffix Ġ= Ġ"", Ġdirectory Ġ= Ġin box Dir ) ĊĠĠĠĠĠĠĠ Ġuser Dir Ġ= Ġcreate TempDir ( prefix Ġ= Ġ" user ", Ġsuffix Ġ= Ġ"", Ġdirectory Ġ= Ġbucket Dir ) ĊĠĠĠĠĠĠĠ Ġtemp File Ġ= Ġcreate TempFile ( directory Ġ= Ġuser Dir ) ĊĠĠĠĠĠĠĠ Ġin box Location Ġ= Ġin box Dir . absolute Path ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessages Ġ= Ġmutable ListOf < String >() ĊĠĠĠĠĠĠĠ Ġchannel . basic Consume ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠQ UE UE _ FROM , Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠS 3 MQ Consumer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchannel , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġin box Location , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠEX CHANGE _ TO , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠROUT ING _ KEY ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġchannel . basic Consume ( QUEUE _ TO , Ġobject Ġ: ĠDefault Consumer ( channel ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle Delivery ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsumer Tag : ĠString , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvelope : ĠEn velope , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproperties : ĠAMQP . Basic Properties , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody : ĠByteArray ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessages . add ( String ( body , ĠChar sets . UTF _ 8 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġchannel . basic Publish ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠEX CHANGE _ FROM , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠROUT ING _ KEY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMESSAGE _ IN . replace (" BUCKET _ NAME ", Ġbucket Dir . name ). replace ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" OBJECT _ KEY ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Dir . name Ġ+ Ġ"/" Ġ+ Ġtemp File . name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). toByteArray ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠTimeUnit . MILLISECONDS . sleep ( 1 0 0 0 L ) ĊĠĠĠĠĠĠĠ ĠassertTrue ( messages . isNotEmpty ()) ĊĠĠĠĠĠĠĠ Ġval Ġexpected Message Ġ= ĠMESSAGE _ OUT . replace (" FILE _ PATH ", Ġtemp File . name ). replace (" USER _ NAME ", Ġuser Dir . name ) ĊĠĠĠĠĠĠĠ Ġval Ġactual Message Ġ= Ġmessages . iterator (). next () ĊĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Expected : Ġ$ expected Message " Ġ} ĊĠĠĠĠĠĠĠ Ġlog . info Ġ{ Ġ" Actual : Ġ$ actual Message " Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( expected Message , Ġactual Message ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ After Test ĊĠĠĠ Ġfun ĠtearDown () Ġ{ ĊĠĠĠĠĠĠĠ Ġtemp File . delete () ĊĠĠĠĠĠĠĠ Ġuser Dir . delete () ĊĠĠĠĠĠĠĠ Ġbucket Dir . delete () ĊĠĠĠĠĠĠĠ Ġin box Dir . delete () ĊĠĠĠ Ġ} Ċ Ċ } Ċ