From 7a835edc007c5322cb25a4477a54c1f6964c1299 Mon Sep 17 00:00:00 2001 From: Christoph Deppisch Date: Tue, 19 Nov 2024 22:09:58 +0100 Subject: [PATCH] Update reference manual --- index.html | 7 +- reference/4.4.0/html/images/bmi_logo_eng.png | Bin 0 -> 8871 bytes .../4.4.0/html/images/citrus-logo-small.png | Bin 0 -> 28392 bytes .../4.4.0/html/images/citrus-logo-tiny.png | Bin 0 -> 11081 bytes reference/4.4.0/html/images/citrus_logo.png | Bin 0 -> 187822 bytes reference/4.4.0/html/images/figure_001.jpg | Bin 0 -> 34512 bytes reference/4.4.0/html/images/figure_002.jpg | Bin 0 -> 38555 bytes reference/4.4.0/html/images/figure_003.jpg | Bin 0 -> 35448 bytes reference/4.4.0/html/images/figure_005.jpg | Bin 0 -> 48425 bytes reference/4.4.0/html/images/figure_006.jpg | Bin 0 -> 54977 bytes reference/4.4.0/html/images/figure_007.jpg | Bin 0 -> 56554 bytes reference/4.4.0/html/images/figure_008.jpg | Bin 0 -> 58770 bytes reference/4.4.0/html/images/figure_009.jpg | Bin 0 -> 59494 bytes reference/4.4.0/html/images/figure_010.jpg | Bin 0 -> 63141 bytes .../flightbooking/architecture_overview.jpg | Bin 0 -> 69935 bytes .../samples/flightbooking/http_adapter.jpg | Bin 0 -> 45775 bytes .../flightbooking/sequence_diagram.jpg | Bin 0 -> 88264 bytes reference/4.4.0/html/images/sponsor-logo.png | Bin 0 -> 14907 bytes reference/4.4.0/html/images/usage_sample.jpg | Bin 0 -> 86102 bytes reference/4.4.0/html/index.html | 42154 ++++++++++++++++ .../4.4.0/pdf/citrus-reference-4.4.0.pdf | Bin 0 -> 8948480 bytes reference/html/index.html | 10040 ++-- reference/pdf/citrus-reference.pdf | Bin 8316538 -> 8948480 bytes 23 files changed, 48947 insertions(+), 3254 deletions(-) create mode 100644 reference/4.4.0/html/images/bmi_logo_eng.png create mode 100644 reference/4.4.0/html/images/citrus-logo-small.png create mode 100644 reference/4.4.0/html/images/citrus-logo-tiny.png create mode 100644 reference/4.4.0/html/images/citrus_logo.png create mode 100644 reference/4.4.0/html/images/figure_001.jpg create mode 100644 reference/4.4.0/html/images/figure_002.jpg create mode 100644 reference/4.4.0/html/images/figure_003.jpg create mode 100644 reference/4.4.0/html/images/figure_005.jpg create mode 100644 reference/4.4.0/html/images/figure_006.jpg create mode 100644 reference/4.4.0/html/images/figure_007.jpg create mode 100644 reference/4.4.0/html/images/figure_008.jpg create mode 100644 reference/4.4.0/html/images/figure_009.jpg create mode 100644 reference/4.4.0/html/images/figure_010.jpg create mode 100644 reference/4.4.0/html/images/samples/flightbooking/architecture_overview.jpg create mode 100644 reference/4.4.0/html/images/samples/flightbooking/http_adapter.jpg create mode 100644 reference/4.4.0/html/images/samples/flightbooking/sequence_diagram.jpg create mode 100755 reference/4.4.0/html/images/sponsor-logo.png create mode 100644 reference/4.4.0/html/images/usage_sample.jpg create mode 100644 reference/4.4.0/html/index.html create mode 100644 reference/4.4.0/pdf/citrus-reference-4.4.0.pdf diff --git a/index.html b/index.html index b08c59f7d3..5603f45cbd 100644 --- a/index.html +++ b/index.html @@ -553,6 +553,11 @@

Citrus Documentation

PDF

+

4.4.0

+

HTML

+

PDF

+ +

4.3.3

HTML

PDF

@@ -790,7 +795,7 @@

Contribute changes

diff --git a/reference/4.4.0/html/images/bmi_logo_eng.png b/reference/4.4.0/html/images/bmi_logo_eng.png new file mode 100644 index 0000000000000000000000000000000000000000..12c2ca24f194f06e42e850d2d6b3869753356f3e GIT binary patch literal 8871 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 literal 0 HcmV?d00001 diff --git a/reference/4.4.0/html/images/citrus-logo-small.png b/reference/4.4.0/html/images/citrus-logo-small.png new file mode 100644 index 0000000000000000000000000000000000000000..84b43986466b2ccce6e7fbfdd3e45393c260297d GIT binary patch literal 28392 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 J)QK4d{U5)3kiq}} literal 0 HcmV?d00001 diff --git a/reference/4.4.0/html/images/citrus-logo-tiny.png b/reference/4.4.0/html/images/citrus-logo-tiny.png new file mode 100644 index 0000000000000000000000000000000000000000..cd3f6e1349dc4c63614e68dd2506b87c45c38754 GIT binary patch literal 11081 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 cfj@e?78*Gkv)%`aKwS*4jUW7 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�m<6 zo2RWs8IksXy}GY%((N)~yvxo&rJup7#KwdxPu$FA!g-)SaPDubY|YWhHbrOK4BsOd zrp~8t7o(Vg==RW(I-yZm&m~kL6AC5jH4b2;3n$w>+RT68hmFzExcayVUyq@SsRP*J zz7lzMJ%S}M7b6Ko`3y7BLdV@h();?Hu`DlzOdo*qX<{rdU*b}hGF>AGJYc3(96!^g zU-!nhwH5HFAk=h&KR3oRsxf%ZhDE3tD4QXx=M2uu(A3W$#f5k#^&sxCe+|FkYom)` zGy@uPY%V1iS&4kOB5i=Kb?>T8fPSg%HCN_hSXa>ufy4vqC$$~1I{PHrDLy985+LR6 zBrL(~ruaNA?DMCwI%!L(I)q?(l0(e<0Bwkgi+xN38Ek`K>tnGHN|qQ13lCjm%8=aQ z1bVtmsSkc9Md*Bl>ptP`%J^LX$@xF--UHy5qpbJeeUo$2D+#2MgwTQ)DWX`oiin_s z${*#gB8q|tVpmWUHNh*21r$*bMQKvSc0sx{l?y6JZ|Nbu*OQ!_SPQ3|Qk$zH#aacC7I@}ftaL{^w?x@H(Ir$R4#i)D^1 zznSy}JiV~F&jaXuY|x;q?*^gluUIOaMp>yFHEVSEPcZ556Absz#Z>>uPv52W$E0rf z6rGW=h8P;tiZY#;)E1^4fOrP%adRi?BKyR}iA0Y>uJ}8ySa0OY@WI(1*}?h--o%%`095^U zAd?k5GP8@7H*GRFsP3$)U>|%g3Qr2sopI#_dHkw$&XCgib9o|AsThVGD~rFJVGq(_XABxvL%luuJAQ zG8q15Hom{VSRKlKWn^|7Tz=)k4@PJ$9>(v%6_Xbw^^?Zwrc1f1;p`jFb4Sz6pC(BL z9xC&rL$Q_99tU9qe%to}Y=6Lv8^c=rApKLG$D*{Pw56rEq-4B0 zsjz~M%20)2Ei-a$C>N%M(6rW8R9dQ?=1{R^SH4qZeCEs6@UyR!;c2eT^6+%?R<1Os z`ZsY8C*h;EE%1=?pp>iN5`)I z=eW1J_CM#Va$Ti#nWmstUCO$+lCBR+Gm`J_`+D5o>C1Op*IXVFDAr&s7* zrNE|bTX^yE5BwIlXFFLkSbnqs4wLS|`T(EBrA%dz=Q9$z@6Ka)f6GEu6~bjM}SrK21G!eP6V?&9V|eQ z)Mb+dr2QbI^fDF973DG>U|#aKaZj-Cy}7bIfah&=G(7@fnamI?2#UvcNVEcFEmeV+ z@BsC81##M!nJ9~og>H5=0OCvUieIf;bcOHJjkfsH%w=1fmXI+Q#fVuhy;7ONXQ$#} z{D&BRzlPaAhJRbm_o&1J2F|5&K?#u3OczKBDqV38laFnyFLzD}ZD80ESsxM5``Yq! z=-7IEaheXACHksOfIOmk10MnZWloxh*aPyVd=TD1rzX}y+IDTV8B#J0chxECz^?VQ zs%?h01eCmztq|6w8bjhBL%d8zdp2)9)7@32Y*()JEa5%ar3Q4ARdi9N$S2a^w8v>3 zOd4@{x5xE(!+o;mz#>^)!9AmO?dNz7^E$3ztPRwZKSRfH|8M3B_fQ@S%x9}=Y?6t? z)3zukAX}CdA(GZO1v4*knjGaVIJ7;VnY%;jO*t_<3+?6;zI61lL?n(V9T(NNeOps+ zM;{O0FZx4904y=P@rF1lc?s1b^~(Nq0Q^-(5^>5dfV5UR^*919aH7M~07P*_lt_b> zCOEAFAwezCH4#VkrT&o*pp|x>L^&4I6J;lj^SNrs}Om5JW8K* zIKYkx2^wXZp)<}&OVfT1lu4u(99?m#vW>d#qw&2`2>G8~jO^6a#D`jmjUa@A;bzV} z?ME={EgLqlRd{i@Q=6PawC$!-klDTJ{m-RS_1BPM5yP4P)HvsA<^$ zp`-4V{LD@FPkdFaZ+zCLg0)$TIO74Z$w^CO)7&6!VgW>$r!`uW=)%@C9JGRAN+g@} zMO!dpD^aAD+0i@QABrbowpEiY%&uC7CnwH-4v!|-t6a5+pY$A$6nRceVT!caS2oCK zt8Q!7WJ-W7<;&LwdJp^}M1cl1D`M7k|9I0Rm;dByB z!*HzTllKjb;FU7HbAp-C61?CtJEmzGO1ZR>J)2Lbp>n^Yi^D84XgMy)G)W#xTE!i% zx2;b%l9b!>kqAlsu_Le?4(_$kP*67@wdo?8ww}*NdSA=^#cR28L$mMy@Ys9gxtmv& zY(9~-jdy2im+5To%`%uD(K?$ne`RAfNp>RptmoMvT{Iz6#zl>kjXt?;#FsEfeMhU- zlrYPY%&>_WsGF`FrgMIhp)+L`R!=h|g@enalmQk!r<{%Y&16MI6ER2mzJNvKxPTRR zNbyv*PZuohYcvUue1B{Vv#lzZtM96Jj)T4uzxTa-5=cwKR&Bb(h$mKdKwp|F4p7zi zkvb0@lpYgFoS{fmkk3g6`yPHnrCmXQ&p0uJ2@}(@zA)tDrI6{fUC6P_YQUXgO+i|o>$F{ zQ(s!!hf2YPJZK;HxgXnfaqo8UcQZaeQHI14EUbb)G&EaX2MtE!mPiUv?%kL^JA_F& zh~K6NAQ{Q8>@J1U3o%Lf^;*vv-@~gZ@8N_I=1FL?KeX9aG~Xh>LfzWe9kC5~#Rkj1 zMm9{PbHxyXlKbo>?`Y96&&3ATXD)fZYJk{|;XwHgiEB$%gIuYWYevDsw@O8*hp{Fq z;2bw{7HFEc0g6B6D+{i~^khmmcp?h#*w&kULtD+?$*`&t(8E_?T~;hh_Qi0IXITP6 z=%EoEOQuYG^Jmgthu57pESM-+oc)W#;^TK8yy%m~xst29vvu+%j6jX~7rBj(qES#2 zuXInj3afm@qE))`756e)ng-lsfULRnBY>W;JUB`axsx}0&An1+Y+?bvGe(j&@BBdf_QSdUk_^a)=yeY)^q z%kP?@c8AkdP9Ei_)zmCrp0xU1J~uJ3k`cvG21O(8p-vYa=t#QOGM&^$6uu;M`6U?z z&$w_Mn>sIJz~ldlb&)6QoDxqZreAp0{#>wYEkLwz*m?<-zKwls<5G63yRw*g_q7L< zs^YHuP?fCHD#diPJr0o%3LkOiY-`669SwoP^NSl&<#qW_SVym<;KnJY(t=Jm<-+n! zoN2)VPBPZ%D{S&4%(9g>!>r5lBtmi&L?eEZwoUr_pZJqTj$92l^C%_kZuG0HyWQGA zG!$Nh&QGwIlTq8iApB zrP?al5~R{iym76o*_H3YA6KU~T4DODbjy|blUsvMHg|qauyHdfasRJlKlk_Z`{!vq>`|Pxx&MexCR=q8jt-gDrDnzj=c@L zD_xy*m*uNoWw?TR4v`j1`y&t6u`)vslP`NEYxB+rVXEj|O7rWR#ck==&~(d=wmn(; zv_NHBNp!x-Bm7P50%bZ~mV;igpXp|vsL4szmKRQ|HMW+MEQEt&v=xI09rS%s0%M0J zq|S1RcUFTiN`0k} zJZ%!XA2Wx?y@E#h5J8r%76#;D)n~mwd%ogXr5C)1_35gUidSXyw5vGf%a_GJvLM=v zqL2Iy9>nu-`Qn%GUflawYsuTjY__AzidReN-o%Tzbpt0!bGSu*6 z9p8t!iNvFq&a9cN11hO2*Ja5lk=1TzhCZbg;XEA7HYato%;rT4p{aj1TjSq?=D zrLSCbUi4X^RY{l!z7xVpJmpjKDLAgQkxA-aXj5PG0;HV8h0Gowh*?bF=6w0Oc!>EA zykJV*3R~+;thZfUOn&^4Kj-hsj+2Rxiw%(wEd{rAvr;2SzS7f zGjiFUs=gKdB{SPjWmU>sXe+B%7u;N-bv)#u!+8A5*@)+O8A2P>ax2$K@2_mEE+31O4W>EPZg`~Hwc7VQo&UsMx6ofQgNzNJ*`p!-A(7q*CzjI{_;yvh9h>N4XCy#)5LmO9w?s_enoPCqcXQ|WvNRFY}IabIh7^3A<33Q zqtlpR$~&;rEWu~D0Q6-F2>aQM)7nAK^wx>5tVF2m$oLc_JxU6uKqlxTo1m5nlS~vm zWouE$^NF@hr#UE;-lj9*J_$s6yS8Qpm`e8<<6f+RKJq!^c$c3G;gauZbVwj}I+;We zjT4+2GxsK4CkV|UrB4?Ptd^HD!e0_uGD5HQTT0S5J^_^xy>S9u{`%2x65o6^8LqN= zQC8d5?emqaJoyIbbpOv!N%3h^;PX6L`D4}DYF)-Lx#}HQ3>niz< z&*4i(eI1@qdL%~yY_yrk8l-iG?lGw>BXG$DQ-gWmiH5Oq>Pcn+bk~#(`koTsw*_Xz z+#U=nn9xp(nLs)vM4qF|+W~D6`PMFiO_aeS84VU7V}MJQFBeiOnSx|;wqsXp6)*Sc z{Eg$GkK`*ZFQ$Xt%@T7MXt`NBwKLnmL1`{lyhC*M)7VPj6BFP0(uSb6)Q%KB{OPO^ z_A9aEB+m3g3Eai&XvDjYFM$?v-m{0rx$N05NjyiEtbCS5pW2%a#;ZB|f737?`h8Ryz|)SBz6>IyKh#Yv+v3@-0*2$xMZujOJB*P$ThGb zT5B5fUQO)CkSc)W$ot@8MVfqvaYi%&6LIoLj?=*_U4{Vc#FOK*V&kDd7__1QYaf){mb2fK&7ez1Yn^-fV64)Q*oa70P z;`_tDe-Q7hw6y>hvwSGZk{?(>qY9VpNgGVmakhM&z8bD2<}!r_$&XY-I^t~CjFx;- zHdd#wvX{?%-1BdSwR^l>JuQmtTFGV-R+bw0Zw5leX`_zMeid)*y_#*QK0Z#LV?X6u zhZ9ydo-#;r7TUN>8=N$jT{Md8mv~1FCOi<$L@dtxZTB*+R(_w$d*o$$x|s!tSAUGH zx?VUeKJ(S%;JepKC zweWf5Z{nx-{T=#vHQn;qq_ljdx{WlS!{PEV_>+{{FZ?b)l0IX;U&984=&q&@K=P)H zjbPSOI_6l?=5~c8a*y?(V?63)E~k8i4HEle=Ci%i;wt&054I@*vt0NzI=Bv6CR066 zFH!0eRUIWpF>7MZ&b*6KILUPycRBW60d6hp%&=@Rl%C=>EDntZOT&(oFLbZ8WQ6jD zQtdSv7TLL@$?Ra3(~FLpqO~K3D;49yalF%ajB9N4zNS6Y*k~i)i}x8^jkwBQvGvMc z;n>@mPQ(q!r}z+;F_Nu`Al>bc)0s~I$F4XrK;-rK=iya*xvuXOH^MlCHXov!6o#3+57?%PM*mj*$AyZ$QEf zSIx@SpvPu9k`}G<`4nb~#_>KM8`qBgCFbA`a2;?plT8lG0u7ILGS}%Yw*iT?xu{+{ z;^(+(eMi^*&w8^{PZx!Me``RCvRHy zE{5h#(iuI?9XYLX`t(3c((sQ?#W3OPIitRVVaq@9zRCZv`8XW!g%7ICYFK@U8#1*s z&VhVybh_%_J*z4z|2SBVMw>U%`M$^uiCWN#9LelqeY*6m!YW^J$#A|ZlU;qrz1f*n z1>H$Kl}Yi@HKf^QUI@GJW$a6KufeYeT=O30=9w-GWgI0G2bMm;3B66ua}cG*rTT?$ z$>Zzs=-(aI?spL@jQMK${=6=(`q7Y4jQC%%(^hKWEjozT<6&Gd9?WdcvAl}yK;2U4 zRa>bjW>YT%mt-46X_G~(g{X7QALxmGSS~5s<2=R}*1Yvm2sJL{N4kbad|52E*om?? z!Z`ONEx61#{4BT8B(9OPglIRg6{tu`wx|?lHh7$=SlF~fNnNQtEx6xTOlx<0IbYBI zH_oPyuuLjmqlIvKw7Ae^#-_t$x(Y!&OlN*S>xbUqp`Z}y*f62=YT=CDufOi!CCRuD z+0v`9K3_ZqQ(V6kfziFp7SlPG+254_JKmTc*Vq zzIj-j|LbhT@gMj|Qx%%i_b|{tbK%1S>ttH5Op#y1O+mA^4_`6=m4Pc6`-i`t*%oG% z!00oj>bnF4d z%rse_5)H`>ddhJnKUR)q2s4cZBBD4-1W%Ruc-DLqZ=?^V!!pPI1jwF;^Lj567laT( z)SFf5M3T)^i|vlaiyX03-szN4FzITcBW^GyRNWaXat4^MRLbweR#8WuG7g76-gC=V zq2Y>JlWW5c3K3P_gonHo&+-;`tjpi(XGu0kTw!yXTv_0HBa_!)S3=WM6)qoFI%zd@ zSz@ca;vyEGh{PMVaAxMSkkjRFwh>{q+ie^~8&aFC&YC$9V5B;}&D%1Bk2daKNmCK2Y))kB*u z?tA}|TXAVoyb7y)#T(IV1XGO&&TgTcK=wJow>!!L6=K)@3N=MWnidsOew}|bWMrd~ z>FWRB8@RtVEIxTWGo)Y5H)a2TEAvMoy*|oZqny0_r0>!&S>s?!y?RzD{H&`XUsxE{ zj(+a6cE1Z5S$u#r_htuwEyG-PJe56K%AYfiu)(O64jQE8N8&VE1+NdTF^Mwy+gA`q z?KMBownTTK6JN)SFGF7lvpU0JX=?&~We0SDpU)%ZObI4-j}F>6N{+M`FQc}8KAKP- zmuOuwJ%)$=;774R!>gRM1scL4$g(JhVuw_01qG|Ph-5^VkfMUxo-bNr(G*MR?9o;w z0)Bi4RR-|{kxl6je=7StKasqqj2+rpOlMp9R+V2qHbp8o12}&PkE!;>h0kTG{Y9|{ z0^T*N7@A?`o^938Mvd}_XW65vtL!jwHoR2TP?eC0Wm}_JvK1*QqsdbX^w;zbc^o^e z{+{eqFj=MzFmNY+t+F*fjR>)%iacGz$FQ$riM{p-)E)`iR8k*P){a0bd>6!%g)p?Y z+fq@Y)(cIL>3c`oryJ_&hSL~~eP$f5|F76CdCMnwm*fln(tWB3o_&ty#6o?u$J(&x zfvtXf8q%m<_N(?h-(kS`R_-Y~7aG3^lglNff*h5}FuXEb&osWWRf*XspbZQkJjQQK zjp;N}#KhJ5OOJ)c!Bj;GC@QG4!(_HH8IpL_R%1IsQ27$R*SewQct9>@^q*caFqkxMTj4u*zrrQEv$X)D}l9J0ulRS}DnAR~Py zc1{^6dYJO5!z64eJgu>z{NkMF(69AHb&XL~#0X}V?t&@d@;&--hp|Gw)&c~$^e1mH z`=~=fnMIJn?Za+tQo@I?Pvr`FDkmr{fnjIbL%x^qXcogr;r6o`+HMv5 zEEzfQA!V)LP-nXrzqvywV+s-kCFSw8d;crbq~8!3d0mB4K{GV#u6_^CM!tnbp>9Hw z?3xgnWho}%T1+v8D6tk<#KmYJ2jmsXF$c#op!(mhog-dBrEW{8|8D3j|1{@d>vKP?ix7k6ABvl=mdphXBTdzLgcWEQDMM zUHKZO%F_TOOecpE;utWe6TZsV=glu(`Sz?Q4U3Ck9;1{JBS93Rxtdw97`k*s}z9VzPsb2BPX`~svL?%zkaK_ogK@Vka@_ib6OR^2& z7-=VhG?UBGcIX?C@O_}c`Xo%F9XB5wo$0Wru#EfbH2g5-#CLJzoqi^;7g6b|lu|M2 z3l#cf#ucxp{HI%wMiv7fKK9T@twcc##biJp3I?4U5*Lf{sAtU`3t)*bM-kz;>Eb^b zrVIYkozcU%>(Agh+GB^culNMRqOZ_UqSw^Y)iE1jB~f^P?(?WqhT)7Kvuze9kxK?8 zbFZq$7k%M{t8|KTw&)5^?4(9WYaUcF%w{6{`ZsYBdlR#g`?CO&k8bOI7kzk59gSrq zWxIK+y`_okBKs0(@25V!j$suL#!feUdKIypr);QFNfe(u>Z(QOTF|*pM#L%E3wx%p zABexiz>=V~yF6(akN?YZlZPbk*+?X&UB-!`t@gU$PA+0FMsC!@kl=}=H!IxIV2QZB*c;?!?rV|AX-rJk-p z*3l^nVWHP$w`^-e5F|BwX!I)b(V1%6V2^ab}28uf+LiMbJMu^%wlCCCSB z-|JL9e8?WgRC6`!y26dLVl^thh~|ex^Gus8GDjIC&-%vkz(=sOoQJ9x^WFnSxpb*^g~P#JZv2H`)UgcnfgW$4F_A4D3zaKC~Z@ef#+uTq>?%hn|yxfGUChq>b+)^__K*$}I8j{9?!BmweORIsZn zDi<8%q_dx{j^&GO>GU;D^>Fn&c;<5sZzxddp1JAk8re~~67IBPQr0^kz~e}rEslK= zGPyGFfn~qjB|ZhYCX)f^WUR-DG|SeggTJR;PB*_Mha-e&ZrA=QNz<0k@`fhwv8?_6 zIPRyfZE$~f;3F6!KZcVj6Bm%HzAMWk}e4Vm6&uB$_J~wIy`$hSdmy3%ucuELdX5t zI9$UQ!Ed|-M=j5&Ni0GBuuka?Q0gR-jUw=slQRfcDHg%<0QTT-^2dpBZqqH^5G1L- zLYKI3T$RjZTtY0`3t5@uywEQ{O&9$hi&Qy7$r8;ns?1Sz!M1B_@3S<>tV-K&lBdbR zV}FY?a6D{GR47q~kPa9Z=RI?puKF(X zc--y~^*g&lwcuY1M(op1%-5m zCGeqV8&3gQK+6j1VZ8STdHv&U3<2G-#2RO%aFlhI&}N^SS?Dyq?z{Z3a?2;!eDD{? z=~MTnVf}nv`U9P|V)G7d?d6tUDN|4x`01p8z1;sD`RtG?Tf?5pL&vNd&`BT4y5I$V zlt#x1e29}J;X?Y`q}PBgBkCZ_Dj6)g=5-fdZ_!l0T8eSuP|It6k%WLVtNK$cH~KC; zCko$7Ta?4~AG*XqnCofDuYvSYdP3I>T&my1_vI61qgm%yC~c}ZIG5=5OMg7XrmX)w zF3x!BFn#KTaXO7MT=EjW;>Ufd>vMmm zRt}PiSdVmc!qz>?rbEW@uD?01oy1L|R#5MIe?+TwrT!4%Q*r5*WAvlQvQ2Z{o!)!pvXypm?2FG4G zJiT9`w%9so=+3e%PQ(mtE`R&5IOFNV^o56xi!VHEoGzk%Z#*~bNNbwk!~d>_l9_%% zU`Xe68yi;z*}zhh%Jux1@uTl^#cBcgdlB_Z2q5WDaVv#X8Mx&mTqZ9?!eP=UP(!Vx zWwa`9(j>#0cD+C22V%BuPd#wfa3;k|u@*|ILm_e8w3+2WUp0=0KW!Qh{vI0rejq}R z9Ah?V4;Rc;2*7yDqlJhzhD@BzFPw&}-Z4%WzktQ2JhRf-NGEnoaj>muw^$$*C%PaB zZgf(WIKvXJ#z5g2o^l_vcGut2vo>{jV47+ahsrGbW<}FEPvMGmx-Y7t;Lk3%RhbsG zI~ecVdF`j3;dL@BdTl>L7H2(sSfkwIv43nm@vx0|U#Jt&We_c<;E+vs9>x=SefYBv zrlF#yAIi^W7N6AG8~_y~sk1wH0vGAV+a-)i^iKT>pU(u=7>Yx_hQ|`B`(sKs-N^2> zH@ugt+IxrL++Xy4`Px0+T@J7EC$AVCmVBd`Vn5@W?=q~yhbXC-0>+LC=w%_KO`wlx zl}aoNRQIH|hNEzp#!%VpMcM_#c*w!_KO>7>-Bw(URaDcaZq>OPkPL?Y`xy`4Wf;!+ zDH@O-t#yH->iwbNps!<+g4v*hzC*J@B51O*AzD_)xe<-g)rhC-Kgl%u-|%Mb%NQzn z#>cmW>T_y%L+Qk8H*;lv(Kzz?&GCd+(Xn|)OD#|4MZE>5bJ6L? z{k~>cyW49y`#+uzhW&HH3R)dQN#)DNiUnV`wa?Gk;_u_~Xs@A{yD@jQ*Q9i$;_!2E zbtPtRI2tdW-MlKJ$xolyM^0;nlHOr!w`*c;VaZnXT#6uW(6V!7$5ID7lPUR+;P0bk zOw-onL_+nUd&KFQ_qlVa1!ZL|QC7t@975e=*&RgpOuDZa*m+V5J9&|hhlTfKHT6AM z&T`M;nQ#8|5yKE`0mij`Y)agis>Pu%8%2|iX6akamkly((mr7Nl;Sn-=UECjr#OA| zrxY1RP~N^KU66GELst(z{dc~KWY3#v`HZinYgR7AqqJX1+-z+Ec%s0Y1Thk9`F|o0QKD9@4S9c|QKfFA>YgKBV6eyt16>0$EaP_;G4P;EK zwPOUA+4skgHxB^YdCQb2Oq5OO+LA&?`YhBqI10Mg+g z5)nu?KZa&(dbscXD9%j)qC6O4H;Bwv+G*=Foymyc#v3%@<@$Aj5td??b*8Pf{b{VP z3v@Ci*F$Q(Yn8U?N;F;hFVpau2aLnrS;^0;bH?MS0b$R$Tv9IM4ARoJwLK1;c!2Hu znj9|rJf||NtQZ(R+=;E&(aKQ14&!X0kPQz+<=)t@=u4c*NXN-Y+{NQ$$cUsgB5w0h z!Cm-OpQR0ULimIW0z*pAr|aH@AmvGCgNrAyABae=|7Vba3J`N?;l;{XfRgbG<3+}h zft&CxXYpMYzxYStpwdscjGfuwAiT;cah*t08m@}n0M|r`w{!ti8f?`LwU93 zCqzP!Ax%^8XMS-m3u~|bXuCRCw&Y2#ei?dOElCG2RxOG?)=g!rVuX>!1Z@bv`25%N z*7RHKJJ}?^_o3=Yuu%(S@AW=LRb1`1WdjpD8CuzQU~4M_G{x8ILUIx=T>S)YvXvn$ z;gnCEj!iMs^e{uEW7CmIHAfq^*Q^(9-7x6wYrByORamh#vw@lhh)ptgE-q!d4;vXK zehl1cBA_5Di-XFr90J06JA?Z|S4CC4%-7{qq3S5zufr}SElYHQQt&cN`RU4kV213` z%m9AlFrCL$;>HU-^y{8?Tb5~^`qB@!qZ6|(uX~nFo7to7Pdlov5xXqGHC^$y%OhoeY`(z}V*tO$cdi6foBf+g1YP#B4(RvBbr!th4Jf}v?5$#yR%NZ85q6X>T+df9 z$wXu5_ zn&0%svo6^dB092`jc#t#W#{6|XY!oy$>7o++m!|c3q=oFtqNH?i8Jt#JTibcHn9p? zn;{!WH13uVB0~>TI`ciaNEO?!J%F_RTdJ7}h8_H%zP$nJ(mozf&JREI#**?Bno!?olp^QqYDxyHzD$uRfdu+$24| z(iO|xN-M5k2QD=tbx0Z)n=|`(=%aY^fn`hzoiALWC*&mAkPxR7P4PA|Zcbg^&8)sBa8nuWED7whOgqv^ zN#WY}JL+wyVl|jwnKjuveaypB=V~iA9yFXq0X`&Ve(o_A7}5;R0?Ow+y!-1W4kKwl zOINMnlJ67V(-f?Xs=V|mt)OQPi*tT*Tzuw%r;nseQD7CwH5kBF6|VZrU_b0tbAI5VKn1SY~QArC>30Az}soB2w~0TdwH+%3{s>e)siDh z8!QR~-4lU*SO859DlB!b0JY;^r7(9cvb3?LE}Pb)5?4L6xa3!y{t=Ht z(K)TWWF)fWY9!jyqERO0%zR4O4tr@@yX&8_>(X5N=1us@JUBiXmVRYj)1M z_lKvo<9^frk1Z9vd8o_YbbbkbEn6i^>B@I$+X`Nx@GTas{q1$!r1gh}=_vY`Ep%FW z|J3$KPgngTFRkC``boXU>mUkKiN{M4SOh=BgXDy-?_A8!S9l+Z%lU0Wm>QL?q{SzI z)4pdWMnO;c265i6v7mtKSo--+DjK$|4!p4-(5A!wb)A^xUV56E% zWsmKIs`8;Xxa5?AS6q1UDcu6)D;mZAbu^aM=~46ZgX24WH=Cyan8i?*SzMOgj}~}* zG3iCfyjqnW5m)*a*%}VC{qmoFh>G&?rg(;>@(5OCu7dkn7^l+dte+YeXaBgtt{jXi zxr&WY*+LKZV86}_pzn(n>#R@ISVu%EOX(;h)D&A8cfqfXw#w54MZ!9eqg+oby_Gjs zk7KxJ99hgzHl?2|sC-5o!Zb;A&HHq9)nAlF_I7rVZn8*zi2JQ;B~15Q3hS<1g&<}b z{P0c*u;rp|i8+leanGz7FRh43RO>K?#6hrvS6ZtWlggw{ z3oe@~4k>XIyh5dub{&1;p|?Eo6>Y)D7g^~RSp|(c#=Q>ZRsKIV$d%ND1yz+@9c$Wp zad=(wfeabDGcACc)oh&uYHC^x*oZKGDko>$* zl*(KN(ylkbs5@PaM_!U$W0<&h)K8ys=!02i*X;|S2hb{u)G9Q)1xTP_9nF%D8{cREvay>!;NeWSfj@T`?;N(qHNOO0(9jKp3ogk$f`=J z!g>mxGbIgAs6snkl{cODE8a+yN;62c)9IQ0dW&oou|xA~0s4-Xbry}K?63NS0q6P5 zZzpQVc;)-q7T~_z@BUNxRmZ3|>A^=5qGIUvA_Oo~sdbHO_j)r6u8)i9d%@+4F7C>^ zUBB+kR?C!j$>mqE;LY)Y3;)xU*y-1(YJ1Qs6nU7Ky-P377Qi&6!z{^^?FZ0l2zj$m zb)iyPt#@50>$v2-4dka~ql47-KNZWSaUVow441uf8n#_v@~q`3UT{}>UEB&A6*mog z--kUFzLKR^y2o;`UhHal)b_Thv`y{`F6h!$%aF~`H+jXY*yUN0J?n8brbTHNLq09S z;Em|-=8a+2Q$iz{Vv|rfCODku6ODZ6;CY(NARn;X#MU(yKF3EBN^iwlZe}yEu>7Fb zw^YvN2itDD?HdmnZ@hw!Ogws;E_%Ms1MsP4JvJ;If>|bDF;jPso^(YU@B9SqlC75- zqGru+-C;}EQF7AG@LJaAj%{6*xBWICv-aGNJq*86x)l1jrCXc5nc?9TuhWzTINEmE zsd(mfOG)N;s#EE0e@oB9Ql=0h3EyZ8jC{cg z?{lB=RFZhcJq{elJO7N+D$bH#6UHIoK50Q@X2I%Lq)WC2K4d4sDt&_Sb+g|xftT$` zg02Oh5MpQ7@t7CR`o*ZS5bMuV@Y^mP+4w{<)nFW#Ud1J_)9G@9Q<(9jdwOG8R@Tu} z+C197FheU(>b3krrXFWge%Q(tR=sL*_A|!C8Q)Lyy3zHO^wuFJ^*5Cn0DPQn7@Dr} z(XzD@U&3r1t43Jppt2L19ZpBtnj8^GfBC`bgbAmRx+^W-9k&57>~SzxQ$F!zuIA5P zFEZi{tm(2>@wkCKSUNkL-oRD~z}8m~39C_F3mbMWVd-GD1Ljwd)g*_T3$X*4u#=$hKsaH)g`2yX#B1_d3p|(<)TPCaOK#I`jLd z>H71uCx?RlB@y*Al*6sHRWcBbKvXhUWv{zl{t1L5D?QPFEvGPhrr5bEOy=oRy2H!$5~#X!ANf@Y`1e2 z6`gDgGG45FS!7(D)kCAsG^&7cy7B5^afz4zV6(k%@;tchDebbTPCdeK-Xy^jZ|RPQ z|CG%~^j!B*pcJR}!B5AsCujp+RD}a7S*BNPHWSVCh9<1|g4Q%DrhX3G(~pP!Ad8W| zm-2+KZEMyjWii=w-mmG|7HuxB0=K=btb(udgg;xpo0eD8vq7squ#sV^lPPQVYZTaT z(@)oZo)7yynEOT^D5Fzl%obb{9J}n;qWe$nmG=0oY;Agw(|j5h+8u2&b*Q}JswAi5`P?ub_9Lus zJ1OKN#;Q_ROOwd9oH`_U1!hdZ8!qJtCH^L(;DU904G+w=G5{F&y$kCIUt%h^#OzE_ z7Wr*oHV6>mN?Zmhk)O~({?R-HPFOd{5$lg7+hg`(5i z&1u^Wtn2(?9`b87O4OaleU>9C$%{*rA48DV6@2aZSMi4S?})|Ecahfgnkf&mC8S6Y z|M?SIaOD+Ry2Bf81o&!tisOrtBm!vrnxHBJHedP|E{aAN>O~Ueu&hI(^`e;G>3WOs z>MOVG%9WD2?41EW+d4TYa{H;APF`iR=XGgU`a&UiOAxUFaf1oh=c|Jm7Ib3a6EnZ2 z`AQ0-_5Xw=Bdj-c%Lbu|>!-Ye?Qxr3J$(t72yC#k@vyK;$}` zqb$tuXb;4*o@g&nS<&7)-DPLfEwxz=mDA~t-exV^B@n?Tgi-RDY>_qvzOdpG9{G}8 za$8<>(vwl**ZWn9BuCF4b!NZdCDY<_Ur#yD##ZftB%7^Uq9QGONW*5>+7Zv1)=qet z{m48|*b3T69kSfbHu)oAiQY9^}<(!$NHhP**Qhu!Ot$NK(RrrrLrT25@%P)$8(qU~9I2 zO{-(szUrm%!QbaqSXF>v`3oHfu|@R(yfV)>Z5={iq{D`}_yH{)Vc!g^Ds1!}LGhr! zM7w-NQh4(+v|%Rf$$Z}Rv4&%C*qyqv0$CjUB%W=tz*+u)MfKULYPPFnm*UX5;@1G0 zq|rB9xmgEOB;nUGLT}>6bFU?u6+6l|y$u`Msxnxw&g>fIvV>~!872y@ekZ7~uUy#b zSD3`w4~IQ@9Pjoz&cpC)XRF!vvZIHs+EFw+wG{)kSrD(!JQnpHI=hWYU$r#}X?9=q z$4pQupO8RRrnkwu0eBUK_NS?3ghu3Hhn-6_nmN>KDRi_iko}X?tF75uXz7I6j~MAM zDvF9zoeEP9Zj6~|?VzehEd0bX?!mJYy*3ZPdW6W}eA$t)BL51m{6=YD1s2|E4o$pZ z0_Lw|*!c`q*Y4`uP-s*e!R2E$qVt}`3FckcuQTKOHlFvzvLbo`$;@AqFdYi%&Es^@AUKfe7d%Aw>WxV?HNR3uZ9Q6qmMz8+>dI_!$AHkKij9ucvs72ohDr)n zKige+!Ijp*iHLic_@vkT$GwaMJMy?zib43eeV?v=7t8s7*EI)JlEWTI#a}^5|5jka zmz|~uUnGW`ApM})%ssuAgo{Q&xIGWE8A~!cnIbEk)5-|n0TZ+iW_mq=hCm-!UYyRh zR5$ZpP@Z9ZmaPgCF+nhS#UD++=eu#`!SJYehECOSsctZH#-VV^*~a8665$2ca(;dM zz#l*mtO&X|EP?id-{R0Al$6|zot8}gt#cS&VCs#88sVXIrgjkNa;Cr?+}T8b)Y~Ax zDPR60?QujEdU4*bGo^U0*u#vl%;|PI5jKNh1y@`Rc0BTA@yPEAz5knT!G%m3CC#G* z!FH|M8mK&KxF5`xW2kQdvV5Ew$D^K2WpU#{(COEn)CAep`%JO~BW%}J(VIs~G?wShHh1#g zF)38zM{U9~T=l=*8*FmQkBDQo0b-e^f}F|WABCrHq&dnhhh4ggiKX3)4Z|N`z}ZNY z5`}t@2EENp;RonobT*rlfHcLb9+vt95BLSOq@KK8=Sx#xHOJlg_1+ zVoEZnbd-oW8Ff}QBYbbG`PG-DOl2TZX#;iDJoMqia5QH)5daiEE6okb@Uwn|g=)Bm zVUODpGNnf{X5pfY?3ZGzr69*8iHuFQGAR&@6F?g$22E?7#zR(q5X-H$)v}SeCql0M z%)}=sV=7K2c-F(?v2uZ^!&c$9zCIy8+j$T`(dtVaX#YdzVCCq zc0;x6izj0%S6^fF!7`fXaFv5TdPCVbw*ir1i_A&>7tpEv*tz6w6z_89l5jfMo(ScZ zeW>*bQdZ?(C*Q*+Ir}osW>>t)micjhnV%f8JPL}El^{qpmhq_H@_Y61s2M~RbpxIi zkh7Mx5n@L$=}^1ayg&2Gf01QKJIn6mpDz3zZoJ;+8*6o}D(3o9%?h`N+a+5?q#9g1 za2B{xif7N`ICp!bP{i<>M`a*EG7DVeuF zeXQzCvsno{yhaq=1!p}2kX`OvIXy!E_N9QbI zEXz0^y>aJWw$-rJcgW}dYTO}R6o2e5G%#U!~V|qn5>>V{zW|d9D20=rDXxKtlO>d~O4kjXIALF|QolgIS@& zS+q$@Q=bT)Bql2R1gUhhH35F;|i^IuiGV4Y;c&hZh%|`Nm$ogf4ZqFt5z5atdZTc<%`2~&eKdWJG3ZfMx9ye zO4VY}h7+$H`Kyehzr`I)T%Dhkz0HCwvusuHkrY+mE+Wtr9P1z&-)G%?_250zG^7#Q z2vOV)VZ95R|C;ta57!KC*wui$F@X=lH|S8^U-ph+@oARZU;BUTJwHv#lhj<_IrduH z%&w)c<79S<4b&oN4HH|--;UW;D_%4WIiH)Mv9L$M2K2tS0PfesuRBwfy7P7vWjY^u zynUGUyn*ZLX&~=KXnSqC)n~J=%8D9VV0(#~n@zZDNC^t#qp3(K!5o2aapU+MjN;H8xPA z@L3Qc)46=*;kwhJ0ZV9@)bs|3qY@E0S$Y%ZY^7IljkVzTJxNpw$V{3BhpT#XiNA+6Z9 zPbL8_1D?yI-c7o|?Ch!~QMb5rNoackY#M$88JA%|m_P=L(yflw1nS1nH~G`Kzrae+ zPt!)#zix7;tVSw>1lO<96$jiOy2atgP2&l#wrt&xiY6^kdi^h~OTu=N>Q4y4lcjJS zYbUBr*mAt|=mX2xD%-5A9r&u;Yk5E8uXLXgP1~gn8zhvlWRGEK&nnLOTWD)v?($t1 zOMgto?|HB+OOs|FfVF*zaC!-LTiA*Yy@iMqr^PwHG%ddH@M*a5JnNFJ(nrh@SKIlb z}g%bBRgzX>x=6u(QbW$k)MU$xa1~(a?Hs ziy#>KGA+MtoX+H{d5bNSna#}sN9l?$d=fIEErXxs1Q|EJj~UjE=L2EV!+Aw=(h=6% z>uza?oF+D3$`Y*Lfs!zasn4!x-!$~w*0jU-S!x7Z&*r_7Czowie&;1e_EePeO(Wfg zr(WZNH0(>JvS~wGlioVwik>pVf8{fop!eRndP#TK*vH^^x2i`SW=Oo8XNAa1>cMNNH|Lbu)fT5-Cx0$kcovYq&LLR?y@1vl3 z8CR_swc$v&t(0dam6qP=vbX4ozjX*MU$=V5dJD%yT|x3|+-qG|GIk|)h3pF9DouZB z7tjqI`X?ci4EE8A=ZU>FT-?e4Gf=Kj5(BpM%LvUUR6L*LtBCiA^CR@l_JOu%7D zu%R<7vq>GfqVI7lu*!C}KIGWFS@m1{0`$D3J)EN)Ch;>GAGnlqs(uyhC`O| z8NwfA(kP4A6mVtH76p2we=SajHNHK5K9mVuHij1V^EPlzs9;rFVm^%@?v+ zY8f$dq2h|hD%$HFI1I=BktdL%&eaiU`Q>ZqT`_C>Ov7P6I`Ct@`Ub>^jxT#8T~r<) z7LbrR$S271!b6_FKAn*i9ZQog0#jz{LAo& z#^KdUQt^_0$?blkR^H-tCf#elVLXuqXj(!1ug z;T0>a#y!jgNmG17sLN!PKuBIUn9yoc2UckUwKoJRgfTTy4R_lqwfgBX32H-g-FC2*x2SgX>H%erhvv z)#5@;j|8|;UD&-VZ7%%m{B~COMbdZHlSb3 zgo^u&VOAp+oe2HP@!dRB)iA;ai9;2Y_DtvSpp;ImY-+O1?jTg@Yv~3E!pat#@&&8d zxXdiURIa!La3x@p(hqgWu;yk^3Q1sq3s$j_nOTC_)?n@7 z?iC)%sIl{#&VSLsJ_97;%B8xkvV?G%XB(Aux)KeVCRaOBt%;UhQHSBYU)I-XOsaZI zV=|H?f)KiP$)agE7Zd)Mz{^B}>^yAj?w#|QLQ92n{At}-^dx>~3rWTEeyYjTEEUwu zy?upI1X$mCx_^M!L;IlCLLTb=LPqV<^_-L<^`DesPZ(P^k3|r^5EDt zMRd^wi(ihFet9eGP(~L^%{m>;tka!-NZ6wHWmGnooQ1Y_x|+8{)fm81PSG~Gl3)B) ze&r1>-6`L;2-fo?u9qoWQ)cMNycKJBwe?i&zuGkNN9gkqk)%t@fSs3}#0S=Tg_-5b z28HA$2A7--X1<>1mf9-%kZYNJ+WNJ!=b|_04b9YP3wGQF(gwAYvcF>HDcwGXo3EWX zi8E?+-gJ3l3Oj(bvPorK7>40znZUbD47VnHNu8?{V!)IyyllbfC)!ayN7$LznnA8D z)19X5JP(F9$xi(nJC$gPT?PT110*1nL9i)n$*g#9d9st#1=uIH%p4cmZ36M~00 z_~NPE-X@*P_g-lw2E8Ar{fZl| z3ahe!v+p9tQ51eobNK^*)%%#Pe}b*{m|MKz)GCQI$Z2-8(n84b66kc|HIQdpqG3GY zg`k<<-6kH%Yqpph)=^7t#{Ex(_6e$FECXg_(EYIZ5QO*)r`hccjc?;!s?EPkylpdh}axIAtRE@WJ0lJT(l@;a)k3Sf?=k`F$EubfhuHy(+9yw?4PTO1tOoDY z>{9YJ>0G5r_g@%fPtdxa2>eqNM>;%*=R#I9bb;->>I=GpO^XZuoG0nOs>UggsJ*Lj zeF0a~a$Ha2bn^KdrfYPtwPSys=OB0H9&a1F@ZY3aTV7}RUfwHuKXASX5qjLg(5HZ< z(b?FCdm1i$UaU5mO>qZ8bJ&yR!R}_C8c>Le#uSwdEP0YvjeVx;=zXWq!?#oZf(;~rfa?2|rXKS6( zc+_w5rZY2&yfHj%J8u~DjP2k@o0fY$*qEU(y)`*q2kqfKZDrWSX~Nw&R5&RbvM$Pc z&XN$Z*i4vlVGE{wpYHP|o7mcCI}&sK$4eX(vZy!=HqWrv-BYB_MoajaH&eUE)(~#Z z9Bd|_Fs_+Eos&NBkpd)D;HutL$CVDueDo~^UuvJu_#Wz+*RRyVks_VFp2{mGWWqES?voh#y_{;_hWRW!X=h-UtqLnAI}j_WF9s~m`Hf+1 zaljMpstgI}f;Jiqlo&+nP>Iqj;5yxcl|s_yfv9-a(L=DYtux%>%qZbbFb%4001p1< zVch$kKm{)fr>!@@U3(CqP37M>@#POD%swBJP_h*fP)m??5=Q~UNV$ZD}c{Or)WtlL_Qh~&gOn)>lxX+^in*5tEX$?W7QNzjQ9#GQV`IqBE0Le;18ecJUJ_szT#^n>Gc z<%fI;sWu1sMt+s&5EIfd<`?K#A61Tcv8&6Sf_vlRZs}Z7CFAH=HXUPMM&ftUgle|! z5>w@Kjfn_=`i!0{EzUie_i>&TwFywP>In5Sd3vZiR^ciZjRabcI+!|>L9SoRGEH{~ z45nQD?t}(p)z+j#Ix2SZlc1zuM=PAdM)<(Qv2+y7ij`Sx^LL+w*D0iYK~_yj6nviT zNS)0giB%{iYol1?f-9`z1G+K3a6MlSTZNYn!KVdVGVgmr4G-xN?G)GQyUNwqt<&N^ z`)Mo^ep4G3N@j)9)0YLDTAA42KwIU#6g;Dg0>9fL?6%HT#+9LTHeTNyUXqQW%II3p zf>#qLR$Yc%gNrZzt~P@atzq0RIh{?W=oK5J&XcDk(u~`Ke)X!Ao`W zaF0x|ctziMs@xTW`FHSs9^{#CD7hHiCSkXCE)}BQ3&UuZOfxH^mI9n#4M$pGF8(**6f40rHiiO6jVIQwqZ)gS9rTyb5NV_#4GzxOYVru_KFRq;i$8z7s>4D z++SpiyFYD1!IInT6HSOy9Vw|(k=ou>S=M_Unxh_ z3tX;f;^?k?> z3(dp&v!F#f#}v0~jB&qv#RvE-B45zE{YwtH8&3-A)3dPUR8OPy#=)x_mQdTH zT&fyXQ&+ndP_QLwnJJv&K2*N&!WFEebMKHRwTb=KbLBAT{upiYEl%yG!|m3&%6?tJ=wMqY-=lzikYAjoi(n=09Hw*iq(uk% zAlBmZU&klf--=V2^}w@vhO^t0?(*SE*s7uwclb(6bI`_=Je8)6HaEL2s{fU+6*HY} zw#rWZf=F>=Ycw4!nO(k=yN+J+5*JY?KlvGd^Vr~~3maMa!R5{tHEcf44Y9KJX(#J; zu~inTJW@ufMlMuq+D?zJOE}E+mRtLBG+v;$;b}kC!%P$>ljShAVh4^-UA4zY>MN5uZ0^nBiF~s6a0mHVd z#_3ePWX=nW3ejO=@vi}KkO=)0DvlgS>I$|caAY)XF9vP)vftO{hXr@+Dls(U)ol1> zr3n>sdzyrGh-_{Ub-0p=tVU{zIUjHxZ@LD*Tx4_|TKTG+n~q}mpfglbd^v1IwaX(L zSm!w$@-Vhpi|3DZLP+bDB2^am+~eYmAK)IGPg}B1KweSNyAEQ1_#p1|lk#pr zGxR?{_0b+GzFzMGTa(pC6MCq9~->M-c1@sP)9 zorX8tql#ykx>3q^9Nj8p70#_8WftDXCU3w53Aw~t-o;83%g*u%?|`__xtV*eJrApr zG@ZAntr%pz^5@at^h+-vhFA+Q?zR6k9;c@^DvTFXudAnci$Z;j*Oos2&0d?DGlVrl zhEhSK9_H77g7)Rt52%TF=v;BhQeFZIPV98zXMI684u?E$9QQkhjZ(HD zyV(<$Q+KZhn|Z_Tjq(9gGn;9a(}_#wj2gX65Bi{+^Ri8UF~Om;iF_cuLza6Sd=)!1 znqkR`Sai#_2(r6um0W(jw91zECt$1YqocU4o3vl$@Jz8DmVf>sJS^s0Rxu^FQ(L>@ zt7PvW|9BONVPTbD+1(btY@MqO7x`>D>8&)}@1m4{FNfeYds$7Rew9>SY3QTvh976NFn#vHe8~9~CQwfZy0~g7ZA2d2Q|2pLp^8RVK`UT)rD;6sxyJjslEuz;H3le@ z&b*Twqzf;3uKVrr6g*{^z7B@X&BIv>6YQpq-}#I3@E}>AuH1v)ELbVCEAG-A$!%n7 zo;2-8uDEN*oXpA$KW_4wl7ot<-eikhM>6P|_v_@z=Cf?uw@Is%M6**{TUkhafC7Fe zL&0r~p0q#4bX!ip%btzGm#uR(W4OD~C7KR)1HZ@Ov_H1@qJz0Q9lIh!biplO>OwYp?)1ZSu%FjvuDlkWfobVqE3yq*|%GiZx&c($a<(2ROf?zP1*0* z*1(!d?{Bj%YWNO!EVZ+*_M@OA*}c)1y>sabrV8yII{z%$-;$s4q1n{fR^k6Qf5#XF?B`)c*3P+LfOAS(ah&L1g&aF)!e)=f`Uw zJwJ}56G$9r^O;8n*;e*#Xsc+%*U?qlambTS1;_}wHP!Ier2b1lcn+v)IS?_4Tp&EDt==KNO=yn{0QD305POXU2U z`8l{INGad{A6*Sc!e&&=IHa8$6gW`jH+hn`n}KHsMcXQp(7{UB!%<}yZp*yk%l zm~izY(b5Img%}cto>u_ns|Rqs&~9h@e1G% z$630G&@HSsldl?xxN`Dn1Yc&Hj0Nq}bm3p}J*oS#_uxO`d|ldN8I{kM)oY5oYIlx> zk(SoM#-o0NZ69QWk=n$d;c3RuCk++ z2-5eCAoA>#rh_kg^|1KN{khNLy)|k*&JW^nD9eCx55a$WLr}I>b;s~Pxq^_aocwLDE=-#k*Pb3I`WznpDxCI8;nlW@Vwfn;*H6gV z$4*gaVCfxEN}i9rZdiQsL>@xFkf9>GvC{8?gq9FN(iAE-O+exlZ={T1o#PrWc&^>| z%was@DKyr@kO`wi>Fb!o9+u%YEmq~~XMwYhO!e4hdQ0l4#4p1OPK=&_?R}q=9!O>S zP8LW=@BGugcjQVZ!XnX`WLbAGbixb>p2TTIo9D-YdiaNgaqnY?@z`e%<5zwW|NJtO z5&NP<6BViq6OvX{lDq0{e1_Hp>NG@@=jv%X`DeoWd-7Q4WcLp@w(SW{23*aVlOs3P3{&`O z2CthP^e9!aD?u%cH0N?%xD47zB5lHW$3>uTLr<5mf`H-Ybls;zqS{W8V-3Zd&B=A{fKR;GhmP93t;`k)6G{7!}%w(^5Tz0r9LX6 zIBo3M4q;tH(aRnH+HB^}B}k(lh1>fcE40qX@$HX!55UJ93#SVBul|c z17AiIop7Nv>1J~DfV=bm#|*;XAzRnexPBK&wQ%JLww~t~Y@_rO%zwW=^nxrKm0Su{ z2E}Qk@Z+9LCmrxmf2wBK|9|?U$i?TS782OXJC}62oRt9Q{{|Zmp20Oof?Q@xb{Rv5 z-PD&`VDj#jX~qo@{Qzg=e-O$yUAt+mljPr$Fqih0aD5qQby@3f(Aef?_-if;kJZ2i zXKNc^RgwLjPM4Lg3u04I39U04pwlm>VU0`1!x{V^@hrwSCnYVf%(`J{y;Zbnce-fZ zoeHTz4h=TW!-Z|czmLO>=hF#zSD${3Xg$cGk!$is;-tp0PR+BW zfI_7@h3Fv->gXYiN1171*~3A@8ru>NUj7iBD~TmExq{WUN`(hx|&3T_5UXq?5;k3pN$-}&b`1D_;l z3)QkSCUUnnp4JfgY$bi`XaYz~*Ybe#x(~ACp9ve@ry1CkkdK_%HrrLTQE|__QCj7a z-TNLrjCcDRc0v6*H|Em6BU?q2_$A5HwYoh!afoK@4#i$UtfkTpI72OMU*eQ6 z!?7}dRra*)0yaze?P0j&Pja3<>YyqsML9)BFZMq~hW-dCtL)*P=2sNe?RLqI%K)EuCu zy!JjwH)pytr<3uJD1&QWY2Qz)lA9uuaUm&~dT(5UM5D`qo(s(Go)|uQFSr}ep~G?I zxSj#+4cxr(^$IqcfY)WogOqk5#f*C&&)bJT&a1u5u<#{v>&^~d)aaA}8`~-bzpz=o zRF7_F8%stXyTqQx5S^&$q^Z-g1ntYoL&xbN9&}y$QijVH`i4*V<|j*uVkWp5utB~| z`E5GUvz4L#{f2HK?nrSf$Q{Y3U9n|#2!NBHLB*d8@BaMswx(W1b$!zZsy>&?s{w}w zU>Q`IBsH&WxJONgJZfT#-_iFIoUyZU5g}gpZenozoI4i?lLabS)cI16QsPN`LX&QB zBg4ltG(00dlg>^joNlBN8u+WS4=zf)SyRYleGA|39&RP~=y z0spfrhbrGe?XN1(v7iYH3b#~H-HA2tJ;nnc%%a05a^wEJJX|_lGUYp|_fdighAEL@ zH7~){AkCK@t?2u>cq1-h@a)sU^~>s85-OLY^%;mO*gr@fuJeF{^8=ZaA$R|&kMb}ZQ_`~KSp&&6_1 z$I)IDOo6mZ&I_n8CW~pqocV~>l{Gp>RO+e|)N9NTH~lfY2oWFb9mj(nH4TS9ZE1#4 z{BGn*M1xc6mIo59Y1x zqI0RH8@N(2*`k}mAm6caI+uzhqCEI~mG1Z@PM}^y#R;|5^BuWksT{q3l>cuVvV*lV z8I`~ee#7&qoFC4%eluyGN2AlYsA|7`D^a})U9pH-+7+!UnYh$=_C1MN#-}nB{V--3 z?}HqTTtIur2(fACxHRlayie0ju7RPazp`okhLToA>*%{HOVI*~A)R;?QhyTysL2t{ zihaRU?E<_zu%vo|j>2mX@v@bdu7+#h&(r#sj>9z{*44+H9xYc_3C*RmVwu*b&8wm! zLyyrs-X{Amq@PYF`ji-SwNj`@G?BaG9;4`YT>Ea3Wgdf5W&P7cCO;lVA%B-jdXOqV zE3i)b)wxvB5u&rr`GU_e4LKWzVouD%=FQC1ed915^ljsCz_(1?4;8iiYgsxZqhVdA zDO$(b;N8iR7t-jU;96S5t9c9P4u!9{Ln+y8OZc3x0)~;xzPR~Xc2Q*;bCy{QSG}2u zn7B$scksC&=vV!?nqM&{>qah89qA#-v#3X3twg$dkG;Zvhs?^M|4#*Pn!rOuDntE9 zGf4~5n`xd;WZZrVm3EX0?3Scqh$=k+OV=1GxmuNJ#nTdM*J?-taJAxtvP^>b3aIbP z4x5joqwzB6K`bWS_r9#}VG?2`NOtwo6_f-UluE2j0Kp5Ue5Dm{6p}uAWYPeG+@K~` zysc=dyO%f7p$0y3J@HU{(3^~Y76t|5fN@O|7#jN38E5vJWgvJbevK2I9bz%>IqW}9 zX1X@_1sH~(qmzA7vZ%*f^ks1Czk?j2M(-fT+}393%%|Q`lOJ5=bVKlKK%Y)~;v+=X zsCzR8e5Q@+&ijC+o@P?hc<=+S+p%fVi-M8YASYU`j++kTqhjC6RgU?VeecJt-`)Ax z^D&`0WjfKH(*sk>S#4?2X-u_doqpUnZ*0H6E_`$3XZE$HVHKx zwd?XmQ#a+CeO^-P1hCh910tf3gdk;-aOf$7UeP?VRnw(A<1X3moLCh+nKRECjjb{c;U8|7$R=qY+K zT~Mu=9KZ;k=N|qH4Z$8C(`_h*TO+C#T7c*TO6$pBY;ZEAZi|+*EL1%NdzNDLMm?KY zH5bC`a+^Jjh^F>=Cq!>A6DImD>$SJUJE|vVDGz)3%Ax)L-7KVM&7k~xe0!(&55^9x z#p~ro*3%Xzn!nHDNH~-}aCRA+URjD=6jJ7)AGzpm;601{9I~506S`!W)iq5>5XJcn zCu8AnHB`aoUBFXZk8h=t>oG<8a^3_>Haj-TcG|HO*h;~>y_n>2z8f%vmuQS9F_c?n zAcWQ!oQyQ|82SwKXcid2p`hAYs6c5e-)haAk||=9qUTZDHT$_G%;AK*(rM2uvz9YB zCcpD~8qwBr0;o?Pt-}z89Zxp?9k&j8UAl;u&D;xFou&vbHCCIWmvCb*^ zYAoKUXG%eGTPRHd{iNe7IU^`!-T(!UN{D71mD+5f9_r0VR{<3NoP;I232aQ$M3#3nje-%ga z@K0#9x#;O!!i`#p<{ha>ju?l&5%wx88m@GYefM^FH0+_>X+IQr05ly0`kR zkR-d3n-8G9!EdViGVWn*ta^`PP?PM2AuZrLD@MzDi;WMXm;pFOgFOoS0!B02^%fg< zG1OECPAryR3s>ZlTw}?SFgbNpXDVFcNm>=`07)MrC$2u(g}HV-zv~ zvf=?ohJO&w&@1uOsC%giCMh6|S8(HuSCuzc+hKQFrirh^fb@Ru1+4D~R>Ol&gfJfs z8}*}IPh5JJep;0pTX5<9+TIBQ|7J@^AW^SP0ao=uQdLz-Ks^_cPXHyf`G62l)!oX} z9#b-b?klV4QmeXYu9NA@8vcOx4F!3d(!7U5)m};*gG25rH3mSvfMZbCQpNd+*N?K1 z;)jzbjz6)rTCcSRgCoviXsj4FM=`}CXuk_%bdY5#q&EN>g(r9-fkeF)0H&cUW+wY- zBE}H0NECjhB$wNX0xo$HDXel(n2Htyl93V>JK-#IEMFJyB*M5%IX@--7~DtnP+v$# zH;m#;V7Go7fomgggn5@IT0n+_VX4oUWC*Dq%K-YQZ_7 zy%LEgHrfajC}BeuK}dqrIu*p~uF7mx)@<;TPwSMV(M{1JKdI{kB`ub+PE~C48{jAK ze8}-7TF=(CLmp}+ALX>Kc^O4>kTl<2Y*@f* zL$P+5F`E}Ld<<1Mg07DpuNbe9!t$R^9I3#;3!ilbEu2ddk|!VZXb(yCILqn- z!|~SEb8uN~VIwc7Xby8I zzM1172dl<7O|fo8b^*o3nX1FJ=~Xj_@c5dNN4QXNRC$r)GqzfDHatGuECPOy1g~iF zV;|?>{hD6rlK2M0S~rtHzHv`S^NxEf{D<|IA!4v>E@Bq)o^}YCS!zZS_$ChaLpA#_ z@Y~=&fN^VA|2)nx5AJ$!`|TVcffd|i0Y@xM2d1YhY>jr`{=#t)&Ywa4gfsDOf#y88 zA32uLdjUuK6}T@jF~R;V{+Q6%?Vb9XW{uzPrhhnk*0e-`+s$My*HEOZR2{i*ApKK9o)1iie&Jpq8}JaqfASGZ>| zMAty{3D3~52#5wDx-Tjs6r!2mL$pX3)If;-`iJ)YJ5ByWU;Z1-!uq#o>}|~efJFiT zIC(uh!h8XMM*-sRyXxr+)x&cVqBTRj{6iobx&}-<{XD!Nx(1?EgM-n3=oyGsy8Q3z z@%?wShsWiAt<%H9_h0G1_XR2mz4)YmcxaHvwZC2bpZp09iiG6#w}Tn_<@FA6u!H_f zL8p?J_et}Ap@H*&AK(uJL1!os4(tPt06KssZ~|}wfCz8QpMC>o=+J9n{=R+@`%Iyc z^H$ww8RDs~y6=dlmgb+^|JNLUboTF!-3j=cE;1>8`8OU;1yZLeNM|ztjpq;m0Hv`2 zAX@QnyaT2HAp9Hv8df|b!><0lKGr|~*Z^(-28aNXfE*wXC;@7aEcJk6z;VDFI0GO7 zd%y*72RtEp2LoY16o3V80*OE>a2Ln~asWI~2$TR7Kow9AGy<(a7w`$_1BQV~UOjxFPrc|c; zOgT&iOr=b(ncgzBGJRm`XBuZBF)cIwWZGqBVdiBPVU}e+#H_(=z--EF#ca=fk=d8| z3Uf5`E#`FQN6gQd%bDw#TbVyG4>Qj&uQG4304zK#Vl4Yv)L0By%vg{tt}H$*VJxvM zDJ)qm&sZv18d$nn23clU)>wYCva<@a?qgMBJ;r*P)q&NM^$Ke&>mAk{))Lk_)(+M| zRuU_jmCnY;Cc~z}X2@pA=FH~H7R8pxmc{mht(L8mZJ2F=ZJV8)U5s6kU7!6ly9;{& z`*rp^?0M`2_7?Vj_Br+~4h{}U4iye#4kU*MM+8SA$77Ci4kE_@#{vh)$-@cfJi>X3 z)0H!XGmbNh^Cf39=K$v-=N^{;*Fi2rE+m&1*EOyTuIF40T)kWiTzlMt+=|@B-1gi7 z+&8%&aaVG8a)0Ii#lypMfafTW4Ua$14W36luXx_`ka&Lc3h^rQn(L_;Uj$z|UnyTZ-xMFnFU+sbZ^`e)kK@nfuj3!!{{iEI9fX;}++oqM zELb(H7q%wAC2&ZrzGM{C(WaVTnWJ6^i z%eKp|$%)AwmkW@4DAz2v3>Su*!2RJ5;Y9e#KGA)q`-1j8+SjpHU%W3-*86 zzjr|KfWv{f1B3(LmMMN!;!{E>T~T_bG<2B#u)*QL!+D4Ml$n)vmHm`+m3vi~RrFN+ zRq|B&RoPUJs)ndOQyo>~RWnt)s#c~(QWsM{s~)Fbul_?rLBmz!o<_F@T~k*xNb|Yo zq?VA@8Lc?22Cbh*l#h5G$vrZp&8K}z8>jt7o1&wl zcFYXTV$51jvYfOynR4=rxsbVod5-zisRO5cPnDe_Tj*L`w`e)dcG~Lnz0;$XvX-8f zrIzF~`e$O!bXf6P*;(aS&7M_08+NwAn%Vk{^#kj#=MJ6=IaiMake0{?$ZzKr&tEzJ z&W7FQyiKmncUvu6tZlcQupP?orQNpu3HuEDNe3l|NQX8@nBxVmg%-|LH9!9g^`Pj7cmzQ+Yq6Uz>p5K92$e}4^;_G44t`RcqQ`+ zIm{~TML1LV#qc)~A`m$E9H|tU5J|dfay9oV808pMjS<9zU_M_{zLtD#G5S<=(RJ4A zp4Z#3`>{8%q!`nff>@^5%du@ZdE71B!VQZXB{#Wm2Hxz6(~P?xw;Asg-*8Lz){R?p z2^I-uiTsISiK9u!lJK`#Z~Nc=lB}KlIGLW}mGUuFGc_xfddKt5$26_9M`?_7pY$&o zdKvk5+3$wj9l3|NS8`wQe)Rph2i6bj9`1XX@^CW~mH8n{Ckvm=ogJAy^XTlOH;)w_ z-+fHY@yi*`J&{XzBJ(8q$xfbE-a!8G{7SqmJ{7xvqR6a3fT*<7Jh&3 z_`JKwps4hP)Qi*?wBnHBnG)NQj#B;7(w8zXGs>9DBFmP`FO>IHoUC|Lsa9D)5F@0% z0$xSFT6ulx^+=UfRa><|b!E-LnkTiwwJCK>b=T_1^?vm;Z(QE=zdiG|t>IWh?K|~% z#f|$LbDKn)GMc%YZ#6TB(ZsEm(3Z7U-`2S{RNG{`bNf(-O~;o`tIqdbr@Gp^O}mNj zjo&wZF#PcLqru1ePkNu~KI?w2?a}S2{i64!u2;YJP2bVJhJK^|<^jY&>)^@3t|7~z zPs8Vi`$rr`#zrrU&Ww4DEsY0_QzouX>`mVI%Jwzoo4~iMDVeEf(}$-CGkP;kq?4r2 zvv#wSbDndn^WpQ*BVIF_O0xZxkvyTq|{453lJ{Jfp^Z@{O%il5O-=1LlI}V2EKX~}h`RDit z`tP{&Z+G+nps)q_1IU0g#{u98bjm~5LeMo5qHUq~X>0%M332}%;Xc|&{zfqI+=igZ z0S1EtVHtJ=gzwWCj6D?wgQfrgtPobNW&Jyr{qwXbF9b;;oO)KfBf#))#sB>eV-hg? zvrqWnI{sAhzg5AX!i*L`kdsM_Nt1=?0KhEB#3IPV=m6l56xse>_rEloiJ66!jh%y& zi<<{}pjH52W@2GsW@TYxV}&pqQw($;U=?H&+OK8GE^On$ao~!`k(>7lIOR{gZWXod zCo5=Q4vXXB7893{lsb4wQR%Rd%(dwFTM3Ctx06%uKX{m#mHp^(&a=YjMK6j=N?%r0*VNY4zj@ox*51+C)&2g% z$AQ72;gQj?@d?uG-2B4##iivH%Fkb$TiZL}@7+KBVggwHRb+qf*+2A45b75*D=P~t z$De*NF-Jisiy$l8el2z(QyUJCE5Zkk+~gEFaj)QYE0?^sEm`z(SU| z686)E0kE1ffVdyA6F9QnG^j%C+DO0&&JWV%=pX7)Ku=2 z@18hj9N7{!hMYlDMZ)KzsIp9Zs#NTN$uKEHfnvUwaso*!Ni0KGW&x~%nACjLOZk&wq zWdKeY>;1>!`3#`ii7Hf0=N{Y(!d?f%Awd;Eg1V2X?<|GrZxD?FD-i-KayqZ-M>Da?0 zJQD+GB{6_{-#8=Dr~YyxpdyMV{S9GBMn|7gxoEc{n#9feBi<>I zst0Q-RIF?3UcY)>o1${v&G|r_#DI8 zKqZTHPv{05YI|nvFzz*SZ3DU#0llFPmC)|tJbKQpl14jl>CtNl{soXosh+b=CtN4t z1u;?Wg5XA1KI~2E={_ow)GO(K6+N>dSl69K zoGHP*5|6_L;>M8MbTF@idJW{-vj`vpCUV%QMo?uADTH~~<*r51XfF`Y*sQ7VZ(ngg zI;4XZ#Y9iLWuV>-P*rB&;(j@?Z-Yw$UYqW*K#i`V)gopd5NlEEd8BV}I#)Kt!w)vH zy#TG+OiYHb=)G`122ds5)_c=L7z{kxpNkx96fD5JYo*H!=}tC<&noDTM%(Y6Ba~z0 zq6W<8Ouc70*{EWd;Mq8+et$H07*7>tp>qrGUBODcfrh0WK^2ytt6!s0iaYb!Xt~78 zkLfTlngN`pbSGjpW?_QP9S>xqP~^r~1L9!NW||33@WT~v3Zf&YCc3jXWi5gS&gQb5 z;}&}l*BV9)#({^6sltPFuJFBm?_&>R+}aT}P96B$&0L_?o;!UE#c#v~OU9~^>6Tdi zvJ0!R>SScnL2?#8@ENWxJf^rOs(3{ZR5{l?xUTcf>@;~Q`x*Gap#RpVX|lGA&}HdtJAb%z`P7ce?X>b>nQ(O;>q00#Q{mT(T*)1K8r;<$q$Y@0#<5ztU0)Dbf^ zxT@?fWX3MX`hN0a*Az3Yy!I0zv5o-<`ht;9m!(E?$#zb(XIP%u>&LDi%k!KSZ_g!g zugIxncNk7Rn6rXOExR_&F1e1T$P=pvkDKH|b=zPCXhiJ6xoJ+SXVae{!06Mtp&P6W z0K}6&b%<-Nez})DwNWFc_-G z^92f{9DM4_kDu+c_=)&!$i&7c#U5OO*JQ8Xtb{sZV+7k1TZY5XbR}?bMq{mL2FVFV zV2n+qLG>M16w~swFkRtd0L$qCs@WV4=HC!oaTRN)-|41e?dG01?SSUz{NASn`!Wq4 zfTfs-6R6_aozYQL!Em~i5Drve0C!?xU}^`v)+d3Yah7tC(1vHBoK4fpXy&))H?v+^pnJ{!oH}TkT<;i98G-5H{YvoldJ_05i|%Vvt36f{(5RPPZanb+2)RlL>Q#&Wu|*$ON4|lz=nl#NbTt8jU<{I?@aW=el>l z633VkV$^f}Khzp6N!xvmI5c5J02P?C{fKEVa1RE_!#`FPdjb*?j(Qz37e?TRnI`#e zoU92mMt^oBZMI3}#A`GR6F%#d5i7Tv{1ilX=;!z(v!;^rG*GE-$vP1+G> zs&$E9mg}keb$Vim^y!-J+r*jKH@KO{t~jdbhCS4W7g%HRXdKm?ywQSyt3%5$J|4wK z!Wp6uzf~N|0Z$G2mftGUV-V}FL5M2~Il&=eJkKjN|s>X0q}8h?&O>pw6kC z2*aw<-XdmRO-sfyQN;#gkAQg80CDDli9Xmpm%)r>CX3yC4$^<@v@~-)n49kS7L86q z2{a-~on4l*gRhg^VC-PMRSpBNbyG7tMY;I7S?L`>PelYk)*))03sUtzdaptM3?Y&T z!uDX>4}42mBoPyur7kW-!@JQOV_55fNDVnq_!K2_BeB0(3S;goo;?r?6`T0j_r8p15c=c@5+BNcY>$KPwdJHm{iOt#=iy2-i z-RxAO{S>zulU!1+^hI>5i8wj0Mn4Ca9$YX$HJ;gfhhS~#h26ozd}q~oPNq7HY}6RT z?WoVm8B{T8I$s$@Bd*3x6zYc><}w4=&KbHaB|5s+Nzwon32W=KC{aSk?Y{9|lC=g( zDi$ADy1YRs^B<|7v#O_PyJqIEw(2$9jgdT#s7HLga*yMLdEHHT3)faJ>rzA0bZhmq@g+IYx`FRt zaMX3gE%l%Ra&J=B)ZFPT#G18gyf>^b0Z20-G- zFfu0v2U?JmI*m2j-K8k`MdY0h*MwUm6UaNNSj9ONHH)@b`G!8ULaI&tDT-{u_p}mA z=E(rDK{v|-@Q-Nl(gvuUK~qG{Dbn|8tU<=%%S)p7OG)4KeO3Zmql!RGY+lP#SQliO z|KiDvzhX9Tf|Gmxu^-{pL3QNVK2%M83*zRE_^aB^G(u-@>NKob<|67iVxcIFaL353 z@T+@4*O1=pj~8FPz+ajwA6K*E?XojW52 zty{D~6+bq+zEIQ=EZSKyN)?6_gyl_r{vip!?}?}cn9S=}q#06Lqvzh*OmPzknls9rN%t6MCB-i8vya?Iet!{QzANt5p|F%Z?g zyRp_;8vA9sim*0|7YnM9UaqW_Sfd7#AGA*K4@DA%{iBY!fVtLWLP}%?Xkla?^Q>co zZ8Uies~P|M1DHxaHtWf;)vvP8VT;QeOQYa z^fuQ)L~YVdy4W%UkZe3wU|E8P?C5M!Mv_ii$gY9cDB(rTlhh$Ph#+ku$Y+SVr*Uik z3?NyST+9G+qW_u;P@xq)?gBJ)hjBBN)72Ym2lo(EWl9uP6gP`lYpMWo?F~&|iPhbS zL?6Pq_T2V8a`a$_oYDx@tQd1ZBLyd7BtDB5ULDN|PAo+fj)`uG))kNMiH-xibUaWZ$-6>EmSYC$6Hohwyw0`MI*+ zpWaK&{eAGQPxyxD?<))dRse~}fdLFaE%8KBPj4h3sDu6ggx|-pV*KBw{zXdvZ%ZQr zPj-Q<*g?;R5=cXC$95gBW@Cf)aqwG9PwxY&KQRS17Dm-oFVmfGaKT-%aSy(;%Yt!s?6#pJboa}HoO?WRdIRhYcr|FTEV+Yli!bJSxUuZ z@_Zc0)WVUY;U3-{pJg09Og5F|IB?@YzKxKWqKq*9xFLSYn4SqP>^Wo6;NafL*uMJd zSE#kxxpgZN8{wAGe$uoYeH>rYn^-VNfY#~M7P_%v4FcB8Llvd>r|($}BK$N`v!c}r zgq}IsKx<+xc#J$SGTo)uaISckD2|bspx0xvHrBGVEuRFZWh~(y?<}KI7y$WfTJs@t z)OtAO#bz!+5E}%EB7r_Wkwqx&O=@cBr}JVjkKnwglj^jOvY%eBK_*T!V-;Vxx@=&A zZ)sZ!IKF-Oilc!lK#OMpUa0XE>14VTmXoYtqB?via9V_FM~TfM3dZVSemP}!)EjPe z!0$90qXnsFDb3Z9R~lyBAVUro+T1@XQB+cY(=)*Y0=BoD+Tok(kcUGNGV{OX>Pw#T zLJlCT76Ul(9ePb%41^NzK`X{TJXh=6R8uEislNYK^!pX!=TQ|z2a0K;=U`Ls9V30T z(OFw(pOFZ#D6QK8Gylfvlm)Q)ZW&K~U_n)#PQq^_&pPax;~Ck=e9QKb9EfIqqO-oDiw$K5>z6WJmL}vFANE z!nwp7M{?U@#Uj0Me15#;+*NgH#Yd`MwK}qo#c?VKn6k=9{f5o?QiZFxPk;;8(6ebM z5`Qvzb#~-l1DccGhhqLkw%U#-n>>||tRs?pJ2#S4o`P?M#;1E8n2u=FW^e_(i|rwR z*BxKo544P(e0Bq&kMluJSj`o;5Hb|EuF7YXm;n;n#pNTaOT~FnaoN@k$ zgl37i13J?ZepA}y?Hr0<4s4x`oU`NBk0V`L&X=sOCNJJ;RI6OV2{dXIF5R`9HD+mt zyu=e?1hGQ2ObIEz#7HKCK%!Q!qi#);9ryeiwaI1MUf_;rE>e`rOnb`!yf0dr53j#Z zr}J^lp*t#$ZC?UYpR2w!`cOlQYQafIzDL*mTt$ap2`;|)UMkpd_`w!(2AL}D)?fZ@ zUe#4;Z}I5)Ypd(j5|)WZ?1E12eSXAM2Cxgz3?HD<@MO#QciS$MPm$mD(2#Mp;G*Kt zs0pRfHC%_rZ&nDkj_Naj{>wyZ;>`W&p8-?QRrMcFd>R8-jgIZtVcHEu@zcLe*ZDly zlf$YG);8(4?cjx)HL(^H-HdkRO*m&n?pO`YZWh(a7c#KBbGCne_)y~PbbG!;e@&CN zBL$V-h>BsYgB7NWh3Jc-N z+cqR$Da=h7T_Yd)q%eHojkb|R=jh*+$3&Ap{!GE(edg>|sy!l65&>^mxu*OSb^+kK{-yvJ+3sRQH-&&k}~YjfX3W+GTz)c#$DF zg76_o(EG#c?;y~~RCg6x0o9>Qf6^PYEC6#m^Obi!Foc$IYJVL{prAH2^sdPfPe1#TQkahqyHofidZO$!)j(2By^YG@B=bXJG5KO?UD^cEce$ncoxQxWiDvDpe^5|uC=^FX>56|oc(D~!JGl{6I zOIi{^?5MSVOPQ*7HMo|AD&U?{h($dlYL;(u^m z%b?uc@XZrz7ngAR3diuPXI2g$q!6jc-fcrp%R*h+V;uP-7VEDw8{W-vDshYE4}=vMd|rh77Jtzs5nTH_;w9p)HfkJ- zFYp$(Pt(skjf>boPHk8Q16X=H2d7$A6X?M|QK7gpqoWMqB;Aq$B$jh90ByW9)V2Rq z94gEIgBAxB?!oz>s7LTH+;3Bqr}j(UYBss&GtqsO=|}FA8{gJ}wv+q8o5bB;U3wez zYTsDYmh>{n@ehLN{jUr6*pZS?0)<0QY*h;H6so`+_Avlu#Q)h>n2Qi+_fr@EP29*6 z+U)8@GJu|Ds~@l}-z3Bm{sV$Md;=QL@Hre96}2YL08Rz&9f5pP4?)Pe{E-_$`Uat7 znj~TE6C^@A(gp)iQdvt;f+l1VG<2I6C>eBx@lgh#_gmu)VmM!h0X)M&F7O5Vv(*_+E2mZ*Q2cP1tk3d{5CXV z1S8K7$YSY5EieF^X8eu+Jgl;Rp%i~Ts$Mo$P_1ytEQWU>zz4o4>g0Sg3dETqeR+hc=D=FmSAL2nZ|2Jkbk`TesD@HQ650L*(Klsjvkhx>)T zzZXw)A@%Mm{zOuBFCl(E0jK|}Y{p;8eD6RCqyzsK3|W;@;eSPx+Szoj;XO8M>5l2w z#I=E!EA}-A_C^l05=UcrYeBcp*<(hw@}={dx}FxatVrUGYRGBgLAc{?Ld$M+dr^IH z0u(|Bg4wf*Ydy2eHd&_6z{MHGJCRMuc31bzSi$ne(PoiPV}V~Nv@G;% zCBjn@QHttDQXPan@iLLWk|->hSSppG8@|>p8`q(vtKpgc=?Zw~94e#zLua@L-sC$PX2b=)9B8bLYt=a%1*dT(>%l zZZ#``E)+$pnl~d@ae}3{|8<^;6}r^Ox*FsW{^tG-VYd4F34J7&Bu*7UZ;OM)1qOo) z-~a=VKzM81?va=jzl}YLXvYaru^^82l!>-AonYib&c0AjrhYCeub@WF-nJPqK67b$ zkkz``V7hYNkvasqoMY%2vC8(8?6wfGxkg8^bROMq+s>Kr&xd5KJxYBg&#Bk3NZav9 zehf<#msA$$CY7Eka_K8bDNZVNEIMPC%K(lxo*{9P5t2Ss<5M*h2_vJWSxwQG)7{HC{%XWyq6Y^ zqlu|d-qE?#7{H;5IozJ{G^jL9uPoy_&PMxeM!0JF|A+=2P)DtDLb?GvG!m+<$5~<5MCJCUrhN+Z}&IW)L zNeUfkvz_@kv~Z&^XHGsk^QA-QsYXq$%$FxJqp8HV4-g!)vC0>;XSez56#4Rf3=A7t zTr-Bk&hpD^mq`t4PuMxuKmB#&}_3-{h%iCSQTBX?5KbiS@^NRKBjOq*Zswf0_WqzAh{fvwu z&q1&{E_4Ma(kwCw+RY)l@+`V=*X9CCUlKsk0gw zWAe+{?b!7XmAYz%oa^)ViikC5zdYGk*Cp-sO2&SjQYV|_h1EGt>5euFfj&Ho$uF$f zh8rbGR)J}zB-@H3&TcxR83JBMRN3?^*W1T>8YMozaa$VBcyH3wD&y3FHJgj#y!7)4 zihXe$Em+bkd)Eh4mW;%9bKh^XCnP^SxaB`|N9szMnowW{Terc5xlUCR&n+x86F&Z& z0=}%yDJ{Oes-n{9=i|)1rDad9b&H%kcmH8b`Q`bXh>-@kfo@NOEI}tAhKG0PU0+)3 zLqg>#gyCM)Z2j$66{;AeVxwJSd~RE4fW9BfVn}Gt^Cp0c-8g=%^=ypiY|Q-j)rRz! zyN8Ir0ryhfu2o8(yJ&Gf)xA3A#Kh_z!m@T?eeG%Xmu6$oiPYPMNQQ!PvGS`pek035 z>S3^&q_QE4Nt&6z`^_1QZ*M+0prdlp!iH?+_9?s=nu`S^SW{A&bdTDP;PTDYgy9(* z_Vib-W|Rvqo0eY;eAPPVJi5luDPxc2dAVrFICRfnu(;>dc$D_`vCRhtP)k1g-Seis zL6ZC@ZRNg#$DW!xhnVwHkRhvGDFdy|SD4 zJSx!@J}LKhlTb(WnNI7Eh5T;<8gwDdaVYlp2;&q)?2*` zG{$vYb%zfI=}cCfW6Lr=<}kQGrhRtJ8F%Rnyte(VAKOIECAESND4$M)nvusI1rbTQ zl&h)btDH~W`B+*8R)qtqJ8LiQZys8Y@Of4JxDcaOD|=$fUmoKbfzay2S;&MihBM+_wG9 zeY>qHoG=+ozM{*2;KOSp?Nm}wWqwq8`*4?swytW`bCn+ZgbTt|ou;G(?njp9Ryh&0 zhbyJuFbp82R_Ar!*5TQF-F#`6=XXLRzrKDg`+HIL_max$#w6@)ANAN=Z@eKcsYX`# zcieo1M@KvL za}sJ;Z1bM&g^j!H*00|yx_~`FdxrDDaWC6UEQuoo=n|mW$?9}Y>?bvLwWv;~Qk8bJ zP@6(cf6(_V`vfro^2F_-lbn-#dK|4kWJ!?kvJp*6mztBocZ6t_c0e(7x^lY9y;-vT zPwbCkk;|`mxUziS<`HW&-+Xllcodmh$SV>M<2GSmxTbh247_6@?cRV% zW08&dUq)?)Q71>&)@`){(Yo#apGsB)14qy$ZWnRB%X$qLn;r`NMy<=v$Vx-q?8q2j z?aY@YLyPZCsxD;!$qptik_fj|pQmiJ=IpLEi$Ix{jyvbx9j^;*xS>E&S|xECmF;aZu8cy{`w`|+DiKV z_wg6fuv@d(cU(E6MRA>%H3NC(Bz z>ukNWn=~(xM>S%}lZ-K}Rq-~+88bN7q#W5)Bb0E)LHR_D!%^&P$R(C5narCXF0q}d ztkjohmwWoX`7`ZBvnob=8%=w*l?zXTGh+oQ`kk(o@uW1nj;m7&iIZmJ?3;}yyO^qa z^7O5mGCuVmLzu!2lvm?uZLcuWuYb~cdRZz+FY58oub+rys*C3wK^i1kB+04Oik~Y>+o5L~lf>}hN6USCSh(U?MiZzL%T`Y0g z<5Z-mVQ8MDeb2KL6|&i;=Cc$f;D4Mf^BZZ4@LGMUFtpzr{vJr&{eY@jz#;YUlvOkX zxB%@o``B=rL>a{VGL%z<*uIvtNUw5Q*GCNw7gM7rA?FmdU)p3s{n+Ufr`wDkf-(bh zQ*c|CGJXv%OELgOeOU%@xx5hC@@0I)fodAmN1M3qtEgA{^tz1}<-OuRnPPVjLGgqO z&*&$b|D;?&0Qp0P1q1N)-ebY7hESOa4LEQ3Z)Sf6u=P=6US;nzRcQ}7D^875$E`wW zcIh=LZJKO}{;i9KaOU_A$c1(adbA1QmqWV;CNO|~(8m_vAwPwx6O=?N44@3YT~Amx`pLOP_`b27T8~S@ zksZHX*>Vtbjarx9lf#5{w`JSDO6POy#8u-uQIY|%2L|^0cIUo?@nB;HBi*h$f4Fb0 zZ9e>??%Gwm(}+j($Idd29-ICYE7+|^>Lo)QM;xIsvbJf zWKrXB&i1Nh?Jn`=@UlmvJxMCFSSmD2QL{kOa@_DuW3E1qH zqsKhcPLzE3FoVN)>+UXS2>aWTk%AT5sz zhAXF`S4-8Ao?A{m>zxZQL`H$k=u7axkN3@3SxqsSoz`Q#TLg}fP z2eTK`@p>gw%oL3_r100}P*JNiJF7veILWizf14oREp^d-IdOYr#6|jJ%IxW>^ZjKi z*wvTIdeJ@4v-BydBLk%_@{zpd#U=a5G1d9CW+%zb8Bbkm6LbAVo63B(4zSt1lT_e` zAnzD_=Ua`MG5&i_hQp-f-S*Bl zP5Y+QcKgNcyK_CDRC;))6{2IdaO*Jng>M`9cic8iw{_bB_2z>RfF(LOLskdE2udr=$aR{bh9E5k(4j`deD0yxTeg$`tg|$ z0tullcft_6Tf4nNGzB9>FQsqRFkfm>^i3)}fBxEb%+1elR`os`C^yTie|aU@6>P@R zR^2vOh~&yQI*2_OBr>l_rmW; ztOoxKd3?(d^MqfXExz>j7kNhqMK=wH(vgH9U73RcTcMlZ0xE^dxbZKWg~{3L;!o+5 zblIU;1t=~;=LLm}S5X2H_;?&Ff&oZ_Ztd>k6uG2uQd)Fx+XR%XF5_>QP*+F*U$(V5 z3~!ZgT@-vim@{dg^JV*(`QUmHIHl%$f%X6qXoZxx4KBych>}>9dHm)cd-t>omggmGvMq>6!gPvDu z(^)@U^7r$z9ylzS+O?ni*}jC69`^erDyvVC^D~~gT6ud1mGO2?oNsx1Z(iZu`!6of zeHF6QEiYRtj9N(2l#i6p@!g#@h)OcZWy6yR$<-8i(l7P>v!6|3%($Ecd7DM60v;J+ zjWd5OIQw}Ig}!wcO2Znfim`oyIU2mxweLMZP7=Ra_GsYqud^?j-JXO#!Jv+`c|X>@ zP*>zEeRh0UX^4AV3msii_xj1zkbX33Z-b1@S+dDSdK@|F76gaCfKHY`m zr7KX4D1TJAxP7NCUoCC|+Fv7u-M_756b6j+kAJn`@vqmvKYnsu^POf}D$d_KMrM2U z-Coe@Zg-o;gvz!%rOm(hr8`y~j3n_nISi~Vuv?!QHK&+UrM7duwQFp6QhSWi73GT$ z%dK=?eNcWBUlEI4!EqRIlpzmxeoqbfdD`lzpwb7U`8k=rQ8Q96GbX(4m1S_Dvzb5d z+h0Nk!)Ct5(ebT6R6cda9C!m)es9o*2QX2O$;F~q2!iB#Q6HB~ca>|+$he+2D5I>H zq-%~g$sZ11)&v9IG}O*XiT(;gR^2MCyw-(RXjlS$@w2~V?q9I%7&|+s^ggV7TCt5( z@F2!Y_I9h!I5uphOfsz~BU8E7^HiSRie0PC;{D7yadmHK(*Z%VcU|}zVhW+zg#H;X zSF7gR0v8%RH;l%rDRvM=F(GKyRpR)FV@_61gAe}TSE~g$6w#6tIo}<^+@-U`@>GxXD0>9jr18dTYqxoCzK(Pk<}I^r zcX;MyBDpwzqUc6hhl{)Xq1H>3M=~Pv?HI$OwXUM%NHWIR^Ou98gEGxl)c=cv=1^$n z>m!Atu4T7Y+KNXIb!VMv6?BF7b{k73%+j}4#M`puDF7`ru;n<*QyDz$|sgSq@d`OZ?e))!2nW?Oi% zq(d9>XorXYh|SdiQDu*ShTyVuIccY-gzw;gPi`i3^mkzJxu?=j4`D9w+a*?f{88X? z$=@+kZ{$gTf?v2swMyrNWzlaasKW;J>497Z{mZ9qb_Ou=4P-+_&_5!6vO?SH)rY9} zPHodFn{>Rx(-TeIVZN@MbC3g;sEc3fLIPn-ObV!Ixl4;O&U!kPt{*P zSXEiyvgRw%xM&%`zgI;=GR$%ZMDy#HCp4b9tjMRt=lT3 zHhrZY2HHMxeW+|#D)B`)_1uvZ{}&kxz9hnWJ(<4YmPE2xm*lHotKT~{=F{r}+ELsb z>-r*yLQ`(ZsU|{0htjRmj;yw42hXagTz&=O+jIDKjVofV!IB&G z!$ra;!6dVME_)+8vodEZk&>@v-3KllF}(NQTS2aiXcwy&`yS4O@RL2XcoHlkPq)eG z41|mse|bC$ec0i;ovV|2_r8_K%ZZB2WHIwmPB6ClKJF&d)!gOw**6 z2>*+DSsDrXyos95^J^)xQU-+=Hto|aYH_(=-S+e_$8^73!Tb=Q2_Bf1s0F&{$f+-oaaiBcPNpbL{nLUU(tlcQbo(?x8J&_B) zQ^eVZp_+IbmChcubswpdyri|6=|7oM_;jg1EO@Z+oZ1N!7Y4w^9?t+wo8+Od6&+F3 z=nU|*4t$qy84ez)VgPf)%Q!NL2p%HRr0^|7s-B4;6pOWn{{;_Aq}m-yqRHh zYX^!$QN8Xq1husApKuR9Fr#N!qp40%PVmy?=&mcCqFaktx|Kv%fLg!E^c_#W>xbBs z9zc-2p%!$PKuKfqrVQZe)II1!0~HOrv3oWYU4^z+ae+{qOQ}3iaL|(kr`z}cQ?|&5 z0tR65qMoku9=931N>f9EITQHJ6J}7X*ai3N#xLZ56yXrA&Gad>+eDv+HgK8H>*NSl zQ234yy3&POJw#`N!jP}Y8BlQ5@1OHiyr2Z_!a+9%AUcoO)!U+H6;rK)k-PgLStqL! zf45vKrYcCmXzZIAR7n>cW#u14?F8AP_CzRK9m=oU48So%&}$5YHlvw3xPQX#JmQDz zU#@^WVL#zC>1YOEWk)|$S4s*j4q|B&%Fpk-2BW7n;fhKjPrsWT{q||xtd#~mR1VrB z|AVIdFDojXayAFP86Ak5ZA^j!%2ULFAxMN3&>K%GASef+0WyF=q4a;y6N~>S-Ay7G zI!zTu(bJGKD7rM96AHGz$oNa%3v1Y}u`ZF~4k<_>8nqmN>llIF_)G{6-iIc^6ONq! zq#%X=QLxb{ssWnL1%+}>6_Yif7;wfd+;2OJzh?fYNr?FGIXL(K?i_4J3u8hi4lBN) z@F%ef9=_(2>-Z`~>E1Qp`xbBP%~|e$J}%pXeLzv!o&&850*_F2L8ack^YlLPl;BMy zlvBc5D-9D35R3YCq%}B_qR}N4K8>*;!4eAIX0Z<&na<^%YQvOISVjcPyEi%4EECNt za5J}{NuBCHn}_p;-T2XO*icU7F_P5rDt$jKGNE(t^xGAJG%R3`I8(fKWe-8`-Mt{C z(Kemf%ujaD4EpY@)5`-!S@!9S6$ORdKgOs0WuRXni0{j*#7i%^3<%FjsBuE;?+|oC z*A;ZKWVeX7y>eT{1-u$*S4LYk;MT)t!tKxQk@-%EQWZ~B$`2Z;A0B*|$?GmhQ1knJ zjX02P*m>z?|A#jymWOl7C(bA8i$1pRao{+J_P64GCBYq5#`DW=d$7zRPti8*v?3Q4 z35lSemV!l-V;ZmRouKzMyvUu+nDCuz8p(c1JwB`x@iwDfPM}Z6Af$kdXhSDu?Y!>3 z7C3`QYKSekj`qBAU20`YVYF650Q1gmvShW&%{8`pP(H=L#xqS+@HqEN0N}sDw2UNd zURU}U_BBc6Q`OmAwxmyCPm0+RKUIAta-Gu&9WxRWdg$lzYUr@}LGFms6PhVgAJ^+9 zai74iJ}O$Bvsb`1^9zpJlJ1p?qRADChPA6BxuuR3md4&kznrt)iB_mVC_<*ahWOJH zTDQi>V_T+oCy7AW5B#_V{df+J7MA*(8+4=dKnu?yV>m4@dktECD&CQ~o0n-1ar0co zkh@cfc$aYUyUE~x#j{BCirtTUe_)aRmPk((1)-!p)+`9?I#P(V{0%5601Ar_ZYMv5 z4Z0SU1n9Xsu!ug8w%59NX!mk`K=hf^;n1>QGUn*RAmK}9j)Lu*hu)av>Ab?7v z$&u&@i@A-~KOYz+-YXAqMYbcwK}089ju=>$CPtsL8rp)swwvM~(ZO+J0%sbd^YGc% zi=llcm|WRf48C;ZDN~t*^o<=%C}<5A9C3H1N2R_gJUmk=*=ta3RAzYeoN4xDZPlRC z&T}=(eF-EpnDs~H7mA_|gY6!rZ(HpNj!$G}pU=Om`ut8f*GIyro7!DinKJ}6&lP+U{n)5R=q*AHwOpZR4mY@*jY zi|40`(jIk{7P}*hSM;DSgPZ0~N2+l^rO2 z*s%6Xko!oO_^z;_Y(e{W?aymlrk>`~QWfLO_ejX)n$5G=p2}jQeG=D5|t@`#h zDEsp?c?3>&!0+lH#vtdmFlu%O!krHAzvRYfn`01^V^c?QeMoL7ZOIr;52RO8D<+|M zWNJKw?4~>!Kmr6X7JUC_>xKX4YRhpQ2cR6Q-#d>W#1cXL?ea^Xs+&X=^`)o5whuvQ zXB2FL0GxxxUvg1r`z@&FcG6Ls!v9};-yPNTwze57C@P0u1fl}cLFob#1pxse0!oJ* zMMSzZ35SrVNH0;O2qF<_LcmBzL?Y4@1f+LjLQ{$)fFY9Nx6hsR&D?vxJKs4o-^?E~ z>twC0tY66=+1dNI-}iZ+=Xu`|8NUPkAjHBGm7p~41{f!50mg7sh%_yZ8fH@nguwsmw8Nk#xFYaoHjBNRO5jL?WxYULTI=d$8L9FDI%WixBLWt4 z22KOh>WFEv$9w_d;nhHv6()(q-gD_+oxHr+1Bi`l$aygA2140zK&}pQGeFsRqwc+sI5EZOroiv0Y_5r* zPE_Slkoi)_7!}m|w=)OtJYwV9sF2sqx6A5Bw4IAG79N*6O)Tl%D)0^Rc<#M5LY*E* zIJv!}Z`p@u*6))M(XKyXE~6v7(LwFuX$qE>R>y@L*}jFWzWworecyVoP~UnpvfO=t z9wNRgD7YYW@w)*UDq^1}_1gS-AK%@M0f+FXB;|t66lzGU@5S7kj>(;S;;ZSGi`+$X zESx7N`b#a;bM>EJE>aOHu7$6?;X?E`!3({&x8lC*OL~|MmsiwEYS;}1JZ*kSeEB9u zRe8;ipps`9iMPZ@NaxK^_DLz^hod=QhDGde=5EJ~UB%2Y-7H}lcz z+cD$5ty>NUWpOQm@p-$3HSyRK%np>Mm}CVSx~zvt+QcLxcxreJ^#gg@y@4-F);e&ODh@@1QUHq`onG9gP~lNsnRxeTucczJ&evO_mn%jdGsmC8rT zm#!$h)6G4k9)pq%+t>RTZ)#hlmp&z@w&=R3&_3ssr=i$ssw5DNUs?D(8FRktWT{21 z_CUZBAG;VwH-+FH1^Ew}M0wyX@?VaHUKq5l!r~F@+^+zu4@5N2+R-|g7Fpula1%K4 zdJUfChXJa$$$sWbH~UjnTL@dzU}w}0LQ9eu&K5up_2{v1k#iqZqnT2iPG{3c05Zh- zsyI+OS0hUi9RF zh#Md`u%%Gvg8X5gtrlO$CtN*SE7La9U6S1Fyub7{Q9sCaiU|#~S0YCnyDEEN4~HXg zApnZyK%t{|Oaw3P_}_SQy(QKbRurR$pj1o$;L)w$k`Z+d$(usBR|8FFnNsLM%tU6n zp1P~yV-NYh>6{TU$W)@)+H|#W{T-~GAb@&FJBhfpNfC~<9A{rR7}54}%rX=`EX0O5 zV>&B{>>%t<$QdC{Z`6Jn(j74i|5~Xdl=JO6VM5XpN17sDY@+Sb=@A*IS>9{|oR?%Wg{|Uw?1f8Q}yb0?f?yiCU zu!OCGxplpODTG;i&#v^{s%?bkb1pMv0bJAt;spObrWSMz57^&kt4RnDKv?2_m|^)~ z%cKLCW$)Iw86?28WIIea%HYX$*>U!p4elLJ6@hS`go=HaisC>Ztk$O& zT4v2xWwl{((%VUMdM07|%Y`x{6$NX)Ku-l3l9hn>o6t|6o;{02dR?TxPg4*(aPJqh z=cn5(9W_T%oaml^gZhPBr_b!$!}+@ZqfjDV;#Z9wweXKk{Jhdb*WVsVPCZ+eF1JTS z*Fw=Z=a5a1ZOX(#l6Qzw@rxHPa`?Sxdi23-oF0{jhXaC#qN$*b2}JNxu*Cz9h!*gp z_{}?z5Psxts@~4ucAX0@e7bU~>;=70|`4l+Y z+H4({gjsjGido^>@e@+)^aK7UCgY!|7C7Uw{|{FS3PNGVEIic`WH{;7oJkzr2Uh98 zDaTF<6C+*zMlQMQ%*!gm(WiiT%Z8mu{C*8RR?8x7f|;F;qzQ1|P&+wwxw=t{v50lo zYY56m*!Rn+h6{kP!-ByG|IRr6{qrC(F5GUC6~NGuuvM4sOeV+vx^Ks>2eUoknrp-02ZPAG%cR1$VRjO~y%YYYdR-c2XdW%q2P8}J@i>0Pd^zOG> ze}6VB+D&_*T6CMxDd@d$>bQt2gp0oe5jCv##VBK=IIPLv4F@3XSDwJx+x zva0o>e4mM-Kx0XJ(1v5kTZ1jYx{4%sffg9IG9y#ve|6DfC=6C-x?7v%t-YnEUAlj% z`JC;Ny^c2j%#nxPooQNA-Uq_fW!r95YrlUnSD&MA?xH&>+5I%uIPHW`Z?K}85Gsg< z#Wn>|w>o|!w4UZU$MB}+9i~$Q-*Gk7H@tk+6vZC}vudX8`7(H=a-XMx^To=l>Vf8- z{IN+_QNj26f1`5=6&>R!H5>BimUighE_W8h-8b*%x5L z-*&fqs5kZLy_?q+y^gw)tLK=zM>*+uPqq2*v)mgaFO~+{W@$kMV(lY?Tu*|y_TJ=( zpNh4!C>FlkcJ*87PF3qX^0Hpod~!Sa<&wI0?+Kd>J#k5$y zb~Lc^(5x@JcXALVf`9a=Q!kS>sk*H*^wEdfY?vh=PtDVir<4aC4%*-CVQV1r=;np8 z&Up2Su^Y2jEAxgeRWq&Zi%>!r+OJ<)GrC)3lgCEur*JQ5%4U%?iW0iLJw-+0=Obzl zOrQOX?uVj+$)>LB+rGI zMc*yis!~#Dk%;bzm=fVL@!DP8^&on`hQ@s^>9nXlfh@hmb>1;1Jxx4iXtaKfCf!m! zGd=Zwpf4y)HJ>_TzK~-kTbSk~R`_5n)9bp-+^F&AX~cPkFBRSftJy<}Rc`X9kQf#f z23*wo)`<1l~Vtyxu?W+e9A|Cy5+lp6M2Qf$-3)g z4b^PDHg0J5xmXF-ryG6PsL0s~!Rsku*_IK6{CefY>PS09X34fFw#6nVjE2k!op!!7 zuSeaenxb8+qD)=BaQcF~oKXAFOGkr)Vjb#jvz1P0H}Oju&Pkc+%0+q^*K=ZYb-ERT z+kb2?-BR_~xnS_Ii2UJg#@WfnW5@^LJ9Unmnrh@JdIzkMc@`|5zS^I7XyMjrp-b1Q zrS6=O$%DLj_zqVq((#IAMPB8i-~NP_LaveHQodJcv`+LCKPJ}?1hN#j=ck*Wc;LMU znhU~(dQ!8(f+XAL9BjHvldeUk!0ckb&1gQNIm9=4Fi)YJ8BfU2*zH3p6u6)@>XbKi z*`0PeeH+j4G8tKw9S&@N@x+HlTAIL{MFu`Ky4qB0SwEOZ{~qv5-D6nG5Y-_%NLRTe zQ5`1Wm3>q8!n&(|TlO2YKpQ!v7uqA22{<3k8HUi-g$Bk#=tj|9{Jn0x?Z@XvqT_=F zDM+N86O)hfapZ}gwOcZIKCagz+HqyCu-Fs5M+O0s4h2R{MX9B+PpRuIjs5uedoMR0 z7KvGB>DO2XEjkvvMBd9A3BUOD;FN%K*O#EUb5HoPxsSv`UT`lw(WIS;H7|7hbRhF8 zMDi!3D6%ILPwVc$RA+U#U?=Qa8(q<|R88SL1?pa+R7MFh(zT&#-F?ZliOLcQCVd$& z4k>YUJd97#H%oFH4D_ryA5d7?)L@{~;)3NJ`$81vs51)8;QTHqacV|h=~G7VXQPpv zk_1Becct!IS-nm+s=sEzUseq+>%S5sllN=4l@|G0aS@bYSOugEt=yO3R?Q`QQfQu(d~q0(o&?Te7_@abyCnf|4^4UeD))dH?C zCaF#ZsoxH}8Mm+Q?2)Z)v)?jjWAP^)OOS2q$ASFRBNy`-8cY-PQ1dZHA9Z4~gQHIE>5OJYP{jOd;d{Swcn6eMHXom= znYN~j*7#q(8pxNRvJg9?m33)EOB?y@*u`~y{ook|u(Q6R;W%B0MB?Tg2w>l&>UTBh zC~WI~rcMd9iQ)J?@g2&>gh$t3sT@dc3hF28UGf<$h|SMlcz}=1Pz?38!Rrl`6G|@{EezK*z1E!0 zng}|qpWXiT?@Z5j{P+oBUIkHC8-NH@0mXt*i)DMPO*|t$<$*K4*MqF?B&ffFB;+UL zkF$^-_P(Exxi(J({US|{QzHEX-cJ0XTnVG^y8RO}sLTQg`X3T}$$@{w6DC%`Klasd z{sgv87>E9;-1Nq-&Hn!^t9VoKH*Hyq3Kz$=j~Rd&f6i$~Y*)ejoH>EpKugqRfCK@s zI|JaYF4hu;8?9 zQ(EpTLT|jDRpML``z)5iy!a-Q$MU>!aE9# z!y}88D%70&*ZjWwE7{bGt3KS9*J)FgNf}r=DieI}+Fh?Rv_`Msmtt8HVR=RS>fhW^ zJsPn8e11CHcqhz4S#w!M9V98cZ&6bd#A9q2^1C(({SNU$qcMb5*{p%>riK9n4|eIQ z*Xr<%dFVLImaa`le`wvB8DOzEtFOY)P`WZ~M7B+8#=YNDO>vv3I5&qZN}xAwEi5$7 z&(~JGm|x{;%L4?r6$FQ!#!ZMeG5l0%!+!x zpp)WPu^3@{ez*X=VeuMxoN~s*5gi064yXt3H?S%s`MPUj-`Z!oYdvn`GU;zJ&-WQ| zhR4;4DGvnhWAK;{Y%&XDwDj56d8~ptJfVqlLt#$hYPzqh>Y8I#zvY`hyJ;-_{8y0m zi1KYaC=+>EG6^ysCRIE~Wjh~8?K4O-B`uwt6eYZ&)^{qRCFXQ5WR~nFha`AT`QDlJ z6INrIL9;Gp!nllL#YIsaqKY-M*;nL^k_fl+GJ;S3^Ut%WgT!{``|1U@0O6uC8DOZbZM>92y%A^qle4{q!(Rk zT(W_uPJ1j39&2F!nfalX$oqA`r&)FQyIkea+Ot&dT5dm-y7+SY$hKd-ebAWelK543 z*BXsebofMdCzM)+)^TKrz|$?s@aRw3VSHkHCzzB&uXl%w6x9hQdXQJeEiJhV-)BzR z3^f^hE5?}$b)m#*4z2KLX$rJ0#q1(=4%p(3#s!ALV>pn=$KqfXN=nQ>`f`D~=tIB@LwA!e$(rqnODhrWSQ1+5wXjV~Pu(!0sm1!iykHXoEfaAG2B)u3`uLDPA@8yp zd1KbJD%3~Y^oBEPNw>upmM!|dUSVy9R6biOb!7TldOu5co)W%!^r1f@mSafWn@xra zu=X&ffe0y(3;DQBIPU~iuI8mo(BJJ61DH9)hJvnG7WXHOa5^>W};NM zutc}E+C3|{DS7vx;eI5p z-9fu9$KlREx9LzQ&y5#hE?={(YH0^vmc)i7jIP=oFN*LlpYX1j|Cm`FaXRaElU&JE zRN0_OWh`p(qb0J{>&W8KkRh++5a$V8+-8b9U*L1cmJt5WyECA={@UA@D?v>)Ky7SkBxnD!UTj=I-N1~@z)X8UQ)eqYzL}R1R>m@-mSC?n zjGzyooIgEonOI9=>3c;6Z(Ge^wM$FBa8zolPdqURbzw@{(ign2)~|*tJl({XSKyMh zQ)W*LA=GTgL8f@O-#Nj(+`R*OeCsrOFa} z7Va}u$ku=Rn_3I(5M!CVm29>eNaf!;N4?cJk>>1^r~Jv_6oKTNq_iymG^f>;#{VW` zCZHhVLVwKFH2;)vNOJ^!$@x|-O^MQ6Ti_!s-kgF*ouSEcGVtEvnG>|kSwM)-< zU|G6y_Q-?OsgbJZm-iPy4nXwxJ1Z8Q`XH-dVWHS>RhPCx0Etu7n3K}DY!r(P{=d?H zSJ(Zk&s~23roYpx^XK@M4x;zz%f(?n6A(4cS;%*%I5KD;q|1um6nZ%4+kh59U1#Tq zB7{_)8(8Ofpx{)OnW{AZNtY@I2%HZyv%~@*^4&a?I3t@36GKU|8#p@|?#vD%KPZy$ z-~^nJt>ljT%ZEy7NuNcq{+bL!Wt8TiWRC7NnuYmO27gm5$>at3p(Y-g3FmLUAtJ#xcQ3i^or%ZEY zoh%9q_8f1{imvuK1r_iV%R9cz8`svQn;xPVj-Z%&(%QL>% z@`Z4WAxR^V9af>#WfMjTHKct+>I4;CBOA9W{LaP7?%eRomsHG8Ozfm|SwIR>w1QM4=b+>P* zrW1uY(u_Fz6gww?;K_G(7S4^bi#t~f4BrkHXq2^wP++l83BNGh;pN6_wjWT<0wBGz zvQp_O6d9O=ple3ZCB;rl^bkjq(Zk8!6p07#^D{E;?EdBK?A{vrr@Wo8R3h~}E~Z(X zkxXR>|qtlv|^TM3#UromzkVFqEM{Tve@mz`C!p2r!XrNz9`7sQ%Ndohu`9ukQ1{ z(Jc7r(aj(1yET#cLwWhOu0X;`ggZrbKUo=w5W7XALiETVaa!%cXJxsgJS3wD4w(wF zq8sBfY4+zgso66jw@X%TiZy%PEx5(b6o4kS+Pw}BOiOVzU0s^49}S^GIg%~RC}8t! z4ZE?%(gxuG6xjK>0oyp<$u&+|5Yr4pu4e=8`nLG;7A28Jr0_D#0i(LU6~{8t_4)~U zl4to%4^;2+3Ei+3`1s4LDM*)jo3y`u7eP%ZU z({wp#O*rQ;W}Fuo$-W?>f%DW6z#zwM`l3z&`j~Vq=EwNoY`mP2I8LGg6MXMS9PloW zP-|du0nYzTGzqi$5Idm{$Y8`3aOKme8B0H!4sI;W1xuI#!kud{PHZEa0qne@IsBOZ z3hE;Gw^GFb7tZTLlkqhJ7#;)7k(FByO8`t^!0hmh^jKD z2o$WG(r+=4zCU}(b5HUIWZ>~GnuUOC6?Wu=uA)$cC-jzOUeArqQzs*4La>0OKi=$> zQV`0{RD&k94K|Li+v9boot!2u#hkU1O1{{i@ZJXOVL%iv59;Jsl)ntw5d#U`1^DC6 zH8u#>h`6~emT*c2@oI`*&v_l^tknqS&T+@HxEZ%;+@#BAlfH2>V)o$*eN;e5QaaYm zKtXHEYo)M+$qU#0Du{S5F*=832@)tBIM9Fx$IiuEh3|ALuJotEJ2~R)a*U6pvGwD= z8fsyl=s*~f=mm=rFZ@*g$(TYEM@~A$QCJfytu8*|;rE)wzKZA4lGH@L^1E_AqCe)y z)H%zhZhE%ago$$aR=5^P5*N89CMur4s(--!K1`a{vYI;kBTR_FWJaPpoxM7rNE;0+ z*AfI+28<`v$u`Sb&;?M;V8?Gcpz?T+bGo*=u`;?1Ejr{GyD+dcvITEy>POj;-Gck< zs3plP9SnxNCh%1}HTxEguu?7m>)EyKNRChkFon`?tWlHbR|?o2tdYBo#<)jCJmp!i0uSCbW9npG2=pc-TcLJGy*bBys-Wj-}(wZ=fn=xC#a5zWJ ziubHL8}ghG&Cx(s8#gzn*%g1y*@HJOX{q|1@&qOT*n)OXu^ZD_@lY<^QYF}GO#J`VxhTNIKM+;~HmuW_wJ|`{1`4)Vy#es_mm+ShU}%~AQDThA#QUK*i0zP3WDMR-5QD; z!DbkUo<=YvfxX?PJ=lEz!?{rsg4*efVDB2`u(6!uScXT18t2aPPYAjbkg3l=f$FXG z>kH!7!=!o#4i~x;#}=x={PUUGEs&0kWC89O_;ExJpbabFh%Q?K(co`@vsMZA^G|^K z_SXRYH9&vOp#RAdQ*)Wea`wGuhSbCz-JO%Q63#CI3pFUAmtPSVNa?+FPweWUlkR6} zhdKK}xVUE*`)PRz74a4}&TPe1W@5|K#UauYCbUB;cqv<=E zt-pjV#a)b8lwIH= zv?*}5PsqpfJMS-y$IdzOJ<}^I_gyC2eT%==)rnuuNJ**R#xL-lBI?wwj1f|BXq4QvVEa0}@ z0sRZ$?f%^n^zZL7f&9ba-`)1tm;P&`2T@ibF6N-Q3$`!eeRr~lc9C|mU>SlJcXuTc QLqVcAQUds?n4jbS1_EUhZvX%Q literal 0 HcmV?d00001 diff --git a/reference/4.4.0/html/images/figure_002.jpg b/reference/4.4.0/html/images/figure_002.jpg new file mode 100644 index 0000000000000000000000000000000000000000..76391441664a20ad074f41efb53296ae7e0d5f79 GIT binary patch literal 38555 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 literal 0 HcmV?d00001 diff --git a/reference/4.4.0/html/images/figure_006.jpg b/reference/4.4.0/html/images/figure_006.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d674abe03854a0b5251d9a1ddf731c7c08e2c765 GIT binary patch literal 54977 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 &2_R z8CEbpCvTP?Kx&T+kjI4khLI;k2I_pQ(-wVe2YcirK^FvfR(}Sy^))#h) z-ckLeTu%wsn1TRv4@=p2o(`R;(*}dm#jkFA$?m7@#OMJbb9ef^u zJwnG?)}-_|77dfolBPNP`W`2Yo-{TQ7OCIex4P^L7bjHD8CmN0ex`{#6o*cD-hL$N zsg3E-cdB`R=OgBw8Xrq_M^BeW;e3f27(xEgBP?zUckgzi1ew)IC|#?y?KFF6Cz1CN z!Hla!$sEhpzgvY8$hr3UR0A}v1R${_xdU(}3N@L`m|1~rHD3|SjY^!bX6J6?Vr8na zNd_Qlu7FCE!5#v;>ByARkckLk;8RN_J4{%IdMpfmE}j^TS5kA%K)rd;kwGf#{5CVu zrT_Xn5w=)x<0uu4>~Hf@C=ZM9?lccFG%{A$OV`d4zG8SbK@gI9VoiLr3CPa|-0KslOVqD}RCESu@9 zB6PdDq5BP)QGKe?p=6J9X?pJLZxnlU-~~WaKDwj)AEUKRpd5a14+cZ?{%5ov0Pn z9E!<>ljollT(IZ1)4lNG7u)+aHBC#?^}Ceai)gC!Wh2dxNp%M;g>{xs4mj7GZJx7v zKNmOErWxshhUd=SV%mlpL+(DvD2k*Km z2hSq*%uK=94_UBfr%K$*3(qhxI*p1>MK;$bw}_gYWTDA}=}(Cn2zxjIyT_EtJ4qC6k6}424VEf-l#n4YUR9f8nFK!Ajg7+_n2`TZfhvp(2f5B3B`| zFsfoFT{Tv7C$OcnRr$g8YoWtbXVO@SPiD_B_3Uu}g*k`#=nlKx9JUS9je|I`w_SF%+7wApO~=ID?d2o{^)SHp^BLwE0#RG@q{?rI@1haURpoQ zrQjtv(5&Nozj1%LOBFY|3ACV7Hi6);5*%%iR`!XjG=`IVKY{faMeM2PAg_dT?D;JA zgH-b>R|-8>m<@mx(S z^W2!KwCA&*N%{Ok12G8)ET=|Z)wuOBF^Wo_r<_?y*A`D_dDvzN$>k)_OQ%-H(a=Oo z=P0p=R1^>H{Y=yE)ERMnw>}q%bsj;UMJiyO!3&!JfHk9|t`U`^;+IOr!C`t1!N?~V zMcla8VG|{lM@!*^`7y$Z)#0f>TXXJ*wzADD@`fzu{MQiMtjEuYqsj zJB~%cjuS%E^V9=940?u1Bcxz=%}Dh1S8L{ZWr~v3*2>I@LJ;d>UO!$U))k!09OqYe z)xI~Fy)s5x(?QV3^J7^#8wm;Hfg}F1pDbZlW)6;EwJ=*5d9EiF*qlaiLk#&*Ajc# zp+WyD7wW4sVgc{1o3eXg$J*)c;n8315$0)eXbXshe?+G&1DWC*JSKeAM z8`zbC9TX-foCUAUGVV7nOX}?`N6S~9CduAD(^+eDo0QwCAg7vl?1745O$y2X5}J|9 zkqIT!WoULeLf{}9*l02=o%HQx*S2nC>EI(SZUUm1P#Qf3B7% zFQb}%^tyRgsC$S@$+o&Ul&G6j{!n$ba|v2KDev5yUV0W~wli|?RXWEaBt7BaN9RV7 z8iC^A(P-tN7R6`$8PENiBLSm|GR{hM$9+vPIoWTS+dIH>1ee$D2TN zBIj@-!+KeQ4hPlHv>YX@78o|0!-EbbiZ?sa55XjQrcJ=yDEfYIsm5!`SG#FQ6B!H| zP9&7md&5*maCOH^t+XY!M@s?dq2sI3bikY>Ew+y6~e_-=j4FweMvTSQw>JfAciSG$^6r zogPK;sF$eql=_c6@BM0O+C&6|MmCeV#ShM*^(k+{NOKcf>qN2KMX!{Kz6 za%n^$6U7c3GE8c|eFlu%)A}rzUY~4KQ>={^`+WYw_b;^<(h%Dt-iJ10th=ja!==1? zgaR2YhfPY$NDvX0C4^`wMG!7}?ptVp#2H|N_zO*7w0q&#Pw z&^!#yB>fg_e6)LbhDDw?qfWnBw_V#q^=6<^z-9V7!*{`U0**yxz63$rnhM7UNV)WS zOYQEt26vqbd{7RkC6J8M;tpHDHhx8(8=RD3*KS<1KyW;n`JHp<%TEPXwCJM3DCX}y zD;lJ!h_NO{1iZUTgE`h-<8C!)&wHZj>Bx7q$Rf+bsJJ66O#9x`&i8~niLq=HKgH;? zfAnY!NAGfe@SQ-5sh!lZ=RHztn!Zj4Upn?jf7{5jc6}giU+o;zR;XK_@+z)+GU_lk zYP9-8U8{_o2oXuu6yr6_m#-$D>UnwGnc4nG@luzYC$YKQHl5&I18&yu8%EiB)>GZBPd7exd^`7E=re* zz}5GE{~ETkk*`uP8GBJ?a1gc|dOJ;m{cH@Yp~or6!Mva48k zu}2|SG>TMvY=KBg>yO0q09v9t&h5YCs{^8yVjiGW1$KFy@^R4j9YO$IUETuiHsPO!j#%<6xSky zwe-F~J9%Wvv@Q!_p)%ej_Ws>r5*Vp_?>uiXzPQVT?SmC1ZV@_?Y;>F;bn2dU9#ZOYK}CsD}y!8 zkRhQ&!HZ~CUTJ2_O573V`BHk8n++?weSazaJuiwmR$n&(mcUnZcDQ?k)xAfawd4y& z$zcd`yFOo1#5p->ziLD4Qd}$5IhHqE2J~bv*gBRMjFpuJ-%;{b)pXt{VvV#n2B#6U zG2S8-im1l?U19~zH6Lc1LOlo(l=kz=c`kOl`yU22Hy9-axGA9|as!j7h+mkm6I8Ah z5`yI=$TW!z+xQAo#=ZwPH%@p2oa2n%kl*`^lD-&lFf)HzY^ZJFd`xznuiev`ar9xQ zAC-86Q7*Ahoq;LgkR(Fcw_uE(5Fv4 zQCFe(srrXiS`p99i;hc?Pl<=LW_oLQMgZCk6@~lpS+OSzW?iX zoAPQOuSOrQ$mGOpW5%QlC@%ZASSVq1SS> zL+^n#!=o3@CYT_4Rn^_GG_BspKfZVoibLH7V-GlI!w|KXGZ!2>Ptpjimgs~gZ+;=! z+fFaz5c|U$Y$fA_WG!_+KA&yu8+ujelhH42nNu%=49g3aedW?%wwLn8c^&IL@d6U~K9KEk%GlZ)nHSFWkrY8;?1JA@#5IuEW|3kYG%-P1J|SL;#Yr)|YarzoD4 z4O~nuel`Qzh{2azSQ2akc&HNJElv!`0S}g@TBu+{Sie(ruE1NrQf8(sNkn07gcLn0 z?E>ZZLfL*D8lZa1`&_DU7b%Q^V<+!;V-ml(&d31RVMVKW*- z|4CMF>=Y)dI_L+%#(H-}k>!$p<(*)6p~pRL-5*was{@gU_nruu{Ij>0iNb|0BxbAC zL%xoe;HY6<+Nd4fr!i z=!B+62UO1?Bd3JfxQ*m4I20F>KuE2lFqSUk_}Pc0+lgUOFpLUm6OcomjSvd*`U-Gg zqZ=O;=9kaGAZN{y`MoQTKDY~WbI{>w0rmWpRnD~*rEN>kiIZ!XFv@KDsD9t7>^m|{ zv0gJjf+7iKs3lkCylP9{O%0mJbP!59uk6rr@|jW3yq&P3^P;UF%l@QqQg8mKyXLsS zIJLPvhhB8tBeh2Jt;r_fwyH)>>Nh>zYoH9D+X1Og!I&C^sU$cJ=%17hMj0oamo9po zr#q?HxV&GvRm-VgAG-u`K6`HyV4~_ljZI*MpH;vvW2vR%14`4N(KCL%Lv1|)BQaO7 z9LVxq;0g)P!c&nv9q{!7pjywg{8&8fDiMYZjIg9xC^8=uu#DHOpXA!IXcTx_7w^SZ z0&-_q>xHgb#$kgKPr(}nB32(J>b5fuIxaB8l;+eYY2um*iJA39Zyq#+X_w#huXd~= z(3fvq)YM$E7AeaiyXL{z-a&AafpgJcgJmzd9VWAkZLZ9BfAF9IA11}zgm&f`T^X!C zbC8_YR5UEsuD&2!*jE3D2D9xlnRLz8ZYujOV&RkLSikyY#TbEJ_u|grnWqPHN|}9d zrjzPMYJ9yAM|Vqdei&?9UaRBDxjs>%HhYJm zJLB9tmp21e@v_C z)4i2tG|F;W4^+tSp7Bt=eY%7aFX>789)3QAj8UvN?xt728F)DSBF-wGlzj;1S&I#B z>1E!=9_LxtOq@bDyDjgSX~xsOUd1z=H-U+AuHZAKHCL!*U797sFpJIoy|_O6-X?!i%Kn5U7crA=s#L>L1)%Yi~;%^Rg1 z3al_TdZV*zFK)PSd|8hv!_EXR%@VhR2K1RUoD!y#?8#q{VWEdT#kz)*9OLfoPpt7G z&xyLxUoH8<+dJ*NIu(wzJPvDaUCdXL%4Z=3KT5LDZ<|-^VTcoSEKO>M9Zx=8ugI&g zqJX|yq`g0`uOg))k5L^^Gbp~jCfG0zc~LNhdgh>&ouIYu3rv$X2J>NNO7RkX6A%yl zb>S!X5d10~QI|nuta*N;TMCLC*D)g52@)#pkJXCg*Lkf3q|y8uMuR^in^9yWs8hg^ zYI;s%qrl;HbB-8fjG-l&D6Sn5|8>f(#~9tLL%@ebO$pHOu-(Mgrz2QlCIg)^9z{RA zpGLVc)lzW%+sY-wl(BEm%KR=d0$*n#&9 zE$V5NcR*U@>EF*Vn(m`Q;_Z}U0Ku$ zB1l*%|5V>vXguq-rj#OC7zMlDbGqA!GF;_YPGZEgIe0#HnMa;uVlwaUe4I3@16ix9 z1<)EIi%5c$GF8rY*?2$<(wR`1E#*iSuyNp_b$Rd*TZsi8hd%I3X#TY_n*v){#z~p2$ zd5>!l{G76y4g_cDce_<4CrO7t2C)|EnU51x)f4oKjw|SN50QpQr|L7ZLL09&$l+k3 z$Q2RSZ7GP9Vj+;ko&DKPIFL~#%Pee?N@C& zzX`Z>KmE427K;=|o`Fvlcx+s@?tbsa-NCyq9flXfsc_#+n}RtE*aUiZVI``9qX*KM z7ai~^Ga?-Z%<(zxtaazm!greh%xTV^m=+%e|LkjK!8@dIe7sApf3{u-RgU7t&=aN+ zT+>Wv&`VTklodnzfUvO>FPxo62|A@3JUX9XDVKMuo6b_l`@C2RtbRJEE43%PB7-61 zao*w<6I4VtmCfXhl^-+vqAmHE9%H13MW&Wt?)ya6Cogz7DDYDZ4eq>hR+YzyBq;jo zsMr2FN7vkcNHCcaJW_~RoH%JaS;`fB4_VDfD3o^94BveiD>sK1hR(T~gIB87#c?yp z?VCXO0URIZ?c6w_lv+4Qf~8pOXXVYL;I{%uHtV29NudcOv# z)x_L7r6nTrk_4HnG}4tJRqR5FLGi~J>NYoJp7$XCn6{@%J&c`a(E>2ZntiKJ3WuB= zoNBN1vgB}ZIoBA9zg~L@Ts*th$(Y^JF!9dxBJ483p7GIgg=Mzgg?by|0KfWp;`faP zL=8WoAA>e5&kLxTeMk?$26~s8)LyB#oKtZ;1sEP5D8@C;oxPk@iXl_4O1-ux%euT3Re2Rs!RC@4owNYKWK-4Lg3E_Lc zMU?oWvOd$H6qc@ou>1`ZiWE9$A3Npn1b=_=jRNnFv9Mnmemc^)D%TP}w@ic*eK|v` z$^i^Fic~EtWjUCL-=r;R8-23lEeL3Q0$Gfz;ofS-5@XM0D&w3+4T!} z7c#RTBZ;_kuHv9Wi+eQNAQ_C}RUC*(Ij}bHAR)D1cZBJl;3Xqsp`7K}+#cFfff9a= zoV|l=J&R->K|zTN`$uuY9#2-RnO^McpeT!%28Tr=@XQCFKm#&&*G63n{yO)-*et7! zRW!Z5v(y?4tLn!aD$B5rS5?n=dcQyC>C#&EuwVQ3CQuc#{g5^dQ%r~L@_QFH@2y%0 zCS>-rvNPv2yUgGO{Nk4w*JAm{1oe)GK{u-$~Fj7Y8%A zLNI6*_z8_lBIJn4;X~oOFqLdGuyoxAlR?5ial2w+hU-B~)!}FFb@704Ooi@EpfTqv zHiBLod<4{BuCZN55OMTDp%A=8RP)6o!+J&RQSk1p$+L3-tnJT&YZj+fh7B|7)8J}k z@g!r7D{bk{?O<{$=2dG9#ZJj*PGi9^upAIj)z zQar2<&IEdzJ{?FM(fx7W#g@2eO&t`#ce`0Yr$OCzU+|Ie$px+;anB zQ)$F7{dg%j8 z4dxgXsW+BLmlz!AZA8{UI}C(+ZFX(`5akVx^k7?yqJ^4N8tHY)1*ca_WA6232>6yq zRtuR?68Ja#TS<{tXGXa1WKR&8{t!(Jyq;tmwaQWAr4 z2P#FhaGG>&?SVGJ{l{yW)zR51aI{u$W2SnQlicyxnoO#leo7KbIITS6Ipf@1zQ%!k znB1BJbTY|Tv(bKL6G-;&Qh~%lw4g4J4dEs{XDIezltLIu4z~}h^wh1Tls){0tLeU| zhv9&%E?Li$IQWzgCVP)b*6xlJJj0nqt+(08zjU&-`P@gG@OTxnW|)3*iNKQENIGbe zPmjJc7I(c*z2&G&OvkEj9+-jp@FY?Hl74P zX@%Awkv*4TE6?CR7Lj^fLjWH!u?Y;G{*lAF$GaX$<6g+=!)F2Tx95>-Be($0Ie_~X zN_HqIUxUvb5n#X1;e7x9D`B3!i){N$+m5x7#CyUq?~kgzkH*UbMLUxO41s3g6weWU zAW2|FaDTDPb7a=)lKf02*5E#knaVg>Sea&_H0c|P-ibg~swF2p=p5sSR)(#ik{^`7{aBg$%;MN!{7ejM(`KMBS7Mk!%ZQ7i${Qp{Yj zrRAET=(e8=l&3~nebYn5?j=(N$Sv6J1`K7HT)Fpn@n>_U*60svs+QnP8{}IQ3E!-?+`Vpwqm@1}A%($qh8C)I!=%xlXT+h5G6h3bU(qq zaBrp$T9~n1+mqIh9EDc)Jz=b1vh*e(Rl%~TdgK}QD+a|7yHmNSEcjS=>KsmNI6S^q z_{h*BERtR-8uCZRjDWyCB`|{x60w0s(!e@kz>I5<`IYPs!zNe zaqJJRQ|sGPxL`WzN(*v{Nl-o{V>+kD>cJ9sIK67Zi(n3AtQBc1o7E{~bQotLf_6zg z{>q;l6Xa83dA$*5;T@r=Yc*oPWg+J-;w$by#l(kFFmG zDQ$Ks&4I$G#5d3)aT1EuANFDw;iqihGG;e^i{b>Bta#D0OsKh^E_99vGn-sMJrmOR z;j`eSFuGT7y#QRyx&rNCt(HD#68v#>v0a~m7dpsPxz%XyF)l&}uWGCx!~8UDkAB25 z8^L4+oAiASf-fO-^@|#8O&`9h-7y*_p5Eu;`;OZh2|7{F#oVmisI`zC+yovgna2m_ zX>J?vU(NX*`(RgL_b?fevu?R`s=JLYeQ>V)s^cqVhxzq|^?h%{c7iCb*mbl5?JQ39 z$P;M+7%|6y!*$cZ81+>5dQ7udSt>x>+=*C_!26;0sjqEb;g*>kn_vu={qhV%BX) zAXVK@F-h9$8*ZUMGeGs_wTFubA8N!|?qb=-KKod;vTrCix4>jw2-4~>Yt^~Ns4B!^Q~=St4#{~Z0~$GQ(H!=x$c}y9Aa49GNqOu05Dua$)dtdSMN9&aO1WLI^aQLlb7CIj5P& zhbf|TYcLCnJrJhNnFZIi4V|+zzjtc%X0zYYo{v1I@qD}36TDWok!yX$bV1@+Qoe*i zUu;@T!OsQSD%~bnR5Kt<%_~lI+Yn@m-^(Fs(0Ng zK336nCg#u^mx+;sJ1{a_p@7*49kvZiZAE5X39LCf1f6J6N?Ql7A!mzA`EXi>T^3^r z^(lqi0w`569W8^~8;TahpYwVTBiFMAX1bO2?vmj`h`*0PvUC?NhQLn3 z^9;(__%GbVWR(P)DaLJCW6n`W4{7r_dQpV8wt~1%^cRop5*6c@iwsF-8+Phjv{8r) z^)$uFqn&E6vjtOlUp( zO0894)4*ZKRJ3h0W1;*UQBTjXVa!EzhD$q0WhTxNa{@;bkP_U%R`brEAtln|hA3qa zX?0bholq7qOtmGz&6sbm$GBt3dTg9*j1pFWFQ_RCvCf+t^y9xNLC_q&3XVU_{g8f;ou<-U@J zQrebtlb|@BO(!%NPe6N1>bl_!cO2b3xDru^379=QBZgDOT9%T#cs8;TYV?Xy3Q-0h z0$0M^q>*v@!ySpN;2uv^BEf>+gQM9wuE}wudnv_{qS@$u;^6OVH3=Y-Ge;F3^e$rogoA0N*KPzhvX`-^vfOd~OA3Uo) z*SI4pTeDo9tA-&$A@$qXCeif%M&*Na2hE%5z0n;8rEYyQKO1fZ##O3gM;~LnOViE# zbT@1!N=O?Jc;+Hq6jO88+Lzr#`NpBtsnP=!_rIcOTr@DfAoGiG?= zXTbfmtHjwtoH(yg#hSUwxx|9?l;{i*QmWrge|oKxCS$|ee!a=#130jo<(bKxc$A@Zy_WpLdV63} zu_og|+zl`=Kk#;@g@OkC9m!?>*8FWwfl@N*Oq_|LlEZ%Lsq&lj#UR7R(JS2_*XIoz zlJGF*h3D2hna@!Qg&!4dvYxy2hMuOd&LiPy8TB6(>KGv@14U_b*|gDYEwW~B*V86- z5K&hYqi87tn}QsS5hO=Kn7c!@;u92erj$Ut*hNt&az!HM#I}Xu;j)VtKVoCIyA{Y1o7Jp#!j|xuObAH=IT)H9tN{ zpH>#aYQH%W% zSH0do)G80r^*WRE!AhsaJw@~xP;};$fc7RJ+aXd3XXatzvfIbvzjAFPfkDu_3yOc1 z)sXR^*)Z{k`eoSvrV^ww&H&%7LYyr?D&SN&Xt3ZBl_l}KptRYdJ&6%DCEQJfjwE53 zGds94oN$&{mE`%KADdXh^!h7ZDj~`{M|3z=LV7I4smMDO_$c3Zi}C{xwOjg8r$_4A znG@a?3ZjZ4A=T{>2&pw}H&{Dmw#$f^c$n$Z-eR?Lc(`z z#%$}70~KZ$NU|LQvv2}Z6k%{5JoJ28^tI6;+4xczChnIOyTgZ2EfQ$^IKAuxm-p@@7WSE zQjZo-qm0#Dr!X|2n$8O?8m?95xwlHo@T7UB$%d$}0_02$6mJ4AU0x-mac4yy92Nok*G%glNCYXJ`Di&+7)DN8FEwSGHn&*h(U>er0 z0uyF8l8_Z}x^bwvcK@p-$C2-ck1q-C z0ZD=JR_6iu)t@sfzr{9^_PpA}dpvokX6VeF^i@T^Y&1D4G-dVAajNmtz{ zw&1mYgi*5_!YO;(C=!`D9B;6*cE$_ybdoXJVZz zKmocl8;?D?sPAMlQHbb=goOxaXM|LgPO3TO^PTPq9*I)J$$NajHgKb>z74Yk`=288 zx*u1v16;EcJ%2+_SBWsLo#l)kxB$Oz-5sgaxX`y&Wml8pEuylT`PfDNM}OYn^8C72 z>5o@mSK6WcLFBSJ^7lb?BqP29^4Nb1gU)bsp$|tFSZEeM7{w)+EpTDa@oODOdJ#Sh z|I_v#t)O%4*GbkKhXUyHwr}>)DDJLcB8LkDuX3RCHcQ1dC^LN)`C}T+96+`ZH&heZ z&@mGU&W1ih{e&pzs@YNSKlit(LB74g3>PoJIf{cuds%i86u^TH$G^hBVEEJw_vW+p zNIV_3wXOK341M_`QNciNNO(&?eBb%H2_TcXyNS?Y@@pCbnkpcSo0!Tm$XSWn1Z;dZ zo*Y%&mKE z0z+>2h(XRCC>nz1CcpZ>sFR7O$k2&DWfw|8B+n)=0J$B6m<=c%`&on7y1?BD?EvdH zfur+qmbtIWCh*3n8wuK!YyxW_k|E5T*${~vc0P)eSaFW|C)XOGsZJltvl*1k&ORb0$IeX z4>=b{S`NI(*Fw&rp2H^v81UpTmB&P4LN6pdWB`n{v< ztkMMRLA|^a<(Nn1j_4j8q5H+QW|zFjwdzeTJ)}WS^v7np+7L?kw01+HE(N1;)3zvI z#-#tiXvpfIxZ-|wAs>ZG+w5JAK65MnGd3!t+@1JtD+>dTDwsDrcm)la=PMkUS)VY5 z@slVzD!H_Ifh3%>(;mtxLbFmnq^=v#xt$f5>Ih3J9?7Dr#Lag0>m6v&ges%Q%G7Y;I_jr`Q?^tz8n z<-2@Z9V@>OB}X7V{TAS~s;oX6zL2uNGW}YN$0eK9H+|8s95QmBWtp>Xek6~@xScBg zZ`8eKSW{iJHHz{oB49-6Eh+-irME~_6a)mMccLOfKtMz!NJvzAjfJALh&1UPq)3DS zQ4mmi6G);WO%j2yA;oXM=ezfu`{R7i{r;YZCl7=l*(-bPwbq-2-K5$Y%YNzxx^40$6iiH;R?__$Qj$|Vxa$WfS2%Upi2 zKC%(Mve)_EWO$F$KoV8p-j>iqn0bk%^>!Mu?+YN0O@Z>Q_-FyY8}$_<76j%6a|0K%ir11Ik^(%1D;ce1{%8$|7ITWHJvCN zReAe|r7q|*n&DyXo_F)!+7fqkSnkPZbTvVkh>^b(^h!^c}G_laH_7+uIG?IXD|Z$O#Yr`EB8WtO;N5cbKjA38e%# z9lz#+1EK>bN{*Iih;={JNI7h{P_=<+*}&}m=AIVpZ#dPUwqBgB;Yke$Jbg@0T_CM6 z`k8sr#{Im}>6~pSHFD3^v>e?rCBv*4( zHM>+`-Th3!FRk2(lF+m?%_@C6hQ3s(3b9)xNDTHusq6bYXn>BG(z~oD zAHJZ<>7^Dr^dnU+wuQXq*LFQ}6pLRhmS10X$Z$lQ9o&Rn`rhgd^9s+VYNdoXltx6V zz$Z1v-^Yp?K97|<;8gXnbEL`Igaoe}#Pz~wgBKUp!|4hnE!2w(>}-q#ia=aw81C|G zJUF@q{|D_36rSEQ>xHCso|+tb{{ZGgso02rFay$xxsW*Wy2LP*t25Ba#bjjwh#trp)K@F8)dUDTJgb zE{2FnB|{M6i34}R`j>o_)PkhFR-9Tc4X|*)j8|D`pp7UtM*xD!D9nm{F7h(nEN;8P zq4O&!fd6Jka{sa&pvWsYkIZh)IX4)~u8eh&>#gdkGvEoxmEao7w-vhcoywKVKKF~8 z&c`|I%k)Ki&=%4<4lqSI{hU*cv|tiEiF0hc^ECPjKnf{#0irqLql*W#%5nVgl&y2z zPUek)!IaV-oN&`ZG)HhMAhQh@zozg77ED!*v>I1oNwlfe?%S1LpxF?nwLIFhynrei z{wn)TMu*LCfBruG&BrpBtI&+4*9Pk9e+bni=ry+{iH!lp>GmmhH$7&wI zbQa-9SKH!y)DQjY6hzLF_DXxCjjlF~1j6)adXz(LBHrY6*3P6}mRra{&X96s1Y_{j zqewhUpQj7Hbqh+fg7oiz*@@aCV_Og(UIbI}x?@%pY2_Ylox)l{DJr@LNJ2#Ha$aE)AXxi>jLTqr>*z|9r8y&U1|}QXEiBjASaixDLLZ zb6p<2>?8bbJFhWI{n&7LuwcYf?mohQI}6!#{F*rP0Lrq9qfB?>fE<_xkvH?=w25|# z@aXK~0&!LYJ)@fyR>r4=f@wSmy!^HKkJZPf*0VgDm|@)o)knr4O+20pP~fCQb9f7O zL3@!cxi36V(f>-gVXXZC59HA{A`#4&7S{OZq4b5c(=>sq$wwXVQXt25bUSnrA%$9* zUx`xafj2BXUMm?bYNV-d$BdAwt3HeBH9wat?ztHFND9I-YG8l~VWAcqWI512p}`dL z#{n)V?f38$cJ{@fSZ*Hg^W$881WJGv^huF>9j5OvL)ND)6#>qf$ z*3Qhh55kJ}Uo`DG2s;W%h5HOo=?+jlCtfjKQ3!YX(wcAyYQFEBFNk{Kr-rDP*m#x+ zlD2A>JVYZUb{YW5CSPiTVLnu-$ge*$t1UAB_^GgTxW0>KU}yggQtBK!|J&^SL0s zgmNf|n8s8KQqLYwGFtD=F9}~$nvVK3 zmVu?M8N-3n#opGYY`z4QP9=a~3)s-2dj^HdeQ9Pr5MkFvcB%3%G|eLfK?K(qkZk;6 z%wf|%{q2tk?QgqfKMjgq$Tt$>QVm}oKHhWtXv%1;Ia%1CRJ@VX{%LEtP^I-zSg$xTQ`mImz+IJ|UWa%X12= z^UzwL%)UZsq$0k@KK<9tx7J&9v4>55j&`MXw&;jBZocg6bp{y2=T))2BN-B7KPEKC zE!0tCrE(JKT0iM{Yi5Y|o!J?SjXe+ws zh<3QK{&=Ub|JP}hJ>}d?<8$w80G>v$rHS@LIUXE~ccgo636i92Pfap!bfK-{scOf` zzt42{+85{h=&N*nwOiV2dbs7SVtvfMekuRB;QHOs=T7O%=2a5##Lde3604ls2A)no zU`N!NrL8I=T`mUNRc3t4@JDAH3tBc;s2ZNL5}|p{6fPND!`4i;Zr7B;8a6kmlWW6Z zs=*6H)4h8!>VP!(Mh{%n4*|~#5Fo;KtJAO?F~TCQ7Y|%A?jpa3UIh^y$|8#3RZkZo zun81pRYWh8uF;HRDl>zbBBN1hIf1f|P=C2t8l^1Zc+Ly>U#{F0b`Ey8>@_z>Y?N~t ze7Mc=Ag~mM86>dAzJR+EKN7s`4G_`-$FgKdxV^yf_v89^YXNthS`e`E1<|EEL_;t* zg&>EED1q&A!7gk4<=P#pnFdp>>})PLITgNG3Ez4JUU$iPZT2tMpcS}7_Tgzx&^?em z!3nKk1pejvSpwD^ylntw2wNWem&;(BsSAFzJ-8SC4<9UK={V;Q2z34fCXP?$F+)(H z+dvl;H-iU@jd0&{-hB^oU@e(xgi0H=0&1$!zICnR#jS1aW1K?^h&k3dz$lCo=}`f6 z2fEt;Rj=bkh(zcPijj?%|wR1D*jut;&8L-${y zZ3|bPBkK_6NWYzD(~XMv7|rWvL-~Eq!!5AnIKoZbp4P&20H`NnlEJ4~(_tTQ!}0$f-8q>f zfHtJ7C+b9ifT`a`vdA^7@__8gc=fPz7hP1=tEx^u|GnayHZyQwg1+3^_Y*5|J#J}nsW&I!<;{03?*L!wN3|3A+L_|y ztnQi0dqi!!gXT9g#GhaJ<|-{#v7c9HADbJDAOtYI&@Ep={Uk?rr#qN)>n-=uw=zcG~S#pMQiW- z3RpT%G``pBUHfzLz)2agw(-s{yVq(XV)I1RxZozLi!DtpPbNmhs@4MwlKA{iTuM5m zO1_*Xb|dZVG5x|+N7+mJ1cj6yaS83C>#ZkZ_MkYzb;L1b&~>^~1~Z(c(Ma3wfvQs7 zRzZUn%-LU^TJ@=uJ5>Q;i|z!$0W8;Ny9<7DFZTsK@7c#jqR))|==`F+>vOtcx_dBp zN&bYj`Nm(a$>llj$uKiTq%5|6VW5f&3x_v(&VpfImkZpxJ>unnNDfn+^DVsjS!@5S z=Qox!JO0kny98*vN^{wFqiqdzo)+TM!qr3_vbDzxq-E;8gn=RWwCmOytF=)4VG*Wb zal|HxZdLK_`^)AI{G{eKwzX-~cYK_49Xd(|nVJ7_dywk%^LE1{NdxSkSFuf-&u0R4l@c~ zcq!t6dh%VI#-~5kGQ?{cS9LwrY`l|6H#PL{cz|M;i9%1iSVPTgFG{UZNzclcF|IhO z^{KwwyP59Yt=2rkW@oCl@7z|`sIWDymP6!c9KK&}7x4UAu0gR<@~cqui)vtuTZ5>r zAq}U&8$~~?LPR(q4elQ(0}FJOta47$NXf8+Z4Ijr9kOJgV>11aW2kV)NYwL9;{54m zLH}&mmbUSAa-4UtOjCJ;{4!WXp^L@=k#VS`624eeY>4hkSH*Z>*l7AeEkX z-+a4iP85#K(vj%DTVP-T+klwmJd0{M^3x#AH_Nm$APZIlJ>29sNepd!daqbP*e!j= z!l6PPBa(6H#Sg}d7A+?1so_)OQs_`8|IVd({5*pB>l$~%0z8$=IiGy;3DQJatT6n< zQOqxelBn`Gt;HawqWzrt?Qy#&Yxu`3m=Hdx$97p`&S1a;wkZn?SD2?c!-xh%Doc;4 z#X4V4%bO^s4!ZZX>Anvw4G63%i4T9k;HWp$wzs{*9tnUVnZkLM*AiZ{r#COutg_%w z<^^xDj(2%j_08GzzQU*{-|K%lWjBBX37mz_kZo+`#lt9Z#~9h|HmUrP(0f5%jBJjH zeJZM5JZ~xDwt0q+ShlOFytWVQD*bHPnK4HGkWFTXx1!~=HLK3tH5`5&{7J^Pz`?xf z2r#qCSOBBh7i2_&N>k3E4uJq#j@yJzvb6K1=e-MdtrIye6FRR{Yp##&zZ~>*;4qB; z^VbHhaUeL+RXsk!SXm7h-#QVVOZLB3q0$%e?Xb50*B+%ryHv=Hi%;?l>;pgbYx-MK z#+dn%eRL7cG3E+|N1w#>8*f-4!?An&Ykc z3@H|RYH)hriZ$H+JT(1b>H03U0tzTGqM85nlCiwzv{6TP#sW2!lsx6X)b|Y4YJ4I< zMp#1IPOV5AzQ$dG{PImGO0EgoY_6~u{-XILQxz(3ZzZ3Pf;P|8lWOpX-Fo*>U+7oV zMHhw4YkkZIdFqu>zO#<$Y86UegX*E#f3VWVr+ds&k+k93f^FCD!y2ggb>q5qPJ^NG zpfT2Gt@UOxEp$_F16pzMlK$?bLT-@w61}DmR|h@M`|fzklPIl0E;OF5z{nei?PHpw zA;7)>8l2LSavz%_5uCQMjZ5K3d@X1LylEviJV?HBmud9*@$9e{mhb4dik7nvx0wcQ ziw9nBaA!o;c{3uMdF?&}_6ewLw8`_ufbU`TGY*A)g__zvZ<|onDYW{maQK;hss32>`%+%T%hQePXPWb}k*kGP z=d9d%{yz>oa9#L~Z*ErV3=o)kl8L;lku=JY_h6l3XfNR!2U; z8u+|3FlT+A#RN9&T>-EUCMCjJ6;AiHuFm-`vjcWy$u?&Hbs+v9Jg-R;1zIy#-VHh6 zh91EWV;2h%b)e`+bA`hL4AP=|YguaSA`ZVml(7_wv1y*=MI$A^G$uM>;kMhMBJ-isn(l;1Pyay}Ss-Vh?OL{iuFpUfYm4Pm$g< z{U8IvXb{j<=t&axYdk6oJjk)#P|hnyE_7ij2c%?4<_8~L>68T_4}VX~9vKx-d9Mx) z$Z|WqQ2#TwPyj(uNMl{5R+&y(jDR^s07P(p8aV+nM6% z!A&!Aq4S%NIB+_=M{?ktnZsAYVnL_)Xz*ZMAtk3>G9V|A=jt(6_t{s0U|g+h#x(|j zXx)K$Hlb4)tqa7`+7awnR-ktQ+WcS4i@R$67dRGUev^tBq_M`AFbKro+0A2;K(l2s z^_wIk&zU0c6t~yCZ%+GhDq>yj6ol^)YLcZp*=w_Bwy+)ovK5A>!8v&2_Q;?{93)l> zcesNT0b#%qdmTHoU>$rM72rwRTM;PZ^gBQ4ZK_gRwGxf{j2Uf?TXW07!)Ey^y!CCA z*N<*&3URNg0~mFdkUb~GsD}Uq{L2a0>VM1q(O4Y}f$Xt&HgHb?hy|!FjG44DxMD( zLL>Bmz;N))NFX;!Mtp*$UfC<(&Q!YTspU0Vtv&Fo%Vx&(fpcU)*?z-bS=p!kMUT%* z!PgqVX+1uQ5oRgSYPt!tcp_fNn3rWw6M4oHyN13&!S4&`RQrNaMMa)>8r6mfNn^<{ zgdiGTgg!r}oouOy_9jby^Yo2+h}`Hf&@C%Pkc6M|j1d}~VyW0!CZip=LGMKiQX&6v zK4TlQQAs>RCyG75WfF2UpSR%L>C`WOxjsA=8vXG+%VCt6M-1KdX4k-P;%Chm zC)lONilBO$W+M=MmF|EzuJ)n_F9U*^2(jsN;KUoBwz(no+;asZ&4f*WHoU=e+AZ1X zN6n%NS10!J7`1!4gvh|EL9!8U&5MW1*-z(-xrY_#xJI1l>L`Km649QI-j-1{-;NZ*TiQi-4{k{%U#r;!ko*$3r3N58Nn$OFOf2d0dYBJt$t-vcAA>4 zRlh?egh4b%Qi^Z*D`C%Af5LBu+7WiHbz)cs#7(&(RrJG8oH;95K>BAF;Q-4$|oYDn{CZbo>LA6h0&Bs-wZR#|@fZNO2}) z6tX}WH1jfAcLZ~sGe!_YE7SfEy9~#xnzr*R-jK+77V{7h)bl@ztP9m>_~@Nr?RM$o zWJcCozlT04rCyz_`MXUwf_WzCKNW~@fd((WE)r2qbg;tLL;9I_s6}g>Oi|fT+DWRS z1xiIlPD&T5Rppcis!~ z9aE%pmGXE+Y>LmJ(eA$cWYKjw1qHi-vHMU!1-otnVF^}{5nxt7DC)$n>6Am?YG%La z(4oFJv##R|8f&)Fc@pk4f@i5)by8r-h+0z}xW7X_$$eHuvg1Q2%Ll8}GUT8AL`AXC zHjiN^)n&ADGw;)dP?Aa?efr*Yv}L%ZwT#_}?H;Shw5=JIpuMI~r5CCrw-c^s)ux7d zO=Wzu#A(HTK&jljn;(@-s?5xkzl&3tkanw!lfS>VxDt8T>XY_zKcSPnw$Olmfcb>2 z4PO67YoIt2v8ixD!r~izBcxA2Cl@x%gCuty@6=;H*+iC@p0(r z2+SnBc(qyY!P$AMkR$1PkyVusV+KW+U;z}fc!MGP?C;`;*g1`7PWOuWv-Ah-i9e^& zZz;dV!Zb3d=2&DTT1ELrxqbQa+y0g&>!4hRPTXm7=jkr*v#;WmlNzqxSJg}HqGXrF z^eBGK4K&Ry<_vyvvMm!g%eFGfvc5e@6^LscBdxl z0_L4xqJjc+HshXbbk6ZFtOI zu7ezy-@H5!AWDRbaQa&?hP2(04%xRXbHKaAU(;&=RbxM<;~t1%xGx-C&QdL%Bl)Vu zqnHL0u`lly_IGp?O{Ddeo1QO$;#jydB+Wusko#ilO) zA*HbuP$aK|OM-!(k7U$sY)%LU@}wcxD*z_KtySuNs5aw|Z({MMi>MAM-$A9(^l?`M z$Cy@$sv- z#^^LRq%EEQ!V>fj;2jB4UH@Up+hG+RRt8kqXS(WaR!sS?c-b_O??B>=PlSjHp*(Gf zpK)gjEd}ynh43zBc#q4Sp#6?={MNE(%M6t0>2Fq4PM4hu_Zm%_ab(^p1|&zM^47V@gj7-N+O=&oi7 zbwo;oRFJP7%)qHqLu@ap`IPp&YOh_`vE*FuGZrED%;$slPKSWrWHH#qqQ6|t*l4UD zBCQjQ>z?2+U$93&k=`n3FW0aL5daW&*`uUZK~0Mg-knN?~j%_vb6{x3+@a z9ll*@Ib-0M^Zv@R+%R!WzXe{9{Zl_kW$d=@ElA^JgXu#6MM7L`>4%wEyo zpU%|8xs`5B{2R=7vfosJvKPawR2_9bl*KAzc9h^R4!@D0h8g@0NbFEHE5m81J?dqf zlQ&!9iN~y9ZC9_hd6JUWJ|_nw3+ANdXTSTiWdJuXm63sEZ;dasy&9exK_3~+oj!4i zpxpX#&&^P4mnO0Djh(MuV-xm0q}k!g_=JczWJQYa#h7<-;zaVevO7fO!E={VE4P8E zZ|~GYCQ`Rbc8{TvfE75zAT|!eyGm$|%K_i;fY$JEQIj? z->wM4KH+2!kP?NKQ%LRw{lyhw2Tx_3X?vM;w^-89{DRFhVx}EZPRR~Q>KKOyFC<{4 z3Be11EFqD_L%|*gjL2r|iZqZ2i0eFoR%xCnj^c3|Cv|xS_eea*p}3s764+EhH~=JR zHtW?KR-e7U)&5wP|8+zoTDu0#4P( z?C#|q@}^a9D{ktot-LdTZ=FcjRo0{g{ZkcJ z(1wVpC6}TsdnKx>3*b*WRE65SilZn|vcy_f1gd21*Bei_KGoCg!uii&48?^CA**2% zXdoFuYi{G*Km)w;rq-Qv7BAiC1xZ~|H=Ff%F5WN1^}U-Y=9fb|l-qZW?)APM3wuA$ zZ$yzfL9tdFSf(HGee_{bLk!_-!)vEe#bcM@YptzpWkvo~%G=*$XrWo7V7+~+VB-b= zVZ3D5VN|eP+91EA1pF!;5zNa#3rD18&5Vk}b^Zfd0euK&na({=Q8!VlC)%wr1~4;qQ=e`RzUM##Sq2NLW%YR*mW>j_h)yvyRbcx^}v>TP-4^nP7f@PJ+Z zDO6I}Dl*&|V!mMVjW(%B`Z92jHB=q)^5)%_DNXjJna*#EqluwIxm3fm-z*O27Kld4 z+J!sAi~Ko`aQpv4iMaoaGW2hPp1**isS#%a4sL(xGNJ}}g5-KP)?^gh@O4X7)T%LV!-cMp*fg*# zTl)p3PG-X$=ttg{nTy~Hm$O=)llF13Jm{k9P`V_=l2QWU;N zMuMG(Ib2;8aB}eddR8>%9Of%Rz*u3*1m^wOrNeU31~UH!Ol(9yi*aoxcK9%_e(a5B z9cy5G6bH?gb{Ha1CcuN=+~$hs9NU-)<~;Lc-olcjn0(kR#J|u0Z}>V`CA?D2u7}e) z*|CH@^?zZ6n05xZ7Zy2Vrl9}=)4jkJ1rdjCPbRoqjwloE;8^N}8^N696|m;4#s(L_ zvhYH)8Ao)X7OX^H-Uf@#S(s7mR?^0-Ea)%4G35?oE_-0r*^+=H>|G9De+I6Poi$Yu za)<&U2f2mD1@@_S#z#=^!DNVl=u#(GCI6o^+5=HBZ`}|YIuKT!wm*I5xcz0r{ z>K|B}=VfHeF>{1E>?30pS2UDegAql$v(r0O=6(fI^7Oh9VjYs?U{T#NGN5KWVBB($ zz&wW@N-B3PpS(Tm_$#9;E^FyIIBH0nRb~$DXX2-G=R&gM{zpy}RF01h&<{ zD~15}rNS2NKO9xSy4^pb%CfVc>!hxHtu^^IMcpoy43*z@cJ>_K=H9IXhH1`VOD-CT z;@tNh3U+{_)6^+uUGQZ5(T-564L>;IMo4^zYX}7!ElW8_h^p~KVY>~}QcHnE9mo;j zUgW3iUlu3SgYOTZJbHaWrWAHgeLKhm&xUTIOHb7Fq78anosZsnb=xzGs!SVF-(UM` za{#nJ`_k);ys1Qv%2XB=Q@rVOQE1iLVq2q0ZUf%G$?G{ZZ+ZX>15Qrb_Ese-$MfUe5S4+zPv_ii=~3mty@k44X^u2mcPN z^d7U$^If7tg@4NE0PRE^xc4FJJ;x>$SVU8qL8y*Q z(3RZZ1l#?b{WJ`lYJ8G5XQa@ZEVXYU$Bhs9qk1Mx@kxHn_Z*1S^!#k+k#oHE&pIWucK8^3> zJP(`6m@%#gA4+!&5if@I-iX0B=|y7{y-;w6af}*f1cY%h8mOB#2mK``ijh3A9mryo zHOahwyl4`3j{IqT8}RuO?8TWF0+SExIDgZc)SYv8f&|EgX5yw; z=c<=>rJ{D)tJm<_8%nm0NW*(&)(C@W+K#BPVE$!XjYX!e*vh*#T?JmHjFYB>ru1J! z#v@`8pWgOgE0a`K{M3z}t4Cbr3_QTn+}V00f&feaG)~!ISd1C-0&4539if!qg8+gQ zPg&^sc34`MG9wmrq^xKPP&XZu>tM?DZcpHf{Vtu&3uJxwx$#HphW)P{XVt+?8PS1v zGx($41;bg_H~GEX*@@{CIXA8Jg0%q0&&ngI#;B3FQ_Zs0&T3AtR&RZ!AJeatm(=e0 z9y&n#J(WFnhT>%;YIUI~Cr_We{OOZ|g0&E5#JSD4_Zp@L&9HZGkb!9*<(>A`)aH=VG?{mgg>+35MB@;*D>+cns zS}t@TG+Q3M!=~1!fbLtL>n&PUkUxQ!P5}~iVZLH^jLt!~ydy3HJL3jbilx6-3(u`m zga2hlA8=(iVQ;`^+!+tqZ*_*J9Xn3}3?|tYxbPOOivw{Vv~tNbDu6Vjmkhhr32Pf; zoy3+`?l`r{6=9%;^2uct9y8))MYH{vgt|0qC zFURD*iL&H@fW=yfYN}MAp_)eislwhUZ$b07MayN46t)WK4AuH1`SXIxkkYMT;lxb7 z6|HU+Po<-&Dh|pwjq8^#+IM8=ms{rAhc3M2piRNO5 zs%4od&6)FO2b$k7F7?W;$)L!Vsu~_E=7|n$aU81eIMq?vAWO++S%XAe4hbi3@2vKH zz$exDJtCO*-Oc5ejul1A*}#wKdM{Yu4*Ue+iS4pg>lEgUbsl3U2E%VlYmq0DvHmux zhF%R6L~>hrkNa?fF+csz7XYJb<3*b@mX2d~Kg=j!Rxi}e@}&r<+g{mDI32m_x;1?( zh0{b~!A^i)hEoeik@ToLqX)XC4}hX5*{Tc^71CmQomv`Hgl<=wS_}`CGHWi2tFmf4 zW|2#Elt*XrbZTTm3<`)NpUAN_xj&DVxl8jq)VVzTBo6_JA zX@jO)9r#Pmc&44|L)!`x(8zfvh69q$QV+Y{mN3wPwccIR$5_Gi_L^Ul**Qw{eRCr( zQ22l~57`8N<6d%BE!Mxou$WWPk&Pnm%Cyl#JzplGS-T!qL6(pMUGcs_mBunS_tEi119f&RT;@USliT}HldkV!+vn;v) z&mF3CmP)iTslCndhF#3cPhs!4^j+G5Yo=nUwPusV*HS0^K?Mam#GqRxS?jZAlEM8k zJBW2qiew6Um+G7DjeAhpVJ z$5Lf4bE{vGqH9`A2>J#aPq?!IoWYWClJh9zO|V0oLJ~%D6@R31OTf&neR6BohG#in zr(s-{9#&FFURSmr{T(DvmrfiVH63pPO45{@Tl2>YV-;u}m*|jFl%V~z_V}|x^fCGz zG}+3heB7x%Vnqrpi2czs_-GJVrLQY~9BzO~UrxlN8?w{hhlTN2v9mK@X=; zl}m47#v#spFcsubQF*tvB1KlmORLygBXB$!*O2Ehk}($uLXpE*+Eqldj5uwQC2Z1# zI3704XYv{|hZW-Jppv^BSnA>R$>4U72^|3{zz^iBu(92OwGer6aLFrqp1BNImJ4%_uKcLOP}R z%TswBk^{^eOgOy0G(FDY$IP?%ctiuKujUwLFdX#YUFcfZ>ybE!!!B0IQVx*%AQCPx z(E;+Arc@J;BvN;_T3*52x7h*M!@$R5rD^>}yumdEuIe@QbX-EmNebAz!1~O`vmLHB zDO&wgcbrb;8+W=&;nd&e>80IQBp2IDCR8M(8k}hxcNA7idsBLFTq&%pHC*%u)Ukh4 zqV;P1oqv=@V`{hPHqeA*JBG|in1SDDtlsH`(*}5@c9B!i?5~y?7n87cKgr1 z?f-#J93TYN0E$L6pYgPb`Tggq8S2nAU#7B3g4iw5l&8|6845qSCiix?{M%?|k3ky7 z`Q6dU;l$8P{Gib;{-c*X_EShcD7E4SYsjC4hnKy{3GnIWh3(Inifr~5z+~dTnx_9B z8jEX&Mb-rb%D(t&v%53Mg*gIs$ zS7QxGe7+!kW1W|IexTT9=|U)VDTg8xO>^&(SbN(dbBwm}qywy&FpwSL6~iZZmO)9w zzCXWP0wX9kGsj8U0z06?Q!rI6v4AB3C|4|J;`etN`7IpU3g+|gJVht0AMma62*}3N zFs(Slf4OEQN)rNMTCYh0>+f-iox=gIPapSOZhsR;;|8e=u~DViuP?A&CV#o;+APVx zT%#vn^J0CC*f!UIfcrDmuc)3!s32XNdH$Ek9#2p3aUvBi34~vv4U>jJNB=Kq0}5Pd z79fxqdp~yK8_%g*f9?FnlZv+G?(#m|TZJ%9*5ZmR{_iyzXgo6n^Hl?6T-2A6;J6YZ z^X3k@l!y~T;V*-^@!yh7)izG&UJy<+vx_w_KGT2qJdYNWpYsXy znQNt`ePvyn==_(cq)76iZp`4QR$FI1fCdV_Px|(V5kYV;tTH3uElZee`Kg3PAi@vL zer|(CcLqd@NnG@Jf^(* z2=WU-e3-qWd)7nQ=T@SJjJ3&`8>~%s#A^XhN6YDco*kP%AlCsb9EWSNAOM{yg_&+^ zJ&QI3bg08JXc1tcye?I><0LJbQ9Q!ZBZts=?6NN&o4h~^@5BCs7Veh0tI`;>u_JlWNa(PJ<~Q{L3dytdJfFNN7L#0DfOj|HF2ef%B-tpk7o@_ zn($gEXO}1yi$#@0wZyl6lS)py3+^;j8{P!QJ1Iw3zcTw?vrJ(*`Srv1>4F7zmGjSv z#XqfsPHkaf&Zf?0*M6;-C|B@TDDO8>-hb%C(+eMUIL6we$dc>_$lrJe*6^C@w)B<% zTs~r7`$#GYr11=M)<^B%lTJKch?b=_<;9KJRq}AG@iEpFIwEZg9uHEgJB+A~zEJ*LUGxt6#j)jmfCA07S-0U8)31!UY2q*~2)u38IV@gh0wr`(a_KcdztpD&TGlqp}V0wW(tyk9e5(Vl1cJVRtbyU=PhC*504d&GBoo}X5o zvp9SNiIEzqs#;gM->$E+zP|qE%858WRHoRQB(ZVtq%+jZmy&cGF7I>TI)Ijei#tP; ztCFh>tc(4h=a%aJP_(e>w@c3nvU?HOsyiFB-W=KJ*ByJtt|a}&p|`zqx1Kwh%e^sI zmYZ5R&;6SF++7Wi+XanB9`Q4;abL2HekQ@aB6xvC&km28+Lxwz&--GOMH&2+kY{zx z2AAOLUkS!Z@b1h-BR|;DvxfYKxeh-$dtUZS3U1<&W>cz$j;bc3*YVo73#W}T90cEA zS;ak^iFLMUGOXTsZsAVYln?otQus}02M^(N!)vibP$6mGjS%dRr2XY`rw1o!4<{^u z3@>`P!#jEvBe~39r1K;_#n7s=(7V*~%`X|5C#oXz=Oo6aX6I(UEnM2T8>A!olwOH= z4Wv?xeJQ#|N~E7Cw1`BtF^SQNWZH1uC}T$(?HnFz^6HWm(8 z>xS=gq{yGuk6Z)$VmAdirm0IJr1iWUmUNujp5)$K9x2MuE+b{=_gnnlj520?SWY{q zyczu~?oc7mDQ%vyQ_;Ir?cdB=DTm|F_Zb(3?v8MA9XSu)&@)^!2k&wXdl|B${Pw-k zANyguZ~O2*)`vmS;J1+ff~@s760k?nqO`&fooc`kP@-aAP0CiNRfoic%F1$ zOU}DvD&H|~=s*^puzTK-S124|{j5Ia3IGgLO+&Im$>2a+X+Wb7K(~uJKu74bP(dlO#G$#wf zJKeZ+SP)bU&fK%A5@)Nk&NcgK&)&TNy4Dj0@O0KD;ueau=*trQ0D^ZB1hR(*2+ULx z$e^;J`wfVUM}fq>o7nF1P276b(ykrWAKNVg^Zd&tG|ZCam=3S~S;n0vTYUG2BF8P9%n zIE3B0?Zn0A0levw-Ec9Gu*^pxJ<{>h+2BT7(!%39BFF;%(_a_IVLFsSnPJbb!A}bf zagE5Gi9ebLy(Jq=N%yk3SYV0e$=iU5d07B_a{l=V9C$M*#WAAe*YgTkzPd{NLE0Oj zcx-`KBfXlhLDx=dFHV|AmRK=g$P zm8xx31-GwZkp^oz=ae04+tS&dcu^e(=eaKygY;S4*w4B>rd=b7ilk&c-qO#sv^flf zQqu5bf{>qto2%al+IGBgR#IOTn}N39Q@-0GeOs*h1ZZ^WA)8NCfSDQ!)jsRHHJvGs z9?b{4a_ZDJ-F4}>Y=$;f;Pd=irsltWRwqP9*|}`5g%4Gc{T=ntg`ae!0WBcbm&a?- zP?$=zcd{*&7!vmOO4YCVHd=8&zv7|})#7Z-eQ*^%$z)lLV!v(^0QsHu=wJ+fHOq`1 zz7}1zJm0rq3lcG3jn4R-!$$Z9pV~rY)bng^abi19mce~`SdwS%XISihGa%3}itG55 zF57vP{t~2@#=GtOnOo6ZDYWF)XBDg5m)z|Y{$K6AXH=6}`!}k?C`yZp^pa6TsuTeY z7|AFjC{=nV0wMy^L^NPX94Vn=qe#mz7$RLdB2rR7y3&gRNk)(+iD^$ zKkr#*op-(KoG#z4x_$*RO!-EZpN?%arvTOVESh2xPDP2X{kW6D2O*#QBL&{CAy=8? zTWO!7bzx8z3!aHJ3n_)-S!JD!xwX5VJ21;OcIW*L#p^$sNF7xj`zM;xJWu$+RyReE zyB0@8KJJtza%VOrZ6A{ylMOU)u^eG?Wcj!K5fM@39Ea+?3Irwsza}YI$g!V$@*f?rpnDK%8wR+&chx4H7`yw$NOh z@rQ?Cb;OF})Y;HN9~ijk|0YR_gQt(oZ1!}Rj^C~^^Mc~(`4jvFEt}ix2EPI?I=~sf zpQ`Z-5SZbEac780=sEzKo^RRSxh^z}^yX>crf{h7l1Xd~FC6R3X|4kJTma@|)k0yjLloRX-Sxp4kPCMwGgLMu8u->I_EnPyN>rUIQvo z6&|qWzdqWW%>@Ug+;wo&dRq%lK3ae|P2M^7iVJEoY5-3L|5fWB8x4_Ofe7f6UDDYp z$FpZ}^o1RfuYkJrztwwR17v``Af>L2ON=TD#+x|)?Ydv( zzmwx1`5-boIvjUhs2}KrY6(QPlijo~RT6t-r=T6r9%0pXS5`ZEOg5tS3V?0-}iBpVz;`PC~$>kvjSP&gF}{e^~Gi z3+QT@XGxi!~iBJ7*@9dC|ZS`(#hB<0({%3^&IP3VUhd%jS+S|#o0J-_O&{JtqTynFoe z-o3TY%H-wAhEY_yB-wF?z^saaMM{2#O zH)|zs2ZBT09}-su{mr0u&60v&+}aV}rN%#5P2_LGc;5hU^e+dNO7J{WGr)rmm`^-G_ujtqy&@KM}2R93mD1uexJZ6C;Y87Ypope(@J`&OhfKx{H_OSrA z;sG{P?~faq@psh{*26cVcl@pH-<5OuJV0?#KE?@s|HyOpld{a@=5pp+_T-@Y+aV18 z_!E7}p2$-urR=a|QIL*Bvw~Lr8P{H)Fh^eT64LDbyJ<@%5Cy+aW zp7rc%-d_oAEoPF~v2$)FVFk>EpFfRxtSKLx2y4Guysz;EzztOBcU<#(vIAo>COqC7 znEf>AucOni|5RZ0Ey$6)anh?+N^x&=o?p%>%%v;kSKYR&j)#j`l0ElpG2@D?_tb@H zI#wr;iYJF6pu&8`v;Tycea~Y=+B-+e&5O9_O7!Ytf)Uwyqf9R`wd6OE2n$#7JcJYV zd}HL3O5c)6h$s*hWrueWf5ItYf%hWMKrjcQ!pk{nEOas|a3KL-M@a41ea@eU=37Cz zj69&#cFv-pVJG;3F^g*>doD0O0-UfBYug5;1+qEV)2dB_^T(0|KYDFmV%B`?p6>Nd zC?^aXC?D;wiN-R3$ML~N!YeqgLkb=)+i8YCncVpB?K-Tsk}$#x34 zfmnk)M+#Hz@i>)IjFNo;DTb+u<}&Af?JoJNGwMx|F-bplzzpAf5gg)5)_TBXa?R3! zFIN&2c$|scDh{Sh?qOQI~T^rvi zxymN=T6sr`Gu~Vk9Q@PNq)*a6C!qtYlsBidhG_Uh&lgQ)S+Ak)!Z570nn%vwaPkxrzpS@a+wGYnt$Bk`b`X*d~b~Dg_bx5dCjZm$maG~T+B8~T4HSL zsJL6dxS6D^c*(p>B_S}g+%_H4{N%cYBq7H_GpdG+q@>aYw5hClA*qaFblzLC*_!O7 zQOvTl@`WAJH$b5rAZ!Yn&0uhRLV(TWkMXF9WDKVKN{o73bU?#kk?w|Ky}h$adP44# zpfA{qV9hHPOaq1g$j?CwiZ~POPmmB#2II2KRfW##cEi$q5Rhwi@Iq5~7FM?m^PRc8 zA;t7v%y6Z)n9SF*-2qyU#uza6rZ5#g+@b1wzQ=5O6oPr5NqND>z4xmz)+HmP^f*z{$d)heXT+Vj*m;!t@eovHb8 z{6%(MG_J*=@yHff-T7gJXtfeEy`KK#dz=&Yj7e%{qd?tIwLD}LwMG2GBv zXV~pcFIGffTxi^#t#2^Y+K>0esNZJ|-#x4IoEtctT5oYII7=~^b+gUnQBBo8&Hjs5 zZtg!k8#Gf!bozcM*m4E@{@l_q5hG9m6XQYtgQLz7$ z{fJaU@Acf%qFUWyOGd@F2tiMo$uAyVNH&pkm%1P3O$(Egt|nEcIy~}dlHPVAUj6uI zxcS%jCdav9eP6?->f^kdnz`czg2OJ^prnk%FVy`ir^_zwemBVdg1-K6_>rNV==_X! zpJttT3M(kSDs{2)$nN-`o&~1LybeRh@;p5kLOk!rkHwk1T3H4tKd?help^6r3en%! zFDtD6_m7ME_b|XYCv~)Qd03anRRE7A!3v5zZ{_{h}y#El}(*-A!zx0xJ-M0TDQvCnkh3x$cMY#uCw}Njkp^gX+@51}JfqGnj z8^#8)wTF5IFvZgQZdA{*WmcnJRyD-rHHf`K}Wfwy6@=yOA-oV8Ge}2#ts7>x{ zT28tc&l$by0W9A;QJ@oudt1)Kxz4>pbUzUiUIiV-DJ$Dl!^Mt!n6$z>Flk z(5Fyr4?kn&b0mJM(QyuW$2E=vS_Li16q1E-%KDE%)WqrjLsTr=-w)ZL4hf7Cdq+`knx^?YqOLCMHATFYTuNFcf&+!gg4aN-09z?n1L1W2EZ z8$ciE&=&Ol$fbQa1;2-Gf!#O4D+mVQa(p39t}S~hm&t?6t0jI7#nU^KIN^y3R1-TSGPB#?IoP>0rQ1Ko*TiYX@5R$%S)zaXK+u&{=N?~Rn(DV@-P|GFkRg(- z^)^XHA$~}&ubZWp{b{ts?P;5t4*I6QHm}3~m986*)(M1U%9IlaH(eJ)(Y_%=*$ z2nsyY&Aj;|qIU`9%@C%Y98k%qO-qt5jDWzUnYWIXKfGoktca{&NFROejEI%lC+gxA2@wHama~`Rz`i{@{@xD)@DeBUu70+5z z<#PX0G^4&hcW;nm$Zl1~O5}7O{q@FQwt@ zBVD93>o()kkBC1?GnrPDK68>$wX8w^_)W!ApOnFPFL6{#{hChubw+T&cJpb2p%R}A zdD|NJi5!u%%JfPxN7^DE0S0M~8-E8yaU*lRA+V(V+`02KTp$SsZrKTR=b-MV5yen` zy1TKK(4EEoxWiaUHi5Pv5fb5pY4KnOO_{3muTGIU&AB=cm0K8gyCJ)aV^z90Bz+v! z^YPF78bpl4d>^p%jp`s$?v-|zk`(fOimat>Cgx<8*k4cT*E?*;j-qIB+s*^mvN;c` zGsq5b=k6Z4+X|wd%aI6cb2S}Sx;#18KKEdNkNo1v)wfh9%xpG$?XW!aY3a+DKiCMrbObI-?p^j8 zus0g76;#<&91?U#hYE7O9z@j;DM2C7tyQ`WV!iYjAPJ;jDw# z)^=~tvByAIA}+rf~k za(*lHZcZ=ikTVN;TWH#u&dESd9cC+@Gh3UHb}U#%+)1LJ^Hp~tCl4WT=_E(l`U)uh zgmtLL7P0c%rgcPB=5yqbN7c_$&9k75Q56;0Yi z>Wz0!)s9M8i^Y0O^(FUEP1xF#FEuAV4kD3BhYpvkW@JVs_8VBI>E7~pd5xVrMqeav z)K%D$>xxI|*ZAR&uVJC+MCQCG!@6Kk3T`%2M(8P9TDj&zF~b1s9ensEUs)5RV|&sx z4@V-B>b3m_^>0!uoXbbQcS65xc6TPDBv8H~BdJ6w{)xE7@ML^*?gotWoy(ZwOIAK( zhZG+MJJt0Cg%KwH=TAR&o>7jCeOrKBx${z;6OC_9Xq)H8#OV}82j?eNv--YHynqHv z2?*hYDEaY_B`?Wt<3Nd}XuZ|;>s9@3g9B%J852ksnLR0`=-ny9fjO+_E>y=`QDVwE zMW-FogC>Z546Vg2FJ2~ss8gC;njPsXv*cc8qv%np=xkjePU!w?8>jgvg~@>~*$?{W z*co;?Q<-Z$&F-1q&gF=SCo7IS#9G5|_kq2x`ak(H2kyn*!!_>agQI5mNGMP491o4} zmeoNm{xKOfkLyig!RIt^2s40HimHY^WAiYgjD2t4!54Rih_pIc4w0|oU;{j4iU#k@ zdl(m9^3!4A;X0TLJ=2}FYMSuXYbPig6E>{JL!AvL*7LCgdYCYuJL|x$Xcj&3!Er_Z zK+gcxn(2<$q+8I?Fcp&w`!Km^OQiMIlcMNjrO5i?BjZkEwK^BuO)$^jwv^zzU;OAy ziWbKUL?SB%{ZZI}vChTE`RHEs?iKWlrN^97@3zhs_EM8CV?;6p-gwMMqM38Nyc}vV zXSdH5H!KzfgXjp%=jC@zXGPEl`yx3%=_(qcLY!F|{000`v!pW;lXUVc)h7}?A|}hE9fu|_#x)oZ|;L2TDDan1n+CPAkk12kN;%*{}nHY}5>V({_l0lfz_7W)xM zOP(kZRA2M5Fo|C2-A(LGT>03fK0(f7MYX+5ywL))5>Kk!=YkRWHo3QcD9{oij}Y5b z8Pa#Y9`G_-5qvoC^<%+8B@6D7f(5p{T{@BNx{wCkd%v%5ou=C*3uM4EIt0_8ch`<$ zdWNUr6*}NWy4|zU%kk|tfu!D2VDy;9fJ=P1B=M429n0gH*^lZP$=Q5=cy_$GdGbMb zZ+5`6^=U$f5^%rxpluuSaOoRoBHQwDbfs@=sY%!6{6u#rlGTi_-nfRkLxRS@%+~Os zat%v#P*2k;z80}=@DUTMc!W`Qv`FV7U30oabby>%NU}NqjO25RVf@mjeQT*MP6R-y&^EzKNe4EQ7WD;`4hVMpF?t} zqN!}2%tPNbbFXMxOv@hEzKJ_7vYAJ^1E!0QkkSWU034YtuV0=-3z(L-T5~H5J4*5z zt_gK0g9|@#F8vBxc5nz`!I;Vd1<(BsBx1Ji>h13alb8+Mz4z7Ki2E3<`Do#-Ja4r=vXu8gOf zyN9X3>`ZQbX)DeG$qb^=0h}%FbBM&&T?CyZ6`mXaHweWJyJ4q+^6is+~1LA zj1gh158EM_>eR-upn7Z3a?uBn#_UP%vPEmlyN)Ak(m8FR>n*VX8AGI`mzZ1EF*k!d zXSZ#%muDs@4E>pFG5J?NKQr!ZWIVchb3{q7vTsyIx3xx4A!;(j$ODq%=O;z+Lf4T9^kGl(0 zc3ZYbJjK};EPa*M)u4>^FikCisACa88jbLcUIy?^{7&6W!M{Lnc(Q>hJ*D=LU>d%c z$h`;IGdFiZuD$Svjx=^SH-_js{uQnO5gj<8J4;zS2OH)qZwDT=t%bTEu_pMLt<%Cn z6WV?q=i7uZ;sSe3Hi?BJ;so}x5p!@%$x(-VpHVoLvf|X$exZSH>RrH4M+%F(6w7Ni z-8j3SRn7`oI@!&LtUWfwvMrO8alQ(n0tqY36)26meO6Igx_xztf5Z-UZzLl7qa}Jy zHoxh`G=Edv&hqK0z;nJ@W2K4Zr@x6*KI%|)rTRtUQWnvWwrc_^(C+sIwq@4uL=mua zY|h=`j)5$;U|ipAQzWFcmjuwMBp+R9fhpTA#|S-itqs~@EgXglC~cAL1c? z!-$Od@kCnlwPjdwV9^r7TKV9}!L0jPy^Csz6t+MJLG#zL5PuqpmyXym!4QxxXIVGf z-|^ghgB;ShP>gf0xvZGsF;aa0i-}-npa{m;n5UM6T6~#r0i@r7a4G&JcI`TxcLhr0 z=CIKl(UCj}=rLFKZMzYp+LMWU$l;DrObA(FbC)^ZId!^;p&imI^9M$o#L;fhBeU6+ z10H>Gaiw&|cY;su{X=d)6j7;f)U1%yzz4(2$+fnBc8$IXq@HxzS~rc>zEk(3Lu-#m zv#6-Z;fWxpUND-P&Itn#_Z(r}Z!f-9XuC>Y*#hgD|0JVuuU)>a>{Ih5Yu0WWA|GL$ z(`+T8gZ9cfRqfH_Y;2j9Bf1|APt4I3_0%cP+FAgMdw0wxYX^XJq2aT4DCidp8~ee* zVOE!`&iP!+jt9;l1Dum%RPGqoh?9D zTX5#A&?OU{mw#gVS$#~bikt1gz zvn8T1OlyDYU_IXyrqMN-c!O%t!}v0Y(>>x8RTyS7_2_MB>PVC|*@&D>o#?xnu6xk6 zi}7(FW9Vk#RsAOR!-2|4>Im$78E6gpM>a)fuS`*|e5sHee8C>77!l54wGz`hTL@_# zNWf&MbL|bEB`oG{tneh(@`)QPo;W7N@}1xS){?DDRq|xHCgW6txQ;VEAz-df@a;?+ zcp8`jFOJg3+O!VkkX(6-jBopHRqJlpdw8#WG5>p)U6Fm)N97~zOjk>{HmL?%)JQ8@ zw=ZhHFXsW(O6Y#CKYL;Aw}_F|=~x>X-%(lwDrmQq`?O=6WNi+}?s;rQzX z5QHET-c@`U>gH@Q?yL{-4&eZ=p~WSQr?&dNSYfBk^aO55c{iKe#GYexrW-oH%%%JM zG#c%Fmlo^1naPh{gl^PYB!3m(OLv)E+IxTY2ghOQZa9&$9l}&ONvHWx zPPoq_r@Bhmx}Ywrdo(Jo{K;sBM>P5AM3Ev=FN&0JLsh4L+)grhPxB1`QHN@!E}6Q> z$^=q+jys{CQrj?6!k)sY%U&_BQeQ%(m|rH}OAltM`be=gbq%_f+!PPvr8*ZoI~#Dn zFWODRdKVfxyB21JxU_#Zv-J0T$9K3r5PGpVgK;KYVMU-1*{Kn3EgXVSJ+naVXT$jG z?Y9#uG~6$btvN1#7>QkE;>e8zDPvY%ernr(o(kl)xq-}LJIdwv#5S-2#4GgEITjX8)@V2 z(siZ2=I8(vXaIn|FG)cOgAKB*W%Klihfi3kl|Hh<+HDAriR()o`l8kqeW{4nb)BQN zz{1)t98zC;%)7NpY{XOXhrpR!x-$SUuDF%}D(foPG#(P+Os!C(!W{}4?-&5 zZ;`+kdBcoqs`(ac_veg{kGqeXjcB9Zh39kh7{&&gI=j?BLK;RIO9-XtMSI_<)EkN# zOqJ3c&5>_6z$pqw+=u1ef*)}?q@?nvjPfy>Q=)FTk+*ri(>5v5+N`9|uO4ZwVg)A* z+-zr<7X<_7u9NSVj6VKewdxS2S80^=eD!je&yZz)v{HDLJyq~zF;?U+lf-}PlK$=1 z^}?<2s`mX*Pj&?2o|anP7T=^VbgvBJ)z? z-K>K_Kad^j@4j6!TocFPB|b@pc^5vz;gWxdtu)8?{GsEcP+b?3ug!gArO)ynwHS3%o(R@3|$(9|Gvwo{P zF7@0zd`Q-ttxUOIC$7P3Q*59_qy+wfA8BAHxv!ypPP=OP{$S*-VBWr6|Mhcam&vX( zyQeSDfuyj|4=t6UpXXMm&Gi$2d%n58rGC1DeY!(^y2HC;jhC+HP)23{Pt&B`zrxdq z03}_|;%u>q{KEjin&R*nz0^h>Vu9b)Ir`8So^m(PE4z zwfGm#-U4R06tIO3X$xH{KEe)5VQMt?ri3-+eO;3~^l2-=u%niqH`ps( zRYxNC4ve{F3B(sh+fw`54fPE@$eL`L^AqNauazF9J*8Ak~2dd z4E9lmg2HQp^{G`*j%bm{m?axV`LOrLP3$X}V{k##9YXmN^v z(1QDVC%fIa7S|_(Vw>ToPjgo$4ejJGlqm+Bf4G!M-hlmyfm33$;*l3>gYy>>v1XjH zMK_KtLmT9P&1$O=#Zr&=d0;*B0PU{{>(wDoY zqMaF&PGOpMTFHIWcGk8vIQixgce?5X*2Xjzq51NDLDH#%w5fjf)4Q2yyLkBdOi8&S zmu?r@(u|Ku6V}`=cW9LKG@wz-cZH#Tr4DLiQ?78F)$gja^uvYCM9)WSGNmOCtoGTW zJV8L#8~}Tbp>Q7HMMRoP3A*rXyG>!-*d|Ad`(mawb1r{!pp zMbB3Qb)KS&e=a7Pp;G>UQSMAWUu0cNsB^AgeNs1_I?nRkpV4C{ne^k?sxRk2$-Sk@ z3@Xw~YwX7>t{IqrW`eg1b>tp2bYw3fr0ml?3X0~5Vug1)Zq?3aF>5lILqAPXaq>_J z&n8G7pK`-+MEp8VWBe;h8AGPt={P-!z4Yhx*ygN7uG_6pd2uvd+Eg~~{23D--!?9L zVz}L|$FJh9cEL$@+C21i5zULTY5f zw>j=>Htv3h4o4k8D+*v53o?|dOeEsjU$&g@!uMnK$J_O0+S$dgnAJkGq|iI&uUd1L zAQz*PS>pAD7ouH^Yh@X#N!@Y&vsKjnjG9Zu{&il)_XY#BomP=90r@Rx{edk-Ww=82 zQu~>dp3Bu9goA#;&OBuktJ53>CHWf3TnRtcQ;x7oxl5)Bt$pN|u7Erta$Ji!71Z^~$nc0n^jvenDdekLVR& zNorOzKJi8SnL$ou2lPc;Kap)^H+P2B(z`J0&jq{w{Th(q8x_bq#}C`d=ST8Xu)>fO z5A}Z4V}YtWW49Pc^FF$?KtFW6q1r+SQ@}j&O+b3S{pUQ-XOzkF=`4SbdF8FFI%=p( z=)i?jx8uTgvm|7w{>54;?dSS}KVt3aTEedT3DkEW4xJLAoxK`;Hr zl2po6SCx^-bn0~Bnh6tz+Ec(%p)10RohbcDj$PaBQSAjs%6*;`-5BaGGMQcnhjKaH z>d9_xbLo!b2G2Q>bcgikz7a2No$pfxX1G2eXt)?Y2jhl626gBZlL#FVUYF#Q_Mk*@ z$3Jno3v5T=;U*ZJwP}gRnk{B%^}K+JQ7InFU31|F$-SPNigTX?w+qTd)!v#8Fh%1u z3c5?FE+^AQK=6$*b4yunsP18D_r#ak!n2-dlDy@v8KJpnZ%Ao}+A0@m-qNr@^!VzH z(ishkeMr?Cv(8b9w`D}d%=*=_+^C!?Q+K-DZ3zeF8~+zCzaf+49t(!ZCNE!$U47wX z@J++7u)a!KOGX|sC@pfi)=Hz~o7mnnGAU#;BU+pm({5T)AQHe_00#Axtl3hA#kx4? z;Ob7atMOddW{Df3ylAYll@}RQX@i%o|CkpM7Arm7X|J-ZuV^aGy z?I}y!W)w3~D_yDsQ_<(l>2BXhgK{$=GdWi!pAOwKq?Dw{HBM-3-nxu-PkHlfC-)`x#7;3F z{h=Djv<1KyTQ6mFPTO?@#WQd?oSWl5+yN!{^$`i&G#B0^Oc{ZBK>ijxe{_hf=9r4J zRj>y+KXaAOc5uv~T5~or!RV|5H%{TgyQVl#_f8cTc1A`^>hiYfFI}wGc#3xT&z2d; zW?t^ICEJcY%1iM{#Vb?r$< zsl(U0ymTM?du#XrJfwDd;~{&2n*lli_;z64nNatsSaK)%?_F2m>8L%ZU~vn9v<&s^ zxem}K=_$yO^Nm2nPPk|tTz@g0>Fxkl zZ)b`WN|k;^-;p8sx$8Wkk$zR61;x`|K5_c=eDRCdmd;>#K;E)Lw2J(QluMHd+?CP> zwHZ_uA5GNMtoFe9@~m+baN9YhyN#!7KqllfseA#s&!ZCSs!henZC=8wE?Ab2&6 z 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
QdEs%1AXdU`rO9a%w|l2vT5 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

QtG3nqg0)iR?~6hXxxA?fqiR> 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 z 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%0DYPF|_zO+58`o3j>d?B}27FHz*FOV-H?LV5Is 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

#JX^-PpP4xW$^9tShnVGwu`axK^h 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 literal 0 HcmV?d00001 diff --git a/reference/4.4.0/html/images/samples/flightbooking/http_adapter.jpg b/reference/4.4.0/html/images/samples/flightbooking/http_adapter.jpg new file mode 100644 index 0000000000000000000000000000000000000000..4309015d72552b43a05f2474cf1c3c94564954c7 GIT binary patch literal 45775 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 Kt)%I1@c#ha*7^JZ literal 0 HcmV?d00001 diff --git a/reference/4.4.0/html/images/samples/flightbooking/sequence_diagram.jpg b/reference/4.4.0/html/images/samples/flightbooking/sequence_diagram.jpg new file mode 100644 index 0000000000000000000000000000000000000000..d4040f665036a38cbef68ffb56fad5cfa51ff979 GIT binary patch literal 88264 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

wx~0DOYGgt6@tNQfK8_h3+7_<0qrzK=(97^l8%1 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 literal 0 HcmV?d00001 diff --git a/reference/4.4.0/html/images/usage_sample.jpg b/reference/4.4.0/html/images/usage_sample.jpg new file mode 100644 index 0000000000000000000000000000000000000000..aae1dd10aca65c3f5ede5bebc88a2dd761ea70ae GIT binary patch literal 86102 zcmeFY2~-o^w3jsqx}JZ z?=W)vR6w+UI6_w=w3YwabLSBnLg+6S&!0tT{&xs1cMj)Ni=pAB40caR8xrMg)XJAT)9fSo#P11t4@aLT?Wb zkNiW^5L)Ndzi21uU(kMjr~au;Kfj=VqW{4Q@+R`b2STFHp7Fc%*Tw(IQ}~$}L|%U# z{K#1{FyfdS@?QlhIst(PZ2l_^90r1c5a0|_&H~ZE2EYI?0(JscfCm7a55)c98?cT% zd+A(AQ1JN;`;n0g+`hpf!hgs14F)@R?fi55|1-y*Is1>!u7v(I7x}b5|8pHt7nx4u z$ehXg=elE|08mN*0Qri4uG_R90Az~+pnk?b=G=vUv?uuIpAaAppa3~Q8PEVU0UbaO zk>zf{4A=+Q0FHnQa1`(ad;xz%-r>MG;39wrt^o-^DsT(P0&)QoPy{>$Du9^;0w?Xi~=;^J1`4?01IFvi&TV9icgkLnGemU#iz?>z_*9blFx?kAfGFrC*MiF zAifB`7(P5-9A7G5CSNXJ0beQK3%=KU&3y0qy7`9r=zPDNrxaAtz9CvsjSLFB&3GZBhN zkH~isNK`@;EovZYE9xa0A$najTeM8HNwi0FN|Y_OUQA2ORLn&zKWk}{Ip zB&{WVBx59RN|s2zl^m8_l#-I#BDGJ-OX|GTO{r2Ts?@j?v`%*2j&%;}0@e}N<*ln- z*R$>yN(`li+K=)@T}EZ2s!(01x%Fb}x2(5b@3)??K5zZ&^@Hn|rDdgeNxMjgOQ%Vf zNxzr=DI+4YMaD)ZK<0)_kqlL4QdU4#Q`TD6Up7v*Shh{}yPU9`ww!}ps9dUCh1_R3 zP+msfNZwr@C!Z((MxLf1ps+>3LE(%-hQdpQ0fjY1b;bRPfr`nBm5M!zD@v+L`;-Ee zQk2L_{Yq=f8WCV@+BP*; zwOF+xwNGlx>Kf{H>SxvOt5enIG!!)UX@qLr)o9X~M$4it(IM!&XbO5}gZzg58_sOF zx1n_dxKVAR{l=J$1sgwaWN*^mbZpc0P2^2un&O&!G*4^Z)ojrOH={Q@Z^myf-#nrv zrnN^aSSv@XLu+M=_7;yViCgNn{M1&`cF?}8U9SCAM@k2y6QxtA)3;T4>z=J)TOV%y zvW&?Ss`<**Q4)H*l}>j^&NFP ze(7)4_tL+u-=PohG~Rh;XYtO_T{62IcU|9Azw5WbHUocyJcB+%DMMRBqTwq;rjf2u zpi#cjkg=?>vvHzvi!pb%$?kKzD|b(uY&JP*^1x(pkKCTad(!s2+bgu!YA6wL@m6`oC*ESC{FE*dF*ks{nQD8x{++caq@{uJCvk~KmDa0`LY3>Wy z_hjGH{;m5%_dnbJ%W9|9Ijb706>C%LE7orh2pq6GkaFO&jf~APn_Qc5+fBAXw&k{< zov~f4-CKJhdnfzb_Ja=U4*m|M4xpon;}yqNCrKwar(7q-!EFc69jtfecXo8XkLetX zIo9Hia`$mBbzku~;F0M;JFb8H%JGk$DxM*pue?OO+`XQ7EqmK|XL*13G4@ID891SR z0(auQuZr&(-#1tk)(=~CQs|_|$+D9iKNr73zvWX7ryiUF{jL3T{AUC91>6mo4zvi& z44gV`aXRz#&mfDSJ3-UInBeT-xe)7++z@7{eJCk(CCnwPB#d{);|w`mH2h@v>j;^M zu!z=3jYwQ%_gUSu31?|hrcqf@;5nyrPonvvPei{uFNc7GPcb?%@iFuZmKX9aKo{LF zR^g;^5x7s6wp~iTGNl?5n2fiJFHcyPa4umm(JYaaB$yPE^f}ou`F=8-5|HvC zb!TdJDksf9?L+#m^n2;No2PGn&e)xie@pmQ#I1qbnA=Y?r86&QPTq08Q+s#A-ITja zS=g-i*+$u<9Pyl(9NN8u_g>xKeE-&cPHu2+f1Xty`GMMlEDJ?BiE6XV7 zFOMmoe&+M+OT~eTSCx8|1!M(s>T}?E%=4KSCtnP_bb8rRwWq4GTC4g&jciRyEnn@W zTCgs-j`qs)RrhPh*DdvC^)(GU8cG^BHs-yNf0NN9-gKjhN4ZQ{etY)qTys$KWDB-s zlzN=n*LtM&bDLA!yLQ`lYRCQ#$~%j9jqgq0zy7f2L*2*SA8S7uf2!#;?yUK|`*UrV zN!P0{d%x6on|C+$V0xN+5A?S8IrM$(Kh)nnaBN^`&}Wb~6fpF2_{=bKaHU=${yFjL}K|$=Pqw-#FiI{E+&QJ%yes{b}&CaoTqJ z%Z&HT_t~?v?74(_>G=o0bbeJY>|6K*9tXcO&oOzw(-xH%OO}k5T9ywlkF&yA?3ENq z8G5?9XSHL^V{M9kkt4#n$KA@Uhn?WByl@`xtlv4mzp#J+a^^pM8UTKm0DzPyf)&01 zfcV>gV9LLq;QI#-M(96y_)qzB{44q&xbv?&y8)o+E$|1B0gn3s-~m!Jk!u;`+6AFq zk>4{k{HKD{{yCyg8yfsY@JS>g&}0*j$3(D0ht^%M))Du>RvG{BIq98u{O9;Lppvw}7-L-#&p@0lrNDzcinK zG#{@OKqFEV`bXRUwcC9B0)j%qBBEmA637EJ>j8c~0RetN0U;ql1hes7LGA;B(n2yD zckLIJJ>n;_DN4@Z+U){SO{*8p@~++BX2VnGu8WB)C@LwdXl>Ef*}Bchc(=)(y{6U& zY;5i99UR?`9&`6Vz@dLY;OU^?kkIJ!F&8f4E?thh5ucEll$?@z=WbSZ&b|A&g+;}W zpOic;Eqhs2T~k~4>UDh!wY9CilueooIYe=jaAvsR$h zwLg6E0RsOdvVU;)ulSNi_~I876c7~o!xta_MWhHw3kq%AB`mZ5h=^a5>?VV2qHc|8tC8|9{2VKQZ>te2oB-0({8e2}lDN0ETr6 zQ-J@NQtso^!Jqj_*fjGpF&RGblfP4bHJup^i<8)9kRn4n*-{F>;|shC9-ye;6>&xr zYMfo%Ojsq9sJK8-p9vhsytLGYxDnOp>pVch_{)cAIwgq*$TsRS^lmsBRmpBo{1m_g zuHS}xqDdw$2;~Tm|Mq;p=>49^SQtV(H{vq34XWUIKy7vAh$AsYS*`y38JT?mH{snf z`d*P{AK?^59Ydd_)F^T{Ik9GVK+6h?p9lQ>QUq(5v5ydYHd7+V9DU+ReK=hl;HLiP zYyT%j^7x&_x-e$f--sFuT_Se8*{({KCpK@z&>qzvx_9-y{&};Eq4JKL^@2iU-@Y`e zvi)Y7Hodah=lJA)@r+5d<)-T+4$AwHQ7WWZ@PHsRq_Z;D%XY#Qc|g&0ltNe&3hJV# zDlKCa@O)4=jiiK^g%;@#O>J#d-XJ4SN*=)^;Ju&XB0Dqp_%jm|pBYnxzjkgu;)T0T zFFrhR*>mRXiKoG1KGL`Lzn@FH69 z*bz|~cvCet7I&mL_tKNB%sqZ7Mi;X^m0kDrKTJAo&v`$Hp}jyqk8i3ghoavS&xUF89cmlWC~3U{3x z-&&Uq;UJMZP7LZ=(J+a_nESxBgp)X*nrnu5wkPZsg)rAoo0(_zGLqA*c_}0O( zm|`JIx^OSjFFqd7_J=Ftnwrjk^7Q|MaT0*V|C(d!f96;Q5xRg(B-J&-XZc6mzuY&Kng+AB9PWx#K8&g%Na5unH?{@d1ng?jzuqJW@&IZ^qNQ{dTO*!M zT<3Kq_p{VoU}K+t<>pJ|<%iMk^&v4*7h6p`#|tWF*DBfuDk?%v*0TCL`z^rd0lz# zG;fIu+*MgeA1&R{xOLKE>uIEqsY~HO2kKwFBuKzw^Xy|BJ1CXT12i}rxdn<2FS$=J zrz4Y1NpBZ!mKJ!cn^4EK2bbPx9$?zV5p;1bPPvTORFnuO5b|e`gz*QvjaH98T!)pO zu~Y~Nd<}9xl3wdFPxpFgh#_;83iqp=ewd_(k6~*QTJtUXyMZ)kh8b3cFp$rmy?Q-d z=Bp1B-9k`#o_p!y!SJP69f3=`nT1!0w)Np7WBYEFY`iPYC0bGrhuJnx(YdQlJ@Y;f z?x?7(eYeAWTbZi3Yz)X9vH5R`ycIkhUU2agaO}PI68g{-SibxNEnCx#a3~dKTHt;w zWF&l^nS5N=zP7gK(2?Wcw)$y&v45+*XHOeIaPov?u+TOh(1A(a%5+>fOoGMQ*oJuL z0az*oD>A1aX~Y#_4RQ;b)Un>)oMTLMyV!jEGgyoJph*}vph`(l5ovk)D*)_hMZ|2W z$Q-C)3dM9u;@qfSLMwAq33z=vSqMk819Rf=W(7E>mL~Py`Dzjh3Zj}iC&baY5{^}A zHbGB<*LGw@hCG?hz4FZQg}0}t_x^Cflber}UDaK@1Bwb$su@4$qI~bt8kwVyFxqiKo7ZO`RQ09?HHoIQ{0ok=VbM z;JD1RkJhEDE}nA?>3=@d3l_EHt1?ZJ|GJ*$7Me#t!EXk) z#7|m8A7%PBuodt)CVCW0pSWt|B0tkfWT<2?O-C5Jc-nu156QWD5_xw~Cnc~P4v3|X|yJ-Rv zU|nXC+KG~5J0lGbGCSTT&BKO}glF}6-OY+?`e_`og3xS5>F2SrAMHPZ)H^s>n zVpgmkj?&_?%0EIJRHCrFSSf(+6gGXLW@V1VHk=_Sc4LCOM#5+!Z%+iZx4S^rOQbZC zk|mmB)Yo|E)~DLuu7cyx$5s{N&!r)e=a?g3eLdUsD&Bm0KH6#EY-G;^Y&;fkBS1)$ zOKOZo1T% zKG5S_3Mqr!Iy8X3Ml;3<>Kcp`^7(vf7GuIM~?p6ec*yLLrQV1?a=_+GFI-V)SX zX+vpntU;6Omdew);gwaT_ybI0>UoqDPSK@%A&tMoy@`3D>Zxb2LT)&{zE+{GcSd^T ztLi;L1Ij~8^L+Yf$EtdU&nB+m`A55Zj%=mqn=(xg@ej4-0wEukD@f%lb?xsZ#` zjzeaxDsAKUgN)xFuORFDC5-%hFYE2J%}EwR8%#b=94=xZn*RC=LdygnC(55rRwumG zK=A5yH=IAKmz!!S6jpoI4vb`UwUT5x4mIG8+l=s_xAl!;CAb-vcr+g!{N9m3(17wg zjz&s&&nm*2&btRD*x@@aQ=lD@a|j$EAgHxU8-cA68N(zxiAuUksa=^{V9v5GyyV{F zc!0!~aYZPKK~Bl#0U4G%ar$pHHgZYk`-A8YO`NgGz7otqYI;~ZdPGBfK(8juTUTn+ zf=5cfQMtvr5lCQ7irLYIP9RA>27S=d@CHctts&l?*`5l1q|f;pFl|%m_syf3=+?8? zuTbn;%k|EuS)Gk`lX~YSocgAE%nger-UPX(y1dE!{5i1p-V;=NWCl?H6QnO{#}r}R zfV#jEn#Wev%XAb-NOpmA$G?`Dxg~1Eu6Qdz3D+-rG$5lT* z-5#lRUGe6~X_v_kSOUxJrDNuAvm-b@5FbNdor41}BqC~U77`+s!=HT(AXU(WbscK( zLv*AA^G(MMOD#y(hpEs2n$Z_Bj2@cUL#njMb&%oyzPUyxy_=8ypK)B6K9})QJMNcm zVz11vumhdgI3Cc9SR~qQQuRuFlY9tC+ENQgfyMLKf+4DBLALNvG=vA;502ee#z}?uY zh53z-usAXc2Tg+)C%fX88v1&TF*0~1D33-?QCXK)YVLbEWG#VAOON#Fog?R?CiEV6 zwt7e@E(iwhCHs?`NsxBNoCn(qx(JK&G1)8*^n$I=k>Xy(YcmyD;b7w2WFg@LhM%wz zcagD+IhAB?!PHn_$S=%GFcZB&k?R~OkjaUP^p8Sc!|ybTm2z^=pw^i_tgIlWhIvRV`kml;y|0;cdU_O1bF@dWO^{)n3WxwPXfGK1?l^o_@sx!<0Tc#a;p+F13~NiFKB*3i1JMRqF|^q7FQh{P|8 zRab<;;<9W-&zar7m|us9)Ps1nSFdZbck6&-ZDEsQBLguf_g|;k=&0T0r|dRD4aXr0 zs@9m5$7I9eZYACv8>Vno6eaWdL-#pG#(tx^=RR0x8y7Io*^A!7gEZwHI+g)Kdt9x@)S>c}ol<{BHUG+|B%JMP3bNXId!-jXee4OpX+|O_O z;j-&-*2(hzk{zB-0{W#t#~`J&x-S%TIZzC|<=y?*J#!Db$uG6IB=ehxYAJ zRJPbDT`L2J$DXlX(j~54$G19n*k~(9+nSZY64uBt}hW@lsxYj*Ph(T)VlPv0**0CYpv@4Mwi zG}B}W@%JZ?S7e?dzPjmUG*eOwi4VNu0d!rISca??6O!B8Bv|zw`Cy1hqS-G1-oRH0jrXDfXQVZvj0e=FJVAO%9=fK zE(GbEI*4>J_wt((VsikImRiq=5aj#sboOvuXkF`n!a5-9u>#-XcH@UKzuC@>2X~sy{|fLiSbRrzOqkhv zb=%vi0ujvzNGQyFaIt(6(c~*sM82~~g%ZYJ&lNL7V%@ZLf*K>iAp5ujNJv59*YJ1% zvNVESu9+Sfv7?gG2+IA+;}eJbj8AOqU~IXqMu`N8H}Mvw&GOCcFqSyCwuUsKNVVJ! z=CoxXjmq2xhCwp@$XI<6FRpf~c1(-jFv_pK4l}HAzY! zY^bkG`LRN+e>q*BYr~LI^{%PmE>JOwP*Cg4p4>|TQOXyhu9c_^ea%ywZai@I_uZ2( za9(|RC21|&GSj#ArIfg*J6IY2bUpUek=#DT*>&$MXZquMI#$B#kkN~ymtL#&L=GQK z%gox=So+>((KgDtG?9%Bo43linPiT)$ofV8svZrSYx980NFMNVkiOE4tW&3)dBnh+ zKE@U%&P;F{o(e4eNYQ!3|L+xw80QM&h1`b_b#vN`jp*N*pWJHQl~aFzLq}k3J%p^Z z4c;zmlZx<1-weitBF^Kjr4myly)l|`LZG=x3e3MvWT515Rc)qCq(`_&YOX?7xYm!7 zim>|e@+iceHg$g(B3I{8AJ6@yP+QAv?EP@Nd?ysgFqsbrgIKnZe<6;{s3ezuowd|? z9WFx8X;~1OPG@AKVwB9W@-N5qZ&)fpn?`~o@%zh)g(8-(I5NUbTJlld9K;8}&9?d~ zffWfwm7cI0et*s+WI{4|N0QBh36Z)9|C>hc8#la{<8hlCY}fhBLYp39+zq4 z{3^IF<{?bkO$jAITKY)1Iux5klEGh?s41E622pmAk7&;mrfLr150c5f@4YE-4SDfZ}z?r-W#NbY1>L$2K9dkq^&Y}n*_MoTZ z5vrVkIJV6@ct8MUM1Zz}JPal*Qeh*=e&Xe!JCA}VUS_mKUWF|No0K@=+y~DZ_tMAE zExUK&cR(2>A1{`Aj(ml%`+LqihdDAOH8y=&W`{}WJ`8he>Z|5juJwK-AZDd`W0NFK zds3e|kujl8491R1uzo@h!3gd$>ADG})}{S~Aw%&7EQQOuHHrif1i-0g4KXO3CP7qx zoRlEQ%zs1gB(^Hl?FMJ+1Amc9o5NxvzmY&DX>}aE?>jGvI6sfRF@tAQBOwVuu>&bt$k0-gFQjGwIZoL{e(n#=%1mnVO7*l1E_} zX;_Qn0ktv8$#O`5xM^n}M~_Yth6q2FWt>f@URELb$~^@yK}zCzbkU_EY>flYd5e8r6l^MQ@I{oixL2s;t~T)?}&yV0zq zdabrZBPW)n>p3EFWL4_#Ws1MUcE^>oZgMI5m>>)vp?l(G-CPCD(1-Rxj#VL%x|Cl)R&6woBb^OI8TIv@Ibg z_UYFVhfqH5UXLzfwIU};V>=IcaS;i)^hlH;BPGQS;Mj2!@~Lkz)rm>wp3GF%o}{)w zdgO?rXPzrF2vMxV3GbxkE92Sw#%^D#JuE|KX zRO3cLy%oXmX6Q&cE|pqed!LLW`hv%P)f9x)>v1bfi)OtnON$(?JP92+RN}v#<#qG^ z(_t5(@A2FRi(X?Ro$_ssFKssM1y)C4Q6>-2d4yQ12;%T9!YATd2}cWCw7iNad_lw^ zy?dD0Y=W74hdGVmy1_E!?lmAFQMBWW3I_>9U9S!mX|vpd5SKafuP@{v#!mjvhMH6) z{=^eYsq7a;cu~lP*}=-|-X3{7POGgEnWz$wh}-USMKg}v55kg)_PSMA-*}Z-v+Z_-LA;lz zrNQ|rh1}31502h(HtL@Kb~|nHL7}YUk^G>mX@#t)>}{DLt41S114c(|h__0Xejf46 z{al!PC@X$yAM<8pod2ZA z4NS1Q0An46{^lUZp%0cDo*mx^`9H<)0oPU5Zy(p~?cZ@Iy&_C8yVjtl)qN$i;?0|h zo&Xrnt5T7UFBJU#LAz?+aG}CW6nyslSdF;87H>y7FSAH zJpaJo`NLsXTKj3-cEM6>MbDnB;JycXwr`G>_GInpFLgay`q?O?Hzs7UuZ%9#NeI)9 zoK{Kcs2V)~v9)gNr3kH8H(b<&Z5F)@6nDrj$P4u;2msGT1h2VJ2C6$P_SZMnT>Cl~ zzvaGWNWjSFO=-JSzioT=AvJsB@oVvWR>vJCaz5l*l^CeHo4k zo=Bdk38GffhB%u^RVM9ykcGlayrXdq^OFk=C4!rTWg=e?PyR#{ar$lTR8VTxBESMEb{F`XVdPoCSd9y7&I@&rfvoLK^=h@T2$4O7hx^o|znBMwP zU9{j@y3Nf!(`Bqw%$8ME!x#y9Bfjm%NM&B+HH-Ob@B4C>GRwXf2io@q+&nRSM8y4q zxPiUA@Z*Z<`V;Z(1s5+x3N@~8?A+c{93`|r)5~t7+`8{c^6!eY1B$di&8upccZW>4 z*ZxY6sOb-(TluWX!q7^OD~_lQumzn;;rAz;I|U@=<@e-Pum}dSUq@c z`6hntjk!mSZ%c)vQAppn(uJd~9tkRUFJ0O@+2s`#|6Q(#5b~;duYN=DlcLB2QQcX` ziEpoB1|Iru9gts5W^^9JBYyGqYL3Cc`HQ<1ctCZ=+_6bEN@a9ZTFvw`g}sXt44oMl z=qJ7Dg3cEj|r^g5mg#KtF4CqE0it3}0hQnCBK50uB zS)#x7=rs2A6}7Pb$BYH3-jcmmN)Ie!tr|~_91F4A_$g}Fjrqo7cng*6i#~mf75mk7 zW;X(`Ick% z;Md(R{_^bHu%%VZRN>Sr3kjYNb}z$u=&oj8O=jLC54dV68uI)ruJE^aXXu*A9ec3- zt|rN|PhQOJ?7LsLhK9DseTO0{83XT5_51_{)Gv{6N&uzMCHC3u64W1W=6~)Pf!DYR=!)7hbKOq@szF zINXrAM=u74DBNm}iP3NMa`my+Y*yXnL#(%++9^M}olvH~HkhEVfL(LVpmxjJK`&H|a-Q!;KKsbcOY+||qn!LA1p^pL{)gr89&As-J6IVcCy?PS z9Q~K!n|kd>G07ZVwJMjA%KTq4C%o-t8>>8P@=V`fI#oH49`?gIB71@F=4IaxzVi=a z9aq@P#P2_DtY*Gh81r7JTMi$~=o|Xxa6~J)$G+GmbFb#f=}mhiZ{92}*W4=ktT;h% zy}i*IB+FU{Rh8lzn%6q68jqIh>o>}>Le9tDA1i*y!CW}#5T^NJ`^SfFFLGvAnspr(3A*A0SzD7kBC4ND-X@h@9?8?olM2)!i4n0ou#vDYDCr965hTOb6xW)ry&UBN;# zXBF86uR#OZt?0)F*1sDHQ-qlrwl>cjP{15WxItDS5EyT4S z|Jba;qY)tSn(!6N3dBASf{~dzT2DC}^Y8eek5Ik2|1&8F9Bt+b=Sk3{3-{i_To~fN z7O}pN$5Q^T8flUTq+?%PjHiU@i$aPgs+r{ECKTrauM4Komxq##g=S{GbTNkF1_!qA`O#91 zUC%kLppjK5C$xwc~HG2Ds<^x&5;RBLXZI{mJ%LtP@Ga!rX#T0#@3!kg1GjL+~*i@9&v$; zF>5D}Ub(|ULXpM3gdsF^0dZY(N!*>=;G0h$p{5k)NVQYkO^d9zNGPrjfyI4@&vwm2 znn6q(w35TGzx(iJ3KCod}>17u})yS)V%Cl*4r~N>NwGxj_*RY1rhJBYHB{C z5Wfqg%&XH>iOIgQkTcWY8S18!#6vGL{)eTRdHtePP@Hd^i!` zv>8Ws9yFI`826cLGs3(V{TL@S-FtE;U0wkkcSs9NWz=!x41VZR_-2trx?OBpv0ObO z>uQh26$wV-yxy6c{`KJC9M$M)9brA>dAW==GBs~#E^&n+p`F=F6RP+)?u|bQQs%H3 zmKu;g9gTS5eqafmk~r6>1uoDtS{n2doA|-XdqJj=33x>sMcj@~k-!mMOx%2Y^7K@# zd(WI7wT_B1{~-~~nSOjHx^6&WU|_&~fOX*l=;h_LU%sZIqWVa4czC#An4AI&JWwjP z(^_VGl#R->sP?j?f_(ySiNX4->&-n8&+Hd6G{uTX`4+V~(vyGbYe8g05q*6RvFI+4 zBgJlZG49`Rcb53%{%jBZ#M~n{FF;#~oQK*RnFhGazk{?!Mb`=uz%Il|iCazKAe!v@ zJp{2Sa%7rp1#L0m6g68P@VW!hk2ETHAU@-RhLvb~^y_yU_cxQ%nToLU3SuRORgvwb zwc-wqN*iR$;Zq*m{`w;PxZAR(Fh!S>jCu0euH$6gjpav=GS8F<2xxCH5y+?@KImw9 zNLU)?o zJINyxUZEbon_uQR4H$XPpPFp*x=yNvZ z9w|x6)^M!Rc9GuSQlYrtG~!THW91~S2ukFZTN-i9dnv(VvXfpof9eE)#M&`&2p;L0 zyHv^vV=kmxZpMuh(^TSfQUamKE0d`xiD_4#;b09pZjQMboqKw+d2wbfi@Orf@r-^v zQ(J`#a;|?J=QTjcf`%&y?U?nHNXp1{9srBKAcrb6srQ+ifrYay{Wr`{6j>S+qut_Q zE>Pl&d+8GA(ImF3*>7^#a${@u8=>-)tA@;a`8L{c=35@(rdO z^Q`Blz^>Ml!E8}m!yFP^;qjyFdrFIY`oUx79?vVT{h%JZ>zDjwd`rCPQju4LQj*h% zevq~|O1x((;v;mAi72`>REPek%u2gEtUdTA*Uo*SF0hHhJ~@p=%^UA+^ee-i?xjUG zH*^WkXzcEt@2+uy_KpM*p=}{2H+t2^;9MWuY-U!^*y55I zTH<}%K5XqA^!>aedrMmXHpj*i+ifAem9y@y+{GK1EbMytbG`_-f*27wx}|IK$1Re~ zcaR6n?Pu={W!;(GUEh=(+_Ztx)1*gi^NXZwH>3>OGLIDx{Py{&SXWyWmcK5x)A6HY z!%LHq!ZFUrz{v`I#tIb+X+3E`aHb?vJEi((f+p z@Z8rfwg5-x7F+>)TP~-UjrfE-H*$11tm%{XJ8F4tYP|82Nov&Nxvl*ln7$oi32*(* z%20nCE=d01pFsb5$R>?^_t;vx*Cm3kx@lk3=f^7R$ z^;NjO%vb-MuhpgQr0l5llzsfe8&k&z)8{^1%&Crcjenp8AplKytqok$zcx|5#@U?X z_!@Gh)M?Kfqp400g{^nTVXnHh)`vot;R>fd1@t@yS6I>0zZFlh(j_AHc194!qZ)|K zK7X<#j@z1%G2z#Dn$AP0!aEs{z777;PvC4U#JLLBb7H9^sC=Prd?my2j$umr0-0sd%Nx9%f!)3>r6Hu zn>__r2ql#!u1yV;oUuSZbIf~u*|K-Uy1V4=hrPbCJ6K;_q_9FK`r@^fFr||^4DN%i zY+JfATR#X*@JaC*AnEIl#&Hi|mOo&)e4$?Z_^*l}AJMP`__HY(i$~;lT_Yc1*KoEJ zVj(ICBiOYnjK3o{`cFL-LC)9nVCn~op&ffWJR)OX{{8?l83`$tX}(h4mPRYAI%&xN z=uR79bO~`+?liZMXkCb%%kAvSoFuJkEn<8W;b%KbmXtwlc;5x=ax-y>59>78iQ&Jd zqJCR5jvom&%P-XsOM({Z-zLzDwsYv?+3rVb+2@mQ z9}Rf1ao=Vd9E9K{%SOB6X^dRskpk>TNkw=I*ckP5e(SNY)bvfz*w|1@#~q{ED%Ap| zANF&_Cs8@r=f9FSnV;MAUM=O_&lzQPCHa7ulgF~|-ukd#P)2maU@JkGn`(~0hqU^P zR?irddhmNfkwy)TEM+~lf6M){5A#NeM_#)N|LAhMm(@c{zj|L;WrcW4=7grs@6QJH z_4Re`6_Gn05}ajv8@;Au*Fw0LNs%52a1UW~4_+U{Ff3T)%}(+Q2{C#KpOroLH}ox+ zUox7NIDYq5K&Dgbjm)J-mAUz9`knkxPNj>!vE#a_ zs#vMvke>H(FDid6D+MKsO*ed~zW>&oCi`V@)&}P?w+tSl(ju>I0vTW1O2bCd-}jq4 zm$zi7nbfD+zOa)jv=>bF^XE^}J8;$hTc`Oo6@Qi3n!O)$4><+Zz4u;{JC?cMM($`D zhlb1*B=q|4?K2Km5}W;ytv)$4=!#(*phl2w<)g@^N*IFg{U%mr@p?#>O}H)sjVpc% zEH_bMi&H!xhPWhDo^|M7T-*hap}t3R^}O2Q>f*x0e0<~l&k5aetZ8OfDx^wrA1TJWK?yltBF&h1m0!mwj0aE-)4GMQQRhJF<9qjgm?-uo zcwj~3GvX4`Zei;_WuLmY7ZU4Y&3ltck75ab=1m z8#i>?wQ6kY{}r*E9_`j=Y}SzX`ik#W%oZZO0doesc0gnv*)vO2g~euhKsU0LW)d`? ziVVh8ZUY9KBsN2v&=Pw8=ccwi6AGk!tn1n*>-0 z5T~Xij>fqH^>@<% z^S4tO8#s%VGe1%3xr6+~H<%=0E*q_BR|1jSk4RJyefEhhR%6!jzioea;Kls`tbyLk z;;VtWdG(FpPq1?$EdsXW*bi)fR-Wj_v{aW*ZltbS_za3%`|v_}-e=U3aZ`e}T|<9U%NJbP>cFw=s0+j#=7qpJ zb`pvyMfp8+T!7M7&61S2r-z;yd&LB@jP~fNO*%7}(gm&+I6r@DiR+)D9q%%YHy21+ zT!tj|e41`R5^LxTgb4AUb$V*Z!0ej>rV1}gP0 z+4ivvXWdpSQHZM)RjQTBFH(8*DvNbnuBzP2FhdVN9HqRHApot|GW&0=s9gSfe8%hi zM8Lq3x~*YkdGKKQE8{oc8~kb&?ACwP`Ta!nZFrVe3Z@!d=-9EIDgMMeuE<64_UTIl zit_32bWSThyJPs_Rf*WObH_P$Vo@HFr-v6LqEtVA4cy+b<82Vi;zMa$U+2rTCb60y zKfW4feDL=w&oVzIX+(FCH#K4!h0)56IrQAb2&5OpclgPBKeny$!SsjKW=Yz(cYPWr z(h4T3(TSR26G=qS(FM{W$DhX~=0zc2^&Q~eB^cB^etBz4u8RamhFiuVGWpl+o5!u&9Gon%a5xolrM1BiA5tt2Ij;4_%U{#n1q&U zw2F~3pB@}EMRc#MEi)_OcBL2LGk$udqJm?xO;JX!)}PjNZO*lD%xoH# ztru(aufGNO*WX?1PEkfA-~%WH;!r~c5@r+XzaoaUfWKgWZ@^W-ZDWy$LEQ0F;D^h< zk=#3oMC<>J=+967y$PqH<~cXRKr$?Wei8~RKu16_E33z7%-S<@sEd^f`LPc{8TLID zzU-rKpcC|`92<~5SzI4peDY(=)1MT6!e)*WQ$4=e`g3Dr_sOaxht0F9@a)d7#g|i7 z*^}rvJ&sF3=xz^%?i1c)BV9sm)y&Obx+J?B&ryvIJ=rO@%l1RCA-P2CB=SMpk$F+xAy%r1UI1o3h5f z)iplv+g`b$p{oAcxN7R9qHOJe7;SfoiV;_rg`}2V4-Q?+xj|6C8~0N}$U_y&PFyD{ zM)ZGvLmx>nB=tpxPY8T+nMVuZ4VaM$ z3kM8NYm=M?Bj?rosug7qxZCo8T@d9hWj*A-yOs95(IPi$oljXO&G2A`0CrbNO3NZ) zCI*D;-CIvG#gUzH@g+vVF{hzEvfc0iX=$BD`(6#dgcA2BW~giAkLbvRwt;vtx6;5* z1*VnjDTFpaKxF0ffL0CeOU!CJf^kqcxrnnhRWfhE z1ClJ*0mQ|0@*RW>WMH`K%>xnYb2Jb56jTB~55O#$exQI92_Enf&jTz!aSs+!kmL_K zbK(Vtv&1c-FhwY5GT^9cB6X5-inuz>c0qF22*YU3Wbl9Aq~CwG`0vT_J@TD6@x`a4 zkHyp2nhO*pxp4dWPJPx!Zbf0kD+`uWIY+&x`e)YV>YR(L?hW6I0T~tKGrbEvJmB!F zwi6=@35!YO2an^9I5mW8^(QmeS!E$<^XHKCs|Cm%{_eie9kyb)Y)O$_q9~3MdL}@( zjAWv;xwgR!Mv4+hPB=?=KeFyk!X=YtPk7@Oc>h}RwaDKN}69`qd7W*y>lAdp+)8)7bz;+CUiuK zYUGuW2l~?!6Jsz6Ay~;}b;n_^0sSN-5#4wKazrwr@PqYeYO3>vk&hlPxgy;7KN)aR z95wLb4ZJLE0cGI#InFRcmc!02Yp-?R*L_{r z{T&_bkL-f%!W6g?9atA_qAV*=ilZxo7IYMT@>4?D5?hUyLbyk_AI*P}yIZTSa6F=s zo~`SYzdRn5d!jolAMew`wSUllq)nymP}sF+`3=Py5)%8*I)7TUdS#xXd?D2QQu?W9 zQcAn_8+jh*H*%#)LVdP>JfgVcB@!y#ve1EPOI;Is=eK22ILDLC3?Hi4bw%LlUCoYM zzmPfaH7@rp}2WZMY@SeM59?rO%KWSQm})n`9Y=k?;g9vX@0zTaQObdq-#2F zluCKkiEz$lh5A9 z$D_#CtfbP(roRsGYJ${nqjWpC;t~4*`!u`?r9@m6e?14yTq%foKtZN1p}EB8>1&R^ z!nV_Z`e`P2OLIux7)m1?Y0^ju=#J`;*XQ4%!M>scRDMJe=C^>L#!hIVvJQuVl{Zxx z@YS8RKOY+Hm!s-+L?z3YP$_4FxCZzRe$4VXUksF-xLwwRghg{8Je-9JLY%|+o%}ke zmzc=!0Nc`ExTA1mo|gmq?sDv`<%(H}g~_UVxs#RonWF3IYLAmFPWBD&cS|}gr+D~- zYt#l(IrS5y&W&Uu%HbwpqF4!3Wa(+a4b^tP%8cC5C z3H`8OR`KqYlX&~8NC1}m?*I{h2+xt+kY@fA$WMiB52gRZhl3kX7a{dNlO>zACDJFq zyHEd2{?QUlrDQHPe-RdCuLEF_?yH>}$?F^L)a0Th!cuJ{u4>k6-q^7Y^b_JJ7HpM=3o z_Cw6QI`Q(V&Ygqvtr;qua|-hJf7*Ea92@N4Q%9XITI5U=4tiWIt-zTEhaD0Wc61z8 z(|VC=9=L7DCTtS}Ed!g@v!??X9pV!TvQ>}7cUAu)UCk~W!mm7K570HmhOccm&Gt{- z(xMTrpi<+6YNUvfr3x`0>-UwEvJ{flezaSzZ}ee5Mz*6*?9@Y@<+{QCOvIS!tZv?v z!m)Qf4(2MwKVvwpMw;ZBCvs`!%3sR5uEeO!`EANGvcKOV=cC>h>u0nDqZEQjfUXc? z6(qZq`;e&o2_t>)gM$no)w3}x7F3yQPBVi6MH5LQYu5+Qo{*o>z5PgXP$tJUZhB_4 zJYZ+ClNOrEbx=&H&CD&LkfuvGhTySAk?rZwR>u>e43gMHhFn=Sai)^$Fqh|=?fCuj zs-NxvJ$21P@rmCdJ*9=mv8x{QRbEe!s%$%;0)V!1HOtFk5^31WA-wyv|Lcj6Xx$Ky z6Fl82<{6Syq*&YhvyEGtrsr@WOa1UghDFgX1vxO`b_sAbnd&AGqZYB2;2n?}|0^@J zU~qa#rABq=M;H|VFXFIYbCO0LjB)Pdp3XJBwLdF)@IbbEzQg_=v)xY|4V#~JpDJtJ z{jH|yvVK-c$$5FR+#-0a9xqd!(AI=kXSUo6)mlF#XW{MKRbG(dlWH36t9XBHO3-<8 zl8WNaeCf893Ax)x5TN8&Z}b;pW55d$sJV$sS?ZvFCUGwCKi6r&<6}iq%|>!mvRd}Q zWSwNyx11^}#@aFYedMKHjZ}~DgtTC(M=o{IyUJrYedk^}7527C=t`;Xr~Z%%w4??) z+z0~;g|Igr!`np>faostdA=P8KmKWiI_B3*8`#i_+02y+0u>c(Wc^x3nrB!}znN!d zT`~2GdhVUdN7cf^>RqDhx;MMrt_*3G9~~XViSeG}uCj(q`j#mo(|D;apCvULwFAG@ z0xGmpJ%5(PESU+s?ItNMJoG<=ING@qu^KpKx&_nleM` zZou@!om$ZrzF1#?!9B$jxt`8SofX29Nz#L!sjBAYpK>3a-ia*T756Y+W=JS2{)@}y zPMqQOwG2wZWQaog?#HKA)@pghY1f~$*YAxlChd>d^u%_rqVXPgmx>ce+wt5P9!C}i zVUuz*5K69GW+^`i*rsV()kn|hJ`?6j`r(5%sqMacB)0ZYpNOg2XJpzhtDliW@89P3 zp?trI&a4!!Ux#2m#iH+Pg80#6T333prtISS_^KJS^kuoM+&@Pd?8TD&Sj8 zQ}z{BWUG&q0~M)R1Y^u9zb)G>#Xhg->*)&4eezkZQ)zvpB^iCtRDbU=eIq7K{hMGn zT)|NVrT=Z2{qV09t4@ujAs>^jfeNA^&Feg7!glea2@y&0EbT6SnPA_0ErQ);hAc>q z&_iY(zA>nOo}yuxJy85xAdsK6Xn;w!SaA$N)bw_E*Qqme!@s-*f_gHF-W~dj7w4V& zH9aehqS&^`Z`YXf;rJ(N}Jzet>cSh03+4YT$q3kk^eEYpVp#`Iyw z3x^~v9M*aI1?PAruRHmYoYCj+7xM9?MS!Q;*IgYYco6K~enz;%{h zF6=Sno90yd>>5twp~RQQEqa!Q-CAf?oy)@VwiaaL{W-64hU>#z0%U7UI{bosl-{1Z zf9j6f?zmUI&tBxMAFDPYC?%A%%9hpCY&vy%Q_Ar3aBJ(0Wx!bO$zKwSl$j&}Ub>N_ zfB>RD2)BI;H)8qhic=8(uaFMj{R#w6DK)!5r$(o4{E9;sC(Ffyk76oE`B|O&hV-Tz z`d@gWcOaqh3`_EHo-_IU-R`qVl|fG}JDak!5)=>Jz2CH6wV2dM>o>cE{}!Smv_WrLi{kOY>C> z!C~d^MMc=iznHx#J;>8Vld{{Q_FMcadowVZRCD)hr{T=ECd}?|5j(cTV>&I$Xd~+m zX-hcSo$e>rA?+3#Chpv|Z1B*U^Yxqku*IR5b3fN}sPyQ5y% z*oG*)zoqo+49@uFw7zD}KQi2JO-dtvh=^`aMh zq87u|eIlh9s#-9(!b6cBbIdRr+*5r^Krjc_IO?yYpc-ipB_&f^YI0kX2u;pMdTjNL z5|7uLU8%5*chFlG?W>fi4*9F7%wo3RAp7LN%8k`flar}=FW1#IH@otEz6U?Jl=3b- zeP8uv#z^Ov_R0qFkZC`Wi_XCd#I7s zhKp1t-7Y(?W0NVaBs$%X9bCSx%n>+zF?$EL7@TB;54X5X4@vmIXS zw|OB>CtqM(f~VMBrW+lU|Q8(@EXtHUJGIwhV={ezY zuZtnAR-oFbn`X2fXa8+}kBVVL$tdsS@n6Qf`&KlkGSSr{2^$}`?HnkyjN70RWFn9x zk(NE(=d4y&)twDry_)B}^JC7)_y;sZPrq_T#<4@PGV@}mX;S~A&x4o5PRIW`b9Wfy zk5z4O-qv$NTY6be)xxDIq53p2-sgBy(JU?KCTL$E^g>gxg3z33sG?D_5rJyM64(GH&v^<`M=)RC7+| zb7qPwHZF40)6TKDm>k7*DK2lx%FloGi%=s=^WW#F>-qX6F>bxESocr*jJBxN(pF36Bem2};SH8>S`2tfZXRSTcSEo%f zgc)+P<~Fd?%Snd=@lZe}T-CJ00ZVAst-M%K_bS(Op#T+$)IV^tbV&TheBsoic!E+@ zW#B?m!uNvE=J4^D!@$$WFCoZA$_Br$GyM)luAz_7Np>A=sZQwCj*UGZCCeUEzK>OR z&|W;Hc1P1kqO=dVIV33@X30|lCENoJH} z$lgRrT~CQuxe3WxF)o{y)w`2jO{3qSC0eDO<=T$CGwWvfs%2x2x0lZNDl0dA-P`@O zwBor*k|SC?GWT#dGC@E4xZ7&d2JzEC(dk;+V4RvGrJk|fxkD{4uIOTx>w^zxkB3O) zwTg*$$~ivQ@F|*C%d#&j9*y`lV*S(gKDN&;%WBwJ*G8e~((+Fbq80zDgKbBH=cLOY z7)Q|j-47V3xRpif{T9eMVoLB@76PKPHpsB~x`)E>PV zPlK43DC;I`e3l#$Ly#HEBAtBY)FT?sjQ1Egwh$HIwClHKZEOZuv<~qe zpqBmk!@Zmb{~K*tPz1_PO<;2}(+as@cut7QaQuud{a;4~ppyte)DL0L-vXCG!EV5N zP_>!=4}?-``M+Gux_`l13ntF4&a>|Wrt^koB3peLT00T&7vdOHuYmefNVezzh2#Ok ze-x4*7A)Z@Kp;y%{L#lA7zg^;89-pnhZ?NcP=9T5^O8I|-1PCY(Azz%7veM)PqeRm z;-zR}ogz-M8)?3KXx1h0%J*khRA&8DD9<1jE@+~a42KUlJ=uR>zP*)aw``QTI?g0f zQ}!gF$ym*062$?T>ULzI7wkPS5g)k zsCl4b7UI3)H<$hv$T-S3<$CaBc(O&U^cYx&JZ-EYwcT$YGs_aOP zWE&sbx+;q*xj`9^gC4&WZJvj(4PjPUh?NN_9P#&GU_zL2)L0!u{P5Vo3gt^zQu#Pj z-Wq~#%022s;sVy~5~_jX0sZGOGym&L1h~$i44_u=TYxC`TL2#kUjP~?M{j^DD)M=v zOwu6YzYhCvPG7=}##S%iF8Fr0Lf!eLH3cGYKWm4s4L}{zfO~jW%W-eVQ}El}@zqoS zIWRS5h&i5C&5HdkI*DU#(o=>t1gM=l#212tT<8<~&J=Z?J(RFxyU7+`3IRI1{P1lR zVeWN;DKp`gO|OK}MC;|hJ zgAu%4F=Fe5tR!2*C&2BI;JT3-hZr;;J+6d^soMry>+dcLJ@A1& zHDyaijlEh6O*PpiJ4Z5*5=$MBySFacw?nI5y?t(BNV<3v zpbYxmy)_0k6E>^+$4!+i#<|0x*KMD2Z}VQ_g|M-sD@{eh#&8PV5N+2>mM^xOtPaS@ zdNS-ha@pQ&x8yeyDUHL$Ctt5z+oUZy*g02yL>t&>Vg_SSgh8OOeaO6=Aqm1o$h^EK zZoxaRfJd4Q^6}a$mXn;jYUJF-X=|%72rNE^FC~3K!^#E-*b=Wq@`F!nxhb@AoNq!# z1}s7d&pY?R!7o{bi4>)^Xs_hgKx6Ro|7DGVNZ3DWyMMUPlmL159RP;Rd`68DDQoXg ze)&BAe`N5R;M))j$>^bJetRZgkOMgO57=ujMfadzJ=lYs!`;U!PiCRBzZ)&l1P*a)i)v9$W;-6}BU*LAG82~$- zNu!-izX+uEt9psLrvO$6h<|c2Uo10b(2%;3B&ybvJ(v6JXHJIa{@Y(?(AJoAM49bu z^5`U4B@3&}XerFtP359o{j&S9Nvr$yb!u}R_SIiosk)`~z@qn6)tS*6?|S*{F%$K! z2@9>HPR=|5y{we&tusF`J&qr7v9P~UK3|pmdA!?tl?C=3uxUJTAH{GGru@v*;V^$@ zGK2aMe++9$ZN`h&e9yfuTlx4VE8glv4|{W(WzS0!1E<>#BXmu_&~=WnLD#QI{qTbi z61h)N>w(M38ftlW-($x=$qVW-)XHNq*Sx6s1`K~jQ`59M9M?v~`2l{xACC+a( zNAr%@QFHOb(1M=>jTe`(^S3~EyY?>>(~_{d!)PDWKM6LQ9AVjafaC`;FfWYrm!KEu z&O`7xdlnowv=24o27Cw7Gf5@DeqyMKZ!vENIBjV_DiWAb7TJnmnJyZm^o%y}dyMwL z!mp;QB?)v3xuzY{)lDHyRN0JIVeW@_wz~LT+Y_&L?XkkKB!)%1v2URC9-$t%lj8t$ z#t0F!Tru6qI|R{5DcSh!;h#BCD{D!w3cnA2R_dM=NftO(FHcR@A98e*DOPv6D|1%k z32eoxh^nKjV=ul5vukkr)EwIGh|3>B1 zEroQo{41(&iW5IhX}8U*`Hrk<==vsgqZO6Ed@f!ZvWy;rrhm=hAMsnDt;>{fNZ2j8 ziCyZ+S7c@6U0C(2A7-WD0H<*jC;wC&x8l^uES%N~K9&Rg}BcGg(_ zmyI#O5-bRq-qP9G3{+&D9IGe=RcbnKpf2XqYcU7De?9HBy7_P^)!Whe%?fHjgKt5lyYub>SbJ$D-?n<1vaq2K znvr+|in~g^t0c}Ie9y=hChh(WycEu)_bRh}a3j^5UWDPgK|7?c~}Yabj?C1 z6oxB&&=()d?Kf9?oOA!PN=|k4yECsnGVf)-i+iT@i>lgZv1(sCKh%+X-r{yqASP+N zf%2BfeW4HwBn7!K&{D!6#dpq!UQ?CP$Iwn1`6c5s9{t{aZ;Gs*iyzxb<{3vE^9032 zLy@WREAiYDtOKFJF5kEYuP?)X=$e45@^kMC%-q%5&+7@8^N2Y^;(=C1ms7*@pT2)C z+JlZ#I93J+k9LS*ht79bSU9vcI^3vE|CtakqAMHM_pMYgb!)M5<-@G4Ee!g|^&LZ} zwfg-uT=c7ZJcBi!8`CjVtA!1W$eCysfo>Y*hcsp~hHP1g$is8L$lsQUTZb(WF-zVj zzcTAXbL~HE&-Yc^%WF?gJv&_QFB{yYR`R&0%P*2rCDnpnZ&{6w-&@I=4NqH@(izzk zy#(zVe0T%tZc}wv^D8+*wk{>uKtUmZ(>UD`POA!PoR{$){F*lAeWp&%PGdl>QFkqU zCN;k9W$stU{^ii=(Bnl~1=)UOW;fy#I>&+&NpU5wDJmR$?pa<6&Wg#ooUjd0@s7Z; zx7;3MF9N#Sg?gya4x?2fJ?E!Aw6#5O?Z(z(s!cLAuIi|7gq;2Ufa~Qy2E)$=g{b@H z8CBV?mQyd-D}8tM87{B-&YqkIdjQ}i~Meu6f zE_M~FTjyRrk@1-?j%a)5tS9zERH8IlvsCvpf@x_WZ+Dq{sfYc!TI4a-`NL6>J!y9L zDngU(78kVo`gD)VRQ`OdKHGS65|iny&2%G-6>ayCvb8@S9361=jYCx;l|}g$8W49Q@)xC)qxp?i#GI!z$Zq597uGRn_)m zMv9{|Z0(6_Zwg5G!nBflTp^Ps2$aX;XTE#nBwqP2l0 z>KSMxsP@L_MXG6dk>gp%Ay@UzDTjo2&C8A)$uncuBel%qU6p(2feB~{IAQu!kJSa%CYtisO3i(ZnJ08p_m;(|=y?jDty$YM z83<8NeNv>6iYIkvW6dI^dzQ4rm=g3ud^y01EsWzGNMKikMe|2mPf3UBH zo+Bh|yDI8R@Qjem&(`i5+gcq*iI+ z7p61bXR505>ypgY%=yE2>M$xh^#l?#4nYGTKV=Hj`z-f$< zWUs_jXZGE(f5_4dx~>RY_?OWvsWiRlx;ZBI2@-q^>a(gRQe zSl^*$YShS~Zk)BJf5Gr&PrfX3=ZH6dZ_li2P4KJkA5T;-buA@%q+EGl{e(UFa=qD= z%6Ere@}fsOHcqeA)p!Fjbkr@!p(z`kmZ1iP9hFaKWuXT%*Z+z?T>7GDq)O|=Men<3 z8#eEnv%6L{%@l4#i5+iC&@2qFcezd2d9%Nr7QV<=r|+H@#zguT67|~r&t>Y4LE@gS z(l2bx6*NA*?XM0_79Ksw@c6|ICib;0-dItxLn?$eW52_h$3NemsoG}QGyP*(O=5jXY6GcdZvOP!MC11=DUuWKhlY6NV4kFX} z?Rhr(Mvq-wR7t~67}7f~f37{AG}^X@?KSD~nlebvRIR@rY-9iA=QA6G+NTAsq-`?2 z`}UxJ4wsipB=T(w4BzMXzR16nNU7D+ zT|}kO9wHW=cEE=qUV3r^k$06apg?&wA4yr*S_w>*K$P_Q3xq^%Mg3GJG64yjW1ta^ z0#dV5L&%sW3jGlC0ZDr|C{&~_iJ(ut{#U2i4G2(`BMAN$m`($+S_K@&g!mVKa&AEb ziTHZrS{0zXP4VjgF@{I{oeK9Z%F^Q>=wz$Y>;hgEQkbKJ@1RKlkcb$q7J`#wCf7U6 z#|PAesY}mkJDJc zm@gCztW7YR>lCq1`GSNTPg-eYtEd!qgJn0)n6448gI9t{%tiW2Q@Wp7_Yx`w_=dIX z8=Dn+q}n_!wucE#4n7Itubn;Cv@5ei3(;AQ_H9~F9iqbY17S123q%|E{oL*Fy&D=h z1k0cvr0w@{#$L)gWfs}+Q;T<9#rRKw6vOPb{nV7)k<%QG!H=rys(n}&#Z?Q~jD=ab1q zN+a*kfO15@<~dbE1UeX}cZ+^2cLK160zQa-M-L?Ph0qL90)`24_aR5NLLD5O>ESHL zOCqC~7<=Y;!fZg=bdh(OrjRR%vcCl!-~wi> zMOTr;gUc8i)Ns`kr>3@dBY82+(ID^Pg$V!MJ9UQh&j>8}4UY4L3_xIN1#6EXqN?ZX zG5zkNv?gevqoH~mA)0K+(gpI!-Byjxd;9J*BNF z{FMg2Vx0xzQpJ7dWzQ8^oBTd@_ogS%dA!0 zpGvjK&e2<^EhpS2rB>tNSQEU*XGjJk{b<}p)n)F{P49&~kRhil9CHsu?Br@k1YJ$v zV)a!fR^+!pZbtAjsn6k1rk)9V+Iv{Jl1AmO)5@3{{{hyWdOfnUKZOw#LCrZzpS38X z>H#;&n6cd<<3kdkL0Y|orEw1_!+>O*aHqa43qv9kRfFw)M?7?y7D4iHY6d5EcX_El zM#f~@n3!5C?aZ>B2?(}rRnxrCS0{=)+jS>at_Xdp2Ps!P*zd_cV&)$l9H92BK%%yS ze74I%tMH_$tcv?J0U2$t!nwr0$s1%crC`nec5Br#Ph)C^I}R2Pe_%qf!cyiptH}Z5 zOL5z2AN)0bJ#9M~8YRiVYx6A%!YowytRMMk_Rzrh>1xBdluf-&4uwxXZQSW}TDI+w z$%xCo>-o4Z_u}~J7YmBa9NQL*6WTiQfFoq%g8Dbkh(DmW^W5kLM*t?7H$FUbYon91UZ~@gH#6Lw7hWh2s0&$6Ihyc$II4u(FD8m?_o%?C^j~@hF zrim;%isujUk|>HOSHh}!?(8yv1i>n`kp~V~&k3`g&UpWi!2E(H8$b=us_``7LV;kS zX}rsbs$KznbFbsHoSNm=Y0DlTHPVbm(a-YQQgVbrtYeLRXJ*C-L(rO$D&yj2ruf)i z-pppBYz1(A55fVG>U|t+dbvkE03GRksG520`^PS#=#-6G@x)t$CucoZ*3WfYl~iqv ze}qgCty*-~qBgv?vwJGb`_BnY4wTuirzp3PH z@U|9LIf=>ZvB~HQtkUEp@;Mlma+2X=pb8W*62~IwTOwN{abj6T;pBv}DcwcNV1UoH zS*t7LUcUhw^OTc6uf?AVto-;zKASA|B(WafNnGzZHXfm+v7Hnh8U8hv6z@0dZpNo_ zOu6QyJD^e#j2M&+0?!AL;g|O76QAUsyy%NK*?B&z`&V7f@bqe;Yeo4C)^=uv=~TA~ ztFT!Ag|V0662wsDL7cxli359$hTL-o!;)uczCF6Z&;W-^L;5ZTu6mcL&6Qs;_Ng2x znv+w|W6|gaI4?LjY*d?S8foz>JIf0(=x)jH5d+1Wk^QtpHoDTzcaa?&%KwHW&kgca zlX)-j>vcb9h{CbP&@Rzk>7kC1wo-~`_^q6SvFQ7)GkjZiLgu*d0*7EJPC^8#3et$>)(517>dl7sIVTpJhkH&n1S(GIt1OzQrSez83=MT85{teu0bGv| z)W+P;*!uLt3SV78z4U=iZO@(92U$9g)_f{oDyB|bE(~4ldH5CtgXJSFbVmQm)4eCx zKc2PK>03!!9CWJR)?3tbZ0P&YWs|2TZuuS4@;`w*rfPclSj(5)kE=`dHC5MV#iYhq zR1SsKVwNIHR)<)se8CmEPpDOOZ{2Qe4tlfNcY-Dybn$JN`>CqO{blMY$RL~Q@bI_F zKPplxwlWY(o23)?IXeQbAk*^stDe2@fZz{ZHCb|oq@GL<+drdB{_FO&Fvkn;-|M^? zi#*~vuOqndEBfxOwV>0Oiu9s({!gfm$~F6$z~Jjb|f7`)KDNs$VxqU&?!au;^(=C4ka`z{tg!Uli`@(MyRKAZ;jrESoy3ZKF zcG-uV>dp6AK_KzuS{uPx1xK7)Ic=&~Cf0gb+(u4n5ZU0KIuw0;1l z3{vwIS+{EI)?r!NRFzeuhuw8Q{?}^7(gz=TCa=qZCE0u8chU;jC!&!hBQ$DGtIQ}u z0Bc20jyQ}|9356S)G&FweOfv&_1E0g4Y@Sl$*GfWukl7h}CY)kqJTMj}ykxZOcAI%|UUwoyGT zcW}UOLs=R&Q{%V51~o^m3r_vJDeDsH9;3J0CB@Z0(8oR*Z@Jfaq2a2>$(5g(k&O-M zvKMOnl6J&UjP)zLs4w#S@-9}G)qKvj|D5%M^V#3mVyzN%C<#a*w$C?+u9}T=B~bjY zZFDsMZR-pH^KGS(wz|;~qG|!Tq#Gpz@xRWv1VZ+MFaVK6VcI403ij|~0;W3#j&NPW zLM`DGX68kB$eW|>Jh|pKYZ%5+?}zI?kB`j~X9nI(o!Xz=5{(p>Z-dV|Zs67KYlVF1 zZ*eD#o{Rn@qbk6e3=sH&wPS3MWZt&;Ka_lB( z6<-UORP!2M4EZY4wh2uKkP)J^MQ>|?C8XefOu4sf&fdsU=%xt^d7D3 zQR*q54LS>GZ8O?VrssOe2Ckm|SyK*1nR$ce@H|}uR`hE|3?dpqsxrR|KkR%Ec=D7n zr~s>HAO?n-^%WvHyPU8CTm(lSJI}W5UJfNZ{4F52gph{kO_{b)z?UQQ0t=t#$q-fW zN;ca4?Qnp%#paPT^-DM{&w*m97t$3`r$#)R$Qd4So~|yg zM50IIZ;x5`%mt_@y-!~K#sg)3PfC=tE^H2t*v>-DgmHqPdJCXsgAa~_z8*M*GG0D^ zBlkRuHmk|%U|YtHj=W;dH!E13k{LHgx%e4K!)oM~TehWEi#XbpER%uR4()?K9dwHoS2rJClI| zZi|jJZ;#MU7N}>_hYyT?E>)=zlK8%1{t$2>`#<5BEt*WZ0S&A|UK#^5M$m^m+yw?{ zlQB!Y(SHJBCSeg5V@+95r20c9#&eJssclw7QheLHRBQ6Ji~V_G=uD@DQ0a}Er5cMv z08ZLy%d5oeb5FsBS^Qz(SWiUodk|&wA7~05s2w;JW;I~e>OLTEcmo4mg4|*BK%)tz zFp*l9SqwLfbbL)6T;W_Z7~-8BWc(QNa?n~VPvqHy4o)4dvtPi$16ZQXw1m1HJQC!J zA@GfOPXV=OUJ&bs+DwSSukZdt6r9XB$b7B!RSPW-OIg3`Uh0rM;p^sF!LiBo6E;aI z@k$!Z_jHi;#ES!h46KL-4bDyhhPyS(m@nkY@x#*CwVj|wpKQTOZlr_)0ms{Ida$>J(fGtUB}Z;v zjpYksI1*kE$PN0(=!BW~`S7rj;xO*Gf|?2IHP!<@5%7uu$z#)6u0}>~r!XGm@E&5L zJZqpTKYlkGRp~~XMYuj#^8KH?$*MAmt+a&{VmylNLMb8fiwQ#~DS>}CdKdLd^dWI! zQ#k+#k3usQvl3u4|DOpw|Iuc1!|Et6uTBT&%3S%ALka1QI&EOknr21ojkbW*Q3Qhn zTf~EMNC7T5$0R-AtK~M$6DkE+<_#kXrM*|WkSLbS4K1I2pKyLz1B2KUAFU#tey?kC za+hL9HTp?>As4VpALgY~u8R%?v9H5KCZ!coNt|`!c=J0@o9hn#StKEkS^J9gKhfR} z7ocH9iDD@XL^$P!sO*%~O7+*rh5XjcCfy8G78K{}N2)-?Py}bR%!j7GY{9&%>nk>D zq#j;E56Jyr*vf=e)MAq;T?)1I9Z^|Awt^szvjc8VBMaso!xF6%A5BOn({sBw!Km8Ns?c zu;ynt939ZZ&wx?n-e4;mkx38j*oD)Fedx5!Sg`ChR3}trPRM>~2@iv^hRt%Eyz~`f z-&~&TI=NEq8rQME@CxEHp;1Eysy7|t3s!JWdE!-guTeM9gZlGqEV%15{I}l%TPVI7 zF(8{F#VmV6gKbtk@XF|eE;zerWrsr|a>I(S8%~$9dW;Y(Ezre5qAh#MNS0|h9;HRu znvOU_uuGz3Lh%0AxOF`gw@GpUM~y##0?GOf5dYJ}kXJ()=nZh$*h+I)=$KRjUWV+T z6P-Ct6hbtO=yuN-9q{O@R>;d~D`*=fM#rLJk*ay#Rcv48a3n`@1ZNI+fJbnSS4_Fl25sOvp>_oz!bc2w8IVW3C76MYkSNY+Ok*4N zSR-(O5WydYeV06)_rB}FDFO|KJl1&|+Duldnh;g)bau`IWZ!(jWR5h>kN138bP$MQ zXXWy7;&0(rjt35UFh-26lf<{PM^qk+N;OQDcdQ2uohtiAc9B^b$uF_7P5h&*hauv? zn?ERCgKO|oHyUY$>&ki2&_f%!i_iVjx6Jlm{k7M2{_klFbeR;(wSNg~Hm=d4xfX?< zz=U-?Qme?=iCQu2#vZchT=J1KD^CTb_udL8lZ7)rT0C8glB$fkHTIN8QIXH9q~ITC zGTr2jU#KEZU}7;$yDwhTEeIj7r_B#Isk=Y;i&qK^O90d_fLChv^w+NF%VoNs?Zo-B zrpGkGbZkdUjH`#-!g%y!qO}t9g!t*HkaQvgG*pz3^<{U+%I+8u<+> zvVq9)exz202CTwTZNik8&X~Vx+s8$+<|C1c^ja%+6)y*O{K;iwsV1T*nx%Z2g?fN; z_j@pMDDrb1a~+tuZ~>SSaY$rehI%M5BB{DK?W&F=SP%^AWWA0Po1t=3?k+@2^(zFq z7xb7oNSsZ{MJw(Qi7?azw%TMhdfUdNbD#SLZKAKb%a!bKY?QX6&O3U0hZR5 zb@fRXfq$>hsLd9Qo{o{;6S3cp9wFW90?aKgYFVE;|8ku+^qg!xmK?>kNWFHn{M}Qn zk2h}@pz>UUCH3nZjRhlb*XmmpJxCOSKj-VP-^HC9KlJq1&GFMFrU%wAW;|13rTYOFHa40YP_z|P5Xp;aY= z9=?VM=4{73;u6TVd?{SJ`B}hs=oH03otUE_snTtN)->L=0j=f@5a*_e8uKt8p$YRu zh`w3sw?JYrK5T%wg=^qH>dupZhDe|jhyf=US~Bhg)+^s(8BpxO{9)fTC-6rwydBFc zyj@U}1q;ECojV3%moyNY{`vsA>@6VHcK*b`CqS_I(-}hy!~qGz-~9d3|9k0u(2X!aDF3T78S^CXWvj|LN-g^N;`C)thop(Exxm zQ8%W+H7g_XZ-_2KdqI02b#R{^N@MueKUY`WKm6@qoBqxHpwgBu{Oj%9@ZY?f-N}5x zHs<}F)j{1>#L!~n+I|1+x!GXdhJ1Bu?yd+c*mO+eGpqE8D6RZF z*^(s>GD+&l(ZC>Tw0}hTT*lFynw->7?W<71fGAI}l)~N90D8ZW0H6x*n8bh*+sxf9 zvHZpR@ndLHB4$S z+TTf1?!sA*f_@0T%y`oV{&A*TttUjEmw^2*oF;b##0nRGZ?DNGYJnctq0%MF4R$20`Fif|^QNc~Ho!--&);s;2~NW_ex zbRVU&Xv+lcS35(8o!5e)d^`cK#S#^Bho;byj1g~J@$e?b?aO_Idw1V1c#y-Aj@y3h z&e&E)UWc$yf6VdJ$7{`c-_rFfR2zy=1^j>(uJXMPbW}y@XN*m}{<)^=?a&~jydILF;;@eB{_QQmA7f!fc3l&(W+;1CIHLJ>$uurTz1RL7h zCqA3<5-NRCxK*Wo;||lJP>XhxQ17S>n>0@xJ`wfNO6kVEC~2kjxBpVqUNzU?isv>j zm>+(?aE}ytVy`3sLl>2{1YQy4o(s8qGi++~<@^^_A3wtYQ1T-wH4Qnca(PJN5}_uI zodU0aKFo5d&(v!P&>olWIJL5?1NNj1fL$@B;{n8UL&3xNLjVFjk;j!_mBOl*dS?UP z|LDGU*5Ma_yTDSQ5CB_@@#?{vlbGv6R zb0c^{l{-&!8C_2ViyikAncU449WxYeTB!~z4@&MEwCI1A)Hi5$UW@NgBRZwJ{JHeSrR$7}imFAkc!MlXLHMo<7d3&!>VMA# z+xb0+IwJqqqT-jLeH>AEIhF_BjBk>~)&~FZ;ru_5@Bbd-$G`tyR}0Q>nQ_{9_ZW74 z%mOKnD23Ys8aL(=jMQ-!to@M>jpVsn%;YGf|Crw{FQ0w=9!65Yo7lf_I<=y!aW{2m zb_UV?){&~ph|q!v>-&9z#rtEF1(xzi`yRTcnAYruh?m!FkLF?L8}(1cO6C?#>fb5O z9!ubyuc!##A)ozNIaSAX+rr%CI2NYkg@frVSUWdKMjNT(yE1g)T8cbZ0#W1@p&jH-JYcQDb5*v1z9>wRnBRauYQFeWO5Rs7%((3~5I z^Sd=RFK%3bb`5Of3;xOMsb%p=n0|k@TVL*@NTLy}6v245i?_oo=nq2Kf4tO?M9|>?b6_0C6l1y^Q?@r!- z7JI{TAKB|#?TenwL*;M690D)CaxUNBUbm>u;!B$fc4ol0+>AWq){_qTZ~#^*8CPoNnIttX$jI`r$ZZo2)~d57^t9` zUPdI>7}>~=u+!j50rBl)Fhs1OFe`AvphcW}B*gU3fflS0|2%*fgBlAV;0wKU1((hc&1DEH^k zx3*0n1_S&2f)S;=dnM?fuJHfa6{8rw$6ff*NDkOVK%~h>gU))Ocj2Pwn#>gn(+T36 zf&o0>Vm9`({pz^k%G3arGYPY!bLxL)hRiR-(y@AI6vWD00vO>9gF902AFr|jAdaL1TFsL;|2hN+B>!eM z{ryAuo45J@(=T(ba(B*}TaNGq6IxU%9n@u#NumbC}GTE5RFgYy+K2|64QgC6;V_RY%7{ zrsL*!NVCP@M_;+^g|q8K^yapkLW|3!aT&^J8fvSN99U90Y;6{?8PShnNIVrzSGMC3 zaV~|%%!Y+I>5r8atnry)#?UM@iXfD$C~ei44M427gYV7u0L^^5(2Q}|mR_iYFx$-1 zb%tXZ!~qn$;u}(Lv|})h-Vs^Iz3NwhRpneng+t{U4UTF3THfe*qM*3F=d#7V5vp@4 zY8%%SzEyyks-`w#c76Bk>++VJk0hU_r$bgezebYmaf7Cq-kUO)S;4;kCeI4Y4}S6N z%#JEDkz^;nwf3+fMK*Wm46+}^pSgBbt|vo5>uJg&s3p3kh`2cJ$g^$ud{$UI;`Xz> zy3Cex_pO#slk(Ma1yKPOpR(|6op#lhxe`k%`;P4WFmd9?*y9e%*53k!-d>c;M%Vf7 z_#Mz^G-?zq4eUUS5VRbDx*o!htWy9h+rAa9R>FjKb+(DOv_ zAD4NeIK$rpk4{(d{Lwr~j}5?WWQDx|2XoZFdlI*o%WpXk(>NB`4zs5=V9)?ozF1by z+SK>VSD_vm$}(t5KI$}y*kUAVHzlYfo7?0k3G%=}afgu!ya2%33FI3|_#JiJJFp)I zjdKOP#c^CD@AYp19|8cQ6v&~Y9npwV((H**(CG~YDiPZ_XK^l|t}cp&aZbE=&<{Jd z9t0JpOay(t86`HE`V_Wo9J}#g%(mH3A0q|x&DHROW0#riNU3nX0v1Y6qa)(~uwGOI1+FC9bLD!{O?Zl z|MdCeZSbEd6~tLjrsH|g-20TNaw}#~6;xm0sW?;aq{_IKQdZ|`7<%SrM&Ih2ShDK7_Wy@=4ICH zoWMx&g|M_UEbtU)y9S3VlZz)0Fr@CY8|X6u@mrj_w6`7xE-6@2V|A94gGLNakzrwQ z7L*+-hE!)oLC4y(0(&R>##Pn7A=>tWnH7ltf{|IG#3FW4ZV;ugj+c08cmu% z;(w`*3rQl55n^QXrxhf7v_uD8*wIWPJDID95al28B4G~=;%OD!#zDq zYN70m4@EPnjZlOPX3M|!X#L0jI4XhyJ1qrdlm{vMC^ty38g)j7Bg(ym0rOr0cZ)$2 z$2nGZ%`VT2VTI|YcgdzKDMzN;gP@JNfz?%Um{XPdzTvyqaG&x`bHCHly*Y=>!!DGU zTn)?p?ks?>xqw0P+n@@Kdd!gODCq%cxiPTPTrdWOXBbrVxG~ujUUH#_zlC~yp_hU} zUm-~g+F|Dz@-;myYr5JdJKK54xxZmD!2M|4r*$!&MiHRLk;*aAlcHmP3ICIpdL8B= zAB5`9+PR>jRVL4ihnDZ)2PHTqe>=Ww9cTRiqV7$jn##JZVS7Z>C_N~o6cFi*(u+W%bC0V`FQWg?H;}q|3s5!A72E3q}HG22(wGMlOS3gU7!v5jpX+=$iNZo z4l~8X`$hYFRT_GaL=9J=q4II12LkUR0aF;`Ha`!&^; zx=yfw+TT)uJ?09#Gai})jcg2j7=XWwPa9*XmfVA zXiiuB#_%c|6K7bvyV*aOJ@KvqoS9LLqGrnX-k%;iEg<=Bv;q)ohp0xdX=UT(S3Z5~GL#Zf~UEGfYAC1KZqh1&w z%Xo>xtpvwfK1C=l^8*Ba#17$o%rwjd^^U-j@&Noh-2IQQ0ztDu0UE(q0i)$V9f!0q zq8&Jpb0=H;U?Rc0ea z5u=C@PN}KEI2;g}N-~#>0lqT?FwPOPct%EaFy+%Ko5rf&JR#Sd;Vyv#9?@9I z&jcr=IG`lPS!C7%|s zFV#gkh7TL(*@N9@0`78%FuN@Y15(`UJK*uXlrQ5!`5k`F{3~_sIz1$KS5{qy-pjMk?LW3X+aPHv*hZMamK&%}K!1a~oVTpq1V3~cs5Rri(M@-;o40}pb=Sc^M}dXD{69OH>qb!GYB zRQh-Or4s)wt46Yr^_tN{1+M9CxBV$uhvcxZ#RK|OtB-{{>uRiv`uaIs_iHYMn3ch}~ zWXb%|QWBun-#+cYx+JPhcPL)aEPA!Jm*Gqr3w^>}8h+(`+1I{M@zF72?B`{_em{8^ zj>ABjUqAxd^?R`9y6JDZ?aEeq2fbqO3PDYy+eT!>j z4m>`gTUGsi)>G#$23mwOt=UqQ)uuwFt zOgcMzpIl_3odZ()T)9HSCjH6qM()cr-$CbC=R!_z5kdJt(?@%nH6pguZEi2CH`jW$ zA}vJIaZdBmtf~F;!h*}i$2A$g{qZ^PH2rezFt^BZqAsR5Sr;@m+QP_6L|{|b3|ia2 zqxX@{_kwwIK#CXbr79XlRpDjI;*T)0v}`K|`litbx)+&Mf|ECkeK(9gF{1#Me>;KV zN1qUDVlp~gvEfL@;sRm)1nCf@Lv37?BljVB=eP1krxuO_k-{?rrU!T*d(B`O-UAUh zRYVHCbrxR5L^pT1cVeC3TZN6xR)WacBBk2e&^NDh`;TaId#U|(l=V=+v1(8k1Pf`} zfVfbKFJt@ zZl@hJ`&pO#&gWzIKDh!JU)Mg=@2YMjxh3$X~Z?&Z~i2yB7sd((-O&`r_N6A+{@~u0%G;pw_)BcG^Dd4eu?p9 zf&w2fe8N@I<4}R+An{G}s)rtQ=m~g(jlz=U#l3JXpJm;1MBq?1OdJ>7&6p14!6>rc z`r~!)Hs6IjM_1U==aO zc1u^ReR`C0#yHmC>1E^MOwVi^vtzmYbxeO-AQ|`tt1ryj24rcg$zb;)y`4%enCCte~<1fdBnNtg3;}q-h_36W+MCKCF7%NZ!=~tyo;}YrS z-y2jLyyrkV+8-$`ib9Kzz6;73(o4Cyg*4TDN@RwlmJz1!{>Wux1%J#lfBqdXdaD0v z^u!+UGWYh3FxPI&2FD51xk0MU;Kvjgm)o(Cqa#zc+!>jTtc9F%rP?>mxprk(c6p{7 z9ljdbg;;P~{>xbM$e*+gF-kV%2pffTg)3V&tJ*kA3+O2$)7uUgBAJgjFpy z$v|RJdG?z3(@)h4Dy(w7*A(qfBUXbMIhMmVli$q_BMpikm|r|@aI+!3!aa0cq(n|Q zv0U*@w2;(}iJ?l9+#y2qR4ZCHb9n0f9&_4A+&=k|>!l?NUg^Z^mz-I$ORm2Af}49k z3x1@WK9diN7nQ5HvrN?0YdU!(ZRY;q`a&S*M<+IU^kmHIB*K9mqV} z_(Sjld7wA*X-_@p{jzI4+In$r)+R4&poX#7E7~TC1SD0Obwg^)_+EpY%^)dun>Il| zQTvEU4-7yBl-X|$h@abX$YOIEF8-lWtk8>Y1mk%0CW@FqoxnkEAF)7y54s&5M<@i~?*YC~J4?au%I zxJ7IIR0a9#-9avx{RGVN-FkBdcNAoV^E6Bp{ki=x>pTY2^bI53BAbMil!g-s*1O+V>ab`nCU%FT;K{CreQp&wce4 z7GT(E$*B)9{&b~kJ+Q0?P%dvP&E0RST%we3%h;K# z;Pi;QW+fGVHG8Hwx9449Q&~`&eW8qI@J;Pq$6IFe#kqxN?8vq{FYdXUOXGfQp%{%nSYRQ5QZBPt54kqOEsD(=WsF7#Egrz)+hBWx~txVysodWeOz(7 zO>*ykJJk$1DgE30ZfnzWP{}-WqVO(aB5VJ`O2MAMn4T%X@%-5DPDZuXi}CL~m}+t@ zi&VXdh+C%a{7f7k6#y45aw)CP%~3gTBqkAZ90(8HW~Aeol$wl~e|&v*|c z!nmi<-Q-q5=$*D~d4R2(T$tt35M+5*`|N{3tGPD0Nm74adii_!G2>|ar`#!dv@bT< zK+djphkb(nux(z-gS*F(HC4E&0q}lX4+*J(0=so{IN)15*NKXpe<${Kj;c)918;VL zesleRK`v`4g*I9=k`;LPU7w|z zQ}Uu^Po=dVRyT!G^jdCsR+O}9-x|Pdjcy9{vCmR>eVVJ7TpHfwIkSZ2JjzBOA2b`Q zckUo&9tlb^br?=O7^(8)Q-6d9PVI>0Auh+MRKYzUgOTeb&hXZ}Y57LCLz<;+R+5}l zTp+quY*XMo(jK^FHNC4N_(0^a#-Rjdu4ANIWbD>!+gxO~tN)pI`A_qm6?-d;yf~Ki zsiE_9Fy$ZOaAi`)mcJ$;VM$jHcD|gDcU$$6W_$|vrGf!)&9wwKMOK)N3H-C+SO-tb zen1`nfGW*kMk*gj@~G}Dp$%-yl(ms-YuF#la_rwV^@pjy-;pwbO7S?w+fNR1#+QCg zrgdEJR-Q-W{^Y(i7PRjQYj%3;6}YoCXZcA_I*F1esj@E6Jw~o@LgqervBy+Z~Z&vo5Qp( ztp#2bxpdsvCuxUQAP({;;ZvaNzz>J;^OIZ~Oe;hzZlqRTqpdp-GDVL$ErS9>w33hL z2$L5qN_{ajZ4#M3krmjc75d`yxGNlJ!E;=iHMtY1Vj@ZW$avk~eeS#GN7Lqa(?(@jPG&y3m^Si3C$Fx? z?L{OZyjt&!I#Fj>I{RvLH9uDF)qS<(3wi#gnv>@W_Qf3H+pKis&ENdkrznlfAZfrX zHZ^`sxdF1cKQ%DfqrWIktZ7_DaZx*nw8jk9MV>|U3Tg*@|6mWvGuOwpWR2w7nii@| zEji_VD7C~jFJ#STVe(P8ttjiOMf~EqyWcL7@04oUl|~lZM;=VGl9~Q^VYa(i+@aVu z==LMc)4o=caow$!`pZ6lzSoQQ7C&<%#XkOdU+!VXtzMjsK@s89vV&uH!(1_?7L>sU zefyKa03<{&E1@m10UIBn9`Apb={hIOTBk{5ZSy5m1;a&jx$DpN{ zH_U8u@SkA-;fao=^p(V#TC$N6ewq*bO^oopih{pDp7-i?69071(_rjyCx3U)NSd%p zv}LcLcp0(dm~%Wbh9vF=!eXREq8I&sH&C_Ghj+ zifiVr9AsiJUU5U$y5=R0sl1OX1i04?z_sAfySCqnK~w)q#?PG+^ilNj|AzX8h)Dil z+kW~Rd*I@xY&mE!k^%NKJi^LE#G4|yr3e4s@GBUpHnq!hCW!V!$`M5)mR?0Zwclcj zMn-39tJ4aGI&@0;REmF)Z%Cl_!_J+_Z!`og!YmB?&uVH;;NM27vLq-FpnZZI`i zHxXQiQM`422$Y}I8N&z+U!%5CVyKmr#1&_O6y#~w{}tMu&nrGxC8TO!H`N2%wAJwL zH#)mG;mWu6Q_$1wok^#7Q4tg;9{|E1{(pa%Y5?q7gw=3i4SPrgI1ZYc2u#X{gDiYH3PEbx} zICRz`zyp^uP$O}o55;`&#{JCokn>_Q9Y4=a@U!Q0uBp_){d#9OXXnov8wf6wd-#}r zOm-@gXNMUMBc$-VfJS^XEh%Yd`3&eHx?3pWC%+!J^-oKnrd2% zr7Ds4`7mEHn-)hfYyd)=7rG0!K@Azu%_iy&U>&u}TI)~9a}r6xkDn8Bu~kVex7Uv3 zD$}%aisx?Ypwn&={O@twi<6(+*iGfG3S=xegY%Es2*AvW7N!YK@RC}_dA7)5b#DJ^ zWP=I3Zq{w!k7&m1M2QZ~;VOnnW{jF%)bgmxSvO3yB(SZHzwM#P%NzTp2GYqIdlIDT zp+2ZoTECeqCy?FDz54ft8pMJaPm68Tw75%f9#&dc7JV?OX&FyyP-VFL%>neb^`r%B zm>DfXk|g2a0%yNmmXl&6BcDZcAH&Zn9(naO6eBs^vhKKl$h%()_)layyYWO;qFwHA@+Uj%0c7QA48c3@Pm$AJf0qgrk1O}f4rM~9U( z2V3k%$1Rk;rEPrkW-UXsePUgT08reqOLVPoEAss38jiKUQ zOgc9xPyyBCjyi>jQ5SC;^7wB(oG8}az}TJ>ldoU)(d%47y!3TP6*g>Lgw@prGNGa! zI_rc+Pl!Cl!OXjJ=|fX3z?mn{U4?^e!6RLPDI01+3CS96$l;*23$9{ioM(s4o5xfJ zuixsBT$^GkBdr&d+dQfv-RYV&#~im#MG)g0fsQ4GUB;}+0KHL!9h~q2+|0i>yv1x0 z4N;`giURj_CmN)QQWWS^^TZ-dkvZ-}DfT&8C#QyeeFCNYcmDZ)d_`KqrJBLu(VKWE zl2P0icygt*4!wC@QPfVYE-MDH1kFP(XmKc?$m1gM8MYoLDcTjk;Gge<-%nD5Hov7- zIpvm4-;Jn=;Pj9XY;3u2x5tdKMr{ogC{R^QOuN$a+4AJ1aP;GATAj&iji?n3N{t6` zWEQfj6U<+sr}54fmt_I%cgTpI>Hf@;0z)=cG{D@J{)VGptvV{TJ<=kZZ^d9XplAP4*)aKt7WUF2aO zm>QM(f(r0Zw+H`yyDg8*C?=$m%$-RnZkB~dk0~nT1$^l6ioY55b?Q>hTguCfg=6bm z2vjMwm@}nOo#_q0RV+&h$3@1Nn)58U{2DGD)X%$3eK}wb@j0{-8Ym_>gN*@`NQX*` zTR5)+0{pKpF29M++3U(Et?CR6rMdYspApt&M16PL769J5Y;y zmFQEew#D&q=Xu}ac*UG;IgmBygDXDl7Dj?dap}_!+&edrvGyhl&7W#o+g7;6wRTpq zbZrKxp~@ZEKr|BV_zu>E(*W97;35n+zzn7G?P`VPb!wo+&ZR|))SQXq+<@eDy&=K= zhF6L2?}apz_t!Bs-#k^ZY#eHZO2K2Wqnc7oH@!2@6qVi)D zCQ>$0K$BZzwHXs5+VZ4{EDnEPH=j{9ge^-NYB*VTrtTa!8#((bs-v}%giF7H&Q6P< zAZh#+NG&_5fcd!L#F-fPzRjyW|Mv)FiVFaRPvbERz~O5r*1`UsofcMUtzP-(|2VvP zZ4V66_g~zwYZG#!cF-OlWCHYKe3(3E1E&JL5L$*iY$Q|k2fhTv4S0Ua8N)bceLUTQsD8b2zlV+CiWY8VXxIAGE z3rbjtao@tC&qQpq{}xyGw(;fjVsWGm!t91UqINJuwwx5s+#)~{*dS{7hRD@sy%!d( z;|2v-uDh%GD@ZJXbdy_u4XB+oXB$IDjyVXvW-EBgOQb6PnkXh0mB@ zeucb+akb;3hwiwpwD02!TR~$V#LLB!uF) zX(9Q>|0H7m$3d#lK`8cJ1_rFHt)MrXng=d|qYTXx!RB-JbwQ?{rnJtlk^9(#-hoF(B}FfvD|GMEdh6cZyCd^=-}5Bocnu2ZFTo@*3F5* zs9^ViZ}!Q~GfqY!6;{b3e-S2)za!if-hTEDXEiwn$(KoUwGDOz;nJ-7m*TxN&&SSA z9zUZIFw(VL;rB5Ash6Xl0P9}}=B)|0CgYmAnrm_V0LI}9H@*h_ zJ~?Ik{$lypYC+Mu7WpjcEV#!;fM+aKXU(Nc!BLGS^SCiX2pMkb#Wk)o`e_gTpsJXv zK$JYGi`Ys0$U4OfNxY>bVFqPCA>__f1AdU~6B;p++tcq4CfYqyyi&0fc!8u8|17*P zQHtbRBnYMdfS;u4?msIu+>coTFrbkr8+wN=xc9X z79iFe1j1^A^E56}TyTvS7)@66T^ox4Or>VSG0-*kEFz!}F+o&{DXFrNU=1ivMs$39 ztuqzAVxwon`xqun3uTW`5uN#dCRY^)p7MvgQ_rWqGYth19nkyGDsTm>HCqd&l+1b@ zjALcWg)=&?p<=0WRi$oiXeHico|B?e7NqCUEx1P;7uX#g8X0l>JWeuu1sUcSj*OW3 z7kPNN(H@P{`z~GP}mB?lVQO&l)_T?C>#M)AFO|%NoEQY3zC{UDsn!8FmsDoI9$*-|jl%P@-h9;#IwY4$IUGtg0I$8DW}j9jmz) z>du4^iJ)^u*)uven=;HY=*1Sj+xJoR>A?=uMfK+K{TOx(rMw1kW)eV`^E)KfICgA+ zd;nfs8eVKMS*9qV(bL~&54MhJokV}!=P$uc%($FCbJzdrURU2t!(`vfc{AzVd5ZV4 zs?5B|@9kVK8#7~g3h741joz=zr~H{?v3BwH@mJCwT}ex^er~Cnaf$v{=Wx5o-hX`;Fv2J!598M=F`ib!n{+VJ z9H%&0(}IAt9FL-2wvVP0AmB=gWm{)8i5JXy|5CQ8!Ja_bo^7vy-MB?m_`pt?g2-ePEu4 zxFX3BCL<~j8~W@&Q;kO2TB zq-Q(UJQ{Ao2Ld1;r&E!~HtoJE>^eqm6Rgm4wS;;YYSSyG66rS{o@FDm0;E~y_$IqE z<=Z4i^-gxobF3xY(eJmWFRe}f@mJ)4!o|(6o1ST(5cf*lo}cZ#w`FIbc7@T7JqvGC@2!G-YU>sl<$t1u@El&Zi?Eak-j^*Dcn50FZ%$-^HoBz>!h$8^p?DF^zDU#0L8!q{40hjC2xj_v3B>+Hxmx=~b_*iV=_)jmD7RG;5 z)LY)THV&?-Tu!NFu5IdnPy5fmZ1^wE;Q#33Kp#B$zxzRK5JvtRNzwl|RHC1z;DVne z0}n>DjhPB#k4*3=;VYDAS40?DQ=klIKp0MIn9pz`eF7ZbRD^)?98PU**!Qvrws8ug zx$N?<`mop#btZjmOZMzpofmw16tadQkP293JHYyfv|LEo2sKDbuXjNLw6 z!{6wyc&*m}ftWQ(C}YwH1M7;z*j=A}lL^VAIpvB$wIkv}U7$~@bo;&AuG3qx#UJKs z6h|sU_N(y6=FN*0AJz{v-}r|3rE?%CGScy}XXSobb+v3j=6r1bwx{KC`J-~J z6g@2J84rFRaFZrxpLP*_a7R)(R4#9N^;mzPQ>5FnIIXw`SE4X9rBWn+7p{_#_Mi--;S>;1|LK z&vmm|{HAXW5=1N~o?4lhj9Lf-5>lQl6P@%oJP~s5n83Z?bl(f&=H|P|1#vI+#QeT0 zy3`1Pox8f^l(YV$bE+QPcEBFii=a_6@bbBdaj45Wq zKk5+tAU12lvA)M!SpzL8n;ynecVEBLWnTKKr{Vp9q(BT5!rvv#5S{R=Rc1gp+0-U_ zjB7^JrXz88zy|$(q+~XH-^iuxv?~lF zK8-B(EZ>Cyza^DsBm_!!8 zNN})B?5-LWYc)An>(v>j@9$MLx@8(PMJJMEME&?ZpaxB(?qT`_4&R(Wu}(n_d|P<% zCU;yBwwNfZ=jke#;@N?_1coWA&4!AL;lW4=vpix{3(xOv%W7PJ$}8M}_C(FgOPRK5 z1Oj5E@frC8W}85-gphr(8^}QDSwo1JI)mr1QM2MVDknj<-Fcu+o%0v{0B<#t;ch$J zsx@lCT9bB75ZpCPxMMne`?1mr*Lmb^jh?vaY773Q_k8IDW;4-@LyZ<~At46u!%{_N zTvQU0QI`7*u%tJ7^%@v|G0JRf9#P2YCj|x;yVZ@IdCUpiWKM?*N#`EiL$@xCTfTao zeCd@1CVIR=0K~ckQXzag7`ss=ofA^))B(5d4xG}$=R#eDS!78#&J7OY+JwCI z*wqjE58-yR$4Ghu4CKz~!A#~Ko&)-?mQQ+Mw$9>Ybv0Wtq zqQm5?yOCpgdEdNh=IB`G`ASAz&9ToTEt*8r6K${0SSADVitalnBUH!KpJ0NDSlh2< zw$IMfKayp-Q{##TdrFuUl^fN<9zaK`3|+HtzCfGLIsA_AS#jM-Phka~IGJ!=lO;U; z$Wy^SE_eNX_OQc?S$fHZG%Lq@@tlrRr**&jQrqO>Fg~a_ozBd;^Pwp2Telg;=<9P){ert>r0|C z5rBAjR@hB~W6)~bcpOrREJIR&FfABq(EvtSbWDJP!^9%0lJ>yuzw*SI5pwUih;1&I zSO#;a3nBAJJ#EA~h(DsFx%9RD-0N4bY))KwoyfhTir!CY)U1=@Vn&|u>xDT?A4CLx zTLVx#=i=hX+vmnN2M8=U{wl2=8oWn%glNyS@^(n?Go{Ir6QjZ#?dXir53cV$6IC=T z5lq;cCTt%XHe*?KHgB@Y=)9@5a+vCsw|q zm0X&pPG3Mz{*SF8pw^whG-IO4hlS5b{)cFQ->SGO*duij8mKIs#{2VL(4P}$@v_7y zfK!IYnakR{`6R{TW+Q`=&~Ol%Vzp=CxU^Q36bvmc7<5LjEk=+|uukj_uf}~Km?A#y znqFK=GVBXDRM%&^v3S;~mb99g@qoT~Bp_gsq!p^aCez>1+}n9+sa=Knlw=0tOsMD` zQ+k=XZJLaRckw8#CP>ztwGE~b3?Vfr!Y7(dEW(#Zg-ac<0Ov@T;BD zlRwQo9Cp>ouabSfH&F5n`kJyj?*m7Z^6Ag`+T13g+t!4}?zdd6FHei8s!P*X*c>(a z(?m6eTKhyPDUS=Y4n@yD&fMUiw6vbPHAnYd(6TSq?26P~FEM-3YxAyX(26kJ8yocK z2*r>JhAx14AX9=AJV8|wb>bN{3n#ea(U{5tVakgEh8;9#)lKnE5Mwo|sk8iAnjf*2POIksc)o4-gOt~s097-iAJ=s=u;ELa`({t{;Q2yX{p z&MM-gQ7hIX^-fxIS$@81!gml&AoYZA21nf!=1<_kre$}=29B^4LmuSSLkJdf>ztfF zTc~!$Mz5&}z>H?EvPdUiU`nZuEY=oA8=F`3G7Q87#z)BRNG1{r!AYPT>Ei&WaQH*jBl%g5XzpS!r2 zz&aW3T>Tl1^e)N;0BFsttsf(1aK7d6=+2OmB1szL7s=E^0r zAtnQ*^f5TVUu`)wE6`y8g)#^gy1J?N9a*t{lXW^Y=E&ESYvnm)7QRwFN+gGA^vAI2 zO@E=KJA%DKF|6pijT~oz*vZkzV(&7S&mEktJr+@uuNVVW>$^P0?&wdY>)5~VJ#XRm zhIlQhl$g~x%h-=yV`!YoCPcN?H8`Iu<>YJbx5k>L`z~ZFag{wCP;q~GC_AD{c=iMI z{>2BnK$fWz?P4}JySU55syh~p-F41@GoR0Zuii94l4oE`MrYKXEd z@Xg2}uz&Vf**zrGu7!BrPrkC%-OjGQVBRQ#xIlf&jI5^YnHOob0oWNd&70aPcvabA zHBfg~RprF?x_ySU-8Go-2}q+#1PYwak`cGr?>+>Q{yPKX15AQLu=Gt-Iqu76yR7q_ z<$s#`Yh%jkJ1fP*+b(>`x8Xw0UM7K({fAq1-pA(JytmHw__*Z%hH9O`Q4h;^iZ8m^ z$kptB4#c!)E=;Dpcv`khH7%|9T2TR94jX(HcL-WQysHKJ5L90#|2Fbvl&Cu6ZLH9Q z{s9kb(FKqBPXN8(^7?kloG)oR{S~iWWQzfJYRHR)S$o}>jR8sRUqAh2%RK-}U{^#f zqEsXa?(2hDvPromnKd=BwY)XtSHkxiz8zr2DQAb?v7;QoKR-_?!sdvsF$XvQcq;N~ z_+J?v|Mnnv_s>%GUw{5f#r==2E6f|goiOmhd(8yRqo{GQ|8cf+)30BiA{@?cKe-)a zmidFmZ-JQ6AvyMnEQ6khcPC!m@X>%TpwY)Dg$?(h!X zVsuR0Ges9FTMm9t4P&yyDOJdp&f%LP@!a(jf{XCfggcI_-n=O3D>@0$Ft+G?JM1BNELiA=9StB>^|GY65TLOxj%7zRe zytxb8q^Q)I15r6GX$_U!(cR8EU~<=2?;@OXcm=t~SL*W!tH@`--!PZf9<(LocDHGH z@dnZxfJn)KzT9MVz~ zqJ88buY)#hfUohb?mk=lxX&|rSR%pXJr~nM**z_5vOCH%*IfFF1cAt1`fHE?%{CIA!gC18Aau^7j9>+z3vOv!JW?@YieyB zlkxR_Q=6?t^t4|(TO>}OB5*qe(gpvK9Zx1zq$}IFN%% zBq1gi#o@4K4|(2JQ9kDs_av5;VbWJ^k{DJnYeL!)ci{bp;1qFNqqt)Cg8pLIqw40;|8 zGqQTD&?2+kkul55zWO*hg0!y6!`)ne^>bOxsV;73=l=3ea87DY`X2kx^^=DEftsz` z_HZ_yny!Oj+#}-ViKNEAHza26t}h}X;Bwv+mysS(I7SS`^`rNLfr@N{-sQkOLx{+_bDk^KoRos#aSS&6u2qIhUg<*jCmOy1Bf~scg1wee` zo$8>9u8Zob$&XSXea;p z%X!4Yez&1Jk#_r)FSB2byqS4A#Vb@{)Wi%;MC#u@e$8=1>MZsqz5_RpS;vq+gHcuk zL^uW{S_a^4?cl75!27Nt;ZcdEcX)H$q$so!j0HB0`S6pst1sU+s6h9bRjHP}0;3{= zlZim?!)41reS&kq&KsQ?z?}!|d!x71B-gEjF%9A*Pxvwv#;OhO^&O66@>p$TIp}Mg zS3#TNJGF#?LXJPqvAm}4?9kOv7jKt-`QyLlNp764!gYEeg{7ElV4wWfC)!KI@xx&q zEypwj5y8)4Bgqs15IU4S6WfR^m<@u3>2XM%g=xF#Kxcg2VK$)KY;u>^!J9t&p_M>pbR}Ef1s?< z1Zw!)l^DvQQkO}qhOLzS1biAO-)?>qM&jtJ7nHMuh-DbwLQ(M2!D1*QQf($oF98R|u zUYTQ=;Ac@$4eBIA==S5lQlbM_?!Ew<>)y71ptdHe&gI#htJeqnXDJ%~i_0VHPh4`- z4P8`-lU}zjy|;Qu=tCO;nFMUY^~Hri{bIK{w@=;=W_xA_w4M+O)SWCZy?Stg_#*ZK z@L@@FQL+Yh6;lwQjmbNM9nx~{4+!4J9I{~VTupta(s2vupzqe8h5Wvt*8FgKZ`D${ zYE`O&>Pe%G`1XtVWfx8fP~B+$`gr%97*6zrU+3QF_S_7I4?O9)3mFC$_h~C18py(Zq(qKt7r`5dsq&AP5u@}u+N#Y1f)n(VS*@93D7OK4Il-{_-H(D z5<8?WN;ttb5-C!)QI;~3;NNNUsX*~6i?&TLO6%TNpIrBB_m3 z!HZmx+9s-SKlqMZEu<(qOmvXMoVG*?jG3a#E24B}4f9{VgM~m<1ZszzC{R2%GQj;+ z#Q}=rKV5i#;kqhNXr+<1fg6ftcZwW9M3=me6(xei7?Mc>+Fhr>+!-3btePa+kNNbsrU_%RtVU`tD5tMqJ zj*idgTN}R3YC)KP_#jS+k3o3x5T;%)o?KDgnQ*HXUs%ndRb zjkZ=59N--(3#Q&jiZ6bX08d67(T0jABjv{AdbF2q zD#vVi-&u+;%7L1Z!|;&=ubi2^-7V6jTTYYD*-^xN-SM^l2A9jp9Q1!ARQo`Ej{uhg#XT#JbJ`z^6 zIQYhOq{N6@MD>NMzfC{e8z0gpkFHNL5N_nq!#^8v5~cR;q>W5eo+Dk}$vWN^Y7|Si zeeyL@F~TG$!Sv8>J>k?#T8ByM`SgQ~JND0K1WuIZ*HL>MUqGghZY;aqI$Cw7{;6tz zmgQ?BO~%E0V|QH4-5tWEX&rOph^oN(jw8c5Z*I4SQJ?Vzp*WhOmX>36%!QpBj-I&P zXuP@ruk{ZLfBi9Gb1qjohtX-fMdKcG23mDALzKYiNJ>!PX3(`*V|-HP&x2(hJ(xde3X^Ppz-w zy2Vt{RA1-nNT<<`eW1g`D7YjVsA!ZL0PM zuBI5-D*z8I`yDCU4b;ezExbVf8y;8!p1zr4En54mb)8Q5Z*H!Uc=3z6LXD_>aBFt! z$U~J@le8`0)dgCV5tQgYWgmt|8^HXyhaE!w_<>-G5ShEZ1@yI=A0p*y;lOjI0rM(q zJJ8sbYxcKY7#PBZI2{c`wU>^y%ctZP%=yJG_B>$RUQT(08kER*}{f`&3wgxD-_z&FN5q=fvnmH2Q)|lsWEBz z+JY7A&9?=GnI!27979Zgr!ozaFH>wDJjf@3N%z}f3mI!>I~FRHuk!r6=u->@<%J~v6nGJJ)+~N{D(J^&ll9A zS~;_qix1b^r_!99{0;8)8nSTNa(kniduys#1Nk0V{Ha`fg9DT!KE>1%7OFQb_LrYc zY0=b9w%(`JrW%j~oSiIj7WN7*V0CR*-Q&9gx3jVFR9PlFa}57>G09^OoCVSOzwy9> zx+ahl<^c3A1P@ao3-GF#VusAOLANJln9_qLMAJs<^%2d`UQxPGw5DAkCAtw87l4O}s zAtPg^2qC5rMNE=xG0B#7vRBByjVv=$$(EU9yfaI`%l$pS^Skf++xK_A=bZa-&hI?V z_m4chFB-ZY+Lq>8D-UEd(`Io|Rww~{%K(@H;!ivrNR}!n0m)Kda3IA33l^YQ%0mFb(z8e) zSUTYF9)JrzA;E$86(Bca?ty7~%o&-yiJ~0Ga|Nf#jH1}zdiN9%N znlRTjGEZUGH8MdMaTAbQZFmIw-;`PJtShs2Yr*HL#lR7K90-Hv9s<9H*IJEbC4r;X z5YphNfMBRoZ)7rJ-UurJ1X(P>gaWlu4i2b|-X{XJQ4k!+Wr34y5QGfSy4vVo1E4l) zVX{`z3gDfV-cyiI7vdMOJA%s11y7_G2LLm|1^6F5TC2pHegFBlZ^bLVhTw`lUggOg zh4H+XQ5d|>7w{M00R7!u1m~1@N6buCgv|eoU(v6qhLRIB!YBNfO7f`!r9wVo=;)u{ z@SkUV#U&2xB~O3|Xx}6JG9rWB!ZraR#Z!(HPvSf%DrKXW3|5{s3jgVegGlI4^UbxV z;n$RoE^#z3!#O=)8yUR5PVhGn0$?ApMf~#4VD~imkRr*{*>$I@H3VT@p>>DYx<{73_rwBfD#C$f&dex#n=NV0Q1mGAipN_q8KR14n!YmVWfKYa6F{?|I~C^ zYjY${1HsOsE)W}!ZHX4Ri=v27qssU$EuLYj9+lIv6L`efpdkF8yK@RzVO_ZWU?nr4 zj1A{~$WSPZ06RuJqJnUXcMQt3Bm{RDLdV%^^T$vUD@5_RzBcj#%Q?MG4M9cR`dNl4 z+>}#@d0`XKpQXO&S;hp?cfey>&(*0Xhxc9=kwEr`#igS^`>X{vN60$%^S1d`2O0PH zN6>pHVy(4C=`AqWw+D+Fp|Dsjgbb#;S71O-w&49f;br_7oD~8U(_!(A2f4YxAUf-2 zO9!z+qfN8_U_F3}q-hU>v@l}2Wcv)U1to~v;j8;()q$eaLK1OxN4eLpCTE4VH!6~c z^gL;W`-eg{FD@XS>1|@5#2r1FR7tk{HBZH>?E#hNmF-09SP(Xm*6W!sS=wL|8YKoONT;b)`4OA4fQx|N5v&#S1=&-vkUIZ<@6g`Y^?fU7 zRGMf2JRUMpzd1W99vOXBHPxxKYjNxmKxH6vOsze?0H7l!+d__ho2MDb0!cyEo{ zsEs&PTn~9GM@lh@(Lq-%r%&KJaB_j-P^W{xw=MMe$`y|9_1cehwB1P50HR9mQTv{L zEf*1g?WNgmqo&Kff=nu10}dt7mlh1cz41fJY-7xbBXZ1zMkM%ijxtwmhgUksw~Dmg zB;Klc_jBoXqX={4u8gCM8_+N7uq#Uj%nO_70OvNX!?o6!0*SLNLq&$M&&Vw!L^ye-o;~?Gmg2qcJ1HA(pe1=91;vX1`|l zQaeGlj8L==0-sVp39fa3X;-m!h zi&0MXXGH_Yxx@3XFrM}`P#!b3HH~scPN7c=COUs;{F{L)6jh1|d0N+3X+EzI>96Qh zvhlrsGH_QNx7aNB!-~Bd_YQ=ffv6~ACHXGL1u%9Gg76c-Nu(Q(_!4*V6gc6`K*9(s z7P6w(1TIyKd**iLaS+2)hGGi!&Ekc@`rVQb3dVecjL`c_TK}SaoH<(tMC_hH2zt-m zNl=uD!jip-iR7J{h=khvWN3yl(+))Hq@j-UBOHAuyqPDWaw-LTDXb*}bHqUwjk%|Bt@&Uu#yn#u)8$hdL z8WiS0xgEI821;oMp58U3nIrh2;+8a-Pamt&64i!t{IxzW`AbpM_uK4yzXB>7kr#L$ znDhA8!wqQ0fO&r@*)wplg>B%1!P|md;U_+}qqWv8n?Mpl!oJCT%*;W@6*`WNzkE;2 zI^pX0ed7p=Cd_KasO{V z)YL}uN=~D=!%x|br=&054NjC0>@!yViU6X_W{@Ep%@Jp6EPw*hcnbjt)X5!6H%xEM z-c4|0!ecV63}l#cDYR}`nUOmy5hAUUs7oV1_0=J6lwBoQ?d<(iL@)ie`nT}+8XQT4 zBeUZ!Xg4;=@V21bF~{Jy5Zm-@a^5qQ&O&*#t%1!`oAvDI4gA#A$nU&u5SoT7f9gv~ zgcyyvVL>#eT8iQRhuwqr%kF0qd@_!1Cu-em79_liR~h0E9S=7`O!a zGB9uE90w0C6bSXk((poU^hNDcuj`p=>8)J(=El7YRMgK*HT2ufXDA&BnpIW)QYW=T zQ(TP$Dm512vr_cHh3#wuUN4F-7&KfvX!*A^5j(L*1~f~=&c0@RuT7UKa~_ATt70ll zOF{%|WEx6yUX)ZIyoO3Dr7ImrPb75rf9S`CvNiBcTkswlW7;StGQLrqBMWp7c0lDV zG9!^IyF*b-*gZ~2Vg8*Jwv#5;rKQ%tCy8T9Gwus6F|oKm8`|sB+(i1>tEQ1Xx6k$# zUYq=CwF$gE1`BtQpX%`R$^108bvn1XRHwZi;4 z+RPX?gIPVJ;;n&(OrPH11~WCJE92#%IpC1R$YxEV}6Ko@5ShxImBjlErJlnY!V-xc0aS*rn#E8HRH#7+2%t{rLzwvzNO39 zj28LbKx-9?+_g(*oo0c|DN>mCcB(wKeL|L=-$IBQrg-1eQw=JZfV5ULq(QmA%^4A; zt`(?<`h)?J*J@1rI&dSfiF4}SKT3lqjtMPne69X?e`>(D35PZUv`=tBjY(iVuHqJ9 z(Tq@wL7s|9(KngJ?Rr^Ty+WL?6MQ9{}PI7afdS%9|E0pyZ%gzvTg43GDZsn zc_l@YnK`~bYHtx27wvXTDkN6#+gJ4JJKy}$%972HxvZxzdTY(auL`!G!j$;75OFFK zd=e0nzVz!{Pdkx)cxrS6KpRXJb5M1E96kx}jcrE$`ip`ektVa8S@BH#KR6hQ^8wKN zKm7Ycm*ijN-gfq+{KiY+{e35QjyPYD+7oMZC5ek9X?1_XXqdlIsH`vn0iN(`4+%b# zccbFGU^YB<&A`&%^EV&ab4>;bIjkW#YaPG&a2?RdGpmzwAfo|6v&nBhqT_GArBT4j zL{L$nWU@RD=d$5+_c$ZIuqloz7tV|L+iP%qK#GJ1F>%jJ{OSTe5qJ%6n87nhKk>g- z2s|!%R)mu z+QguweMv;9z|)%gngi2(GD7xEqvN-wd1Nlz*jY*omyT_w# zPdYuyZnE7G5sedr=xtNmfGh-|isinu;n7Flp0t6t_CapuqM6i*qs9-v=L|jn@vv2G zm%X?BU;sVFJnpiAtp{`CDXQp=mDgsA4e2YSPl}6y+Ls6uwW{wLRj@`xsz$SZV28}o zXh2A}tYKB6+O+SE7AvOP=c{ARE-pfUSzdWD^wnWcQCF3!{40Co4q65#9h{zJLA1b~ zqx0l#*i)0TQEU{dzAq%}RC~+GiU)ZZUT6N8JH>_49Jgg@>x;}Q%LgTw&v|+!Ir%nc zW(3Ttj%g3Ec=gHimp(sC1JBD)(_tom!5oN`5;|t=p&)vRy&Kx8|B8b>gH;{AC&ijP zu;Wb3DzY)%Cw%Os^I7jmmc8%iNGJI>p@&)**QBftys6Xg9k6f%5&T*289|ODoM#0h zC;@p8k?-N=BUX@5RXu^V8(7Y0H&3xP^^!b@0i=DZZU807bAu0=Qg z?&9f|#4DHEJ?3S>URL=_h^;?iNF_rDLlapsX8^Kxi{5pJ5{5HrTPxJV^!;#fki z=|2*L8utSR*vG^hy}oO#+-uT;-`y_GQLZ?=st* zdbs*b(lm^qNrqztTle`0Ogzf&ab&RSE;jEDY~pD$CUbUIHB6ItVfY8K)nIi#;+st_Gnt}KLeui>% zsS*KYAgJO4h#3lk{RLd`aX?`uMiguT-<b3Q9Qp76@_*gN|Bq+mc>)X8FEJDw^K-~+ z@5A(SRRU)}Z#%;mBmHg<5q};Zj4!mqbAFuC2#C_GL-(zv zo8;mVZ@qt(IF>xS!&kKF@LTC!cwN5S7ruQ?r|!l}*zyUM>f-oU42DXKa2EI`GxBtv zGi)J0$DAQQeU738O1|TDw3vkb)y?=jEYSM)bHpBbHFV6ex`RkiY*UYo@(x$*ENSV~Cw(n9+U&zvU47=GmqHE)O z|7$@E2No7+LT-Y}KV~c3C41>fv8MUG0l8YKQII(h9SH9Dvi_!((z(`BfyYgDyiO3FZtXu zdQyv-R91?~cMLihAF|u|vvKpGTcCjhIS*1sPd;jw=UWTjjbU}zoZM~kcV(gfUMBh% zmxng|vkAjLU;oj3;XgKI;BLl(K;Zz_7HLuI2=1V zhzag8mHni86Gq*1M;rWZBmDKqg}RzP4K4CU2=2yIe~5nR;=4-m;&b@mv6L99f_<(4a1MPm?4# zHg^+$=jYT8p!&Hfiq_!Q(PFPVTt?e^vFCKg}-PME%jn1LQC)F6kQP(%H6OFK_XP~TPMD{># z!}Usm^!Xv%8N1;Pv?}_5L3bR$$&%X;n_SSmgUEQ+O;+J_iN@RWpXRqK5jaNpXFdqV z{V7aP6RBkWrbaB*aJoClvF!B#5UmN%a;St(u+hABas}e9H-iAOTDA+Wi@1y9wgCI2O#U4G*854hb_zm?lZg-%PcyYChZD)|%G2WpD4hxt-TH{G3={iP%-P zA^zQMS`S+)gv{MjOUhB5AyY(nXJC@}(K-+p%nA(gVL>nH&(J0gC{q4ejDt_y$}S+l zdSd6J+qaV=5C+i9XwXSXbCs1n5xy~w9S#!E5;GP!lhff698)IoZO^FE^a~=}44R>S ztO=rOB*10#{OKHj+yn~ffkA%jo6{t1H(+U0X7d$5xRj?z@z}X8sMQF4;T6L zF$0-|^_(v8j)=tkY*Ya^)-sQ&tL5gBr-|8{Z|sy&jAg^IcxHtp`_{!|Oo9`)yk6

F9}F7N&}eAcBm8l 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 + + + + + + + +Citrus + + + + + + + + + + + +

+
+
+
+
+

Version: 4.4.0

+
+
+
+citrus-logo +
+
+ +
+
+
+

1. Preface

+
+
+

Integration tests are a critical part of software testing. In contrast to unit tests where the primary goal is to verify a +single class or method in isolation to other parts of the software the integration tests look at a wider scope with +several components and software parts interacting with each other.

+
+
+

Integration tests often rely on infrastructure components such as I/O, databases, 3rd party services and so on. In combination with +messaging and multiple message transports as client and/or server the automated tests become a tough challenge. Testers need sufficient +tool support to master this challenge for automated integration test. Citrus as an Open Source framework is here to help you master this +challenge.

+
+
+

In a typical enterprise application and middleware scenario automated integration testing of message-based interfaces is exhausting +and sometimes barely possible. Usually the tester is forced to simulate several interface partners in an end-to-end integration test.

+
+
+

The first thing that comes to one’s mind is manual testing. No doubt manual testing is fast. In a long term perspective +manual testing is time-consuming and causes severe problems regarding maintainability as they are error prone and not repeatable.

+
+
+

Citrus provides a complete test automation tool for integration testing of message-based enterprise applications. You can test +your message interfaces (Http REST, SOAP, JMS, Kafka, TCP/IP, FTP, …​) to other applications as client and server. +Every time a code change is made all automated Citrus tests ensure the stability of software interfaces and its message communication.

+
+
+

Regression testing and continuous integration is very easy as Citrus fits into your build lifecycle (Maven or Gradle) as usual +Java unit test (JUnit, TestNG, Cucumber).

+
+
+

With powerful validation capabilities for various message formats like XML, CSV or JSON Citrus is ready to provide fully +automated integration tests for end-to-end use cases. Citrus effectively composes complex messaging use cases with response +generation, error simulation, database interaction and more.

+
+
+

This documentation provides a reference guide to all features of the Citrus test framework. It gives a detailed picture of +effective integration testing with automated integration test environments. Since this document is open, please do not +hesitate to give feedback in form of comments, change requests, fixes and pull requests. We are more than happy to continuously +improve this documentation with your help!

+
+
+
+
+

2. Introduction

+
+
+

Citrus provides automated integration tests for message-based enterprise applications. The framework is Open Source and +supports various messaging transports (Http REST, SOAP, JMS, Kafka, TCP/IP, FTP, …​) and data formats (XML, Json, plaintext, binary).

+
+
+

The Citrus tests use well-known unit test frameworks (JUnit, TestNG, Cucumber) for execution and integrates with build +tools like Maven or Gradle. In addition, Citrus leverages standard libraries like Quarkus, the Spring Framework or Apache Camel.

+
+
+

It is also good to know that Citrus is written purely in Java. Thus, it is also fully compatible with Kotlin.

+
+
+

2.1. Overview

+
+

Citrus supports simulating interface partners across different messaging transports. You can easily +produce and consume messages with a wide range of protocols like HTTP, JMS, TCP/IP, FTP, SMTP and more. The framework is able +to act both as a client and server. In each communication step Citrus is able to validate message contents towards syntax and semantics.

+
+
+

In addition to that the Citrus framework offers a wide range of test actions to take control of the process flow during a test +(e.g. iterations, system availability checks, database connectivity, parallelism, delays, error simulation, scripting and many more).

+
+
+

The test is able to describe a whole use case scenario including several interface partners that exchange many messages with each other. +The composition of complex message flows in a single test case with several test steps is one of the major features in Citrus.

+
+
+

You can choose how to describe the test case definition either with pure XML or a Java domain specific language. The tests can be +executed multiple times as automated integration test.

+
+
+

With JUnit and TestNG integration Citrus can easily be integrated into your build lifecycle process (Maven or Gradle). During a test Citrus +simulates all surrounding interface partners (client or server) without any coding effort. With easy definition of expected +message content (header and body) for XML, CSV, SOAP, JSON or plaintext messages Citrus is able to validate the incoming +data towards syntax and semantics.

+
+
+
+

2.2. Usage scenarios

+
+

Citrus should help you whenever it comes to verify a message-based software with its interfaces to other components and partners +using automated integration tests. Every project that interacts with other components over messaging transports needs to simulate these +interface partners on the client or server side in a test scenario. Citrus is here to help you master these test automation tasks.

+
+
+

usage_sample.jpg

+
+
+

This test set up is typical for a Citrus use case. In such a test scenario we have a system under test (SUT) with several +messaging interfaces to other applications. A client application invokes services on the SUT and triggers business logic. +The SUT is linked to several backend applications over various messaging transports (here SOAP, JMS, and Http). As part of the +business logic one or more of these backend services is called and interim message notifications and responses are sent back to the +client application.

+
+
+

This generates a bunch of messages that are exchanged throughout the components involved.

+
+
+

In the automated integration test Citrus needs to send and receive those messages over different transports. Citrus takes +care of all interface partners (ClientApplication, Backend1, Backend2, Backend3) and simulates their behavior by sending +proper response messages in order to keep the message flow alive.

+
+
+

Each communication step comes with message validation and comparison against an expected message template (e.g. XML or JSON data). +In addition to messaging steps Citrus is also able to perform arbitrary other test actions (e.g. perform a database +query between requests).

+
+
+

In fact a Citrus test case is nothing but a normal JUnit or TestNG test case. This makes it very straight forward to run the tests from +your favorite Java IDE (Eclipse, IntelliJ, VSCode, …​) and as part of your software build process (Maven or Gradle). The Citrus +tests become repeatable and give you fully automated integration tests to ensure software quality and interface stability.

+
+
+

The following reference guide walks through all Citrus capabilities and shows how to have a great integration test experience.

+
+
+
+
+
+

3. Setup

+
+
+

This chapter discusses how to get started with Citrus. It deals with the installation and set up of the framework, so you +are ready to start writing test cases after reading this chapter.

+
+
+

Usually you add Citrus as a test-scoped dependency library in your project. Build tools like Maven or Gradle provide standard +integration for test libraries such as Citrus. As Citrus tests are nothing but normal unit tests (JUnit, TestNG, Cucumber) +you can run the tests with the standard unit test build integration (e.g. via maven-failsafe plugin).

+
+
+

This chapter describes the Citrus project setup possibilities, choose one of them that fits best to include Citrus into your project.

+
+
+

3.1. Using Maven

+
+

Citrus uses Maven internally as a project build tool and provides extended support for Maven projects. +Maven will ease up your life as it manages project dependencies and provides extended build life cycles and conventions for +compiling, testing, packaging and installing your Java project.

+
+
+

In case you already use Maven in your project you can just add Citrus as a test-scoped dependency.

+
+
+

As Maven handles all project dependencies automatically you do not need to download any Citrus project artifacts in advance. +If you are new to Maven please refer to the official Maven documentation and find out how to set up a Maven project.

+
+
+

Assuming you have a proper Maven project setup you can integrate Citrus with it. Just add the Citrus project dependencies +in your Maven pom.xml as a dependency like follows.

+
+
+
    +
  • +

    We add Citrus as test-scoped project dependency to the project POM (pom.xml)

    +
  • +
+
+
+
Add Citrus base dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-base</artifactId>
+  <version>${citrus.version}</version>
+  <scope>test</scope>
+</dependency>
+
+
+
+
    +
  • +

    The dependency above adds the base functionality of Citrus. You need to add modules as you require them.

    +
  • +
+
+
+
Add modules as required in your project. For instance Http support
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-http</artifactId>
+  <version>${citrus.version}</version>
+  <scope>test</scope>
+</dependency>
+
+
+
+
Choose test runtime (JUnit, TestNG, Cucumber) that is used to run the tests.
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-testng</artifactId>
+  <version>${citrus.version}</version>
+  <scope>test</scope>
+</dependency>
+
+
+
+
    +
  • +

    Citrus integrates nicely with the Spring framework. +In case you want to use the Spring dependency injection and bean configuration capabilities just +add the Spring support in Citrus.

    +
  • +
+
+
+
Add Spring support
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-spring</artifactId>
+  <version>${citrus.version}</version>
+  <scope>test</scope>
+</dependency>
+
+
+
+
    +
  • +

    Also, Citrus provides a Maven plugin that you can add. The plugin provides some convenience functionalities such +as creating new tests from command line.

    +
  • +
+
+
+
Add Citrus Maven plugin
+
+
<plugin>
+  <groupId>org.citrusframework.mvn</groupId>
+  <artifactId>citrus-maven-plugin</artifactId>
+  <version>${citrus.version}</version>
+  <configuration>
+    <author>Donald Duck</author>
+    <targetPackage>org.citrusframework</targetPackage>
+  </configuration>
+</plugin>
+
+
+
+

The Maven project is now ready to use Citrus. You can start writing new test cases with the Citrus Maven plugin:

+
+
+
Create new test
+
+
mvn citrus:create-test
+
+
+
+

The command above starts an interactive command line interface that helps you to create a test.

+
+
+

Once you have written the Citrus test cases you can execute them automatically in your Maven software build lifecycle. +The tests will be included into your project’s integration-test phase using the Maven failsafe plugin. Here is a sample +failsafe configuration for Citrus.

+
+
+
Maven failsafe plugin
+
+
<plugin>
+  <groupId>org.apache.maven.plugins</groupId>
+  <artifactId>maven-failsafe-plugin</artifactId>
+  <version>${maven.failsafe.version}</version>
+  <executions>
+    <execution>
+      <id>integration-tests</id>
+      <goals>
+        <goal>integration-test</goal>
+        <goal>verify</goal>
+      </goals>
+    </execution>
+  </executions>
+</plugin>
+
+
+
+

The Citrus test sources go to the default Maven test source directory src/test/java and src/test/resources.

+
+
+

You are now ready to call the usual Maven verify goal (mvn verify) in order to build your project and run the tests. +The Citrus integration tests are executed automatically during the build process.

+
+
+
Run all tests with Maven
+
+
mvn verify
+
+
+
+
Run single test by its name
+
+
mvn verify -Dit.test=MyFirstCitrusIT
+
+
+
+ + + + + +
+ + +The Maven failsafe plugin by default executes tests with specific name pattern. This is because integration +tests should not execute in Maven unit test phase, too. Your integration tests should follow +the failsafe name pattern with each test name beginning or ending with 'IT'. +
+
+
+ + + + + +
+ + +If you need additional assistance in setting up a Citrus Maven project please visit our Maven setup tutorial +on https://citrusframework.org/tutorials.html. +
+
+
+
+

3.2. Using Gradle

+
+

As Citrus tests are nothing but normal JUnit or TestNG tests the integration to Gradle as build tool is as easy as adding +the source files to a folder in your project. With the Gradle task execution for integration tests you are able to execute +the Citrus tests like you would do with normal unit tests.

+
+
+

The Gradle build configuration goes to the build.gradle and settings.gradle files. The files define the project name +and the project version.

+
+
+
Gradle project configuration
+
+
rootProject.name = 'citrus-sample-gradle'
+group 'org.citrusframework.samples'
+version '${citrus.version}'
+
+
+
+

The Citrus libraries are available on Maven central repository. This means you should add this repository so Gradle knows +how to download the required Citrus artifacts.

+
+
+
Add Maven central repository
+
+
repositories {
+    mavenCentral()
+}
+
+
+
+

Citrus stable release versions are available on Maven central. Now let’s move on with adding the Citrus libraries to the project.

+
+
+
Add Citrus test scoped dependencies
+
+
dependencies {
+    testCompile group: 'org.citrusframework', name: 'citrus-base', version: '${citrus.version}'
+    testCompile group: 'org.citrusframework', name: 'citrus-http', version: '${citrus.version}'
+    testCompile group: 'org.testng', name: 'testng', version: '6.11'
+    [...]
+}
+
+
+
+

Citrus provides various modules that encapsulate different functionalities. The citrus-base module is the basis and holds core functionality. In addition, you may +add further modules that match your project needs (e.g. add Http support with citrus-http).

+
+
+

As a runtime the project chose to use TestNG. You can also use JUnit or Cucumber as a test runtime. Each of those frameworks integrates seamlessly with the Gradle build.

+
+
+
Choose test runtime provider
+
+
test {
+    useTestNG()
+}
+
+
+
+

Of course JUnit is also supported. This completes the Gradle build configuration settings. You can move on to writing some Citrus integration tests and add those to src/test/java directory.

+
+
+

You can use the Gradle wrapper for compile, package and test the sample with Gradle build command line.

+
+
+
Run the build with Gradle
+
+
gradlew clean build
+
+
+
+

This executes all Citrus test cases during the build. You will be able to see Citrus performing some integration test logging output.

+
+
+

If you just want to execute all tests you can call:

+
+
+
Run all tests
+
+
gradlew clean check
+
+
+
+

Of course, you can also run the Citrus tests from your favorite Java IDE. Just start the Citrus test as a normal unit test +using the Gradle integration in IntelliJ, Eclipse or VSCode.

+
+
+
+
+
+

4. Runtimes

+
+
+

A Citrus test case is nothing but Java unit test leveraging well-known standard tools such as JUnit, +TestNG or Cucumber as a runtime.

+
+
+

Chances are very high that Java developers are familiar with at least one of the standard tools. Everything you can do +with JUnit and TestNG you can do with Citrus tests as well (e.g. Maven build integration, run tests from your favorite IDE, +include tests into a continuous build tool).

+
+
+ + + + + +
+ + +Why is Citrus related to unit test frameworks, although it represents a framework for integration testing? The answer to this question is quite simple: This is because Citrus wants to benefit from standard libraries such as JUnit +and TestNG for Java test execution. Both unit testing frameworks offer various ways of execution and are widely supported +by other tools (e.g. continuous build, build lifecycle, development IDE). +
+
+
+

You can write the Citrus test code in a Java domain specific language or in form of an XML test +declaration file that gets loaded as part of the test. The Java domain specific language in Citrus is a set of classes +and methods to leverage the test code in form of a fluent API. Users can simply configure a test action with the different +options using a fluent builder pattern style DSL.

+
+
+
Citrus Java DSL
+
+
@CitrusTest(name = "Hello_IT")
+public void helloTest() {
+    given(
+        variable("user", "Citrus")
+    );
+
+    then(
+        echo().message("Hello ${user}!"
+    ));
+}
+
+
+
+

The sample above is a very simple Citrus test that creates a test variable and prints a message to the console. The Java DSL you write +is the same for all runtimes (JUnit, TestNG, Cucumber, etc.) and should help you to also solve very complex test scenarios.

+
+
+

The following sections have a closer look at the different runtimes for Citrus.

+
+
+

4.1. TestNG

+
+

TestNG stands for next generation testing and has had a great influence in adding Java annotations to the unit test community. +Citrus is able to define tests as executable TestNG Java classes.

+
+
+ + + + + +
+ + +The TestNG support is shipped in a separate Maven module. You need to include the module as a dependency in your +project. +
+
+
+
TestNG module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-testng</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

4.1.1. TestNG tests

+
+

See the following sample showing how to write a Citrus test on top of TestNG:

+
+
+
TestNG Citrus test
+
+
package org.citrusframework.samples;
+
+import org.testng.annotations.Test;
+import org.citrusframework.annotations.CitrusTest;
+import org.citrusframework.testng.TestNGCitrusSupport;
+
+@Test
+public class Simple_IT extends TestNGCitrusSupport {
+
+    @CitrusTest(name = "Simple_IT")
+    public void simpleTest() {
+        description("First example showing the basic Java DSL!");
+
+        given(
+            variable("user", "Citrus")
+        );
+
+        then(
+            echo().message("Hello ${user}!"
+        ));
+    }
+}
+
+
+
+

If you are familiar with TestNG you will see that the Java class is a normal TestNG test class using the usual +@Test annotation. For convenience reasons you can extend a basic Citrus TestNG base class TestNGCitrusSupport which +enables the Citrus test execution as well as the Java DSL features for us.

+
+
+ + + + + +
+ + +You can also combine Citrus with the Spring framework and its dependency injection and IoC capabilities. In order to +enable Spring support in Citrus add the citrus-spring module to your project and extend TestNGCitrusSpringSupport as a +base class. With the Spring support in Citrus the test is able to use @Autowired annotations for injecting Spring beans into the +test class and you can define the Spring application context with @Configuration annotations for instance. +
+
+
+

In addition, the test methods use the @CitrusTest annotation which allows setting properties such as test names and packages.

+
+
+

The Citrus test logic goes directly as the method body with using the Citrus Java domain specific language features. As you +can see the Java DSL is able to follow BDD (Behavior Drive Design) principles with Given-When-Then syntax. As an alternative +to that you can just use run() for all test actions.

+
+
+
Pure test action DSL
+
+
@CitrusTest(name = "Simple_IT")
+public void simpleTest() {
+    description("First example showing the basic Java DSL!");
+
+    run(variable("user", "Citrus"));
+
+    run(
+        echo().message("Hello ${user}!"
+    ));
+}
+
+
+
+

The great news is that you can still use the awesome TestNG features in with the Citrus test class (e.g. parallel test +execution, test groups, setup and tear down operations and so on). Just to give an example we can simply add a test group +to our test like this:

+
+
+
Set test groups
+
+
@Test(groups = {"long-running"})
+public void longRunningTest() {
+    ...
+}
+
+
+
+

For more information on TestNG please visit the official TestNG website, where you find a complete +reference documentation. The following sections deal with a subset of these TestNG features in particular.

+
+
+
+

4.1.2. Use TestNG data providers

+
+

TestNG as a framework comes with lots of great features such as data providers. Data providers execute a test case several +times with different test data. Each test execution works with a specific parameter value. You can use data provider +parameter values as test variables in Citrus. See the next listing on how to use TestNG data providers in Citrus:

+
+
+
TestNG Citrus data provider test
+
+
public class DataProviderIT extends TestNGCitrusSupport {
+
+    @CitrusTest
+    @CitrusParameters({"message", "delay"})
+    @Test(dataProvider = "messageDataProvider")
+    public void dataProvider(String message, Long sleep) {
+        run(echo(message));
+        run(sleep().milliseconds(sleep));
+
+        run(echo("${message}"));
+        run(echo("${delay}"));
+    }
+
+    @DataProvider
+    public Object[][] messageDataProvider() {
+        return new Object[][] {
+                { "Hello World!", 300L },
+                { "Citrus rocks!", 1000L },
+                { "Hi from Citrus!", 500L },
+        };
+    }
+}
+
+
+
+

Above test case method is annotated with TestNG data provider called messageDataProvider . In the same class you can write +the data provider that returns a list of parameter values. TestNG will execute the test case several times according to the +provided parameter list. Each execution is shipped with the respective parameter value.

+
+
+

According to the @CitrusParameter annotation the test will have test variables called message and delay.

+
+
+
With Sharding
+
+

TestNG data provider based tests can additionally be run in a distributed manner, facilitating test sharding. +The following snipped showcases you how to get started within a Spring test case environment.

+
+
+
Sharded TestNG Citrus data provider test
+
+
import static org.citrusframework.common.TestLoader.SPRING;
+import static org.citrusframework.sharding.Shard.createShard;
+
+import org.citrusframework.annotations.CitrusTestSource;
+import org.citrusframework.testng.CitrusParameters;
+import org.citrusframework.testng.spring.TestNGCitrusSpringSupport;
+import org.testng.annotations.DataProvider;
+import org.testng.annotations.Test;
+
+public class DataProviderIT extends TestNGCitrusSupport {
+
+    @CitrusParameters({"message", "delay"})
+    @Test(dataProvider = "messageDataProvider")
+    @CitrusTestSource(type = SPRING, name = "DataProviderIT")
+    public void dataProvider(String message, Long sleep) {
+        run(echo(message));
+        run(sleep().milliseconds(sleep));
+    }
+
+    @DataProvider("messageDataProvider")
+    public Object[][] messageDataProvider() {
+        return createShard(
+            new Object[][] {
+                { "Hello World!", 300L },
+                { "Citrus rocks!", 1000L },
+                { "Hi from Citrus!", 500L },
+            }
+        );
+    }
+}
+
+
+
+

All the available configuration options are documented withing the chapter Sharding Test Cases

+
+
+
+
+

4.1.3. Run tests in parallel

+
+

Integration tests tend to be more time-consuming compared to pure unit tests when it comes to execute tests. This is because +integration tests often need to initialize test infrastructure (e.g. test servers, database connections). Running tests +in parallel can reduce the overall test suite time a lot.

+
+
+

When running tests in parallel you need to make sure each test operates on its own set of resources. Tests must not share +components such as the Citrus Java DSL test action runner or the test context.

+
+
+

You should be using the resource injection to make sure each test operates on its own resources.

+
+
+
Resource injection
+
+
public class ResourceInjection_IT extends TestNGCitrusSupport {
+
+    @Test
+    @CitrusTest
+    public void injectResources(@Optional @CitrusResource TestCaseRunner runner,
+                                @Optional @CitrusResource TestContext context) {
+
+        runner.given(
+            createVariable("random", "citrus:randomNumber(10)")
+        );
+
+        runner.run(
+            echo("The random number is: ${random}")
+        );
+    }
+}
+
+
+
+

First of all the method parameters must be annotated with @Optional because the values are not injected by TestNG itself +but by the Citrus base test class. Finally, the parameter requires the @CitrusResource annotation in order to mark the +parameter for Citrus resource injection.

+
+
+

Now each method uses its own resource instances which makes sure that parallel test execution can take place without having +the risk of side effects on other tests running at the same time. Of course, you also need to make sure that the message +exchange in your tests is ready to be performed in parallel (e.g. use message selectors).

+
+
+
+
+

4.2. JUnit5

+
+

With JUnit version 5 the famous unit test framework offers a new major version. The JUnit platform provides awesome extension +points for other frameworks like Citrus to integrate with the unit testing execution.

+
+
+

Citrus provides extensions in order to enable Citrus related dependency injection and parameter resolving in your JUnit5 test.

+
+
+ + + + + +
+ + +The JUnit5 support is shipped in a separate Maven module. You need to include the module as a dependency in your +project. +
+
+
+
JUnit5 module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-junit5</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

4.2.1. Citrus extension

+
+

You can use the Citrus JUnit5 extension on your test as follows:

+
+
+
JUnit5 Citrus test
+
+
package org.citrusframework.samples;
+
+import org.citrusframework.GherkinTestActionRunner;
+import org.citrusframework.annotations.CitrusTest;
+import org.citrusframework.junit.jupiter.CitrusSupport;
+import org.junit.jupiter.api.Test;
+
+@CitrusSupport
+public class Simple_IT {
+
+    @Test
+    @CitrusTest(name = "Simple_IT")
+    public void simpleTest(@CitrusResource GherkinTestActionRunner runner) {
+        runner.description("First example showing the basic Java DSL!");
+
+        runner.given(
+            variable("user", "Citrus")
+        );
+
+        runner.then(
+            echo().message("Hello ${user}!"
+        ));
+    }
+}
+
+
+
+

The class above is using the JUnit5 @Test annotation as a normal unit test would do. The @CitrusSupport annotation marks +the test to use the Citrus JUnit5 extension. This enables us to use the @CitrusTest annotation on the test and adds +support for the parameter injection for the TestActionRunner.

+
+
+ + + + + +
+ + +You can use the @CitrusSupport annotation, or you can use the classic @ExtendWith(CitrusExtension.class) annotation +to enable the Citrus support for JUnit5. +
+
+
+

The Citrus Java DSL runner is the entrance to the Java fluent API provided by Citrus. The sample above uses the Gherkin test runner +variation for leveraging the BDD (Behavior Driven Development) style Given-When-Then syntax.

+
+
+

You can also inject the current TestContext in order to get access to the current test variables used by Citrus.

+
+
+ + + + + +
+ + +You can also combine Citrus with the Spring framework and its dependency injection and IoC capabilities. In order to +enable Spring support in Citrus add the citrus-spring module to your project and use the @ExtendWith(CitrusSpringExtension.class) +annotation. With the Spring support in Citrus the test is able to load components via the Spring application context. +
+
+
+
+

4.2.2. Endpoint injection

+
+

In addition to injecting test resources you can also inject endpoints via @CitrusEndpoint annotated field injection in +your test class. This enables you to inject endpoint components that are defined in the Citrus context configuration.

+
+
+
JUnit5 Citrus endpoint injection
+
+
package org.citrusframework.samples;
+
+import org.citrusframework.annotations.*;
+import org.citrusframework.GherkinTestActionRunner;
+import org.citrusframework.junit.jupiter.CitrusSupport;
+import org.citrusframework.http.client.HttpClient;
+import org.junit.jupiter.api.Test;
+import org.springframework.http.HttpStatus;
+
+@CitrusSupport
+public class Simple_IT {
+
+    @CitrusEndpoint
+    private HttpClient httpClient;
+
+    @Test
+    @CitrusTest
+    public void test(@CitrusResource GherkinTestActionRunner runner) {
+        runner.http().client(httpClient)
+                    .send()
+                    .get("/hello");
+
+        runner.http().client(httpClient)
+                    .receive()
+                    .response(HttpStatus.OK);
+    }
+}
+
+
+
+
+

4.2.3. Citrus Spring extension

+
+

Spring is a famous dependency injection framework that also provides support for JUnit5. Citrus is able to load its +components as Spring beans in an application context. The Citrus JUnit5 extension works great with the Spring extension.

+
+
+

The Spring extension loads the application context and Citrus adds all components to the Spring bean configuration.

+
+
+
JUnit5 Citrus Spring test
+
+
@CitrusSpringSupport
+@ContextConfiguration(classes = CitrusSpringConfig.class)
+public class SpringBean_IT {
+
+    @Autowired
+    private DirectEndpoint direct;
+
+    @Test
+    @CitrusTest
+    void springBeanTest(@CitrusResource TestActionRunner actions) {
+        actions.$(send().endpoint(direct)
+                    .message()
+                    .body("Hello from Citrus!"));
+
+        actions.$(receive().endpoint(direct)
+                    .message()
+                    .body("Hello from Citrus!"));
+    }
+}
+
+
+
+

The test now uses the @CitrusSpringSupport annotation which combines the @ExtendWith(CitrusSpringExtension.class) +and @ExtendWith(SpringExtension.class) annotation. This way the test combines the Spring application context management with +the Citrus Java DSL functionality.

+
+
+

You can load Spring beans with @Autowired into your test. +Also, you can use the @CitrusResource annotations to inject the test action runner fluent Java API.

+
+
+ + + + + +
+ + +The Spring application context should use the basic CitrusSpringConfig configuration class to load all Citrus components as Spring beans. +You can customize the Spring application context by adding more configuration classes. +
+
+
+
+

4.2.4. Test Sharding

+
+

You can run your JUnit5 test cases in order in a distributed manner, facilitating test sharding. +The following snipped showcases you how to get started within a Spring/XML test case environment. +Note that sharding is available with all kind of Stream-sources.

+
+
+
Sharded JUnit5 Spring/XML test
+
+
import static org.citrusframework.junit.jupiter.CitrusTestFactorySupport.springXml;
+import static org.citrusframework.sharding.Shard.createShard;
+
+import org.citrusframework.config.CitrusSpringConfig;
+import org.citrusframework.junit.jupiter.spring.CitrusSpringSupport;
+import org.citrusframework.junit.jupiter.spring.CitrusSpringXmlTestFactory;
+import org.springframework.test.context.ContextConfiguration;
+
+@CitrusSpringSupport
+@ContextConfiguration(classes = {CitrusSpringConfig.class})
+class SpringBeanXml_IT {
+
+    @CitrusSpringXmlTestFactory
+    Stream<DynamicTest> shardedSpringBeanXml_IT() {
+        return createShard(
+            springXml().packageScan("org.citrusframework.junit.jupiter.simple")
+        );
+    }
+}
+
+
+
+

All the available configuration options are documented withing the chapter Sharding Test Cases

+
+
+
+
+

4.3. JUnit4

+
+

JUnit4 is still very popular and widely supported by many tools even though there is a new major version with JUnit5 already +available. In general Citrus supports both JUnit4 and JUnit5 as test execution framework.

+
+
+ + + + + +
+ + +The JUnit4 support is shipped in a separate Maven module. You need to include the module as a dependency in your +project. +
+
+
+
JUnit4 module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-junit</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

4.3.1. JUnit4 tests

+
+

See the following sample test class that uses JUnit4.

+
+
+
JUnit4 Citrus test
+
+
package org.citrusframework.samples;
+
+import org.junit.Test;
+import org.citrusframework.annotations.CitrusTest;
+import org.citrusframework.junit.JUnit4CitrusSupport;
+
+public class Simple_IT extends JUnit4CitrusSupport {
+
+    @Test
+    @CitrusTest(name = "Simple_IT")
+    public void simpleTest() {
+        description("First example showing the basic Java DSL!");
+
+        given(
+            variable("user", "Citrus")
+        );
+
+        then(
+            echo().message("Hello ${user}!"
+        ));
+    }
+}
+
+
+
+

The simple test class above uses the normal @Test annotation and extends the base class JUnit4CitrusSupport. This is +the most convenient way to access the Citrus Java DSL capabilities. As an alternative you may switch to using the +CitrusJUnit4Runner in your test class.

+
+
+

The fine thing here is that we are still able to use all JUnit features such as before/after hooks or ignoring tests.

+
+
+

After the test run the result is reported exactly like a usual JUnit unit test would do. This also means that +you can execute this Citrus JUnit class like every other JUnit test, especially out of any Java IDE, with Maven, with Gradle and so on.

+
+
+ + + + + +
+ + +You can also combine Citrus with the Spring framework and its dependency injection and IoC capabilities. In order to +enable Spring support in Citrus add the citrus-spring module to your project and extend JUnit4CitrusSpringSupport as a +base class. With the Spring support in Citrus the test is able to use @Autowired annotations for injecting Spring beans into the +test class and you can define the Spring application context with @Configuration annotations for instance. +
+
+
+
+

4.3.2. Run tests in parallel

+
+

Integration tests tend to be more time-consuming compared to pure unit tests when it comes to execute tests. This is because +integration tests often need to initialize test infrastructure (e.g. test servers, database connections). Running tests +in parallel can reduce the overall test suite time a lot.

+
+
+

When running tests in parallel you need to make sure each test operates on its own set of resources. Tests must not share +components such as the Citrus Java DSL test action runner or the test context.

+
+
+

You should be using the resource injection to make sure each test operates on its own resources.

+
+
+
Resource injection
+
+
public class ResourceInjection_IT extends JUnit4CitrusSupport {
+
+    @Test
+    @CitrusTest
+    public void injectResources(@CitrusResource TestCaseRunner runner,
+                                @CitrusResource TestContext context) {
+
+        runner.given(
+            createVariable("random", "citrus:randomNumber(10)")
+        );
+
+        runner.run(
+            echo("The random number is: ${random}")
+        );
+    }
+}
+
+
+
+

The method parameters require the @CitrusResource annotations in order to mark the parameter for Citrus resource injection.

+
+
+

Now each method uses its own resource instances which makes sure that parallel test execution can take place without having +the risk of side effects on other tests running at the same time. Of course, you also need to make sure that the message +exchange in your tests is ready to be performed in parallel (e.g. use message selectors).

+
+
+
+
+

4.4. Cucumber

+
+

Behavior driven development (BDD) is a very popular concept when it comes to find a common understanding of test scopes +test logic. The idea of defining and describing the software behavior as basis for all tests in prior to translating those +feature descriptions into executable tests is a very interesting approach because it includes the technical experts as well +as the domain experts.

+
+
+

With BDD the domain experts should be able to read and verify tests and the technical experts get a detailed description +of what should happen in the test.

+
+
+

The test scenario descriptions follow the Gherkin syntax with a "Given-When-Then" structure. The Gherkin language is +business readable and helps to explain business logic with help of concrete examples.

+
+
+

There are several frameworks in the Java community supporting BDD concepts. Citrus has dedicated support for the Cucumber +framework because Cucumber is well suited for extensions and plugins. So with the Citrus and Cucumber integration you can +write Gherkin syntax scenarios in order to run those as Citrus integration tests.

+
+
+ + + + + +
+ + +The Cucumber components in Citrus are located in a separate Maven module. You need to include the module as a Maven +dependency to your project. +
+
+
+
Cucumber module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-cucumber</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

Cucumber works with both JUnit and TestNG as unit testing framework. You can choose which framework to use with Cucumber. +So following from that we need a Maven dependency for the unit testing framework support:

+
+
+
Cucumber JUnit support
+
+
<dependency>
+  <groupId>io.cucumber</groupId>
+  <artifactId>cucumber-junit</artifactId>
+  <version>${cucumber.version}</version>
+</dependency>
+
+
+
+

In order to enable Citrus Cucumber support we need to specify a special object factory in the environment. The most +comfortable way to specify a custom object factory is to add this property to the cucumber.properties in classpath.

+
+
+
cucumber.properties
+
+
cucumber.object-factory=org.citrusframework.cucumber.backend.CitrusObjectFactory
+
+
+
+

This special object factory takes care of creating all step definition instances. The object factory is able to inject +@CitrusResource annotated fields in step classes. We will see this later on in the examples. The usage of this special +object factory is mandatory in order to combine Citrus and Cucumber capabilities.

+
+
+

The CitrusObjectFactory will automatically initialize the Citrus world for us. This includes the default Citrus context +configuration that is automatically loaded within the object factory. So you can define and use Citrus components as usual +within your test.

+
+
+

After these preparation steps you are able to combine Citrus and Cucumber in your project.

+
+
+ + + + + +
+ + +In case you want to use Spring support in Citrus with a Spring application context you should use the following factory +implementation. +
+
+
+
cucumber.properties
+
+
cucumber.object-factory=org.citrusframework.cucumber.backend.spring.CitrusSpringObjectFactory
+
+
+
+

4.4.1. Cucumber options

+
+

Cucumber is able to run tests with JUnit. The basic test case is an empty test which uses the respective JUnit runner +implementation from cucumber.

+
+
+
MyFeature.java
+
+
@RunWith(Cucumber.class)
+@CucumberOptions(
+  plugin = { "pretty", "org.citrusframework.cucumber.CitrusReporter" } )
+public class MyFeatureIT {
+}
+
+
+
+

The test case above uses the Cucumber JUnit test runner. In addition to that we give some options to the Cucumber execution. +In case you want to have the usual Citrus test results reported you can add the special Citrus reporter implementation +org.citrusframework.cucumber.CitrusReporter. This class is responsible for printing the Citrus test summary. This reporter +extends the default Cucumber reporter so the default Cucumber report summary is also printed to the console.

+
+
+

That completes the JUnit class configuration. Now we are able to add feature stories and step definitions to the package +of our test MyFeatureIT . Cucumber and Citrus will automatically pick up step definitions and glue code in that test +package. So let’s write a feature story echo.feature right next to the MyFeatureIT test class.

+
+
+
echo.feature
+
+
Feature: Echo service
+
+  Scenario: Say hello
+    Given My name is Citrus
+    When I say hello to the service
+    Then the service should return: "Hello, my name is Citrus!"
+
+  Scenario: Say goodbye
+    Given My name is Citrus
+    When I say goodbye to the service
+    Then the service should return: "Goodbye from Citrus!"
+
+
+
+

As you can see this story defines two scenarios with the Gherkin Given-When-Then syntax. Now we need to add step definitions +that glue the story description to Citrus test actions. Let’s do this in a new class EchoSteps .

+
+
+
EchoSteps.java
+
+
public class EchoSteps {
+
+    @CitrusResource
+    private TestCaseRunner runner;
+
+    @Given("^My name is (.*)$")
+    public void my_name_is(String name) {
+        runner.variable("username", name);
+    }
+
+    @When("^I say hello.*$")
+    public void say_hello() {
+        runner.when(
+                send("echoEndpoint")
+                    .message()
+                    .type(MessageType.PLAINTEXT)
+                    .body("Hello, my name is ${username}!"));
+    }
+
+    @When("^I say goodbye.*$")
+    public void say_goodbye() {
+        runner.when(
+                send("echoEndpoint")
+                    .message()
+                    .type(MessageType.PLAINTEXT)
+                    .body("Goodbye from ${username}!"));
+    }
+
+    @Then("^the service should return: \"([^\"]*)\"$")
+    public void verify_return(final String body) {
+        runner.then(
+                receive("echoEndpoint")
+                    .message()
+                    .type(MessageType.PLAINTEXT)
+                    .body(body));
+    }
+}
+
+
+
+

The step definition class is a normal POJO that uses some annotations such as @CitrusResource annotated TestCaseRunner. +The Citrus backend injects the test runner instance at runtime.

+
+
+

The step definition contains normal @Given, @When or @Then annotated methods that match the scenario descriptions in our +feature file. Cucumber will automatically find matching methods and execute them. The methods add test actions to the test runner +as we used to do in normal Java DSL tests.

+
+
+

That is a first combination of Citrus and Cucumber BDD. The feature file gets translated into step implementations that +use Citrus test action runner Java API to run integration tests with behavior driven development.

+
+
+
+

4.4.2. Cucumber XML steps

+
+

The previous section handled glue code in Java in form of step definitions accessing the Java test runner fluent API. +This chapter deals with the same concept with just XML configuration.

+
+
+

Citrus provides a separate configuration namespace and schema definition for Cucumber related step definitions. Include +this namespace into your Spring configuration in order to use the Citrus Cucumber configuration elements.

+
+
+
Spring bean configuration schema
+
+
<spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
+     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+     xmlns="http://www.citrusframework.org/schema/cucumber/testcase"
+     xsi:schemaLocation="
+     http://www.springframework.org/schema/beans
+     http://www.springframework.org/schema/beans/spring-beans.xsd
+     http://www.citrusframework.org/schema/cucumber/testcase
+     http://www.citrusframework.org/schema/cucumber/testcase/citrus-cucumber-testcase.xsd">
+
+    [...]
+
+</spring:beans>
+
+
+
+

The JUnit Cucumber feature class itself does not change. We still use the Cucumber JUnit runner implementation with some +options specific to Citrus:

+
+
+
MyFeatureIT.java
+
+
@RunWith(Cucumber.class)
+@CucumberOptions(
+    plugin = { "pretty", "org.citrusframework.cucumber.CitrusReporter" } )
+public class MyFeatureIT {
+}
+
+
+
+

The feature file with its Gherkin scenarios does also not change:

+
+
+
echo.feature
+
+
Feature: Echo service
+
+  Scenario: Say hello
+    Given My name is Citrus
+    When I say hello to the service
+    Then the service should return: "Hello, my name is Citrus!"
+
+  Scenario: Say goodbye
+    Given My name is Citrus
+    When I say goodbye to the service
+    Then the service should return: "Goodbye from Citrus!"
+
+
+
+

In the feature package my.company.features we add a new XML file EchoSteps.xml that holds the new XML step definitions:

+
+
+
EchoSteps.xml
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<spring:beans xmlns:citrus="http://www.citrusframework.org/schema/testcase"
+      xmlns:spring="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns="http://www.citrusframework.org/schema/cucumber/testcase"
+      xsi:schemaLocation="http://www.springframework.org/schema/beans
+                          http://www.springframework.org/schema/beans/spring-beans.xsd
+                          http://www.citrusframework.org/schema/cucumber/testcase
+                          http://www.citrusframework.org/schema/cucumber/testcase/citrus-cucumber-testcase.xsd">
+
+  <step given="^My name is (.*)$" parameter-names="username">
+    <citrus:create-variables>
+      <citrus:variable name="username" value="${username}"/>
+    </citrus:create-variables>
+  </step>
+
+  <step when="^I say hello.*$">
+    <citrus:send endpoint="echoEndpoint">
+      <citrus:message type="plaintext">
+        <citrus:data>Hello, my name is ${username}!</citrus:data>
+      </citrus:message>
+    </citrus:send>
+  </step>
+
+  <step when="^I say goodbye.*$">
+    <citrus:send endpoint="echoEndpoint">
+      <citrus:message type="plaintext">
+        <citrus:data>Goodbye from ${username}!</citrus:data>
+      </citrus:message>
+    </citrus:send>
+  </step>
+
+  <step then="^the service should return: &quot;([^&quot;]*)&quot;$" parameter-names="body">
+    <citrus:receive endpoint="echoEndpoint">
+      <citrus:message type="plaintext">
+        <citrus:data>You just said: ${body}</citrus:data>
+      </citrus:message>
+    </citrus:receive>
+  </step>
+
+</spring:beans>
+
+
+
+

The above step definition uses pure XML actions. Citrus will automatically read the step definition and add those to the +Cucumber runtime. Following from that the step definitions are executed when matching a statement in the feature story.

+
+
+

The XML step files follow a naming convention. Citrus will look for all files located in the feature package with name +pattern **/**.Steps.xml and load those definitions when Cucumber starts up.

+
+
+

The XML steps are able to receive parameters from the Gherkin regexp matcher. The parameters are passed to the step as +test variable. The parameter names get declared in the optional attribute parameter-names. In the step definitions you +can use the parameter names as test variables.

+
+
+ + + + + +
+ + +The test variables are visible in all upcoming steps, too. This is because the test variables are global by default. +If you need to set local state for a step definition you can use another attribute global-context and set it to false +in the step definition. This way all test variables and parameters are only visible in the step definition. Other steps +will not see the test variables. +
+
+
+ + + + + +
+ + +Another notable thing is the XML escaping of reserved characters in the pattern definition. You can see that in the +last step where the then attribute is escaping quotation characters. +
+
+
+
Escape reserved characters
+
+
<step then="^the service should return: &quot;([^&quot;]*)&quot;$" parameter-names="body">
+...
+</step>
+
+
+
+

We have to do this because otherwise the quotation characters will interfere with the XML syntax in the attribute.

+
+
+

This completes the description of how to add XML step definitions to the cucumber BDD tests.

+
+
+
+

4.4.3. Cucumber Spring support

+
+

Cucumber provides support for Spring dependency injection in step definition classes. The Cucumber Spring capabilities +are included in a separate module. So first of all we have to add this dependency to our project:

+
+
+
+
<dependency>
+  <groupId>io.cucumber</groupId>
+  <artifactId>cucumber-spring</artifactId>
+  <version>${cucumber.version}</version>
+</dependency>
+
+
+
+

The Citrus Cucumber extension has to handle things different when Cucumber Spring support is enabled. Therefore we use +another object factory implementation that also support Cucumber Spring features. Change the object factory property in +cucumber.properties to the following:

+
+
+
cucumber.properties
+
+
cucumber.object-factory=org.citrusframework.cucumber.backend.spring.CitrusSpringObjectFactory
+
+
+
+

Now we are ready to add @Autowired Spring bean dependency injection to step definition classes:

+
+
+
EchoSteps.java
+
+
@ContextConfiguration(classes = CitrusSpringConfig.class)
+public class EchoSteps {
+    @Autowired
+    private Endpoint echoEndpoint;
+
+    @CitrusResource
+    protected TestDesigner designer;
+
+    @Given("^My name is (.*)$")
+    public void my_name_is(String name) {
+        designer.variable("username", name);
+    }
+
+    @When("^I say hello.*$")
+    public void say_hello() {
+        designer.send(echoEndpoint)
+            .messageType(MessageType.PLAINTEXT)
+            .payload("Hello, my name is ${username}!");
+    }
+
+    @When("^I say goodbye.*$")
+    public void say_goodbye() {
+        designer.send(echoEndpoint)
+            .messageType(MessageType.PLAINTEXT)
+            .payload("Goodbye from ${username}!");
+    }
+
+    @Then("^the service should return: \"([^\"]*)\"$")
+    public void verify_return(final String body) {
+        designer.receive(echoEndpoint)
+            .messageType(MessageType.PLAINTEXT)
+            .payload("You just said: " + body);
+    }
+}
+
+
+
+

As you can see we used Spring autowiring mechanism for the echoEndpoint field in the step definition. Also be sure to +define the @ContextConfiguration annotation on the step definition. The Cucumber Spring support loads the Spring application +context and takes care of dependency injection. We use the Citrus CitrusSpringConfig Java configuration because this is +the main entrance for Citrus test cases. You can add custom beans and further Spring related configuration to this Spring +application context. If you want to add more beans for autowiring do so in the Citrus Spring configuration. Usually this +is the default citrus-context.xml which is automatically loaded.

+
+
+

Of course, you can also use a custom Java Spring configuration class here. Please be sure to always import the Citrus +Spring Java configuration classes, too.

+
+
+

As usual, we are able to use @CitrusResource annotated TestCaseRunner fields for building the Citrus integration test +logic. With this extension you can use the full Spring testing power in your tests in particular dependency injection and +also transaction management for data persistence tests.

+
+
+
+

4.4.4. YAKS step definitions

+
+

YAKS is a side project of Citrus and provides some predefined steps for typical +integration test scenarios that you can use out-of-the-box.

+
+
+

You can basically define send/receive operations and many other predefined steps to handle Citrus test +actions. As these steps are predefined in YAKS you just need to use them in your feature stories. The step definitions with +glue to test actions is handled automatically in YAKS.

+
+
+

If you want to enable predefined steps support in your test you need to include the YAKS module as a Maven dependency.

+
+
+
YAKS module dependency
+
+
<dependency>
+  <groupId>org.citrusframework.yaks</groupId>
+  <artifactId>yaks-standard</artifactId>
+  <version>${yaks.version}</version>
+  <scope>test</scope>
+</dependency>
+
+
+
+

After that you need to include the glue code package in your test class like this:

+
+
+
Include YAKS steps
+
+
@RunWith(Cucumber.class)
+@CucumberOptions(
+    extraGlue = { "org.citrusframework.yaks.standard" },
+    plugin = { "pretty", "org.citrusframework.cucumber.CitrusReporter" } )
+public class MyFeatureIT {
+
+}
+
+
+
+

Instead of writing the glue code on our own in step definition classes we include the glue package org.citrusframework.yaks.standard +as extra glue. This automatically loads all YAKS step definitions in this module. Once you have done this you can use predefined +steps without having to write any glue code in Java.

+
+
+

The YAKS framework provides the following modules with predefined steps:

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 1. YAKS modules
ModuleDescription

yaks-standard

Standard steps such as test variables, sleep/delay, log/print, …​

yaks-http

Http steps for client and server side communication

yaks-openapi

Load Open API specifications and invoke/verify operations with generated test data

yaks-kubernetes

Manage Kubernetes resources (e.g. pods, deployments, custom resources)

yaks-knative

Steps to connect with Knative eventing and messaging

yaks-jms

Send/receive steps via JMS queues/topics

yaks-kafka

Steps to publish/subscribe on Kafka messaging

yaks-jdbc

Steps to connect to relational databases

yaks-camel

Steps to access Apache Camel components and Camel routes

yaks-camel-k

Manage Camel-K resources on Kubernetes

yaks-selenium

Run UI tests with Selenium using Selenium grid or standalone containers

yaks-groovy

Leverage Groovy scripts as Citrus endpoint and component configuration

+
+

Once again it should be said that the step definitions included in this modules can be used out-of-the-box. You can start +to write feature stories in Gherkin syntax that trigger the predefined steps.

+
+
+
+
+

4.5. QuarkusTest runtime

+
+

Quarkus has emerged into a popular enterprise Java framework. For unit and integration testing the Quarkus framework provides a special integrations with JUnit Jupiter. Citrus adds a Quarkus test resource that developers can use to include Citrus capabilities into arbitrary Quarkus tests.

+
+
+ + + + + +
+ + +The Citrus QuarkusTest extension is shipped in a separate Maven module. You need to include the module as a dependency in your project accordingly. +
+
+
+
Citrus Quarkus module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-quarkus</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

Usually a Quarkus test is annotated with the @QuarkusTest or QuarkusIntegrationTest annotation. Users may add an annotation named @CitrusSupport in order to also enable Citrus capabilities on the test.

+
+
+

The Citrus support will automatically hook into the QuarkusTest lifecycle management making sure to call the Citrus before/after suite and before/after test handlers.

+
+
+

This way you are able to combine Citrus with @QuarkusTest annotated classes very easily.

+
+
+
Enable Citrus support on QuarkusTest
+
+
@QuarkusTest
+@CitrusSupport
+public class DemoApplicationTest {
+
+    @CitrusFramework
+    private Citrus citrus;
+
+    @CitrusResource
+    private TestCaseRunner t;
+
+    @CitrusResource
+    private TestContext context;
+
+    @Test
+    void shouldVerifyDemoApp() {
+        t.when(
+            send()
+                .endpoint("messageEndpoint")
+                .message()
+                .body("How about Citrus!?")
+        );
+
+        t.when(
+            receive()
+                .endpoint("messageEndpoint")
+                .message()
+                .body("Citrus rocks!")
+        );
+    }
+}
+
+
+
+

The @CitrusSupport annotation enables the Citrus features on the test. First of all users may inject Citrus related resources such as TestCaseRunner or TestContext.

+
+
+

The TestCaseRunner reference runs arbitrary Citrus actions as part of the test.

+
+
+

The test is also able to configure Message endpoints.

+
+
+
Configure message endpoints
+
+
@QuarkusTest
+@CitrusSupport
+public class DemoApplicationTest {
+
+    @BindToRegistry
+    private final KafkaEndpoint bookings = new KafkaEndpointBuilder()
+            .topic("bookings")
+            .build();
+
+    @CitrusResource
+    private TestCaseRunner t;
+
+    @Test
+    void shouldVerifyDemoApp() {
+        t.when(
+            send()
+                .endpoint(bookings)
+                .message()
+                .body("How about Citrus!?")
+        );
+
+        t.when(
+            receive()
+                .endpoint(bookings)
+                .message()
+                .body("Citrus rocks!")
+        );
+    }
+}
+
+
+
+

Creating new message endpoints is very easy. Just use the proper endpoint builder and optionally bind the new endpoint to the Citrus bean registry via BindToRegistry annotation.

+
+
+

You may then use the message endpoint in all send and receive test actions in order to exchange messages.

+
+
+
+

4.6. Main CLI runtime

+
+

Citrus provides a main class that you can run from command line.

+
+
+ + + + + +
+ + +The Main CLI support is shipped in a separate Maven module. You need to include the module as a dependency in your +project. +
+
+
+
Main CLI module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-main</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+
Run Citrus main
+
+
+
+
+
+
+

4.7. Sharding Test Cases

+
+

Sharding is a powerful option within the Citrus framework designed to facilitate the loading and execution of test cases in a distributed manner. +Sharding test execution is expected to save roughly [TIME] * 1 / 2 of execution time per runner.

+
+
+

This chapter provides an overview of the available functionality and guides you through the process of configuring and using test loaders with sharding.

+
+
+

4.7.1. Configuration

+
+

First of all, you need to wrap your test case loading with the org.citrusframework.sharding.Shard#createShard(Stream<T> items) method. +Have a look at the previous runtime chapters to get to know how to do this with the test framework of your choice.

+
+
+

Once you’re done doing so, the sharding can be configured using environment variables or system properties. +The following two key configuration parameters are required for sharded test loading:

+
+
+
    +
  • +

    Total number of shards: Defines how many shards the test cases should be divided into.

    +
  • +
  • +

    Shard number: Specifies the specific shard number that this loader instance will handle.

    +
  • +
+
+
+

The following table summarizes the full configuration options:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ConfigurationEnvironment VariableSystem Property

Total number of shards

CITRUS_SHARDING_TOTAL

citrus.sharding.total

Shard number

CITRUS_SHARDING_NUMBER

citrus.sharding.number

Shard seed

CITRUS_SHARDING_SEED

citrus.sharding.seed

+
+

When writing test cases in Java, additional constructors exist, such that the total number of shards, as well as the current shard number can be programmatically configured.

+
+
+
+
+

4.8. JBang

+
+

You can run Citrus tests with JBang. +Running Citrus via JBang does not require any project setup which is fantastic for fast prototyping of integration tests. +This means you can just run your test case sources directly with:

+
+
+

Given this very simple Java Citrus test:

+
+
+
MyTest.java
+
+
import org.citrusframework.GherkinTestActionRunner;
+import org.citrusframework.annotations.CitrusResource;
+
+import static org.citrusframework.actions.CreateVariablesAction.Builder.createVariables;
+import static org.citrusframework.actions.EchoAction.Builder.echo;
+
+public class MyTest implements Runnable {
+
+    @CitrusResource
+    GherkinTestActionRunner t;
+
+    @Override
+    public void run() {
+        t.given(
+            createVariables().variable("message", "Citrus rocks!")
+        );
+
+        t.then(
+            echo().message("${message}")
+        );
+    }
+}
+
+
+
+

You can now run this test Java class without any prior project setup using JBang:

+
+
+
Run MyTest.java
+
+
jbang citrus@citrusframework/citrus run MyTest.java
+
+
+
+

The command above uses the JBang catalog located on the Citrus GitHub repository. +The command will automatically setup everything needed to run the Citrus test.

+
+
+

The command output will be like this:

+
+
+
Output
+
+
===============================================
+Default Suite
+Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
+===============================================
+
+
+
+

4.8.1. Install Citrus JBang app

+
+

For a more convenient way to use the Citrus JBang scripts you can install Citrus as a JBang app.

+
+
+
Install Citrus app
+
+
jbang trust add https://github.com/citrusframework/citrus/
+jbang install citrus@citrusframework/citrus
+
+
+
+

Now you can just call:

+
+
+
Run MyTest.java
+
+
citrus run MyTest.java
+
+
+
+
+

4.8.2. Run tests

+
+

You can directly run test sources with Citrus JBang. +This includes test sources written in Java, XML, YAML, Cucumber.

+
+
+
Java test sources
+
+
MyTest.java
+
+
import org.citrusframework.GherkinTestActionRunner;
+import org.citrusframework.annotations.CitrusResource;
+
+import static org.citrusframework.actions.CreateVariablesAction.Builder.createVariables;
+import static org.citrusframework.actions.EchoAction.Builder.echo;
+
+public class MyTest implements Runnable {
+
+    @CitrusResource
+    GherkinTestActionRunner t;
+
+    @Override
+    public void run() {
+        t.given(
+            createVariables().variable("message", "Citrus rocks!")
+        );
+
+        t.then(
+            echo().message("${message}")
+        );
+    }
+}
+
+
+
+
Run MyTest.java
+
+
citrus run MyTest.java
+
+
+
+
+
XML test sources
+
+
my-test.xml
+
+
<test name="EchoTest" author="Christoph" status="FINAL" xmlns="http://citrusframework.org/schema/xml/testcase"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xsi:schemaLocation="http://citrusframework.org/schema/xml/testcase http://citrusframework.org/schema/xml/testcase/citrus-testcase.xsd">
+  <description>Sample test in XML</description>
+  <variables>
+    <variable name="message" value="Citrus rocks!"/>
+  </variables>
+  <actions>
+    <echo message="${message}"/>
+  </actions>
+</test>
+
+
+
+
Run my-test.xml
+
+
citrus run my-test.xml
+
+
+
+
+
YAML test sources
+
+
my-test.yaml
+
+
name: EchoTest
+description: "Sample test in YAML"
+variables:
+  - name: "message"
+    value: "Citrus rocks!"
+actions:
+  - echo:
+      message: "${message}"
+
+
+
+
Run my-test.yaml
+
+
citrus run my-test.yaml
+
+
+
+
+
Groovy test sources
+
+
my-test.groovy
+
+
import static org.citrusframework.actions.EchoAction.Builder.echo
+
+name "EchoTest"
+description "Sample test in Groovy"
+
+variables {
+    message="Citrus rocks!"
+}
+
+actions {
+    $(echo().message('${message}'))
+}
+
+
+
+
Run my-test.groovy
+
+
citrus run my-test.groovy
+
+
+
+
+
Cucumber feature sources
+
+
my-test.feature
+
+
Feature: EchoTest
+
+  Background:
+    Given variables
+    | message | Citrus rocks! |
+
+  Scenario: Print message
+    Then print '${message}'
+
+
+
+
Run my-test.feature
+
+
citrus run my-test.feature
+
+
+
+ + + + + +
+ + +Many of the predefined Cucumber steps in Citrus are provided in a separate Citrus child project called YAKS. +You may need to add additional project dependencies for that steps to be loaded as part of the JBang script. +You may add the additional modules to the jbang.properties as described in the next section. +
+
+
+
+
+

4.8.3. Additional JBang dependencies

+
+

Citrus JBang comes with a set of default dependencies that makes the scripts run as tests.

+
+
+

The default modules that you can use in Citrus JBang are:

+
+
+
    +
  • +

    org.citrusframework:citrus-base

    +
  • +
  • +

    org.citrusframework:citrus-jbang-connector

    +
  • +
  • +

    org.citrusframework:citrus-groovy

    +
  • +
  • +

    org.citrusframework:citrus-xml

    +
  • +
  • +

    org.citrusframework:citrus-yaml

    +
  • +
  • +

    org.citrusframework:citrus-http

    +
  • +
  • +

    org.citrusframework:citrus-validation-json

    +
  • +
  • +

    org.citrusframework:citrus-validation-xml

    +
  • +
+
+
+

This enables you to run Java, YAML, XML, Groovy tests out of the box. +In case your tests uses an additional feature from the Citrus project you may need to add the module so JBang can load the dependency at startup.

+
+
+

The easiest way to do this is to create a jbang.properties file that defines the additional dependencies:

+
+
+
jbang.properties
+
+
# Declare required additional dependencies
+run.deps=org.citrusframework:citrus-camel:4.5.0-SNAPSHOT,org.citrusframework:citrus-testcontainers:4.5.0-SNAPSHOT,org.citrusframework:citrus-kafka:4.5.0-SNAPSHOT
+
+
+
+

The file above adds the modules citrus-camel, citrus-testcontainers and citrus-kafka so you can use them in your JBang Citrus test source.

+
+
+

The jbang.properties file may be located right next to the test source file or in your user home directory for global settings.

+
+
+ + + + + +
+ + +In case you want to run Cucumber BDD Gherkin feature files and use the predefined steps included in the YAKS project, +you need to add this YAKS runtime dependency accordingly: org.citrusframework.yaks:yaks-runtime-core:0.21.0-SNAPSHOT +
+
+
+
+

4.8.4. Run from clipboard

+
+

You can run tests from your current clipboard. +Just use the file name clipboard.xxx where the file extension defines the type of the test source (.java, .yaml, .xml, .groovy, .feature).

+
+
+
Run YAML test from Clipboard
+
+
citrus run clipboard.yaml
+
+
+
+
+

4.8.5. List tests

+
+

The ls command lists all running Citrus tests. +These tests may be started

+
+
+
List running tests
+
+
citrus ls
+
+
+
+
+
+
+
+

5. Running tests in Java

+
+
+

The Citrus test holds a sequence of test actions. Each action represents a very special purpose such as sending or +receiving a message.

+
+
+

Despite the fact that message exchange is one of the main actions in an integration test framework for message-based applications +Citrus is more than just that. Each test case in Citrus is able to perform various actions such as connecting to the database, +transforming data, adding iterations and conditional steps.

+
+
+

With the default Citrus actions provided out of the box users can accomplish very complex use cases in integration testing. +In Citrus you can configure and add test actions in Java using a test action runner API that leverages a fluent builder pattern API.

+
+
+

5.1. Test action runner

+
+

The test action runner is the entry to the fluent Java API. You can configure test actions with a fluent builder style API and +immediately run the actions with the runner.

+
+
+

See the following example to see the Java domain specific language in action.

+
+
+
Test action runner
+
+
import org.testng.annotations.Test;
+import org.citrusframework.annotations.CitrusTest;
+import org.citrusframework.dsl.testng.TestNGCitrusSupport;
+
+@Test
+public class Service_IT extends TestNGCitrusSupport {
+
+    @CitrusTest(name = "Service_IT")
+    public void serviceTest() {
+        run(echo("Before service call"));
+
+        run(echo("After service call"));
+    }
+}
+
+
+
+

The test action runner executes each test action immediately as you use the provided run() method. All actions provided in Citrus +represent a certain functionality (e.g. send/receive messages, delay the test, access a database). Citrus ships with a wide range of +test actions, but you are also able to write your own test actions and execute them during a test.

+
+
+

By default, all actions run sequentially in the same order as they are defined in the test case. In case one single action fails +the whole test case is failing. Of course, you can leverage parallel action execution with the usage of test containers.

+
+
+ + + + + +
+ + +The TestNGCitrusSupport and JUnit4CitrusSupport base classes are not thread safe by default. This is simply +because the base class is holding state to the current test action runner instance in order to delegate method calls +to this instance. Parallel test execution is not available with this approach. Fortunately there is a way to support parallel +test execution through resource injection. Read more about this in JUnit4 or TestNG +support. +
+
+
+
+

5.2. Gherkin test action runner

+
+

The test action runner is also available as Gherkin style runner with given(), when(), then() methods. The Gherkin test action runner +follows the Behavior Driven Development concepts of structuring the test into the three parts: Given a certain context, when an event +occurs, then an outcome should be verified.

+
+
+
Gherkin test action runner
+
+
@Test
+public class Service_IT extends TestNGCitrusSupport {
+
+    @CitrusTest(name = "Service_IT")
+    public void serviceTest() {
+        given(
+            echo("Setup the context")
+        );
+
+        when(
+            echo("Trigger the event")
+        );
+
+        then(
+            echo("Verify the outcome")
+        );
+    }
+}
+
+
+
+
+

5.3. Test meta information

+
+

The user is able to provide some additional information about the test case. The meta-info section at the very beginning of the +test case holds information like author, status or creation date.

+
+
+
Test meta information
+
+
@CitrusTest
+public void sampleTest() {
+    description("This is a Test");
+    author("Christoph");
+    status(Status.FINAL);
+
+    run(echo("Hello Citrus!"));
+}
+
+
+
+

The status allows the following values:

+
+
+
    +
  • +

    DRAFT

    +
  • +
  • +

    READY_FOR_REVIEW

    +
  • +
  • +

    DISABLED

    +
  • +
  • +

    FINAL

    +
  • +
+
+
+

This information gives the reader first impression about the test and is also used to generate test documentation. By default, +Citrus is able to generate test reports in HTML and Excel in order to list all tests with their metadata information and description.

+
+
+ + + + + +
+ + +Tests with the status DISABLED will not be executed during a test suite run. So someone can just start adding planned +test cases that are not finished yet in status DRAFT. In case a test is not runnable yet because it is not finished, someone +may disable a test temporarily to avoid causing failures during a test run. +
+
+
+

The test description should give a short introduction to the intended use case scenario that will be tested. The user should get +a short summary of what the test case is trying to verify.

+
+
+
+

5.4. Finally block

+
+

Java developers might be familiar with the concept of try-catch-finally blocks. The finally section contains a list of +test actions that will be executed guaranteed at the very end of the test case even if errors did occur during the execution before.

+
+
+

This is the right place to tidy up things that were previously created by the test like cleaning up the database for instance.

+
+
+
Finally block
+
+
@CitrusTest
+public void sampleTest() {
+    given(
+        doFinally()
+            .actions(echo("Do finally - regardless of any error before"))
+    );
+
+    echo("Hello Test Framework");
+}
+
+
+
+

As an example imagine that you have prepared some data inside the database at the beginning of the test and you need to make +sure the data is cleaned up at the end of the test case.

+
+
+
Finally block example
+
+
@CitrusTest
+public void finallyBlockTest() {
+    variable("orderId", "citrus:randomNumber(5)");
+    variable("date", "citrus:currentDate('dd.MM.yyyy')");
+
+    given(
+        doFinally()
+            .actions(sql(dataSource).statement("DELETE FROM ORDERS WHERE ORDER_ID='${orderId}'"))
+    );
+
+    when(
+        sql(dataSource).statement("INSERT INTO ORDERS VALUES (${orderId}, 1, 1, '${date}')")
+    );
+
+    then(
+        echo("ORDER creation time: citrus:currentDate('dd.MM.yyyy')")
+    );
+}
+
+
+
+

In the example the first action creates an entry in the database using an INSERT statement. To be sure that the entry +in the database is deleted after the test, the finally section contains the respective DELETE statement that is always +executed regardless the test case state (successful or failed).

+
+
+ + + + + +
+ + +The finally section must be placed at the very beginning of the test. This is because the test action runner +is immediately executing each test action as it is called within the Java DSL methods. This is the only way the test case +can perform the final actions also in case of previous error. +
+
+
+

A finally block placed at the very end of the test will not take action unless put in a traditional Java try-finally-block:

+
+
+
Traditional try-finally block
+
+
@CitrusTest
+public void finallyBlockTest() {
+    variable("orderId", "citrus:randomNumber(5)");
+    variable("date", "citrus:currentDate('dd.MM.yyyy')");
+
+    try {
+        when(
+            sql(dataSource).statement("INSERT INTO ORDERS VALUES (${orderId}, 1, 1, '${date}')")
+        );
+
+        then(
+            echo("ORDER creation time: citrus:currentDate('dd.MM.yyyy')")
+        );
+    } finally {
+        then(
+            sql(dataSource).statement("DELETE FROM ORDERS WHERE ORDER_ID='${orderId}'")
+        );
+    }
+}
+
+
+
+

Using the traditional Java try-finally feels more natural no doubt. Please notice that the Citrus report and logging will +not account the traditional finally block actions then. Good news is whatever layout you choose the outcome is always the same.

+
+
+

The finally block is executed safely even in case some previous test action raises an error for some reason.

+
+
+
+

5.5. Test behaviors

+
+

The concept of test behaviors is a good way to reuse test action blocks in the Java DSL. Test behaviors combine action +sequences to a logical unit. The behavior defines a set of test actions that can be applied multiple times to different +test cases.

+
+
+

The behavior is a separate Java DSL class with a single apply method that configures the test actions. Test behaviors +follow this basic interface:

+
+
+
Test behaviors
+
+
@FunctionalInterface
+public interface TestBehavior {
+
+    /**
+     * Behavior building method.
+     */
+    void apply(TestActionRunner runner);
+
+}
+
+
+
+

The behavior is provided with the test action runner and all actions in the behavior should run on that runner. Every time +the behavior is applied to a test the actions get executed accordingly.

+
+
+
Test behaviors
+
+
public class FooBehavior implements TestBehavior {
+    public void apply(TestActionRunner runner) {
+        runner.run(createVariable("foo", "test"));
+
+        runner.run(echo("fooBehavior"));
+    }
+}
+
+public class BarBehavior implements TestBehavior {
+    public void apply(TestActionRunner runner) {
+        runner.run(createVariable("bar", "test"));
+
+        runner.run(echo("barBehavior"));
+    }
+}
+
+
+
+

The listing above shows two test behaviors that add very specific test actions and test variables to the test case. As +you can see the test behavior is able to use the same Java DSL action methods and defines test variables and actions as +a normal test case would do. You can apply the behaviors multiple times in different tests:

+
+
+
+
@CitrusTest
+public void behaviorTest() {
+    run(apply(new FooBehavior()));
+
+    run(echo("Successfully applied bar behavior"));
+
+    run(apply(new BarBehavior()));
+
+    run(echo("Successfully applied bar behavior"));
+}
+
+
+
+

The behavior is applied to the test case by calling the apply() method. As a result the behavior is executed adding +its logic at this point of the test execution. The same behavior can now be called in multiple test cases so we have a reusable +set of test actions.

+
+
+

A behavior may use different variable names than the test and vice versa. No doubt the behavior will fail as soon as special +variables with respective values are not present. Unknown variables cause the behavior and the whole test to fail with errors.

+
+
+

So a good approach would be to harmonize variable usage across behaviors and test cases, so that templates and test cases +do use the same variable naming. The behavior automatically knows all variables in the test case and all test variables +created inside the behavior are visible to the test case after applying.

+
+
+ + + + + +
+ + +When a behavior changes variables this will automatically affect the variables in the whole test. So if you +change a variable value inside a behavior and the variable is defined inside the test case the changes will affect +the variable in a global test context. This means we have to be careful when executing a behavior several times in a test, +especially in combination with parallel containers (see containers-parallel). +
+
+
+
+

5.6. Run custom code

+
+

In general, you are able to mix Citrus Java DSL actions with custom Java code as you like.

+
+
+
Run custom code
+
+
import org.testng.annotations.Test;
+import org.citrusframework.annotations.CitrusTest;
+import org.citrusframework.dsl.testng.TestNGCitrusSupport;
+
+@Test
+public class Service_IT extends TestNGCitrusSupport {
+
+    private MyService myService = new MyService();
+
+    @CitrusTest(name = "Service_IT")
+    public void serviceTest() {
+        run(echo("Before service call"));
+
+        myService.doSomething("Now calling custom service");
+
+        run(echo("After service call"));
+    }
+}
+
+
+
+

The test above uses a mix of Citrus test actions and custom service calls. The test logic will execute as expected. It is +recommended though to wrap custom code in a test action in order to have a consistent test reporting and failure management +in Citrus.

+
+
+
Test action wrapper
+
+
import org.testng.annotations.Test;
+import org.citrusframework.annotations.CitrusTest;
+import org.citrusframework.dsl.testng.TestNGCitrusSupport;
+
+@Test
+public class Service_IT extends TestNGCitrusSupport {
+
+    private MyService myService = new MyService();
+
+    @CitrusTest(name = "Service_IT")
+    public void serviceTest() {
+        run(echo("Before service call"));
+
+        run(
+            action(context -> {
+                myService.doSomething("Now calling custom service");
+            })
+        );
+
+        run(echo("After service call"));
+    }
+}
+
+
+
+

The sample above wraps the call to the custom service myService in an abstract test action represented as Java lambda expression. +This way the service call becomes part of the Citrus test execution and failures are reported properly. Also you have access to the +current test context which holds the list of test variables as well as many other Citrus related test objects (e.g. message store).

+
+
+

This is why you should wrap custom code in a test action and run that code via the test action runner methods. You can also put your custom code in +a test action implementation and reference the logic from multiple tests.

+
+
+
+

5.7. Bind objects to registry

+
+

The Citrus context is a place where objects can register themselves in order to enable dependency injection and instance sharing +in multiple tests. Once you register the object in the context others can resolve the reference with its given name.

+
+
+

In a simple example the context can register a new endpoint that is injected in several tests.

+
+
+

You can access the Citrus context within the provided before/after methods on the test.

+
+
+
Register endpoint in Citrus context
+
+
public class CitrusRegisterEndpoint_IT extends TestNGCitrusSupport {
+
+    @Override
+    public void beforeSuite(CitrusContext context) {
+        context.bind("foo", new FooEndpoint());
+    }
+}
+
+
+
+

With the CitrusContext you can bind objects to the registry. Each binding receives a name so others can resolve the instance +reference for injection.

+
+
+
Inject endpoint in other tests
+
+
public class InjectEndpoint_IT extends TestNGCitrusSupport {
+
+    @CitrusEndpoint
+    private FooEndpoint foo;
+
+    @Test
+    @CitrusTest
+    public void injectEndpointTest() {
+        $(send(foo)
+                .message()
+                .body("Hello foo!"));
+
+        $(receive(foo)
+                .message()
+                .body("Hello Citrus!"));
+    }
+}
+
+
+
+

The @CitrusEndpoint annotation injects the endpoint resolving the instance with the given name foo. +Test methods can use this endpoint in the following send and receive actions.

+
+
+

5.7.1. @BindToRegistry

+
+

An alternative to using the bind() method on the CitrusContext is to use the @BindToRegistry annotation. +Methods and fields annotated will automatically register in the CitrusContext registry.

+
+
+
@BindToRegistry annotation
+
+
public class CitrusRegisterEndpoint_IT extends TestNGCitrusSupport {
+
+    @CitrusFramework
+    private Citrus citrus;
+
+    @BindToRegistry(name = "fooQueue")
+    private MessageQueue queue = new DefaultMessageQueue("fooQueue");
+
+    @BindToRegistry
+    public FooEndpoint foo() {
+        return new FooEndpoint();
+    }
+}
+
+
+
+

The annotation is able to specify an explicit binding name. +The annotation works with public methods and fields in tests.

+
+
+
+

5.7.2. Configuration classes

+
+

As an alternative to adding the registry binding configuration directly to the test you can load configuration classes.

+
+
+

Configuration classes are automatically loaded before a test suite run and all methods and fields are parsed for potential bindings. +You can use the environment settings citrus.java.config and/or CITRUS_JAVA_CONFIG to set a default configuration class.

+
+
+
citrus-application.properties
+
+
citrus.java.config=MyConfig.class
+
+
+
+
MyConfig.class
+
+
public class MyConfig {
+
+    @BindToRegistry(name = "fooQueue")
+    private MessageQueue queue = new DefaultMessageQueue("fooQueue");
+
+    @BindToRegistry
+    public void foo() {
+        return new FooEndpoint();
+    }
+}
+
+
+
+
+

5.7.3. @CitrusConfiguration

+
+

Each test is able to use the @CitrusConfiguration annotation to add registry bindings, too.

+
+
+
@CitrusConfiguration annotation
+
+
@CitrusConfiguration(classes = MyConfig.class)
+public class CitrusRegisterEndpoint_IT extends TestNGCitrusSupport {
+
+    @CitrusEndpoint
+    private FooEndpoint foo;
+
+    @Test
+    @CitrusTest
+    public void injectEndpointTest() {
+        $(send(foo)
+                .message()
+                .body("Hello foo!"));
+
+        $(receive(foo)
+                .message()
+                .body("Hello Citrus!"));
+    }
+}
+
+
+
+

The @CitrusConfiguration annotation is able to load configuration classes and bind all components to the registry for later usage. +The test can inject endpoints and other components using the @CitrusEndpoint and @CitrusResource annotation on fields.

+
+
+
+
+

5.8. Resource injection

+
+

Resource injection is a convenient mechanism to access Citrus internal objects such as TestRunner or TestContext instances. The following sections +deal with resource injection of different objects.

+
+
+

5.8.1. Inject Citrus framework

+
+

You can access the Citrus framework instance in order to access all components and functionalities. Just use the @CitrusFramework +annotation in your test class.

+
+
+
Citrus framework injection
+
+
public class CitrusInjection_IT extends TestNGCitrusSupport {
+
+    @CitrusFramework
+    private Citrus citrus;
+
+    @Test
+    @CitrusTest
+    public void injectCitrusTest() {
+        citrus.getCitrusContext().getMessageListeners().addMessageListener(new MyListener());
+    }
+}
+
+
+
+

The framework instance provides access to the Citrus context which is a central registry for all components. The example above adds +a new message listener.

+
+
+ + + + + +
+ + +The Citrus context is a shared component. Components added will perform with all further tests and changes made +affect all tests. +
+
+
+
+

5.8.2. Test action runner injection

+
+

The test action runner is the entry to the fluent Java API. You can inject the runner as a method parameter.

+
+
+
Test action runner injection
+
+
public class RunnerInjection_IT extends JUnit4CitrusSupport {
+
+    @Test
+    @CitrusTest
+    public void injectResources(@CitrusResource TestCaseRunner runner) {
+
+        runner.given(
+            createVariable("random", "citrus:randomNumber(10)")
+        );
+
+        runner.run(
+            echo("The random number is: ${random}")
+        );
+    }
+}
+
+
+
+

The parameter requires the @CitrusResource annotations in order to mark the parameter for Citrus resource injection.

+
+
+

Now each method uses its own runner instance which makes sure that parallel test execution can take place without having +the risk of side effects on other tests running at the same time.

+
+
+
+

5.8.3. Test context injection

+
+

The Citrus test context combines a set of central objects and functionalities that a test is able to make use of. The test context +holds all variables and is able to resolve functions and validation matchers.

+
+
+

In general a tester will not have to explicitly access the test context because the framework is working with it behind the scenes. +In terms of advanced operations and customizations accessing the test context may be a good idea though.

+
+
+

Each test action implementation has access to the test context as it is provided to the execution method in the interface:

+
+
+
Test action interface
+
+
@FunctionalInterface
+public interface TestAction {
+    /**
+     * Main execution method doing all work
+     * @param context
+     */
+    void execute(TestContext context);
+}
+
+
+
+

In addition Citrus provides a resource injection mechanism that allows to access the current test context in a test class or test method.

+
+
+
Inject as method parameter
+
+
public class TestContextInjection_IT extends JUnit4CitrusSupport {
+
+    @Test
+    @CitrusTest
+    public void resourceInjectionIT(@CitrusResource TestContext context) {
+        context.setVariable("myVariable", "some value");
+
+        run(echo("${myVariable}"));
+    }
+}
+
+
+
+

As you can see the test method defines a parameter of type org.citrusframework.context.TestContext. The annotation @CitrusResource +tells Citrus to inject this parameter with the according instance of the context for this test.

+
+
+

Now you have access to the context and all its capabilities such as variable management. As an alternative you can inject +the test context as a class member variable.

+
+
+
Inject as member
+
+
public class TestContextInjection_IT extends JUnit4CitrusSupport {
+
+    @CitrusResource
+    private TestContext context;
+
+    @Test
+    @CitrusTest
+    public void resourceInjectionIT() {
+        context.setVariable("myVariable", "some value");
+
+        run(echo("${myVariable}"));
+    }
+}
+
+
+
+
+

5.8.4. Endpoint injection

+
+

Endpoints play a significant role when sending/receiving messages over various transports. An endpoint defines how to connect +to a message transport (e.g. Http endpoint URL, JMS message broker connection, Kafka connection and topic selection).

+
+
+

Endpoints can live inside the Citrus context (e.g. in Spring application context) or you can inject the endpoint into the test class +with given configuration.

+
+
+
Endpoint injection
+
+
public class EndpointInjectionJavaIT extends TestNGCitrusSpringSupport {
+
+    @CitrusEndpoint
+    @DirectEndpointConfig(queueName = "FOO.test.queue")
+    private Endpoint directEndpoint;
+
+    @Test
+    @CitrusTest
+    public void injectEndpoint() {
+        run(send(directEndpoint)
+                .message()
+                .type(MessageType.PLAINTEXT)
+                .body("Hello!"));
+
+        run(receive(directEndpoint)
+                .message()
+                    .type(MessageType.PLAINTEXT)
+                    .body("Hello!"));
+    }
+}
+
+
+
+

The sample above creates a new endpoint as a direct in-memory channel endpoint. Citrus reads the @CitrusEndpoint annotation and +adds the configuration as given in the @DirectEndpointConfig annotation. This way you can create and inject endpoints directly to +your test.

+
+
+ + + + + +
+ + +Citrus also supports the Spring framework as a central bean registry. You can add endpoints as Spring beans and use the +@Autowired annotation to inject the endpoint in your test. +
+
+
+
+
+
+
+

6. Test variables

+
+
+

The usage of test variables is a core concept when writing maintainable tests. The key identifiers of a test case should +be exposed as test variables at the very beginning of a test. This avoids hard coded identifiers and multiple redundant values +inside the test.

+
+
+
Java
+
+
public void fooService_IT() {
+    variable("text", "Hello Citrus!");
+    variable("customerId", "123456789");
+
+    run(echo("Text: ${text} Id: ${id}"));
+}
+
+
+
+
XML
+
+
<testcase name="FooService_IT">
+  <variables>
+    <variable name="text" value="Hello Citrus!"/>
+    <variable name="customerId" value="123456789"/>
+  </variables>
+
+  <actions>
+    <echo>
+      <message>Text: ${text} Id: ${id}</message>
+    </echo>
+  </actions>
+</testcase>
+
+
+
+

Test variables help significantly when writing complex tests with lots of identifiers and semantic data. The +variables are valid for the whole test case. You can reference a variable multiple times using a common variable +expression ${variable-name}.

+
+
+

The usage of variables should make the test easier to maintain and more flexible. All essential entities and identifiers are present +right at the beginning of the test, which may also give the opportunity to easily create test variants by simply changing +the variable values for other test scenarios (e.g. different error codes, identifiers).

+
+
+

The name of the variable is arbitrary. Of course, you need to be careful with special characters and reserved XML entities +like '&', '<', '>'. In general, you can apply to the Java naming convention, and you will be fine.

+
+
+

6.1. Global variables

+
+

You can work with different variable scopes (local or global). Local variables are accessible throughout a single test. +Global variables are visible for all tests yet global variables are immutable, so tests cannot change their values.

+
+
+

This is a good opportunity to declare constant values for all tests. As these variables are global we need to add those +to the basic Citrus context. The following example demonstrates how to add global variables in Citrus:

+
+
+
Java DSL
+
+
@Bean
+public GlobalVariables globalVariables() {
+    return new GlobalVariables.Builder()
+        .variable("projectName", "Citrus Integration Testing")
+        .variable("userName", "TestUser")
+        .build();
+}
+
+
+
+
XML DSL
+
+
<citrus:global-variables>
+  <citrus:variable name="projectName" value="Citrus Integration Testing"/>
+  <citrus:variable name="userName" value="TestUser"/>
+</citrus:global-variables>
+
+
+
+

We add the Spring bean component to the application context file. The component receives a list of name-value variable +elements. You can reference the global variables in your test cases as usual.

+
+
+

Another possibility to set global variables is to load those from external property files. This may give you more powerful +global variables with user specific properties for instance. See how to load property files as global variables in this example:

+
+
+
Java DSL
+
+
@Bean
+public GlobalVariablesPropertyLoader propertyLoader() {
+    GlobalVariablesPropertyLoader propertyLoader = new GlobalVariablesPropertyLoader();
+
+    propertyLoader.getPropertyFiles().add("classpath:global-variable.properties");
+
+    return propertyLoader;
+}
+
+
+
+
XML DSL
+
+
<citrus:global-variables>
+  <citrus:file path="classpath:global-variable.properties"/>
+</citrus:global-variables>
+
+
+
+

You can use the GlobalVariablesPropertyLoader component and add it to the context as a Spring bean. Citrus loads the +given property file content as global test variables. You can mix property file and name-value pair variable definitions +in the global variables component.

+
+
+ + + + + +
+ + +The global variables can have variable expressions and Citrus functions. It is possible to use previously defined +global variables as values of new variables, like in this example: +
+
+
+
global-variable.properties
+
+
user=Citrus
+greeting=Hello ${user}!
+date=citrus:currentDate('yyyy-MM-dd')
+
+
+
+
+

6.2. Extract variables

+
+

Imagine you receive a message in your test with some generated message identifier values. You have no chance to predict the +identifier value because it was generated at runtime by a foreign application. You can ignore the value in order to protect +your validation. In many cases you might want to save this identifier in order to use this value in the respective response +message or somewhat later on in the test.

+
+
+

The solution is to extract dynamic values from received messages and save those to test variables at runtime.

+
+
+

6.2.1. JsonPath expressions

+
+

When an incoming message is passing the message validation the user can extract some values of that received message to +new test variables for later use in the test.

+
+
+
+
<message type="json">
+  <data>
+    { "user":
+      {
+        "name": "Admin",
+        "password": "secret",
+        "admin": "true",
+        "aliases": ["penny","chef","master"]
+      }
+    }
+  </data>
+  <extract>
+    <message path="$.user.name" variable="userName"/>
+    <message path="$.user.aliases" variable="userAliases"/>
+    <message path="$.user[?(@.admin)].password" variable="adminPassword"/>
+  </extract>
+</message>
+
+
+
+

With this example we have extracted three new test variables via JSONPath expression evaluation. The three test variables +will be available to all upcoming test actions. The variable values are:

+
+
+
+
userName=Admin
+userAliases=["penny","chef","master"]
+adminPassword=secret
+
+
+
+

As you can see we can also extract complex JSONObject items or JSONArray items. The test variable value is a String representation +of the complex object.

+
+
+
+

6.2.2. XPath expressions

+
+

Add this code to your message receiving action.

+
+
+
Java DSL
+
+
@CitrusTest
+public void receiveMessageTest() {
+    when(
+        receive("helloService")
+            .extract(fromBody()
+                    .expression("//TestRequest/VersionId", "versionId"))
+            .extract(fromHeaders()
+                    .header("Operation", "operation"))
+    );
+
+    then(
+        echo("Extracted operation from header is: ${operation}")
+    );
+
+    then(
+        echo("Extracted version from body is: ${versionId}")
+    );
+}
+
+
+
+
XML DSL
+
+
<receive endpoint="helloService">
+    <message>
+      ...
+    </message>
+    <extract>
+      <header name="Operation" variable="operation"/>
+      <message path="/TestRequest/VersionId" variable="versionId"/>
+    </extract>
+</receive>
+
+<echo>
+  <message>Extracted operation from header is: ${operation}</message>
+</echo>
+
+<echo>
+  <message>Extracted version from body is: ${versionId}</message>
+</echo>
+
+
+
+

As you can see Citrus is able to extract both header and message body content into test variables. The extraction will automatically +create a new variable in case it does not exist. The time the variable was created all following test actions can access the +test variables as usual. So you can reference the variable values in response messages or other test steps ahead.

+
+
+ + + + + +
+ + +We can also use expression result types in order to manipulate the test variable outcome. In case we use a boolean result +type the existence of elements can be saved to variable values. The result type node-set translates a node list result to +a comma separated string of all values in this node list. Simply use the expression result type attributes as shown in previous +sections. +
+
+
+
+
+

6.3. Path expressions

+
+

Some elements in message body might be of dynamic nature. Just think of generated identifiers or timestamps. This is the right +time to use test variables and dynamic message element overwrite. You can overwrite specific elements in the message body +with path expressions (XPath or JsonPath).

+
+
+

6.3.1. JsonPath expressions

+
+

First thing we want to do with JsonPath is to manipulate a message content before it is actually processed. This is very +useful when working with message file resources that are reused across multiple test cases. Each test case can manipulate +the message content individually with JsonPath before processing the message content.

+
+
+

Let’s have a look at this simple sample Json message body:

+
+
+
Json message body user.json
+
+
{ "user":
+  {
+    "id": citrus:randomNumber(10),
+    "name": "Unknown",
+    "admin": "?",
+    "projects":
+      [{
+        "name": "Project1",
+        "status": "open"
+      },
+      {
+        "name": "Project2",
+        "status": "open"
+      },
+      {
+        "name": "Project3",
+        "status": "closed"
+      }]
+  }
+}
+
+
+
+

Citrus can load the file content and uses it as message body when sending or receiving messages in a test case. You can apply +JsonPath expressions in order to manipulate the message content.

+
+
+
+
<message type="json">
+  <resource file="file:path/to/user.json" />
+  <element path="$.user.name" value="Admin" />
+  <element path="$.user.admin" value="true" />
+  <element path="$..status" value="closed" />
+</message>
+
+
+
+

When all path expressions are evaluated the resulting message looks like follows:

+
+
+
+
{ "user":
+  {
+    "id": citrus:randomNumber(10),
+    "name": "Admin",
+    "admin": "true",
+    "projects":
+      [{
+        "name": "Project1",
+        "status": "closed"
+      },
+      {
+        "name": "Project2",
+        "status": "closed"
+      },
+      {
+        "name": "Project3",
+        "status": "closed"
+      }]
+  }
+}
+
+
+
+

The JsonPath expressions set the username to Admin . The admin boolean property was set to true and all project +status values were set to closed. In case a JsonPath expression should fail to find a matching element within the message +structure the test case will fail.

+
+
+

With this JsonPath mechanism you are able to manipulate message content before it is sent or received within Citrus. This +makes life very easy when using message resource files that are reused across multiple test cases.

+
+
+
+

6.3.2. XPath expressions

+
+

In case of XML message bodies you can use XPath expressions to manipulate the body content before any message processing +takes place.

+
+
+
XML DSL
+
+
<message>
+  <payload>
+    <TestMessage>
+      <MessageId>${messageId}</MessageId>
+      <CreatedAt>?</CreatedAt>
+      <VersionId>${version}</VersionId>
+    </TestMessage>
+  </payload>
+  <element path="/TestMessage/CreatedAt" value="${date}"/>
+</message>
+
+
+
+

The program listing above shows ways of setting variable values inside a message template. First you can simply place variable +expressions inside the message (see how ${messageId} is used in the sample). In addition to that you can also use path +expressions to explicitly overwrite message elements before message processing takes place.

+
+
+

The sample above uses an XPath expression that evaluates and searches for the right element in the message body in order +to set the given value. The previously defined variable ${date} replaces the respective element value. Of course this +works with XML attributes too (e.g. path expression /TestMessage/Person/@age).

+
+
+

Both ways via XPath or JsonPath or inline variable expressions are equal to each other. With respect to the complexity of +XML namespaces and XPath you may find the inline variable expression more comfortable to use. Anyway feel free to choose +the way that fits best for you.

+
+
+

This is how you can overwrite values in message templates in order to increase maintainability and robustness of your test.

+
+
+ + + + + +
+ + +Validation matchers put validation mechanisms to a new level offering dynamic assertion statements for validation. +Have a look at the possibilities with assertion statements in validation-matcher. +
+
+
+
+
+

6.4. Escape variables

+
+

The test variable expression syntax ${variable-name} is preserved to evaluate to a test variable within the current +test context. In case the same syntax is used in one of your message content values you need to escape the syntax from +being interpreted as test variable expression. You can do this by using the variable expression escaping character sequence +// wrapping the actual variable name like this:

+
+
+
Plain text message content with escapes
+
+
This is an escaped variable expression ${//escaped//} and should not lead to unknown variable exceptions within Citrus.
+
+
+
+

The escaped expression ${//escaped//} above will result in the string ${escaped} where escaped is not treated as a +test variable name but as a normal string in the message body.

+
+
+

This way you are able to have the same variable syntax in a message content without interfering with the Citrus variable +expression syntax. As a result Citrus will not complain about not finding the test variable escaped in the current context.

+
+
+

The variable syntax escaping characters // are automatically removed when the expression is processed by Citrus. So we +will get the following result after processing.

+
+
+
Parsed plain text mesage content
+
+
This is an escaped variable expression ${escaped} and should not lead to unknown variable exceptions within Citrus.
+
+
+
+
+
+
+

7. Message validation

+
+
+

When Citrus receives a message from external applications it is time to verify the message content. This message validation +includes syntax rules with schema validation and message content comparison to expected templates. Citrus provides powerful +message validation capabilities for different data formats. The tester is able to define expected message headers and body +content. The Citrus message validator finds values not matching the expectations and reports the difference as test failure.

+
+
+

7.1. Validation registry

+
+

Citrus provides default message validator implementations for different data formats. The Citrus project context +automatically loads these default message validators. In case one of these message validators matches the incoming +message the message validator performs its validation steps with the message.

+
+
+

All default message validators can be overwritten by binding a component with the same id to the project context (e.g. as +Spring bean in the application context).

+
+
+

The default message validator implementations of Citrus are:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+defaultXmlMessageValidator + +

org.citrusframework.validation.xml.DomXmlMessageValidator

+
+defaultXpathMessageValidator + +

org.citrusframework.validation.xml.XpathMessageValidator

+
+defaultJsonMessageValidator + +

org.citrusframework.validation.json.JsonTextMessageValidator

+
+defaultJsonPathMessageValidator + +

org.citrusframework.validation.json.JsonPathMessageValidator

+
+defaultPlaintextMessageValidator + +

org.citrusframework.validation.text.PlainTextMessageValidator

+
+defaultMessageHeaderValidator + +

org.citrusframework.validation.DefaultMessageHeaderValidator

+
+defaultBinaryBase64MessageValidator + +

org.citrusframework.validation.text.BinaryBase64MessageValidator

+
+defaultGzipBinaryBase64MessageValidator + +

org.citrusframework.validation.text.GzipBinaryBase64MessageValidator

+
+defaultXhtmlMessageValidator + +

org.citrusframework.validation.xhtml.XhtmlMessageValidator

+
+defaultGroovyXmlMessageValidator + +

org.citrusframework.validation.script.GroovyXmlMessageValidator

+
+defaultGroovyTextMessageValidator + +

org.citrusframework.validation.script.GroovyScriptMessageValidator

+
+defaultGroovyJsonMessageValidator + +

org.citrusframework.validation.script.GroovyJsonMessageValidator

+
+
+
+ + + + + +
+ + +You can overwrite a default message validator with a custom implementation. Just add your customized validator implementation +as a bean to the Citrus context and use one of the default bean identifiers. +
+
+
+

You can add a custom message validator as a component in the context (e.g. as Spring bean in the application context).

+
+
+
Java DSL
+
+
@Bean
+public CustomMessageValidator customMessageValidator() {
+    return new CustomMessageValidator();
+}
+
+
+
+
XML DSL
+
+
<bean id="customMessageValidator" class="org.citrusframework.validation.custom.CustomMessageValidator"/>
+
+
+
+

The listing above adds a custom message validator implementation. The message validator registry will automatically add this +validator to the list of available validators in the project.

+
+
+

The custom implementation class has to implement the basic interface org.citrusframework.validation.MessageValidator<>. Now +Citrus will try to match the custom implementation to incoming message types and occasionally execute the message validator +logic when applicable.

+
+
+
+

7.2. Validation modules

+
+

The list of available message validators in your project is controlled by the available message validator implementations +on the project classpath.

+
+
+

You need to add validator modules to the project accordingly. For instance if you want to use the default Json message validation +capabilities in Citrus you need to add the following dependency:

+
+
+
Json validation module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-validation-json</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

This adds the Citrus message validator component for dealing with Json message format. This includes message validators and +JsonPath support. Now your Citrus project is able to validate Json messages.

+
+
+

Citrus provides the following validation modules:

+
+ +
+

Read more about the individual validation modules in the next sections.

+
+
+
+

7.3. Json validation

+
+

Message formats such as Json have become very popular, in particular when dealing with RESTful services. +Citrus is able to expect and validate Json messages with a powerful comparison of Json structures.

+
+
+ + + + + +
+ + +By default, Citrus will use XML message formats when sending and receiving messages. +This also reflects to the message validation logic Citrus uses for incoming messages. +So by default Citrus will try to parse the incoming message as XML DOM element tree. +In case we would like to enable Json message validation we have to tell Citrus that we expect a Json message right now. +
+
+
+

Json message validation is not enabled by default in your project. +You need to add the validation module to your project as a Maven dependency.

+
+
+
Json validation module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-validation-json</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

Citrus provides several default message validator implementations for Json messages:

+
+
+ + + + + + + + + +
+JsonTextMessageValidator + +

Basic Json message validator implementation compares Json objects/arrays (expected and received).

+
+
    +
  • +

    The order of Json object properties can differ, whereas array order is always validated.

    +
  • +
  • +

    Test variables and ignored-placeholders (@ignore@) can be used.

    +
  • +
  • +

    JsonArray as well as nested JsonObjects are supported.

    +
  • +
+
+
+GroovyJsonMessageValidator + +

Extended groovy message validator provides specific Json slurper support. +With Json slurper the tester can validate the Json message body with closures for instance.

+
+
+
+ + + + + +
+ + +The Json validator offers two different modes to operate. +By default, strict mode is enabled and the validator will also check the exact amount of entries (object properties / array items) to match in received and control message. +No additional fields in received Json data structure will be accepted. +In soft mode the validator allows additional entries (object properties / array items) in received Json, so the control Json can be a subset of the recieved. +Additional entries in the received Json data structure are ignored. +
+
+
+ + + + + +
+ + +The Json validation mode (strict or soft) is settable via environment variable CITRUS_JSON_MESSAGE_VALIDATION_STRICT or system property citrus.json.message.validation.strict=false. +This will set soft mode to all Json text message validators. +
+
+
+

You can also overwrite these default message validators for Json by placing a bean into the Spring Application context. +The bean uses a default name as identifier. +Then your custom bean will overwrite the default validator:

+
+
+
Java
+
+
@Bean
+public JsonTextMessageValidator defaultJsonMessageValidator() {
+    return new JsonTextMessageValidator();
+}
+
+
+
+
XML
+
+
<bean id="defaultJsonMessageValidator" class="org.citrusframework.validation.json.JsonTextMessageValidator"/>
+
+
+
+

The same approach applies to the Groovy message validator implementation.

+
+
+
Java
+
+
@Bean
+public GroovyJsonMessageValidator defaultGroovyJsonMessageValidator() {
+    return new GroovyJsonMessageValidator();
+}
+
+
+
+
XML
+
+
<bean id="defaultGroovyJsonMessageValidator" class="org.citrusframework.validation.script.GroovyJsonMessageValidator"/>
+
+
+
+

This is how you can customize the message validators used for Json message data.

+
+
+

When a message has been received in Citrus the message validation will try to find a matching message validator according to the message content. +You can also specify the Json message format on a receive action in order to force Json message validation.

+
+
+
Java
+
+
receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .body("{" +
+            "\"type\" : \"read\"," +
+            "\"mbean\" : \"java.lang:type=Memory\"," +
+            "\"attribute\" : \"HeapMemoryUsage\"," +
+            "\"path\" : \"@equalsIgnoreCase('USED')@\"," +
+            "\"value\" : \"${heapUsage}\"," +
+            "\"timestamp\" : \"@ignore@\"" +
+          "}");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="json">
+        <data>
+          {
+            "type" : "read",
+            "mbean" : "java.lang:type=Memory",
+            "attribute" : "HeapMemoryUsage",
+            "path" : "@equalsIgnoreCase('USED')@",
+            "value" : "${heapUsage}",
+            "timestamp" : "@ignore@"
+          }
+        </data>
+    </message>
+</receive>
+
+
+
+

The message receiving action in our test case specifies a message format type type="json" . This tells Citrus to look for some message validator implementation capable of validating Json messages. +As we have added the proper message validator to the Spring application context Citrus will pick the right validator and Json message validation is performed on this message.

+
+
+

Instead of defining an expected message body template we can also use Groovy validation scripts. +Let’s have a look at the Groovy Json message validator example. +As usual the default Groovy Json message validator is active by default. +But the special Groovy message validator implementation will only jump in when we used a validation script in our receive message definition. +Let’s have an example for that.

+
+
+
Java
+
+
receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .validate(groovy()
+        .script("assert json.type == 'read'\n" +
+                "assert json.mbean == 'java.lang:type=Memory'\n" +
+                "assert json.attribute == 'HeapMemoryUsage'\n" +
+                "assert json.value == '${heapUsage}'"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="json">
+        <validate>
+            <script type="groovy">
+                <![CDATA[
+                  assert json.type == 'read'
+                  assert json.mbean == 'java.lang:type=Memory'
+                  assert json.attribute == 'HeapMemoryUsage'
+                  assert json.value == '${heapUsage}'
+                ]]>
+            </script>
+        </validate>
+    </message>
+</receive>
+
+
+
+

Again the message type tells Citrus that we expect a message of type json. +The action uses a validation script written in Groovy to verify the incoming message. +Citrus will automatically activate the special message validator that executes our Groovy script.

+
+
+

The script validation is very powerful as we can use the full power of the Groovy language. +The validation script automatically has access to the incoming Json message object json. +We can use the Groovy Json dot notated syntax in order to navigate through the Json structure. +The Groovy Json slurper object json is automatically injected in the validation script. +This way you can access the Json object elements in your code doing some assertions.

+
+
+

There is even more object injection for the validation script. +With the automatically added object receivedMessage you have access to the Citrus message object for this receive action. +This enables you to do whatever you want with the message body or header.

+
+
+
Java
+
+
receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .validate(groovy()
+        .script("assert receivedMessage.getPayload(String.class).contains(\"Hello Citrus!\")\n" +
+                "assert receivedMessage.getHeader(\"Operation\") == 'sayHello'\n" +
+                "context.setVariable(\"request_body\", receivedMessage.getPayload(String.class))"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="json">
+        <validate>
+            <script type="groovy">
+                assert receivedMessage.getPayload(String.class).contains("Hello Citrus!")
+                assert receivedMessage.getHeader("Operation") == 'sayHello'
+
+                context.setVariable("request_body", receivedMessage.getPayload(String.class))
+            </script>
+        </validate>
+    </message>
+</receive>
+
+
+
+

The listing above shows some power of the validation script. +We can access the message body, we can access the message header. +With test context access we can also save the whole message body as a new test variable for later usage in the test.

+
+
+

In general Groovy code inside the XML test case definition or as part of the Java DSL code is not very comfortable to maintain. +Neither you do have code syntax assist nor code completion when using inline Groovy scripts.

+
+
+

Also, in case the validation script gets more complex you might want to load the script from an external file resource.

+
+
+
Java
+
+
receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .validate(groovy()
+        .script(new ClassPathResource("path/to/validationScript.groovy")));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="json">
+        <validate>
+            <script type="groovy" file="path/to/validationScript.groovy"/>
+        </validate>
+    </message>
+</receive>
+
+
+
+

We referenced some external file resource validationScript.groovy . This file content is loaded at runtime and is used as script body. +Now that we have a normal groovy file we can use the code completion and syntax highlighting of our favorite Groovy editor.

+
+
+ + + + + +
+ + +Using several message validator implementations at the same time in the Spring application context is also no problem. +Citrus automatically searches for all available message validators applicable for the given message format and executes these validators in sequence. +This means that multiple message validators can coexist in a Citrus project. +
+
+
+

Multiple message validators that all apply to the message content format will run in sequence. +In case you need to explicitly choose a message validator implementation you can do so in the receive action:

+
+
+
Java
+
+
receive(someEndpoint)
+    .validator(groovyJsonMessageValidator)
+    .message()
+    .type(MessageType.JSON)
+    .validate(groovy()
+        .script(new ClassPathResource("path/to/validationScript.groovy")));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="json" validator="groovyJsonMessageValidator">
+        <validate>
+            <script type="groovy" file="path/to/validationScript.groovy"/>
+        </validate>
+    </message>
+</receive>
+
+
+
+

In this example we use the groovyJsonMessageValidator explicitly in the receive test action. +The message validator implementation was added as Spring bean with id groovyJsonMessageValidator to the Spring application context before. +Now Citrus will only execute the explicit message validator. +Other implementations that might also apply are skipped.

+
+
+ + + + + +
+ + +By default, Citrus consolidates all available message validators. +You can explicitly pick a special message validator in the receive message action as shown in the example above. +In this case all other validators will not take part in this special message validation. +But be careful: When picking a message validator explicitly you are of course limited to this message validator capabilities. +Validation features of other validators are not valid in this case (e.g. message header validation, XPath validation, etc.) +
+
+
+

7.3.1. Ignore with JsonPath

+
+

The next usage scenario for JsonPath expressions in Citrus is the ignoring of elements during message validation. +As you already know Citrus provides powerful validation mechanisms for XML and Json message format. +The framework is able to compare received and expected message contents with powerful validator implementations. +You can use a JsonPath expression for ignoring a very specific entry in the Json object structure.

+
+
+
Java
+
+
receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .body("{\"users\":" +
+            "[{" +
+                "\"name\": \"Jane\"," +
+                "\"token\": \"?\"," +
+                "\"lastLogin\": 0" +
+            "}," +
+            "{" +
+                "\"name\": \"Penny\"," +
+                "\"token\": \"?\"," +
+                "\"lastLogin\": 0" +
+            "}," +
+            "{" +
+                "\"name\": \"Mary\"," +
+                "\"token\": \"?\"," +
+                "\"lastLogin\": 0" +
+            "}]" +
+        "}")
+    .validate(json()
+                .ignore("$.users[*].token")
+                .ignore("$..lastLogin"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="json">
+      <data>
+        {
+          "users":
+          [{
+            "name": "Jane",
+            "token": "?",
+            "lastLogin": 0
+          },
+          {
+            "name": "Penny",
+            "token": "?",
+            "lastLogin": 0
+          },
+          {
+            "name": "Mary",
+            "token": "?",
+            "lastLogin": 0
+          }]
+        }
+      </data>
+      <ignore expression="$.users[*].token" />
+      <ignore expression="$..lastLogin" />
+    </message>
+</receive>
+
+
+
+

This time we add JsonPath expressions as ignore statements. +This means that we explicitly leave out the evaluated elements from validation. +Obviously this mechanism is a good thing to do when dynamic message data simply is not deterministic such as timestamps and dynamic identifiers. +In the example above we explicitly skip the token entry and all lastLogin values that are obviously timestamp values in milliseconds.

+
+
+

The JsonPath evaluation is very powerful when it comes to select a set of Json objects and elements. +This is how we can ignore several elements with one single JsonPath expression which is very powerful.

+
+
+
+

7.3.2. JsonPath validation

+
+

Let’s continue to use JsonPath expressions when validating a received message in Citrus:

+
+
+
Java
+
+
receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .validate(jsonPath()
+        .expression("$.user.name", "Penny")
+        .expression("$['user']['name']", "${userName}")
+        .expression("$.user.aliases", "[\"penny\",\"jenny\",\"nanny\"]")
+        .expression("$.user[?(@.admin)].password", "@startsWith('$%00')@")
+        .expression("$.user.address[?(@.type='office')]", "{\"city\":\"Munich\",\"street\":\"Company Street\",\"type\":\"office\"}"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message type="json">
+    <validate>
+      <json-path expression="$.user.name" value="Penny"/>
+      <json-path expression="$['user']['name']" value="${userName}"/>
+      <json-path expression="$.user.aliases" value="['penny','jenny','nanny']"/>
+      <json-path expression="$.user[?(@.admin)].password" value="@startsWith('$%00')@"/>
+      <json-path expression="$.user.address[?(@.type='office')]"
+          value="{&quot;city&quot;:&quot;Munich&quot;,&quot;street&quot;:&quot;Company Street&quot;,&quot;type&quot;:&quot;office&quot;}"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+
Use path expression map
+
+
final Map<String, Object> validationMap = new HashMap<>();
+validationMap.put("$.user.name", "Penny");
+validationMap.put("$['user']['name']", "${userName}");
+validationMap.put("$.user.aliases", "[\"penny\",\"jenny\",\"nanny\"]");
+validationMap.put("$.user[?(@.admin)].password", "@startsWith('$%00')@");
+validationMap.put("$.user.address[?(@.type='office')]", "{\"city\":\"Munich\",\"street\":\"Company Street\",\"type\":\"office\"}");
+
+receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .validate(jsonPath().expressions(validationMap));
+
+
+
+

The above JsonPath expressions will be evaluated when Citrus validates the received message. +The expression result is compared to the expected value where expectations can be static values as well as test variables and validation matcher expressions. +In case a JsonPath expression should not be able to find any elements the test case will also fail.

+
+
+

Json is a pretty simple yet powerful message format. +Simply put, a Json message just knows JsonObject, JsonArray and JsonValue items. +The handling of JsonObject and JsonValue items in JsonPath expressions is straight forward. +We just use a dot notated syntax for walking through the JsonObject hierarchy. +The handling of JsonArray items is also not very difficult either. +Citrus will try the best to convert JsonArray items to String representation values for comparison.

+
+
+ + + + + +
+ + +JsonPath expressions will only work on Json message formats. +This is why we have to tell Citrus the correct message format. +By default, Citrus is working with XML message data and therefore the XML validation mechanisms do apply by default. +With the message type attribute set to json we make sure that Citrus enables Json specific features on the message validation such as JsonPath support. +
+
+
+

Now let’s get a bit more complex with validation matchers and Json object functions. +Citrus tries to give you the most comfortable validation capabilities when comparing Json object values and Json arrays. +One first thing you can use is object functions like keySet() or size() . This functionality is not covered by JsonPath out of the box but added by Citrus. +See the following example on how to use it:

+
+
+
Java
+
+
receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .validate(jsonPath()
+        .expression("$.user.keySet()", "[id,name,admin,projects]")
+        .expression("$.user.aliases.size()", "3"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message type="json">
+    <validate>
+      <json-path expression="$.user.keySet()" value="[id,name,admin,projects]"/>
+      <json-path expression="$.user.aliases.size()" value="3"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+

The object functions do return special Json object related properties such as the set of keys for an object or the size of a Json array.

+
+
+

Now let’s get even more comfortable validation capabilities with matchers. +Citrus supports Hamcrest matchers which gives us a very powerful way of validating Json object elements and arrays. +See the following examples that demonstrate how this works:

+
+
+
Java
+
+
receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .validate(jsonPath()
+                .expression("$.user.keySet()", contains("id","name","admin","projects"))
+                .expression("$.user.aliases.size()", allOf(greaterThan(0), lessThan(5))));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message type="json">
+    <validate>
+      <json-path expression="$.user.keySet()" value="@assertThat(contains(id,name,admin,projects))@"/>
+      <json-path expression="$.user.aliases.size()" value="@assertThat(allOf(greaterThan(0), lessThan(5)))@"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+

When using the XML DSL we have to use the assertThat validation matcher syntax for defining the Hamcrest matchers. +You can combine matcher implementation as seen in the allOf(greaterThan(0), lessThan(5)) expression. +When using the Java DSL you can just add the matcher as expected result object. +Citrus evaluates the matchers and makes sure everything is as expected. +This is a very powerful validation mechanism as it combines the Hamcrest matcher capabilities with Json message validation.

+
+
+
+

7.3.3. Json schema validation

+
+

The Json schema validation in Citrus is based on the drafts provided by json-schema.org. +Because Json schema is a fast evolving project, only Json schema V3 and V4 are currently supported.

+
+
+ + + + + +
+ + +In contrast to the XML validation, the Json validation is an optional feature. +You have to activate it within every receive-message action by setting schema-validation="true" +
+
+
+
Java
+
+
receive(someEndpoint)
+    .message()
+    .type(MessageType.JSON)
+    .body()
+    .validate(json()
+        .schemaValidation(true)
+        .schema("bookStore"));
+
+
+
+
XML
+
+
<receive endpoint="echoHttpServer">
+  <message type="json" schema="bookStore" schema-validation="true">
+    <data>
+      {
+        "isbn" : "0345391802",
+        "title": "The Hitchhiker's Guide to the Galaxy",
+        "author": "Douglas Adams"
+      }
+    </data>
+  </message>
+</receive>
+
+
+
+

Json schema validation in Citrus is optional and disabled by default. +This is why the action required to explicitly enable the schema validation with schemaValidation(true). +The schema references a bean in the Citrus context (e.g. a Spring bean in the application context). +Read more about how to declare schemas in schema validation.

+
+
+

We encourage you to add Json schema validation to your test cases as soon as possible, because we think that message validation is an important part of integration testing.

+
+
+
+

7.3.4. Json schema repositories

+
+

Because Citrus supports different types of schema repositories, it is necessary to declare a Json schema repository as type="json". +This allows Citrus to collect all Json schema files for the message validation.

+
+
+
Java
+
+
@Bean
+public JsonSchemaRepository schemaRepository() {
+    JsonSchemaRepository repository = new JsonSchemaRepository();
+    repository.getSchemas().add(productSchema());
+    return repository;
+}
+
+
+
+
XML
+
+
<citrus:schema-repository type="json" id="jsonSchemaRepository">
+    <citrus:schemas>
+        <citrus:schema ref="productSchema" location="classpath:org/citrusframework/validation/ProductsSchema.json"/>
+    </citrus:schemas>
+</citrus:schema-repository>
+
+
+
+

The referenced schema is another bean in the configuration that represents the schema definition.

+
+
+
Java
+
+
@Bean
+public SimpleJsonSchema productSchema() {
+    return new SimpleJsonSchema(
+            new ClassPathResource("classpath:org/citrusframework/validation/ProductsSchema.json"));
+}
+
+
+
+
XML
+
+
<citrus:schema id="productSchema" location="classpath:org/citrusframework/validation/ProductsSchema.json"/>
+
+
+
+
+

7.3.5. Json schema filtering and validation strategy

+
+

In reference to the current Json schema definition, it is not possible to create a direct reference between a Json message and a set of schemas, as it would be possible with XML namespaces. +Because of that, Citrus follows a rule set for choosing the relevant schemas based on the configuration within the test case in relation to the given context. +The following table assumes that the Json schema validation is activated for the test action.

+
+ ++++ + + + + + + + + + + + + + + + + + + + + + + + + +
ScenarioValidation rules

No Json schema repositories are defined in the context.

No Json schema validation applies.

There is at least one Json schema repository defined in the context.

The message of the test action must be valid regarding at least one of the available schemas within the context.

A schema overruling is configured in the test case.

The configured schema must exist and the message must be valid regarding the specified schema.

A schema repository overruling is configured in the test case.

The configured schema repository must exist and the message must be valid regarding at least one of the schemas within +the specified schema repository.

+
+
+
+

7.4. XML validation

+
+

XML is a very common message format especially in the SOAP WebServices and JMS messaging world. Citrus provides XML message +validator implementations that are able to compare XML message structures. The validator will notice differences in the XML +message and supports XML namespaces, attributes and XML schema validation.

+
+
+

XML message validation is not enabled by default in your project. You need to add the validation module to your project +as a Maven dependency.

+
+
+
XML validation module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-validation-xml</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

The default XML message validator implementation is active by default and can be overwritten with a custom implementation +using the bean id defaultXmlMessageValidator .

+
+
+
Java
+
+
@Bean
+public DomXmlMessageValidator defaultXmlMessageValidator() {
+    return new DomXmlMessageValidator();
+}
+
+
+
+
XML
+
+
<bean id="defaultXmlMessageValidator" class="org.citrusframework.validation.xml.DomXmlMessageValidator"/>
+
+
+
+

The default XML message validator is very powerful when it comes to compare XML structures. The validator supports namespaces +with different prefixes and attributes as well as namespace qualified attributes. See the following sections for a detailed +description of all capabilities.

+
+
+

7.4.1. XML payload validation

+
+

Citrus is able to verify XML message content on a received message. You as a tester can compare the whole XML message body +to a predefined control message template. The Citrus message validator will walk through the XML document and compare the +elements, attributes and values.

+
+
+

You can define the expected XML message template in multiple ways:

+
+
+
    +
  • +

    Defines the message body as nested XML message template in the test code. The whole message body is defined inside the test case.

    +
  • +
  • +

    Defines an expected XML message template via external file resources. This time the body content is loaded at runtime from the external file.

    +
  • +
+
+
+

In Java tests that use the Citrus domain specific language you must use verbose String concatenation when constructing XML +message contents inline. You need to escape reserved characters like quotes and line breaks. This is why you should consider +to using external file resources in Java when dealing with large complex message data.

+
+
+
Java
+
+
@CitrusTest
+public void externalBodyResourceTest() {
+    receive("someEndpoint")
+        .message()
+        .body(new ClassPathResource("org/citrusframework/message/data/TestRequest.xml"))
+        .header("Operation", "sayHello")
+        .header("MessageId", "${messageId}");
+}
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <payload file="classpath:org/citrusframework/message/data/TestRequest.xml"/>
+  </message>
+</receive>
+
+
+
+

Inline message body definition or external file resource give us a control message template that the test case expects to +validate. Citrus uses this control template for extended message comparison. All elements, namespaces, attributes and node +values are validated in this comparison. When using XML message bodies Citrus will navigate through the whole XML structure +validating each element and its content.

+
+
+

Only in case received message and control message are equal to each other as expected the message validation will pass. In +case differences occur the test case fails with detailed error message.

+
+
+

Citrus supports various ways to add dynamic message content in the message template. Secondly, Citrus can ignore some elements +that should not be part of message comparison (e.g. when generated content or timestamps are part of the message content). +The tester can enrich the expected message template with test variables or ignore-expressions so we get a more robust +validation mechanism. We will talk about this in the next sections to come.

+
+
+
+

7.4.2. XML header validation

+
+

A message can have multiple headers in addition to the body content. You can validate headers with expected name and the +control value. Just add the following header validation to your receiving action.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .header("Operation", "sayHello")
+    .header("MessageId", "${messageId}");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <header>
+        <element name="Operation" value="GetCustomer"/>
+        <element name="RequestTag" value="${requestTag}"/>
+    </header>
+  </message>
+</receive>
+
+
+
+

Message headers are represented as name-value pairs. Each expected header element identified by its name has to be present +in the received message. In addition to that the header value is compared to the given control value. If a header entry is +not available, or the value does not match the expectations the test raises validation errors.

+
+
+
+

7.4.3. XML header fragment validation

+
+

Sometimes message headers may not apply to the name-value pair pattern. For example SOAP headers can also contain XML +fragments as header values. You can add complex header data as expected value in the validation.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .header("Operation", "SayHello")
+    .header("<ns0:HelloHeader xmlns:ns0=\"http://citrusframework.org/schemas/samples/HelloService.xsd\">" +
+                "<ns0:MessageId>${messageId}</ns0:MessageId>" +
+                "<ns0:CorrelationId>${correlationId}</ns0:CorrelationId>" +
+                "<ns0:User>${user}</ns0:User>" +
+                "<ns0:Text>Hello from Citrus!</ns0:Text>" +
+            "</ns0:HelloHeader>");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <header>
+      <data>
+        <![CDATA[
+          <ns0:HelloHeader xmlns:ns0="http://citrusframework.org/schemas/samples/HelloService.xsd">
+              <ns0:MessageId>${messageId}</ns0:MessageId>
+              <ns0:CorrelationId>${correlationId}</ns0:CorrelationId>
+              <ns0:User>${user}</ns0:User>
+              <ns0:Text>Hello from Citrus!</ns0:Text>
+          </ns0:HelloHeader>
+        ]]>
+      </data>
+      <element name="Operation" value="SayHello"/>
+    </header>
+  </message>
+</receive>
+
+
+
+

The header data has no name but uses a complex XML fragment as a value. In SOAP this header fragment will be added as +a SOAP-ENV:Header then. Please read more about this in SOAP support.

+
+
+
+

7.4.4. Ignore XML elements

+
+

Some elements in the message payload might not apply for validation at all. Just think of communication timestamps or dynamic +values that have been generated from a foreign service.

+
+
+

You as a tester may not be able to predict such a timestamp or dynamic value for expected validation. This is why you can +safely ignore elements and attributes in the XML message validation.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .header("<TestMessage>" +
+                "<VersionId>${versionId}</VersionId>" +
+                "<Timestamp>?</Timestamp>" +
+                "<MessageId>?</MessageId>" +
+            "</TestMessage>")
+    .validate(xpath()
+            .ignore("/TestMessage/Timestamp")
+            .ignore("/TestMessage/MessageId"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <payload>
+      <TestMessage>
+        <VersionId>${versionId}</VersionId>
+        <Timestamp>?</Timestamp>
+        <MessageId>?</MessageId>
+      </TestMessage>
+    </payload>
+    <ignore path="/TestMessage/Timestamp"/>
+    <ignore path="/TestMessage/MessageId"/>
+  </message>
+</receive>
+
+
+
+

The receive action above is not able to verify the elements Timestamp and MessageId. This is because the timestamp uses +milliseconds and the message id has been generated by the server application. Both values must be excluded from XML validation.

+
+
+

You can use ignore XPath expressions that match elements in the message content that should be excluded. XPath expressions can +be cumbersome and error prone though.

+
+
+

You can also use inline @ignore@ expressions as expected template values in order to exclude elements from valdidation. This +is for those of you that do not like to write XPath expressions. As a result the ignored message elements are automatically +skipped when Citrus compares and validates message contents and do not break the test case.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .header("<TestMessage>" +
+                "<VersionId>${versionId}</VersionId>" +
+                "<Timestamp>@ignore@</Timestamp>" +
+                "<MessageId>@ignore@</MessageId>" +
+            "</TestMessage>");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <payload>
+      <TestMessage>
+        <VersionId>${versionId}</VersionId>
+        <Timestamp>@ignore@</Timestamp>
+        <MessageId>@ignore@</MessageId>
+      </TestMessage>
+    </payload>
+  </message>
+</receive>
+
+
+
+

Feel free to mix both mechanisms to ignore message elements. Ignore expressions are valid as elements, sub-tree nodes and +attributes. You can use the @ignore@ placeholder in external file resources, too.

+
+
+
+

7.4.5. XPath validation

+
+

The section XML payload validation showed how to validate the complete XML message structure +with control message template. All elements are validated and compared one after another.

+
+
+

In some cases this approach might be too extensive. Imagine the tester only needs to validate a small subset of message elements. +You would rather want to use explicit element validation with XPath.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .validate(xpath()
+        .expression("/TestRequest/MessageId", "${messageId}")
+        .expression("//VersionId", "2"));
+}
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <validate>
+      <xpath expression="/TestRequest/MessageId" value="${messageId}"/>
+      <xpath expression="/TestRequest/VersionId" value="2"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+

In Java the use of a map may be the easiest way to declare multiple expressions for XPath validation.

+
+
+
Java DSL
+
+
final Map<String, Object> expressions = new HashMap<>();
+expressions.put("/TestRequest/MessageId", "${messageId}");
+expressions.put("//VersionId", "2");
+
+receive("someEndpoint")
+    .message()
+    .validate(xpath()
+        .expressions(expressions));
+}
+
+
+
+

Instead of comparing the whole message some message elements are validated explicitly via XPath. Citrus evaluates the XPath +expression on the received message and compares the result value to the control value. The basic message structure as well +as all other message elements are not included into this explicit validation.

+
+
+ + + + + +
+ + +If this type of element validation is chosen neither <payload> nor <data> nor <resource> template definitions are +allowed in Citrus XML test cases. +
+
+
+ + + + + +
+ + +Citrus offers an alternative dot-notated syntax in order to walk through XML trees. In case you are not familiar with +XPath or simply need a very easy way to find your element inside the XML tree you might use this way. Every element hierarchy +in the XML tree is represented with a simple dot - for example: +
+
+
+

TestRequest.VersionId

+
+
+

The expression will search the XML tree for the respective <TestRequest><VersionId> element. Attributes are supported too. +In case the last element in the dot-notated expression is an XML attribute the framework will automatically find it.

+
+
+

Of course this dot-notated syntax is very simple and might not be applicable for more complex tree navigation. XPath is +much more powerful - no doubt. The dot-notated syntax might help those of you that are not familiar with XPath. +So the dot-notation is supported wherever XPath expressions might apply.

+
+
+

The Xpath expressions can evaluate to different result types. By default, Citrus is operating on NODE and STRING result +types so that you can validate some element value. But you can also use different result types such as NODESET and BOOLEAN .

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(xpath()
+        .expression("boolean:/TestRequest/Error", false)
+        .expression("number:/TestRequest/Status[.='success']", 3)
+        .expression("node-set:/TestRequest/OrderType", "[single, multi, multi]");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <validate>
+      <xpath expression="/TestRequest/Error" value="false" result-type="boolean"/>
+      <xpath expression="/TestRequest/Status[.='success']" value="3" result-type="number"/>
+      <xpath expression="/TestRequest/OrderType" value="[single, multi, multi]" result-type="node-set"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+

In the example above we use different expression result types. First we want to make sure no /TestRequest/Error element +is present. This can be done with a boolean result type and false value. Second we want to validate the number of found +elements for the expression /TestRequest/Status[.='success'] . The XPath expression evaluates to a node list that results +in its list size to be checked. And last but not least we evaluate to a node-set result type where all values in the node list +will be translated to a comma delimited string value.

+
+
+

You can use even more powerful validation expressions with matcher implementations. With validation matchers you are able to +use validations such as greaterThan, lessThan, hasSize and much more.

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(xpath()
+        .expression("/TestRequest/Error", anyOf(empty(), nullValue()))
+        .expression("number:/TestRequest/Status[.='success']", greaterThan(0.0))
+        .expression("integer:/TestRequest/Status[.='failed']", lowerThan(1))
+        .expression("node-set:/TestRequest/OrderType", hasSize(3));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <validate>
+      <xpath expression="/TestRequest/Error" value="@assertThat(anyOf(empty(), nullValue()))@"/>
+      <xpath expression="/TestRequest/Status[.='success']" value="@assertThat(greaterThan(0.0))@" result-type="number"/>
+      <xpath expression="/TestRequest/Status[.='failed']" value="@assertThat(lowerThan(1))@" result-type="integer"/>
+      <xpath expression="/TestRequest/OrderType" value="@assertThat(hasSize(3))@" result-type="node-set"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+ + + + + +
+ + +The validation matchers used in the example above use the citrus-hamcrest-validation +module. +
+
+
+ + + + + +
+ + +XPath uses decimal number type Double by default when evaluating expressions with number result type. This means +we have to use Double typed expected values, too. Citrus also provides the result type integer that automatically converts +the XPath expression result to an Integer type. +
+
+
+

When using the XML DSL we have to use the assertThat validation matcher syntax for defining the Hamcrest matcher. You can +combine matcher implementation as seen in the anyOf(empty(), nullValue()) expression. When using the Java DSL you can just +add the matcher as expected result object. Citrus evaluates the matchers and makes sure everything is as expected. This is a +very powerful validation mechanism as it also works with node-sets containing multiple values as list.

+
+
+

This is how you can add very powerful message element validation in XML using XPath expressions.

+
+
+
+

7.4.6. XML namespaces

+
+

Namespaces represent an essential concept in XML. A namespace declares an element to be part of a very specific ruleset. You +have to specify namespaces also when using XPath expressions. Let’s have a look at an example message that uses XML namespaces:

+
+
+
Sample XML body with namepaces
+
+
<ns1:TestMessage xmlns:ns1="http://citrus.com/namespace">
+    <ns1:TestHeader>
+        <ns1:CorrelationId>_</ns1:CorrelationId>
+        <ns1:Timestamp>2001-12-17T09:30:47.0Z</ns1:Timestamp>
+        <ns1:VersionId>2</ns1:VersionId>
+    </ns1:TestHeader>
+    <ns1:TestBody>
+        <ns1:Customer>
+            <ns1:Id>1</ns1:Id>
+        </ns1:Customer>
+    </ns1:TestBody>
+</ns1:TestMessage>
+
+
+
+

Now we would like to validate some elements in this message using XPath

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(xpath()
+        .expression("//TestMessage/TestHeader/VersionId", 2L)
+        .expression("//TestMessage/TestHeader/CorrelationId", "${correlationId}");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <validate>
+      <xpath expression="//TestMessage/TestHeader/VersionId" value="2"/>
+      <xpath expression="//TestMessage/TestHeader/CorrelationId" value="${correlationId}"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+

The validation will fail although the XPath expression looks correct regarding the XML tree. This is because the message uses the +namespace xmlns:ns1="http://citrus.com/namespace". The XPath expression is not able to find the elements because of the missing +namespace declaration in the expression. The correct XPath expression uses the namespace prefix as defined in the message.

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(xpath()
+        .expression("//ns1:TestMessage/ns1:TestHeader/ns1:VersionId", 2L)
+        .expression("//ns1:TestMessage/ns1:TestHeader/ns1:CorrelationId", "${correlationId}");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <validate>
+      <xpath expression="//ns1:TestMessage/ns1:TestHeader/ns1:VersionId" value="2"/>
+      <xpath expression="//ns1:TestMessage/ns1:TestHeader/ns1:CorrelationId" value="${correlationId}"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+

Now the expressions works fine, and the validation is successful. Relying on the namespace prefix ns1 is quite error-prone though. +This is because the test depends on the very specific namespace prefix. As soon as the message is sent with a different +namespace prefix (e.g. ns2) the validation will fail again.

+
+
+

You can avoid this effect when specifying your own namespace context and your own namespace prefix during validation.

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(xpath()
+        .expression("//pfx:TestMessage/pfx:TestHeader/pfx:VersionId", 2L)
+        .expression("//pfx:TestMessage/pfx:TestHeader/pfx:CorrelationId", "${correlationId}")
+        .namespaceContext("pfx", "http://citrus.com/namespace"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <validate>
+      <xpath expression="//pfx:TestMessage/pfx:TestHeader/pfx:VersionId" value="2"/>
+      <xpath expression="//pfx:TestMessage/pfx:TestHeader/pfx:CorrelationId" value="${correlationId}"/>
+      <namespace prefix="pfx" value="http://citrus.com/namespace"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+

Now the test is independent of any namespace prefix in the received message. The namespace context will resolve the namespaces +and find the elements although the message might use different prefixes. The only thing that matters is that the namespace +value (http://citrus.com/namespace) matches.

+
+
+ + + + + +
+ + +Instead of this namespace context on validation level you can also have a global namespace context which is valid in +all test cases. We just add a bean in the basic Spring application context configuration which defines global namespace mappings. +
+
+
+
Java
+
+
@Bean
+public NamespaceContextBuilder namespaceContext() {
+    NamespaceContextBuilder builder = new NamespaceContextBuilder();
+    builder.getNamepspaceMappings().put("pfx", "http://citrusframework.org/samples/sayHello");
+    return builder;
+}
+
+
+
+
XML
+
+
<namespace-context>
+    <namespace prefix="def" uri="http://citrusframework.org/samples/sayHello"/>
+</namespace-context>
+
+
+
+

Once defined the def namespace prefix is valid in all test cases and all XPath expressions. This enables you to free your +test cases from namespace prefix bindings that might be broken with time. You can use these global namespace mappings wherever +XPath expressions are valid inside a test case (validation, ignore, extract).

+
+
+

In the previous section we have seen that XML namespaces can get tricky with XPath validation. Default namespaces can do +even more! So let’s look at the example with default namespaces:

+
+
+
Sample XML body with default namespaces
+
+
<TestMessage xmlns="http://citrus.com/namespace">
+    <TestHeader>
+        <CorrelationId>_</CorrelationId>
+        <Timestamp>2001-12-17T09:30:47.0Z</Timestamp>
+        <VersionId>2</VersionId>
+    </TestHeader>
+    <TestBody>
+        <Customer>
+            <Id>1</Id>
+        </Customer>
+    </TestBody>
+</TestMessage>
+
+
+
+

The message uses default namespaces. The following approach in XPath will fail due to namespace problems.

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(xpath()
+        .expression("//TestMessage/TestHeader/VersionId", 2L)
+        .expression("//TestMessage/TestHeader/CorrelationId", "${correlationId}"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <validate>
+      <xpath expression="//TestMessage/TestHeader/VersionId" value="2"/>
+      <xpath expression="//TestMessage/TestHeader/CorrelationId" value="${correlationId}"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+

Even default namespaces need to be specified in the XPath expressions. Look at the following code listing that works fine +with default namespaces:

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(xpath()
+        .expression("//:TestMessage/:TestHeader/:VersionId", 2L)
+        .expression("//:TestMessage/:TestHeader/:CorrelationId", "${correlationId}"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <validate>
+      <xpath expression="//:TestMessage/:TestHeader/:VersionId" value="2"/>
+      <xpath expression="//:TestMessage/:TestHeader/:CorrelationId" value="${correlationId}"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+ + + + + +
+ + +It is recommended to use the namespace context as described in the previous chapter when validating. Only this approach +ensures flexibility and stable test cases regarding namespace changes. +
+
+
+
+

7.4.7. Customize XML parser and serializer

+
+

When working with XML data format parsing and serializing is a common task. XML structures are parsed to a DOM (Document +Object Model) representation in order to process elements, attributes and text nodes. DOM node objects get serialized to a +String message payload representation. The XML parser and serializer is customizable to a certain level. By default, Citrus +uses the DOM Level 3 Load and Save implementation with following settings:

+
+
+
Parser settings
+ + + + + + + + + + + + + + + + + +
+cdata-sections + +

true

+
+split-cdata-sections + +

false

+
+validate-if-schema + +

true

+
+element-content-whitespace + +

false

+
+
+
+
Serializer settings
+ + + + + + + + + + + + + +
+format-pretty-print + +

true

+
+split-cdata-sections + +

false

+
+element-content-whitespace + +

true

+
+
+
+

The parameters are also described in W3C DOM configuration documentation. We can customize the default settings by adding +an XmlConfigurer Spring bean to the Citrus application context.

+
+
+
Java
+
+
@Bean
+public XmlConfigurer xmlConfigurer() {
+    XmlConfigurer configurer = new XmlConfigurer();
+    configurer.getParseSettings().put("validate-if-schema", false);
+
+    configurer.getSerializeSettings().put("comments", false);
+    configurer.getSerializeSettings().put("format-pretty-print", false);
+    return configurer;
+}
+
+
+
+
XML
+
+
<bean id="xmlConfigurer" class="org.citrusframework.xml.XmlConfigurer">
+    <property name="parseSettings">
+        <map>
+            <entry key="validate-if-schema" value="false" value-type="java.lang.Boolean"/>
+        </map>
+    </property>
+    <property name="serializeSettings">
+        <map>
+            <entry key="comments" value="false" value-type="java.lang.Boolean"/>
+            <entry key="format-pretty-print" value="false" value-type="java.lang.Boolean"/>
+        </map>
+    </property>
+</bean>
+
+
+
+ + + + + +
+ + +This configuration is of global nature. All XML processing operations will be affected with this configuration. +
+
+
+
+

7.4.8. Groovy XML validation

+
+

With the Groovy XmlSlurper you can easily validate XML message payloads without having to deal directly with XML. People +who do not want to deal with XPath may also like this validation alternative.

+
+
+

The tester directly navigates through the message elements and uses simple code assertions in order to control the message content. +Here is an example how to validate messages with Groovy script:

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(groovy().script("assert root.children().size() == 4\n" +
+                              "assert root.MessageId.text() == '${messageId}'\n" +
+                              "assert root.CorrelationId.text() == '${correlationId}'\n")
+                              "assert root.Text.text() == 'Hello ' + context.getVariable(\"user\")"))
+    .header("Operation", "sayHello")
+    .header("CorrelationId", "${correlationId}")
+    .timeout(5000L);
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint" timeout="5000">
+    <message>
+        <validate>
+            <script type="groovy">
+                assert root.children().size() == 4
+                assert root.MessageId.text() == '${messageId}'
+                assert root.CorrelationId.text() == '${correlationId}'
+                assert root.Text.text() == 'Hello ' + context.getVariable("user")
+            </script>
+        </validate>
+    </message>
+    <header>
+        <element name="Operation" value="sayHello"/>
+        <element name="CorrelationId" value="${correlationId}"/>
+    </header>
+</receive>
+
+
+
+

The Groovy XmlSlurper validation script goes right into the message-tag instead of an XML control template or XPath validation. +The Groovy script supports Java assert statements for message element validation. Citrus automatically injects the root +element root to the validation script. This is the Groovy XmlSlurper object and the start of element navigation. Based on +this root element you can access child elements and attributes with a dot notated syntax. Just use the element names separated +by a simple dot. Very easy! If you need the list of child elements use the children() function on any element. With the +text() function you get access to the element’s text-value. The size() is very useful for validating the number of +child elements which completes the basic validation statements.

+
+
+

As you can see from the example, we may use test variables within the validation script, too. Citrus has also injected the +actual test context to the validation script. The test context object holds all test variables. So you can also access variables +with context.getVariable("user") for instance. On the test context you can also set new variable values with context.setVariable("user", "newUserName") .

+
+
+

There is even more object injection for the validation script. With the automatically added object receivedMessage You +have access to the Citrus message object for this receive action. This enables you to do whatever you want with the message +payload or header.

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(groovy().script("assert receivedMessage.getPayload(String.class).contains(\"Hello Citrus!\")\n" +
+                              "assert receivedMessage.getHeader(\"Operation\") == 'sayHello'\n" +
+                              "context.setVariable(\"request_payload\", receivedMessage.getPayload(String.class))"))
+    .timeout(5000L);
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint" timeout="5000">
+    <message>
+        <validate>
+            <script type="groovy">
+                assert receivedMessage.getPayload(String.class).contains("Hello Citrus!")
+                assert receivedMessage.getHeader("Operation") == 'sayHello'
+
+                context.setVariable("request_payload", receivedMessage.getPayload(String.class))
+            </script>
+        </validate>
+    </message>
+</receive>
+
+
+
+

The listing above shows some power of the validation script. We can access the message payload, we can access the message +header. With test context access we can also save the whole message payload as a new test variable for later usage in the test.

+
+
+

In general Groovy code inside the XML test case definition or as part of the Java DSL code is not very comfortable to maintain. +You do not have code syntax assist or code completion. This is why we can also use external file resources for the validation +scripts. The syntax looks like follows:

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(groovy()
+            .script(new ClassPathResource("validationScript.groovy"))
+    .timeout(5000L);
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint" timeout="5000">
+    <message>
+        <validate>
+            <script type="groovy" file="classpath:validationScript.groovy"/>
+        </validate>
+    </message>
+</receive>
+
+
+
+

We referenced some external file resource validationScript.groovy . This file content is loaded at runtime and is used +as script body. Now that we have a normal groovy file we can use the code completion and syntax highlighting of our favorite +Groovy editor.

+
+
+ + + + + +
+ + +You can use the Groovy validation script in combination with other validation types like XML tree comparison and XPath +validation. +
+
+
+ + + + + +
+ + +For further information on the Groovy XmlSlurper please see the official Groovy website and documentation +
+
+
+
+

7.4.9. XML schema validation

+
+

There are several possibilities to describe the structure of XML documents. The two most popular ways are DTD +(Document type definition) and XSD (XML Schema definition). In case the XML document is classified using a +schema definition the structure of the document has to fit the predefined rules inside the schema definition. +XML document instances are valid only in case they meet all these structure rules defined in the schema definition. +Citrus can validate XML documents using the schema languages DTD and XSD.

+
+
+
XSD schema repositories
+
+

Citrus tries to validate all incoming XML messages against a schema definition in order to ensure that all rules are +fulfilled. This means that the message receiving actions in Citrus have to know the XML schema definition file +resources that belong to our test context.

+
+
+
Java
+
+
@Bean
+public XsdSchemaRepository schemaRepository() {
+    XsdSchemaRepository repository = new XsdSchemaRepository();
+    repository.getSchemas().add(travelAgencySchema());
+    repository.getSchemas().add(royalAirlineSchema());
+    repository.getSchemas().add(smartAirlineSchema());
+    return repository;
+}
+
+@Bean
+public SimpleXsdSchema travelAgencySchema() {
+    return new SimpleXsdSchema(
+            new ClassPathResource("classpath:citrus/flightbooking/TravelAgencySchema.xsd"));
+}
+
+@Bean
+public SimpleXsdSchema royalAirlineSchema() {
+    return new SimpleXsdSchema(
+            new ClassPathResource("classpath:citrus/flightbooking/RoyalAirlineSchema.xsd"));
+}
+
+@Bean
+public SimpleXsdSchema smartAirlineSchema() {
+    return new SimpleXsdSchema(
+            new ClassPathResource("classpath:citrus/flightbooking/SmartAirlineSchema.xsd"));
+}
+
+
+
+
XML
+
+
<citrus:schema-repository id="schemaRepository">
+    <citrus:schemas>
+        <citrus:schema id="travelAgencySchema"
+            location="classpath:citrus/flightbooking/TravelAgencySchema.xsd"/>
+        <citrus:schema id="royalAirlineSchema"
+            location="classpath:citrus/flightbooking/RoyalAirlineSchema.xsd"/>
+        <citrus:reference schema="smartAirlineSchema"/>
+    </citrus:schemas>
+</citrus:schema-repository>
+
+<citrus:schema id="smartAirlineSchema"
+      location="classpath:citrus/flightbooking/SmartAirlineSchema.xsd"/>
+
+
+
+

By convention there is a default schema repository component defined in the Citrus Spring application context with +the id schemaRepository. Spring application context is then able to inject the schema repository into all message +receiving test actions at runtime. The receiving test action consolidates the repository for a matching schema +definition file in order to validate the incoming XML document structure.

+
+
+

The connection between incoming XML messages and xsd schema files in the repository is done by a mapping strategy which +we will discuss later in this chapter. By default, Citrus picks the right schema based on the target namespace that is +defined inside the schema definition. The target namespace of the schema definition has to match the namespace of the +root element in the received XML message. With this mapping strategy you will not have to wire XML messages and schema +files manually, all is done automatically by the Citrus schema repository at runtime. All you need to do is to register +all available schema definition files regardless of which target namespace or nature inside the Citrus schema +repository.

+
+
+ + + + + +
+ + +XML schema validation is mandatory in Citrus. This means that Citrus always tries to find a matching schema +definition inside the schema repository in order to perform syntax validation on incoming schema qualified XML messages. +A classified XML message is defined by its namespace definitions. Consequently you will get validation errors in case +no matching schema definition file is found inside the schema repository. So if you explicitly do not want to validate +the XML schema for some reason you have to disable the validation explicitly in your test with +schema-validation="false". +
+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(xpath()
+            .expression("//ns1:TestMessage/ns1:MessageHeader/ns1:MessageId", "${messageId}")
+            .expression("//ns1:TestMessage/ns1:MessageHeader/ns1:CorrelationId", "${correlationId}")
+            .schemaValidation(false)
+            .namespaceContext("ns1", "http://citrus.com/namespace"))
+    .timeout(5000L);
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message schema-validation="false">
+      <validate>
+        <xpath expression="//ns1:TestMessage/ns1:MessageHeader/ns1:MessageId"
+             value="${messageId}"/>
+        <xpath expression="//ns1:TestMessage/ns1:MessageHeader/ns1:CorrelationId"
+             value="${correlationId}"/>
+        <namespace prefix="ns1" value="http://citrus.com/namespace"/>
+      </validate>
+    </message>
+</receive>
+
+
+
+

This mandatory schema validation might sound annoying to you but in our opinion it is very important to validate the +structure of the received XML messages, so disabling the schema validation should not be the standard for all tests. +Disabling automatic schema validation should only apply to very special situations. So please try to put all available +schema definitions to the schema repository and you will be fine.

+
+
+
+
WSDL schemas
+
+

In SOAP WebServices world the WSDL (WebService Schema Definition Language) defines the structure and nature of the XML +messages exchanged across the interface. Often the WSDL files do hold the XML schema definitions as nested elements. +In Citrus you can directly set the WSDL file as location of a schema definition like this:

+
+
+
Java
+
+
@Bean
+public WsdlXsdSchema airlineWsdl() {
+    return new WsdlXsdSchema(
+            new ClassPathResource("classpath:citrus/flightbooking/AirlineSchema.wsdl"));
+}
+
+
+
+
XML
+
+
<citrus:schema id="airlineWsdl"
+    location="classpath:citrus/flightbooking/AirlineSchema.wsdl"/>
+
+
+
+

Citrus is able to find the nested schema definitions inside the WSDL file in order to build a valid schema file for the +schema repository. So incoming XML messages that refer to the WSDL file can be validated for syntax rules.

+
+
+
+
Schema collections
+
+

Sometimes an XML schema definition is separated into multiple files. This is a problem for the Citrus schema repository +as the schema mapping strategy then is not able to pick the right file for validation, in particular when working with +target namespace values as key for the schema mapping strategy. As a solution for this problem you have to put all +schemas with the same target namespace value into a schema collection.

+
+
+
Java
+
+
@Bean
+public XsdSchemaCollection flightbookingSchemaCollection() {
+    XsdSchemaCollection collection = new XsdSchemaCollection();
+    collection.getSchemas().add("classpath:citrus/flightbooking/BaseTypes.xsd");
+    collection.getSchemas().add("classpath:citrus/flightbooking/AirlineSchema.xsd");
+    return collection;
+}
+
+
+
+
XML
+
+
<citrus:schema-collection id="flightbookingSchemaCollection">
+  <citrus:schemas>
+    <citrus:schema location="classpath:citrus/flightbooking/BaseTypes.xsd"/>
+    <citrus:schema location="classpath:citrus/flightbooking/AirlineSchema.xsd"/>
+  </citrus:schemas>
+</citrus:schema-collection>
+
+
+
+

Both schema definitions BaseTypes.xsd and AirlineSchema.xsd share the same target namespace and therefore need to +be combined in schema collection component. The schema collection can be referenced in any schema repository as normal +schema definition.

+
+
+
Java
+
+
@Bean
+public XsdSchemaRepository schemaRepository() {
+    XsdSchemaRepository repository = new XsdSchemaRepository();
+    repository.getSchemas().add(flightbookingSchemaCollection());
+    return repository;
+}
+
+
+
+
XML
+
+
<citrus:schema-repository id="schemaRepository">
+  <citrus:schemas>
+    <citrus:reference schema="flightbookingSchemaCollection"/>
+  </citrus:schemas>
+</citrus:schema-repository>
+
+
+
+
+
Schema mapping strategy
+
+

The schema repository in Citrus holds one to many schema definition files and dynamically picks up the right one +according to the validated message payload. The repository needs to have some strategy for deciding which schema +definition to choose. See the following schema mapping strategies and decide which of them is suitable for you.

+
+
+
+
Target Namespace Mapping Strategy
+
+

This is the default schema mapping strategy. Schema definitions usually define some target namespace which is valid +for all elements and types inside the schema file. The target namespace is also used as root namespace in XML message +payloads. According to this information Citrus can pick up the right schema definition file in the schema repository. +You can set the schema mapping strategy as property in the configuration files:

+
+
+
Java
+
+
@Bean
+public XsdSchemaRepository schemaRepository() {
+    XsdSchemaRepository repository = new XsdSchemaRepository();
+    repository.setSchemaMappingStrategy(schemaMappingStrategy());
+    repository.getSchemas().add(helloSchema());
+    return repository;
+}
+
+@Bean
+public TargetNamespaceSchemaMappingStrategy schemaMappingStrategy() {
+    return new TargetNamespaceSchemaMappingStrategy();
+}
+
+@Bean
+public SimpleXsdSchema helloSchema() {
+    return new SimpleXsdSchema(
+            new ClassPathResource("classpath:citrus/samples/sayHello.xsd"));
+}
+
+
+
+
XML
+
+
<citrus:schema-repository id="schemaRepository"
+    schema-mapping-strategy="schemaMappingStrategy">
+  <citrus:schemas>
+    <citrus:schema id="helloSchema"
+        location="classpath:citrus/samples/sayHello.xsd"/>
+  </citrus:schemas>
+</citrus:schema-repository>
+
+<bean id="schemaMappingStrategy"
+    class="org.citrusframework.xml.schema.TargetNamespaceSchemaMappingStrategy"/>
+
+
+
+

The sayHello.xsd schema file defines a target namespace (http://citrusframework.org/schemas/sayHello.xsd):

+
+
+
Schema target namespace
+
+
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
+    xmlns="http://citrusframework.org/schemas/sayHello.xsd"
+    targetNamespace="http://citrusframework.org/schemas/sayHello.xsd"
+    elementFormDefault="qualified"
+    attributeFormDefault="unqualified">
+
+</xs:schema>
+
+
+
+

Incoming request messages should also have the target namespace set in the root element and this is how Citrus matches +the right schema file in the repository.

+
+
+
HelloRequest.xml
+
+
<HelloRequest xmlns="http://citrusframework.org/schemas/sayHello.xsd">
+   <MessageId>123456789</MessageId>
+   <CorrelationId>1000</CorrelationId>
+   <User>Christoph</User>
+   <Text>Hello Citrus</Text>
+</HelloRequest>
+
+
+
+
+
Root QName Mapping Strategy
+
+

The next possibility for mapping incoming request messages to a schema definition is via the XML root element QName. +Each XML message payload starts with a root element that usually declares the type of an XML message. According to this +root element you can set up mappings in the schema repository.

+
+
+
Java
+
+
@Bean
+public XsdSchemaRepository schemaRepository() {
+    XsdSchemaRepository repository = new XsdSchemaRepository();
+    repository.setSchemaMappingStrategy(schemaMappingStrategy());
+    repository.getSchemas().add(helloSchema());
+    repository.getSchemas().add(goodbyeSchema());
+    return repository;
+}
+
+@Bean
+public RootQNameSchemaMappingStrategy schemaMappingStrategy() {
+    RootQNameSchemaMappingStrategy rootQnameStrategy = new RootQNameSchemaMappingStrategy();
+    rootQnameStrategy.getMappings().put("HelloRequest", helloSchema());
+    rootQnameStrategy.getMappings().put("GoodbyeRequest", goodbyeSchema());
+
+    return rootQnameStrategy;
+}
+
+@Bean
+public SimpleXsdSchema helloSchema() {
+    return new SimpleXsdSchema(
+            new ClassPathResource("classpath:citrus/samples/sayHello.xsd"));
+}
+
+@Bean
+public SimpleXsdSchema goodbyeSchema() {
+    return new SimpleXsdSchema(
+            new ClassPathResource("classpath:citrus/samples/sayGoodbye.xsd"));
+}
+
+
+
+
XML
+
+
<citrus:schema-repository id="schemaRepository"
+    schema-mapping-strategy="schemaMappingStrategy">
+  <citrus:schemas>
+    <citrus:reference schema="helloSchema"/>
+    <citrus:reference schema="goodbyeSchema"/>
+  </citrus:schemas>
+</citrus:schema-repository>
+
+<bean id="schemaMappingStrategy"
+    class="org.citrusframework.xml.schema.RootQNameSchemaMappingStrategy">
+  <property name="mappings">
+    <map>
+      <entry key="HelloRequest" value="helloSchema"/>
+      <entry key="GoodbyeRequest" value="goodbyeSchema"/>
+    </map>
+  </property>
+</bean>
+
+<citrus:schema id="helloSchema"
+    location="classpath:citrus/samples/sayHello.xsd"/>
+
+<citrus:schema id="goodbyeSchema"
+     location="classpath:citrus/samples/sayGoodbye.xsd"/>
+
+
+
+

The listing above defines two root qname mappings - one for HelloRequest and one for GoodbyeRequest message types. +An incoming message of type <HelloRequest> is then mapped to the respective schema and so on. With these dedicated +mappings you are able to control which schema is used on an XML request, regardless of target namespace definitions.

+
+
+
+
Schema mapping strategy chain
+
+

Let’s discuss the possibility to combine several schema mapping strategies in a logical chain. You can define more than +one mapping strategy that are evaluated in sequence. The first strategy to find a proper schema definition file in the +repository wins.

+
+
+
Java
+
+
@Bean
+public XsdSchemaRepository schemaRepository() {
+    XsdSchemaRepository repository = new XsdSchemaRepository();
+    repository.setSchemaMappingStrategy(schemaMappingStrategy());
+    repository.getSchemas().add(helloSchema());
+    repository.getSchemas().add(goodbyeSchema());
+    return repository;
+}
+
+@Bean
+public SchemaMappingStrategyChain schemaMappingStrategy() {
+    SchemaMappingStrategyChain chain = new SchemaMappingStrategyChain();
+
+    RootQNameSchemaMappingStrategy rootQnameStrategy = new RootQNameSchemaMappingStrategy();
+    rootQnameStrategy.getMappings().put("HelloRequest", helloSchema());
+
+    chain.setStrategies(Arrays.asList(
+        rootQnameStrategy,
+        new TargetNamespaceSchemaMappingStrategy()
+    ));
+
+    return chain;
+}
+
+
+
+
XML
+
+
<citrus:schema-repository id="schemaRepository"
+    schema-mapping-strategy="schemaMappingStrategy">
+  <citrus:schemas>
+    <citrus:reference schema="helloSchema"/>
+    <citrus:reference schema="goodbyeSchema"/>
+  </citrus:schemas>
+</citrus:schema-repository>
+
+<bean id="schemaMappingStrategy"
+    class="org.citrusframework.xml.schema.SchemaMappingStrategyChain">
+  <property name="strategies">
+    <list>
+      <bean class="org.citrusframework.xml.schema.RootQNameSchemaMappingStrategy">
+        <property name="mappings">
+          <map>
+            <entry key="HelloRequest" value="helloSchema"/>
+          </map>
+        </property>
+      </bean>
+      <bean class="org.citrusframework.xml.schema.TargetNamespaceSchemaMappingStrategy"/>
+    </list>
+  </property>
+</bean>
+
+
+
+

So the schema mapping chain uses both RootQNameSchemaMappingStrategy and TargetNamespaceSchemaMappingStrategy in +combination. In case the first root qname strategy fails to find a proper mapping the next target namespace strategy +comes in and tries to find a proper schema.

+
+
+
+
DTD validation
+
+

XML DTD (document type definition) is another way to validate the structure of an XML document. Many people say that +DTD is outdated and XML schema is the much more efficient way to describe the rules of an XML structure. We do not +disagree with that, but we also know that legacy systems might still use DTD. So in order to avoid validation errors +we have to deal with DTD validation as well.

+
+
+

First thing you can do about DTD validation is to specify an inline DTD in your expected message template.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .body("<!DOCTYPE root [\n" +
+                "<!ELEMENT root (message)>\n" +
+                "<!ELEMENT message (text)>\n" +
+                "<!ELEMENT text (#PCDATA)>\n" +
+            "]>\n" +
+            "<root>\n" +
+                "<message>\n" +
+                    "<text>Hello from Citrus!</text>\n" +
+                "</message>\n" +
+            "</root>")
+    .timeout(5000L);
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message schema-validation="false">
+        <data>
+        <![CDATA[
+            <!DOCTYPE root [
+                <!ELEMENT root (message)>
+                <!ELEMENT message (text)>
+                <!ELEMENT text (#PCDATA)>
+                ]>
+            <root>
+                <message>
+                    <text>Hello from Citrus!</text>
+                </message>
+            </root>
+        ]]>
+        </data>
+    </message>
+</receive>
+
+
+
+

The system under test may also send the message with an inline DTD definition. So validation will succeed.

+
+
+

In most cases the DTD is referenced as external .dtd file resource. You can do this in your expected message template +as well.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .body("<!DOCTYPE root SYSTEM \"org/citrusframework/validation/example.dtd\">\n" +
+            "<root>\n" +
+                "<message>\n" +
+                    "<text>Hello from Citrus!</text>\n" +
+                "</message>\n" +
+            "</root>")
+    .timeout(5000L);
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message schema-validation="false">
+        <data>
+        <![CDATA[
+            <!DOCTYPE root SYSTEM "org/citrusframework/validation/example.dtd">
+            <root>
+                <message>
+                    <text>Hello from Citrus!</text>
+                </message>
+            </root>
+        ]]>
+        <data/>
+    </message>
+</receive>
+
+
+
+
+
+

7.4.10. XHTML validation

+
+

Html message content is hard to verify with XML validation capabilities such as XML tree comparison or XPath support. +Usually Html messages do not follow the XML well-formed rules very strictly. This implies that XML message validation will +fail because of non-well-formed Html code.

+
+
+

XHTML closes this gap by automatically fixing the most common Html XML incompatible rule violations such as missing end +tags (e.g. <br>).

+
+
+

Please add a new library dependency to your project. Citrus is using the jtidy library in order to prepare the HTML and +XHTML messages for validation. As this 3rd party dependency is optional in Citrus we have to add it now to our project dependency +list. Just add the jtidy dependency to your Maven project POM.

+
+
+
Jtidy library
+
+
<dependency>
+    <groupId>net.sf.jtidy</groupId>
+    <artifactId>jtidy</artifactId>
+    <version>r938</version>
+</dependency>
+
+
+
+

Please refer to the jtidy project documentation for the latest versions. Now everything is ready. As usual the Citrus +message validator for XHTML is active in background by default. You can overwrite this default implementation by placing +a Spring bean with id defaultXhtmlMessageValidator to the Citrus application context.

+
+
+
Java
+
+
@Bean
+public XhtmlMessageValidator defaultXhtmlMessageValidator() {
+    return new XhtmlMessageValidator();
+}
+
+
+
+
XML
+
+
<bean id="defaultXhtmlMessageValidator" class="org.citrusframework.validation.xhtml.XhtmlMessageValidator"/>
+
+
+
+

Now you can use the XHTML message validation in your test case.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .type(MessageType.XHTML)
+    .body("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.1//EN\" \"org/w3c/xhtml/xhtml1-strict.dtd\">" +
+            "<html xmlns=\"http://www.w3.org/1999/xhtml\">" +
+                "<head>" +
+                    "<title>Citrus Hello World</title>" +
+                "</head>" +
+                "<body>" +
+                    "<h1>Hello World!</h1>" +
+                    "<br/>" +
+                    "<p>This is a test!</p>" +
+                "</body>" +
+            "</html>")
+    .timeout(5000L);
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="xhtml">
+        <data>
+          <![CDATA[
+            <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "org/w3c/xhtml/xhtml1-strict.dtd">
+            <html xmlns="http://www.w3.org/1999/xhtml">
+              <head>
+                <title>Citrus Hello World</title>
+              </head>
+              <body>
+                <h1>Hello World!</h1>
+                <br/>
+                <p>This is a test!</p>
+              </body>
+            </html>
+          ]]>
+        </data>
+    </message>
+</receive>
+
+
+
+

The message receiving action in our test case has to specify a message format type type="xhtml" . As you can see the Html +message payload get XHTML specific DOCTYPE processing instruction. The xhtml1-strict.dtd is mandatory in the XHTML message +validation. For better convenience all XHTML dtd files are packaged within Citrus so you can use this as a relative path.

+
+
+

The incoming Html message is automatically converted into proper XHTML code with well formed XML. So now the XHTML message +validator can use the XML message validation mechanism of Citrus for comparing received and expected data. You can also use +test variables, ignore element expressions and XPath expressions.

+
+
+
+
+

7.5. Schema validation

+
+

When structured data is transmitted from one system to another, it is important that both sender and receiver +agree on an interface contract. The contract introduces rules of communication for both parties.

+
+
+

Schemas represent the most popular way to define contracts. Citrus is able to manage multiple schemas in the project context. +You can define mapping rules to pick the right schema for a message validation.

+
+
+

Let’s start with this chapter by introducing some basic concepts of the schema validation.

+
+
+

7.5.1. Schema definition

+
+

Complex applications require multiple schemas that are relevant for different use cases. You should organize these schemas +in your test project. First you need to add a schema definition that points to the schema location.

+
+
+
Java
+
+
@Bean
+public SimpleXsdSchema bookstoreSchema() {
+    return new SimpleXsdSchema(new ClassPathResource("classpath:org/citrusframework/xml/BookStore.wsdl"));
+}
+
+
+
+
XML
+
+
<citrus:schema id="bookstoreSchema" location="classpath:org/citrusframework/xml/BookStore.wsdl"/>
+
+
+
+

Please keep in mind, that the id of the schema has to be unique within the context.

+
+
+ + + + + +
+ + +The samples above are using XML XSD/WSDL schema definitions. The same approach applies to Json schemas, too. You just need +to use the SimpleJsonSchema class in the Java configuration. The XML configuration components derive the schema type automatically +based on the file extension (.xsd, .wsdl, .json). +
+
+
+
+

7.5.2. Schema repository

+
+

You can now reference the schema definition in a repository component. The repository is able to hold multiple schema definitions.

+
+
+
Java
+
+
@Bean
+public XsdSchemaRepository schemaRepository() {
+    XsdSchemaRepository repository = new XsdSchemaRepository();
+    repository.getSchemas().add(bookstoreSchema());
+    return repository;
+}
+
+
+
+
XML
+
+
<citrus:schema-repository id="schemaRepository">
+  <citrus:schemas>
+    <citrus:reference schema="bookstoreSchema" />
+  </citrus:schemas>
+</citrus:schema-repository>
+
+
+
+

Citrus allows you to reuse your schema definition within your context by referencing them. For a valid reference, +the id of the schema and the value of the schema attribute within the reference element have to match.

+
+
+

As an alternative to a schema reference you can also provide the schema location in a repository.

+
+
+
Java
+
+
@Bean
+public XsdSchemaRepository schemaRepository() {
+    XsdSchemaRepository repository = new XsdSchemaRepository();
+    repository.getLocations().add("classpath:schemas/flightbooking.xsd");
+    return repository;
+}
+
+
+
+
XML
+
+
<citrus:schema-repository id="schemaRepository">
+  <citrus:locations>
+    <citrus:location path="classpath:schemas/flightbooking.xsd"/>
+  </citrus:locations>
+</citrus:schema-repository>
+
+
+
+

The given location points to the schema definition file. Setting all schemas one by one can be verbose and cumbersome, especially +when dealing with lots of schema files. Therefore, Citrus provides schema location patterns which will import all matching schema files +within the given location.

+
+
+
Java
+
+
@Bean
+public XsdSchemaRepository schemaRepository() {
+    XsdSchemaRepository repository = new XsdSchemaRepository();
+    repository.getLocations().add("classpath:schemas/*.xsd");
+    return repository;
+}
+
+
+
+
XML
+
+
<citrus:schema-repository id="schemaRepository">
+  <citrus:locations>
+    <citrus:location path="classpath:schemas/*.xsd"/>
+  </citrus:locations>
+</citrus:schema-repository>
+
+
+
+

The schema repository is able to receive many schemas with different locations and schema sources.

+
+
+
Java
+
+
@Bean
+public SimpleXsdSchema testSchema() {
+    return new SimpleXsdSchema(new ClassPathResource("classpath:org/citrusframework/xml/test.xsd"));
+}
+
+@Bean
+public XsdSchemaRepository schemaRepository() {
+    SimpleXsdSchema bookstoreSchema = new SimpleXsdSchema(
+            new ClassPathResource("classpath:org/citrusframework/xml/BookStore.wsdl"));
+
+    XsdSchemaRepository repository = new XsdSchemaRepository();
+    repository.getSchemas().add(bookstoreSchema);
+    repository.getSchemas().add(testSchema());
+    repository.getLocations().add("classpath:schemas/*.xsd");
+    return repository;
+}
+
+
+
+
XML
+
+
<citrus:schema id="testSchema" location="classpath:org/citrusframework/xml/test.xsd"/>
+
+<citrus:schema-repository id="xmlSchemaRepository">
+  <citrus:schemas>
+    <citrus:schema id="bookstoreSchema" location="classpath:org/citrusframework/xml/BookStore.wsdl"/>
+    <citrus:reference schema="testSchema"/>
+    <citrus:location path="classpath:schemas/*.xsd"/>
+  </citrus:schemas>
+</citrus:schema-repository>
+
+
+
+ + + + + +
+ + +The examples in this chapter have been using XML XSD schema repository components. Of course, the same components are +available for Json schema repositories, too. By default, the type of the schema repository is type=xml. You can use type=json +to mark the schema repository as Json nature. In Java configuration please use the JsonSchemaRepository class. +
+
+
+

The schema repository component holds a set of schema files for a project disjoint by their type (xml, json, etc.) and identified +by its unique id.

+
+
+

As you can see the schema repository is a simple bean defined inside the Spring application context. +The repository can hold nested schema definitions, references and location definitions for all types of schema +repositories.

+
+
+ + + + + +
+ + +In case you have several schema repositories in your project do always define a default repository +(name="schemaRepository"). This helps Citrus to always find at least one repository to interact with. +
+
+
+
+

7.5.3. Schema definition mapping

+
+

Depending on the type of message you want to validate, there are different attempts to find the correct schema for the +given message. The XML schema repository will apply a mapping strategy that decides which schema should verify the current +message. Citrus knows multiple mapping strategies that you can review in chapter XML schema validation.

+
+
+

As a user you always have the chance to explicitly pick the right schema definition for a receive operation. You can overrule +all schema mapping strategies in Citrus by directly setting the desired schema in your receiving message action.

+
+
+
Java
+
+
receive(httpMessageEndpoint)
+    .message()
+    .validate(
+        xml().schema("helloSchema")
+    );
+
+
+
+
XML
+
+
<receive endpoint="httpMessageEndpoint">
+    <message schema="helloSchema">
+      <payload>
+        ...
+      </payload>
+    </message>
+</receive>
+
+
+
+

In the example above the tester explicitly sets a schema definition in the receive action (schema="helloSchema"). +The schema value refers to named schema bean defined in the project context (e.g. Spring application context).

+
+
+ + + + + +
+ + +This overrules all schema mapping strategies used in the central schema repository as the given schema is directly +used for validation. This feature is helpful when dealing with different schema versions at the same time. +
+
+
+

Another possibility would be to set a custom schema repository at this point. This means you can have more than one +schema repository in your Citrus project and you pick the right one by yourself in the receive action.

+
+
+
Java
+
+
receive(httpMessageEndpoint)
+    .message()
+    .validate(
+        xml().schemaRepository("helloSchemaRepository")
+    );
+
+
+
+
XML
+
+
<receive endpoint="httpMessageEndpoint">
+    <message schema-repository="helloSchemaRepository">
+      <payload>
+        ...
+      </payload>
+    </message>
+</receive>
+
+
+
+

The schema-repository attribute refers to a Citrus schema repository component which is defined as bean in the +project context.

+
+
+
+
+

7.6. Plain text validation

+
+

Plain text message validation performs an exact Java String match of received and expected message payloads.

+
+
+

Plaintext message validation is not enabled by default in your project. You need to add the validation module to your project +as a Maven dependency.

+
+
+
Plaintext validation module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-validation-text</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

This adds the default message validator for plaintext messages. Citrus will pick this message validator for all messages +of type="plaintext". The default message validator implementation can be overwritten by placing a Spring bean with +id defaultPlaintextMessageValidator.

+
+
+
Java
+
+
@Bean
+public PlainTextMessageValidator defaultPlaintextMessageValidator() {
+    return new PlainTextMessageValidator();
+}
+
+
+
+
XML
+
+
<bean id="defaultPlaintextMessageValidator" class="org.citrusframework.validation.text.PlainTextMessageValidator"/>
+
+
+
+

Citrus will try to auto-guess the appropiate message validator for the incoming message. You can explicitly set the message +type on the receive action so Citrus knows how to apply plaintext message validation.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("Hello World!");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="plaintext">
+        <data>Hello World!</data>
+    </message>
+</receive>
+
+
+
+

With the message format type type="plaintext" set Citrus performs String equals on the message payloads (received and expected). +Only exact match will pass the test.

+
+
+

Of course test variables are supported in the plaintext payloads. The variables are replaced before processing the message +template.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("${hello} ${world}!");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="plaintext">
+        <data>${hello} ${world}!</data>
+    </message>
+</receive>
+
+
+
+

7.6.1. Whitespace characters

+
+

Plaintext message payloads may only differ in system-dependent line separator characters (CR, LF, CRLF). By default, +the plaintext message validation fails because of that differences even if only whitespace characters are different.

+
+
+

You can disable this default validation behavior and ignore new line types with following system property or environment variable:

+
+
+
Plaintext validation settings
+
+
citrus.plaintext.validation.ignore.newline.type=true
+CITRUS_PLAINTEXT_VALIDATION_IGNORE_NEWLINE_TYPE=true
+
+
+
+

In case you need to ignore all whitespaces during plaintext validation such as multiple new line characters or tabs you +need to set this system property or environment variable:

+
+
+
Plaintext validation settings
+
+
citrus.plaintext.validation.ignore.whitespace=true
+CITRUS_PLAINTEXT_VALIDATION_IGNORE_WHITESPACE=true
+
+
+
+

This property will not only ignore new line types but also normalize the whitespaces. As a result all empty lines, tabs +and double whitespace characters are filtered before comparison.

+
+
+

Of course, you can also set the properties directly on the plaintext message validator bean:

+
+
+
Java
+
+
@Bean
+public PlainTextMessageValidator defaultPlaintextMessageValidator() {
+    PlainTextMessageValidator validatoe = new PlainTextMessageValidator();
+    validator.setIgnoreNewLineType(true);
+    validator.setIgnoreWhitespace(true);
+    return validator;
+}
+
+
+
+
XML
+
+
<bean id="defaultPlaintextMessageValidator" class="org.citrusframework.validation.text.PlainTextMessageValidator">
+  <property name="ignoreNewLineType" value="true"/>
+  <property name="ignoreWhitespace" value="true"/>
+</bean>
+
+
+
+
+

7.6.2. Ignoring text parts

+
+

The plaintext validator performs a String equals operation. Test variables are automatically replaced before that comparison +takes place but what about ignore statements? The plaintext message validator is able to ignore words and character sequences +based on their position in the text value. Given a source plaintext value:

+
+
+
Received text
+
+
Your current id is "1234567890"
+
+
+
+

In the plaintext validation you need to ignore the actual id value due to some reason. Maybe the id is generated on a foreign +application and you simply do not know the actual value at runtime.

+
+
+

In this case we can use the common @ignore@ statement in the control message payload as follows:

+
+
+
Control text
+
+
Your current id is "@ignore@"
+
+
+
+

Citrus and the plaintext message validator will ignore the marked part of the text during validation. This mechanism is +based on the fact that the @ignore@ statement is placed at the exact same position as the actual id value. So this mechanism +requires you to know the exact structure of the plaintext value including all whitespace characters. In case Citrus finds the @ignore@ +keyword in the control value the placeholder is replaced with the actual character sequence that is located at the exact +same position in the source message payload that is validated.

+
+
+

The character sequence is defined as sequence of Java word characters. This word sequence is ending with a non-word character +defined in Java (\\W which is a character that is not in [a-zA-Z_0-9]).

+
+
+

Instead of ignoring a single word you can also specify the amount of characters that should be ignored. This is when you +have Java non-word characters that you need to ignore. Let’s have an example for that, too:

+
+
+
Received text
+
+
Your current id is "#12345-67890"
+
+
+
+

Given that text the simple @ignore@ statement will fail because of the non-word characters '#' and '-' that are located +in the id value. This time we ignore the whole id sequence with:

+
+
+
Control text
+
+
Your current id is "@ignore(12)@"
+
+
+
+

This will ignore exactly 12 characters starting from the exact position of the @ignore@ keyword. So knowing that the +id is exactly 12 characters long we can ignore that part.

+
+
+
+

7.6.3. Creating variables

+
+

Instead of just ignoring certain text parts we can also extract those parts into test variables. The actual character sequence +is ignored during validation and in addition to that the actual value is stored to a new test variable. Given the following text payload:

+
+
+
Received text
+
+
Your current id is "1234567890"
+
+
+
+

And the expected control text:

+
+
+
Control text
+
+
Your current id is "@variable('id')@"
+
+
+
+

The validation will automatically ignore the id part in the text and create a new test variable with name id that holds +the actual value. The name of the variable to create is given in the @variable()@ statement. This enables us to extract +dynamic text parts that we are not able to validate. After that we can access the dynamic text part using the normal test +variable syntax ${id}.

+
+
+

Also notice that the @variable()@ keyword expression has to be placed at the exact same position in the text as the actual +value. The variable extractor will read the variable value from the source message payload starting from that position. +The ending of the variable value is defined by a non-word Java character. Dashes '-' and dots '.' are automatically +included in these values, too. So this will also work for you:

+
+
+
Received text
+
+
Today is "2017-12-24"
+
+
+
+

And the expected control text:

+
+
+
Control text
+
+
Today is "@variable('date')@"
+
+
+
+

This results in a new variable called date with value 2017-12-24. In addition, the European date representation works fine +here, too because dots and dashes are automatically included:

+
+
+
Received text
+
+
Today is "24.12.2017"
+
+
+
+
+

7.6.4. Gzip validation

+
+

Gzip is a message compression library to optimize the message transport of large content. Citrus is able to handle +compressed message payloads on send and receive operations. Sending compressed data sets the message type to gzip.

+
+
+
Java
+
+
send("someEndpoint")
+    .message()
+    .type(MessageType.GZIP)
+    .body("Hello World!")
+
+
+
+
XML
+
+
<send endpoint="someEndpoint">
+    <message type="gzip">
+        <data>Hello World!</data>
+    </message>
+</send>
+
+
+
+

Just use the type="gzip" message type in the send operation. Citrus now converts the message payload to a gzip binary +stream as payload.

+
+
+

When validating gzip binary message content the messages are compared with a given control message in binary base64 String +representation. The gzip binary data is automatically unzipped and encoded as base64 character sequence in order to compare +with an expected content.

+
+
+

The received message content is using gzip format but the actual message content does not have to be base64 encoded. Citrus +is doing this conversion automatically before validation takes place. The binary data can be anything e.g. images, pdf or +plaintext content.

+
+
+

The default message validator for gzip messages is active by default. Citrus will pick this message validator for all messages +of type="gzip_base64" . The default message validator implementation can be overwritten by placing a Spring bean with +id defaultGzipBinaryBase64MessageValidator to the Spring application context.

+
+
+
Java
+
+
@Bean
+public GzipBinaryBase64MessageValidator defaultGzipBinaryBase64MessageValidator() {
+    return new GzipBinaryBase64MessageValidator();
+}
+
+
+
+
XML
+
+
<bean id="defaultGzipBinaryBase64MessageValidator"
+      class="org.citrusframework.validation.text.GzipBinaryBase64MessageValidator"/>
+
+
+
+

In the test case receiving action we tell Citrus to use gzip message validation.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .type(MessageType.GZIP_BASE64)
+    .body("citrus:encodeBase64('Hello World!')")
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="gzip_base64">
+        <data>citrus:encodeBase64('Hello World!')</data>
+    </message>
+</receive>
+
+
+
+

With the message format type type="gzip_base64" Citrus performs the gzip base64 character sequence validation. Incoming +message content is automatically unzipped and encoded as base64 String and compared to the expected data. This way we can +make sure that the binary content is as expected.

+
+
+ + + + + +
+ + +If you are using http client and server components the gzip compression support is built in with the underlying Spring +and http commons libraries. So in http communication you just have to set the header Accept-Encoding=gzip or Content-Encoding=gzip. +The message data is then automatically zipped/unzipped before Citrus gets the message data for validation. Read more about +this http specific gzip compression in chapter http. +
+
+
+
+
+

7.7. Binary validation

+
+

Binary message validation is not an easy task in particular when it comes to compare data with a given control message.

+
+
+

Binary message validation is not enabled by default in your project. You need to add the validation module to your project +as a Maven dependency.

+
+
+
Binary validation module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-validation-binary</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

There are basically two ways in Citrus how to compare binary message content for validation purpose.

+
+
+

7.7.1. Stream message validation

+
+

A first approach to validate incoming binary message content is to compare the binary stream data with an expected stream. +This comparison is straight forward as each byte in the binary stream is compared to an expected stream.

+
+
+

The default message validator for binary messages is active by default. Citrus will pick this message validator for all +messages of type="binary_base64" . The default message validator implementation can be overwritten by placing a Spring +bean with id defaultBinaryBase64MessageValidator to the Spring application context.

+
+
+
Java
+
+
@Bean
+public BinaryMessageValidator defaultBinaryMessageValidator() {
+    return new BinaryMessageValidator();
+}
+
+
+
+
XML
+
+
<bean id="defaultBinaryMessageValidator" class="org.citrusframework.validation.text.BinaryMessageValidator"/>
+
+
+
+

You can use the binary message type in a receive action in order to enable this stream comparison during validation.

+
+
+
Java
+
+
.receive("someEndpoint")
+    .message(new DefaultMessage(FileCopyUtils.copyToByteArray(new ClassPathResource("templates/foo.png").getFile())))
+    .type(MessageType.BINARY);
+}
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="binary">
+        <resource file="classpath:templates/foo.png"/>
+    </message>
+</receive>
+
+
+
+

It is very important to set the message type to MessageType.BINARY as this is the message type that is automatically handled +by the binary stream message validator.

+
+
+

By the way sending binary messages in Citrus is also very easy. Just use the type="binary" message type in the send +operation. Citrus now converts the message payload to a binary stream as payload.

+
+
+
Java
+
+
send("someEndpoint")
+    .message()
+    .type(MessageType.BINARY)
+    .body("Hello World")
+
+
+
+
XML
+
+
<send endpoint="someEndpoint">
+    <message type="binary">
+        <data>Hello World!</data>
+    </message>
+</send>
+
+
+
+
+

7.7.2. Base64 message validation

+
+

Another way to validate binary message content is to use base64 String encoding. The binary data is encoded as base64 +character sequence and therefore is comparable with an expected content.

+
+
+

The received message content does not have to be base64 encoded. Citrus is doing this conversion automatically before validation +takes place. The binary data can be anything e.g. images, pdf or gzip content.

+
+
+

The default message validator for binary messages is active by default. Citrus will pick this message validator for all +messages of type="binary_base64" . The default message validator implementation can be overwritten by placing a Spring +bean with id defaultBinaryBase64MessageValidator to the Spring application context.

+
+
+
Java
+
+
@Bean
+public BinaryBase64MessageValidator defaultBinaryBase64MessageValidator() {
+    return new BinaryBase64MessageValidator();
+}
+
+
+
+
XML
+
+
<bean id="defaultBinaryBase64MessageValidator" class="org.citrusframework.validation.text.BinaryBase64MessageValidator"/>
+
+
+
+

In the test case receiving action we tell Citrus to use binary base64 message validation.

+
+
+
Java
+
+
receive("someEndpoint")
+    .message()
+    .body("citrus:encodeBase64('Hello World!')")
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="binary_base64">
+        <data>citrus:encodeBase64('Hello World!')</data>
+    </message>
+</receive>
+
+
+
+

With the message format type type="binary_base64" Citrus performs the base64 character sequence validation. Incoming +message content is automatically encoded as base64 String and compared to the expected data. This way we can make sure that +the binary content is as expected.

+
+
+

Base64 encoding is also supported in outbound messages. Just use the encodeBase64 function in Citrus. The result is a +base64 encoded String as message payload.

+
+
+
Java
+
+
send("someEndpoint")
+    .message()
+    .body("citrus:encodeBase64('Hello World!')")
+
+
+
+
XML
+
+
<send endpoint="someEndpoint">
+    <message>
+        <data>citrus:encodeBase64('Hello World!')</data>
+    </message>
+</send>
+
+
+
+
+
+

7.8. Hamcrest validation

+
+

Hamcrest validation empowers the validation capabilities by adding special assertions.

+
+
+

Hamcrest message validation capability is not enabled by default in your project. You need to add the validation module +to your project as a Maven dependency.

+
+
+
Binary validation module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-validation-hamcrest</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

You can use the Hamcrest assertions when receiving a message in order to validate elements, for instance with XPath.

+
+
+
Java
+
+
receive("someEndpoint")
+    .validate(xpath()
+        .expression("/TestRequest/Error", anyOf(empty(), nullValue()))
+        .expression("number:/TestRequest/Status[.='success']", greaterThan(0.0))
+        .expression("integer:/TestRequest/Status[.='failed']", lowerThan(1))
+        .expression("node-set:/TestRequest/OrderType", hasSize(3));
+
+
+
+ + + + + +
+ + +If you want to match text containing any of the following characters: ' , ( ) +You need to enclose the respective string in quotation marks when defining your matcher. +If you intend to match an actual single quote, it should be escaped with a backslash (\'). +
+
+
+

For example:

+
+
+
+
anyOf(equalTo('text containing a \\' (quote) and a , (comma)  '), anyOf(isEmptyOrNullString()))
+anyOf(equalTo('text containing a backslash and quote \\\\' and a , (comma)  '), anyOf(isEmptyOrNullString()))
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+  <message>
+    <validate>
+      <xpath expression="/TestRequest/Error" value="@assertThat(anyOf(empty(), nullValue()))@"/>
+      <xpath expression="/TestRequest/Status[.='success']" value="@assertThat(greaterThan(0.0))@" result-type="number"/>
+      <xpath expression="/TestRequest/Status[.='failed']" value="@assertThat(lowerThan(1))@" result-type="integer"/>
+      <xpath expression="/TestRequest/OrderType" value="@assertThat(hasSize(3))@" result-type="node-set"/>
+    </validate>
+  </message>
+</receive>
+
+
+
+
+

7.9. Custom validation

+
+

In a previous section you have seen how to customize the global set of available message validators in a Citrus project using +the validator registry.

+
+
+

7.9.1. Custom message validator

+
+

You can also explicitly use a custom message validator in a receive test action. This approach skips the automatic message +validator resolving mechanism, and the receive action uses the defined validator implementation.

+
+
+
Java
+
+
receive("someEndpoint")
+    .validator(groovyJsonMessageValidator)
+    .message()
+    .type(MessageType.JSON)
+    .validate(groovy()
+                .script("assert json.type == 'read'\n" +
+                  "assert json.mbean == 'java.lang:type=Memory'\n" +
+                  "assert json.attribute == 'HeapMemoryUsage'\n" +
+                  "assert json.value == '${heapUsage}'");
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="json" validator="groovyJsonMessageValidator">
+        <validate>
+            <script type="groovy">
+                <![CDATA[
+                  assert json.type == 'read'
+                  assert json.mbean == 'java.lang:type=Memory'
+                  assert json.attribute == 'HeapMemoryUsage'
+                  assert json.value == '${heapUsage}'
+                ]]>
+            </script>
+        </validate>
+    </message>
+</receive>
+
+
+
+

The receive action defines the message validator to use in this specific use case. You can set a custom message validator +implementation here.

+
+
+ + + + + +
+ + +Be careful when overwriting default message validation behavior. Setting a specific message validator has the effect +that your receive action may not use the other default validators. The explicit validator definition in a receive action +is exclusive so no further message validator resolving is performed on this receive action. +
+
+
+

You may want to set multiple validators here in order to meet your validation requirements. For instance when setting a +DomXmlMessageValidator explicitly you may not be able to use the XpathMessageValidator capabilities on that specific +receive action anymore. Fortunately you can set multiple validators on a receive action that will all perform validation +tasks on the received message.

+
+
+
Java
+
+
receive("someEndpoint")
+    .validators(myXmlMessageValidator, defaultXpathMessageValidator)
+    .message()
+    .body("...")
+    .validate(xpath().expression("//some/xpath/expression", "someControlValue"));
+
+
+
+
XML
+
+
<receive endpoint="someEndpoint">
+    <message type="json" validators="myXmlMessageValidator,defaultXpathMessageValidator">
+        <payload>...</data>
+        <validate path="//some/xpath/expression" value="someControlValue"/>
+    </message>
+</receive>
+
+
+
+
+

7.9.2. Validation processor

+
+

The Java DSL offers some additional validation tricks and possibilities when dealing with messages that are sent and received +over Citrus. One of them is the validation processor functionality. With this feature you can marshal/unmarshal message payloads +and code validation steps on Java objects.

+
+
+
Validation processor usage
+
+
receive(bookResponseEndpoint)
+    .validate(new XmlMarshallingValidationProcessor<AddBookResponseMessage>() {
+        @Override
+        public void validate(AddBookResponseMessage response, MessageHeaders headers) {
+            Assert.isTrue(response.isSuccess());
+        }
+    });
+
+
+
+

By default, the validation processor needs some XML unmarshaller implementation for transforming the XML payload to a Java +object. Citrus will automatically search for the unmarshaller bean in your Spring application context if nothing specific +is set. Of course, you can also set the unmarshaller instance explicitly.

+
+
+
Use autowired unmarshaller
+
+
@Autowired
+private Unmarshaller unmarshaller;
+
+@CitrusTest
+public void receiveMessageTest() {
+    receive(bookResponseEndpoint)
+        .validate(new XmlMarshallingValidationProcessor<AddBookResponseMessage>(unmarshaller) {
+            @Override
+            public void validate(AddBookResponseMessage response, MessageHeaders headers) {
+                Assert.isTrue(response.isSuccess());
+            }
+        });
+}
+
+
+
+

Obviously working on Java objects is much more comfortable than using the XML String concatenation. This is why you can +also use this feature when sending messages.

+
+
+
Message body marshalling
+
+
@Autowired
+private Marshaller marshaller;
+
+@CitrusTest
+public void sendMessageTest() {
+    send(bookRequestEndpoint)
+        .message()
+        .body(createAddBookRequestMessage("978-citrus:randomNumber(10)"), marshaller)
+        .header(SoapMessageHeaders.SOAP_ACTION, "addBook");
+}
+
+private AddBookRequestMessage createAddBookRequestMessage(String isbn) {
+    AddBookRequestMessage requestMessage = new AddBookRequestMessage();
+    Book book = new Book();
+    book.setAuthor("Foo");
+    book.setTitle("FooTitle");
+    book.setIsbn(isbn);
+    book.setYear(2008);
+    book.setRegistrationDate(Calendar.getInstance());
+    requestMessage.setBook(book);
+    return requestMessage;
+}
+
+
+
+

The example above creates an AddBookRequestMessage object and puts this as payload to a send action. In combination with +a marshaller instance Citrus is able to create a proper XML message payload then.

+
+
+
+
+
+
+

8. Test actions

+
+
+

This chapter gives a brief description to all test actions that a tester can incorporate into the test case. Besides sending +and receiving messages the tester may access these actions in order to build a more complex test scenario that fits the desired use case.

+
+
+

8.1. Send

+
+

Integration test scenarios need to trigger business logic on foreign applications by calling service interfaces on the system +under test. The Citrus test is able to send messages over various message transports (e.g. Http REST, JMS, Kafka, filte transfer).

+
+
+

figure_001.jpg

+
+
+

A message consists of a message header (name-value pairs) and a message body. Later in this section we will see different +ways of constructing a message with body and header values.

+
+
+
Java
+
+
@CitrusTest
+public void sendMessageTest() {
+    variable("text", "Hello Citrus!");
+    variable("messageId", "Mx1x123456789");
+
+    $(send("helloService")
+        .message()
+        .name("helloMessage")
+        .header("Operation", "sayHello")
+        .header("RequestTag", "${messageId}")
+        .body("""
+            <HelloMessage>
+                <Text>Hello Citrus!</Text>
+            </HelloMessage>
+        """)
+    );
+}
+
+
+
+
XML
+
+
<test name="ReceiveMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="text" value="Hello Citrus!"/>
+        <variable name="messageId" value="Mx1x123456789"/>
+    </variables>
+
+    <actions>
+        <send endpoint="helloService">
+            <message name="helloMessage">
+                <headers>
+                    <header name="Operation" value="sayHello"/>
+                    <header name="MessageId" value="${messageId}"/>
+                </headers>
+                <body>
+                    <![CDATA[
+                    <HelloMessage>
+                        <Text>Hello Citrus!</Text>
+                    </HelloMessage>
+                    ]]>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ReceiveMessageTest
+variables:
+    - name: "text"
+      value: "Hello Citrus!"
+    - name: "messageId"
+      value: "Mx1x123456789"
+actions:
+  - send:
+      endpoint: "helloService"
+      message:
+        name: "helloMessage"
+        headers:
+          - name: "Operation"
+            value: "sayHello"
+          - name: "MessageId"
+            value: '${messageId}'
+        body: |
+          <HelloMessage>
+              <Text>Hello Citrus!</Text>
+          </HelloMessage>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SendMessageTest">
+        <variables>
+            <variable name="text" value="Hello Citrus!"/>
+            <variable name="messageId" value="Mx1x123456789"/>
+        </variables>
+
+        <actions>
+            <send endpoint="helloService">
+                <message name="helloMessage">
+                    <payload>
+                        <![CDATA[
+                        <HelloMessage>
+                            <Text>${text}</Text>
+                        </HelloMessage>
+                        ]]>
+                    </payload>
+                </message>
+                <header>
+                    <element name="Operation" value="sayHello"/>
+                    <element name="MessageId" value="${messageId}"/>
+                </header>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The message name is optional and defines the message identifier in the local message store. This message name is very useful +when accessing the message content later on during the test case. The local message store is handled per test case and contains +all exchanged messages.

+
+
+

The sample uses both header and payload as message parts to send. In both parts you can use variable definitions (see ${text} +and ${messageId}). So first of all let us recap what variables do. Test variables are defined at the very beginning of the +test case and are valid throughout all actions that take place in the test. This means that actions can simply reference a +variable by the expression ${variable-name} .

+
+
+ + + + + +
+ + +Use variables wherever you can! At least the important entities of a test should be defined as variables at the beginning. +The test case improves maintainability and flexibility when using variables. +
+
+
+

Now let’s have a closer look at the sending action. The 'endpoint' attribute might catch your attention first. This attribute +references a message endpoint in Citrus configuration by name. As previously mentioned the message endpoint definition lives +in a separate configuration file and contains the actual message transport settings. In this example the "helloService" is +referenced which is a message endpoint for sending out messages via JMS or HTTP for instance.

+
+
+

The test case is not aware of any transport details, because it does not have to. The advantages are obvious: On the one +hand multiple test cases can reference the message endpoint definition for better reuse. Secondly test cases are independent +of message transport details. So connection factories, user credentials, endpoint uri values and so on are not present in +the test case.

+
+
+

In other words the "endpoint" attribute of the <send> element specifies which message endpoint definition to use +and therefore where the message should go to. Once again all available message endpoints are configured in a separate Citrus +configuration file. We will come to this later on. Be sure to always pick the right message endpoint type in order to publish +your message to the right destination.

+
+
+

Now that the message sender pattern is clear we can concentrate on how to specify the message content to be sent. There are +several possibilities for you to define message content in Citrus:

+
+
+

8.1.1. Send message body

+
+

The most important thing when dealing with sending actions is to prepare the message payload and header. +You can specify the body as nested String value.

+
+
+
Java
+
+
@CitrusTest
+public void sendMessageTest() {
+    $(send("helloService")
+        .message()
+        .body("""
+            <HelloMessage>
+                <Text>Hello Citrus!</Text>
+            </HelloMessage>
+        """)
+    );
+}
+
+
+
+
XML
+
+
<test name="SendMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="helloService">
+            <message>
+                <body>
+                    <![CDATA[
+                    <HelloMessage>
+                        <Text>Hello Citrus!</Text>
+                    </HelloMessage>
+                    ]]>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: SendMessageTest
+actions:
+  - send:
+      endpoint: "helloService"
+      message:
+        body: |
+          <HelloMessage>
+              <Text>Hello Citrus!</Text>
+          </HelloMessage>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SendMessageTest">
+        <actions>
+            <send endpoint="helloService">
+                <message>
+                    <payload>
+                        <![CDATA[
+                        <HelloMessage>
+                            <Text>Hello Citrus!</Text>
+                        </HelloMessage>
+                        ]]>
+                    </payload>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

A simple way of defining the message body content is to provide the message body as a String. +You can do this in the different supported languages by embedding the message content in the body section of the send action.

+
+
+

In XML you can embed the content as a CDATA section and in Java, or YAML you may want to use text blocks.

+
+
+

When the message body content is an XML payload you can also use nested XML elements in the XML domain specific languages as the next example shows:

+
+
+
XML
+
+
<test name="ReceiveMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="helloService">
+            <message name="helloRequest">
+                <body>
+                    <HelloMessage xmlns="http://sample.org/">
+                        <Text>Hello Citrus!</Text>
+                    </HelloMessage>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ReceiveMessageTest">
+        <actions>
+            <send endpoint="helloService">
+              <message>
+                <payload>
+                  <HelloMessage xmlns="http://sample.org/">
+                      <Text>Hello Citrus!</Text>
+                  </HelloMessage>
+                </payload>
+              </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +In XML you can use nested XML elements or CDATA sections. Sometimes the nested XML message payload elements may cause +XSD schema violations. This is because of variable values not fitting the XSD schema rules for example. +In this scenario you could also use simple CDATA sections as payload data. In this case you need to use the `<data>` +element in contrast to the `<payload>` element that we have used in our examples so far. +
+
+
+

With this alternative you can skip the XML schema validation from your IDE at design time. Unfortunately you will lose +the XSD auto-completion features many XML editors offer when constructing your payload.

+
+
+

Message body content may be quite huge, so you can also load the message content form an external file resource. +The file path is given as either a classpath or file system resource.

+
+
+

When writing tests in Java you can use one of the classpath or file system resource implementations to resolve the file path. +In XML and other languages you may use a resource path given as: file="classpath:path/to/request.xml". +The file path prefix indicates the file resource type (file: or classpath:), so the file location is resolved either as file system resource (file:) +or classpath resource (classpath:).

+
+
+
Java
+
+
@CitrusTest
+public void sendMessageTest() {
+    $(send("helloService")
+        .message()
+        .body(new ClassPathResource("path/to/request.xml"))
+    );
+}
+
+
+
+
XML
+
+
<test name="SendMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="helloService">
+            <message>
+                <body>
+                    <resource file="classpath:path/to/request.xml"/>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: SendMessageTest
+actions:
+  - send:
+      endpoint: "helloService"
+      message:
+        body:
+          resource:
+            file: "classpath:path/to/request.xml"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SendMessageTest">
+        <actions>
+            <send endpoint="helloService">
+                <message>
+                    <resource file="classpath:path/to/request.xml" />
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In addition to defining message payloads as normal Strings and via external file resource (classpath and file system) you can also +provide a POJO model object as a message payload. +The model object will be serialized with a marshaller or object mapper implementation which gets loaded from the Citrus context.

+
+
+

You can use the marshalling message payload builders in a send action as follows.

+
+
+
Marshalling message payload builder
+
+
$(send("helloService")
+    .message()
+    .body(marshal(new TestRequest("Hello Citrus!")))
+);
+
+
+
+

The send action uses the marshalling message builder provided with Citrus and just provides the model object new TestRequest(). +The marshalling message builder automatically loads a proper XML message marshaller that should be available as a bean in the project context (e.g. the +Spring application context). By default, Citrus is searching for a bean of type org.citrusframework.xml.Marshaller. +You can add the marshaller to your project context as a bean.

+
+
+
Marshaller bean
+
+
@Bean
+public Marshaller xmlMarshaller() {
+    return new Jaxb2Marshaller();
+}
+
+
+
+

Now Citrus is able to automatically resolve the marshaller from the project context as soon as the receive action uses the model object in combination with the marshal instruction.

+
+
+

When you have multiple message marshaller instances in your project context you have to tell Citrus which one to use in this particular receive message action.

+
+
+
Reference message marshaller
+
+
$(send("helloService")
+    .message()
+    .body(marshal(new TestRequest("Hello Citrus!"), "myMessageMarshallerBean"))
+);
+
+
+
+

Now Citrus will marshal the message body with the message marshaller bean named myMessageMarshallerBean. +This way you can have multiple message marshaller implementations in your project (XML, JSON, and so on).

+
+
+

You can implement your own message payload builder or use one of the provided Citrus message payload builders.

+
+
+
Custom message payload builder
+
+
@Autowired
+private MessagePayloadBuilder mySpecialPayloadBuilder = new FooPayloadBuilder();
+
+$(send("helloService")
+    .message()
+    .body(mySpecialPayloadBuilder)
+);
+
+
+
+

The message payload builder must implement the MessagePayloadBuilder interface with the method buildPayload(TestContext context).

+
+
+
MessagePayloadBuilder interface
+
+
public class FooPayloadBuilder implements MessagePayloadBuilder {
+
+    @Override
+    public Object buildPayload(TestContext context) {
+        // return some special payload
+        return new FooModel();
+    }
+}
+
+
+
+

You can also use a Citrus message instance directly. +Citrus provides different message implementations with fluent APIs to +have a convenient way of setting properties (e.g. HttpMessage, MailMessage, FtpMessage, SoapMessage, …​).

+
+
+
Citrus message object
+
+
$(send("helloService")
+    .message(new DefaultMessage("Hello World!"))
+);
+
+
+
+

You can explicitly overwrite some message values in the body before the validations is performed. +This is for overwriting specific message elements with variable values for instance. +Also, you can overwrite values using XPath (xpath) or +JsonPath (json-path) expressions.

+
+
+
Java
+
+
@CitrusTest
+public void jsonPathTest() {
+    $(receive("someEndpoint")
+        .message()
+        .type(MessageType.JSON)
+        .body(new ClassPathResource("path/to/request.xml"))
+        .process(jsonPath()
+            .expression("$.user.name", "Penny")
+            .expression("$['user']['name']", "${userName}"));
+    );
+}
+
+
+
+
XML
+
+
<test name="JsonPathTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="someEndpoint">
+            <message type="json">
+                <body>
+                    <resource file="classpath:path/to/request.xml" />
+                </body>
+                <expression path="$.user.name" value="Penny"/>
+                <expression path="$['user']['name']" value="${userName}"/>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JsonPathTest
+actions:
+  - receive:
+      endpoint: "someEndpoint"
+      message:
+        type: json
+        resource:
+          file: "classpath:path/to/request.xml"
+        expression:
+          - path: '$.user.name'
+            value: "Penny"
+          - path: '$["user"]["name"]'
+            value: '${userName}'
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JsonPathTest">
+        <actions>
+            <receive endpoint="someEndpoint">
+                <message type="json">
+                    <resource file="classpath:path/to/request.xml" />
+                    <element path="$.user.name" value="Penny"/>
+                    <element path="$['user']['name']" value="${userName}"/>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+
+

8.1.2. Send message headers

+
+

Defining the message header is an essential part. +Citrus uses name-value pairs like "Operation" and "MessageId" in the +next example to set message header entries.

+
+
+

Depending on what message endpoint and which message transport underneath is used the header values will be shipped in different ways. +In JMS for instance the headers go to the header section of the message, in Http we set mime headers accordingly, in SOAP we can access the SOAP header elements and so on. +Citrus knows how to set headers on different message transports and aims to do the hard work for you .

+
+
+
Java
+
+
@CitrusTest
+public void messageHeaderTest() {
+    $(send("helloService")
+        .message()
+        .header("Operation", "sayHello")
+        .header("MessageId", "${messageId}")
+        .body("""
+            <TestMessage xmlns="http://citrusframework.org/schema">
+                <Text>Hello!</Text>
+            </TestMessage>
+        """)
+    );
+}
+
+
+
+
XML
+
+
<test name="MessageHeaderTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="someEndpoint">
+            <message>
+                <headers>
+                    <header name="Operation" value="sayHello"/>
+                </headers>
+                <body>
+                    <payload>
+                        <TestMessage xmlns="http://citrusframework.org/schema">
+                            <Text>Hello!</Text>
+                        </TestMessage>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: MessageHeaderTest
+actions:
+  - send:
+      endpoint: "helloService"
+      message:
+        headers:
+          - name: "Operation"
+            value: "sayHello"
+        body:
+          data: |
+            <TestMessage xmlns="http://citrusframework.org/schema">
+                <Text>Hello!</Text>
+            </TestMessage>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="MessageHeaderTest">
+        <actions>
+            <send endpoint="helloService">
+                <message>
+                    <payload>
+                        <TestMessage xmlns="http://citrusframework.org/schema">
+                            <Text>Hello!</Text>
+                        </TestMessage>
+                    </payload>
+                </message>
+                <header>
+                    <element name="Operation" value="sayHello"/>
+                </header>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The message headers to send are defined by a simple name and value pairs. +Of course you can use test variables in header values as well.

+
+
+

This is basically how to send messages in Citrus. +The test case is responsible for constructing the message content while the predefined message endpoint holds transport specific settings. +Test cases reference endpoint components to publish messages to the outside world. +The variable support in message payload and message header enables you to add dynamic values before sending out the message.

+
+
+
+

8.1.3. Groovy Markup builder

+
+

With the Groovy markup builder you can build XML message body content in a simple way, without having to write the typical XML overhead.

+
+
+ + + + + +
+ + +The Groovy test action support lives in a separate module. +You need to add the module to your project to use the functionality. +
+
+
+
citrus-groovy dependency module
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-groovy</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

For example, we use a Groovy script to construct the XML message to be sent out. +Instead of a plain CDATA XML section or the nested body XML data we write a Groovy script snippet.

+
+
+
Java
+
+
@CitrusTest
+public void scriptMessageBuilderTest() {
+    $(send("helloService")
+        .message()
+        .body(new GroovyScriptPayloadBuilder("""
+                    markupBuilder.TestRequest(xmlns: 'https://citrus.schemas/samples/sayHello.xsd') {
+                        Message('Hello World!')
+                    }
+        """))
+    );
+}
+
+
+
+
XML
+
+
<test name="ScriptMessageBuilderTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="helloService">
+            <message>
+                <body>
+                    <builder type="groovy">
+                        markupBuilder.TestRequest(xmlns: 'https://citrus.schemas/samples/sayHello.xsd') {
+                            Message('Hello World!')
+                        }
+                    </builder>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ScriptMessageBuilderTest
+actions:
+  - send:
+      endpoint: "helloService"
+      message:
+        builder:
+          type: "groovy"
+          value: |
+            markupBuilder.TestRequest(xmlns: 'https://citrus.schemas/samples/sayHello.xsd') {
+                Message('Hello World!')
+            }
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ScriptMessageBuilderTest">
+        <actions>
+            <send endpoint="helloService">
+              <message>
+                <builder type="groovy">
+                    markupBuilder.TestRequest(xmlns: 'https://citrus.schemas/samples/sayHello.xsd') {
+                        Message('Hello World!')
+                    }
+                </builder>
+              </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The Groovy markup builder generates the XML message body with following content:

+
+
+
Genereted markup
+
+
<TestRequest xmlns="https://citrus.schemas/samples/sayHello.xsd">
+  <Message>Hello World</Message>
+</TestRequest>
+
+
+
+

We use the builder element with type groovy and the markup builder code is directly written to this element. As you can +see from the example above, you can mix XPath and Groovy markup builder code. The markup builder syntax is very easy and follows +the simple rule: markupBuilder.ROOT-ELEMENT{ CHILD-ELEMENTS } . However the tester has to follow some simple rules and naming +conventions when using the Citrus markup builder extension:

+
+
+
    +
  • +

    The markup builder is accessed within the script over an object named markupBuilder. The name of the custom root element follows with all its child elements.

    +
  • +
  • +

    Child elements may be defined within curly brackets after the root-element (the same applies for further nested child elements)

    +
  • +
  • +

    Attributes and element values are defined within round brackets, after the element name

    +
  • +
  • +

    Attribute and element values have to stand within apostrophes (e.g. attribute-name: 'attribute-value')

    +
  • +
+
+
+

The Groovy markup builder script may also be used as external file resource:

+
+
+
Java
+
+
@CitrusTest
+public void scriptMessageBuilderTest() {
+    $(send("helloService")
+        .message()
+        .body(new GroovyFileResourcePayloadBuilder("classpath:path/to/helloRequest.groovy"))
+    );
+}
+
+
+
+
XML
+
+
<test name="ScriptMessageBuilderTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="helloService">
+            <message>
+                <body>
+                    <builder type="groovy" file="classpath:path/to/helloRequest.groovy"/>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ScriptMessageBuilderTest
+actions:
+  - send:
+      endpoint: "helloService"
+      message:
+        builder:
+          type: "groovy"
+          file: "classpath:path/to/helloRequest.groovy"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ScriptMessageBuilderTest">
+        <actions>
+            <send endpoint="helloService">
+              <message>
+                <builder type="groovy" file="classpath:path/to/helloRequest.groovy"/>
+              </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The markup builder implementation in Groovy offers great possibilities in defining message body content. +We do not need to write XML the tag overhead anymore. +The approach also enables us to construct complex message body content with Groovy script logic like iterations and conditional elements. +For detailed markup builder descriptions please see the official Groovy documentation.

+
+
+
+
+

8.2. Receive

+
+

Receiving and validating messages is an essential part of an integration test. You can perform assertions and checks on incoming +messages in order to verify that everything works as expected.

+
+
+

A message consists of a message header (name-value pairs) and a message body. You can specify expected message content on a +receive message test action. Citrus will perform validation steps and raise errors in case the incoming message does not match these +expectations.

+
+
+
Java
+
+
@CitrusTest
+public void receiveMessageTest() {
+    $(receive("helloService")
+        .message()
+        .name("helloRequest")
+        .header("Operation", "sayHello")
+        .header("MessageId", "${messageId}")
+        .body("""
+            <HelloMessage>
+                <Text>Hello Citrus!</Text>
+            </HelloMessage>
+        """)
+    );
+}
+
+
+
+
XML
+
+
<test name="ReceiveMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="helloService">
+            <message name="helloRequest">
+                <headers>
+                    <header name="Operation" value="sayHello"/>
+                    <header name="MessageId" value="${messageId}"/>
+                </headers>
+                <body>
+                    <![CDATA[
+                    <HelloMessage>
+                        <Text>Hello Citrus!</Text>
+                    </HelloMessage>
+                    ]]>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ReceiveMessageTest
+actions:
+  - receive:
+      endpoint: "helloService"
+      message:
+        name: "helloRequest"
+        headers:
+          - name: "Operation"
+            value: "sayHello"
+          - name: "MessageId"
+            value: '${messageId}'
+        body: |
+          <HelloMessage>
+              <Text>Hello Citrus!</Text>
+          </HelloMessage>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ReceiveMessageTest">
+        <actions>
+            <receive endpoint="helloService">
+                <message name="helloRequest">
+                    <payload>
+                        <![CDATA[
+                        <HelloMessage>
+                            <Text>Hello Citrus!</Text>
+                        </HelloMessage>
+                        ]]>
+                    </payload>
+                </message>
+                <header>
+                    <element name="Operation" value="sayHello"/>
+                    <element name="MessageId" value="${messageId}"/>
+                </header>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The message name is optional and defines the message identifier in the local message store. This +message name is very useful when accessing the message content later on during the test case. The local message store is +handled per test case and contains all exchanged messages.

+
+
+

The test action waits for a message to arrive. The whole test execution is blocked while waiting for the expected message. +This is important to ensure the step by step test workflow processing. Of course, you can specify a message timeout setting +so the receiver will only wait a given amount of time before raising a timeout error. Following from that timeout exception +the test case fails as the message did not arrive in time. Citrus defines default timeout settings for all message receiving tasks.

+
+
+

In case the message arrives in time, the test action moves on to validate the message content as a next step. The user is +able to choose from different validation capabilities. On the one hand you can specify a whole message body content that you +expect as control template. In this case the received message structure is compared to the expected message content element +by element. On the other hand you can use explicit element validation where only a small subset of message elements is validated.

+
+
+

In addition to verifying the message body content, Citrus will also perform validation on the received message header values. +Test variable usage is supported as usual during the whole validation process for body and header checks.

+
+
+

In general the validation component (validator) in Citrus works hand in hand with a message receiving component as the following +figure shows:

+
+
+

figure_005.jpg

+
+
+

The message receiving component passes the message to the validator where the individual validation steps are performed. +Let us have a closer look at the validation options and features step by step.

+
+
+

8.2.1. Validate message body

+
+

The most detailed validation of incoming messages is to define some expected message body. +The Citrus message validator will then perform a detailed message body comparison. +The incoming message has to match exactly to the expected message body. +The different message validator implementations in Citrus provide deep comparison of message structures such as XML, JSON and so on.

+
+
+

So by defining an expected message body we validate the incoming message in syntax and semantics. +In case a difference is identified by the message validator the validation and the test case fails with respective exceptions. +This is how you can define message body content in receive action:

+
+
+
Java
+
+
@CitrusTest
+public void receiveMessageTest() {
+    $(receive("helloService")
+        .message()
+        .body("""
+            <HelloMessage>
+                <Text>Hello Citrus!</Text>
+            </HelloMessage>
+        """)
+    );
+}
+
+
+
+
XML
+
+
<test name="ReceiveMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="helloService">
+            <message>
+                <body>
+                    <![CDATA[
+                    <HelloMessage>
+                        <Text>Hello Citrus!</Text>
+                    </HelloMessage>
+                    ]]>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ReceiveMessageTest
+actions:
+  - receive:
+      endpoint: "helloService"
+      message:
+        body: |
+          <HelloMessage>
+              <Text>Hello Citrus!</Text>
+          </HelloMessage>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ReceiveMessageTest">
+        <actions>
+            <receive endpoint="helloService">
+                <message>
+                    <payload>
+                        <![CDATA[
+                        <HelloMessage>
+                            <Text>Hello Citrus!</Text>
+                        </HelloMessage>
+                        ]]>
+                    </payload>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

A simple way of defining the expected message body content is to provide the message body as a String. +You can do this in the different supported languages by embedding the message content in the body section of the receive action.

+
+
+

In XML you can embed the content as a CDATA section and in Java, or YAML you may want to use text blocks.

+
+
+

When the message body content is an XML payload you can also use nested XML elements in the XML domain specific languages as the next example shows:

+
+
+
XML
+
+
<test name="ReceiveMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="helloService">
+            <message name="helloRequest">
+                <body>
+                    <HelloMessage xmlns="http://sample.org/">
+                        <Text>Hello Citrus!</Text>
+                    </HelloMessage>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ReceiveMessageTest">
+        <actions>
+            <receive endpoint="helloService">
+              <message>
+                <payload>
+                  <HelloMessage xmlns="http://sample.org/">
+                      <Text>Hello Citrus!</Text>
+                  </HelloMessage>
+                </payload>
+              </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +In XML you can use nested XML elements or CDATA sections. Sometimes the nested XML message payload elements may cause +XSD schema violations. This is because of variable values not fitting the XSD schema rules for example. +In this scenario you could also use simple CDATA sections as payload data. In this case you need to use the `<data>` +element in contrast to the `<payload>` element that we have used in our examples so far. +
+
+
+

With this alternative you can skip the XML schema validation from your IDE at design time. Unfortunately you will lose +the XSD auto-completion features many XML editors offer when constructing your payload.

+
+
+

Message body content may be quite huge, so you can also load the message content form an external file resource. +The file path is given as either a classpath or file system resource.

+
+
+

When writing tests in Java you can use one of the classpath or file system resource implementations to resolve the file path. +In XML and other languages you may use a resource path given as: file="classpath:path/to/request.xml". +The file path prefix indicates the file resource type (file: or classpath:), so the file location is resolved either as file system resource (file:) +or classpath resource (classpath:).

+
+
+
Java
+
+
@CitrusTest
+public void receiveMessageTest() {
+    $(receive("helloService")
+        .message()
+        .body(new ClassPathResource("path/to/request.xml"))
+    );
+}
+
+
+
+
XML
+
+
<test name="ReceiveMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="helloService">
+            <message>
+                <body>
+                    <resource file="classpath:path/to/request.xml"/>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ReceiveMessageTest
+actions:
+  - receive:
+      endpoint: "helloService"
+      message:
+        body:
+          resource:
+            file: "classpath:path/to/request.xml"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ReceiveMessageTest">
+        <actions>
+            <receive endpoint="helloService">
+                <message>
+                    <resource file="classpath:path/to/request.xml" />
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In addition to defining message payloads as normal Strings and via external file resource (classpath and file system) you can also +provide a POJO model object as a message payload. +The model object will be serialized with a marshaller or object mapper implementation which gets loaded from the Citrus context.

+
+
+

You can use the marshalling message payload builders in a receive action as follows.

+
+
+
Marshalling message payload builder
+
+
$(receive("helloService")
+    .message()
+    .body(marshal(new TestRequest("Hello Citrus!")))
+);
+
+
+
+

The receive action uses the marshalling message builder provided with Citrus and just provides the model object new TestRequest(). +The marshalling message builder automatically loads a proper XML message marshaller that should be available as a bean in the project context (e.g. the +Spring application context). By default, Citrus is searching for a bean of type org.citrusframework.xml.Marshaller. +You can add the marshaller to your project context as a bean.

+
+
+
Marshaller bean
+
+
@Bean
+public Marshaller xmlMarshaller() {
+    return new Jaxb2Marshaller();
+}
+
+
+
+

Now Citrus is able to automatically resolve the marshaller from the project context as soon as the receive action uses the model object in combination with the marshal instruction.

+
+
+

When you have multiple message marshaller instances in your project context you have to tell Citrus which one to use in this particular receive message action.

+
+
+
Reference message marshaller
+
+
$(receive("helloService")
+    .message()
+    .body(marshal(new TestRequest("Hello Citrus!"), "myMessageMarshallerBean"))
+);
+
+
+
+

Now Citrus will marshal the message body with the message marshaller bean named myMessageMarshallerBean. +This way you can have multiple message marshaller implementations in your project (XML, JSON, and so on).

+
+
+

You can implement your own message payload builder or use one of the provided Citrus message payload builders.

+
+
+
Custom message payload builder
+
+
@Autowired
+private MessagePayloadBuilder mySpecialPayloadBuilder = new FooPayloadBuilder();
+
+$(receive("helloService")
+    .message()
+    .body(mySpecialPayloadBuilder)
+);
+
+
+
+

The message payload builder must implement the MessagePayloadBuilder interface with the method buildPayload(TestContext context).

+
+
+
MessagePayloadBuilder interface
+
+
public class FooPayloadBuilder implements MessagePayloadBuilder {
+
+    @Override
+    public Object buildPayload(TestContext context) {
+        // return some special payload
+        return new FooModel();
+    }
+}
+
+
+
+

You can also use a Citrus message instance directly. +Citrus provides different message implementations with fluent APIs to +have a convenient way of setting properties (e.g. HttpMessage, MailMessage, FtpMessage, SoapMessage, …​).

+
+
+
Citrus message object
+
+
$(receive("helloService")
+    .message(new DefaultMessage("Hello World!"))
+);
+
+
+
+

You can explicitly overwrite some message values in the body before the validations is performed. +This is for overwriting specific message elements with variable values for instance. +Also, you can overwrite values using XPath (xpath) or +JsonPath (json-path) expressions.

+
+
+
Java
+
+
@CitrusTest
+public void jsonPathTest() {
+    $(receive("someEndpoint")
+        .message()
+        .type(MessageType.JSON)
+        .body(new ClassPathResource("path/to/request.xml"))
+        .validate(jsonPath()
+            .expression("$.user.name", "Penny")
+            .expression("$['user']['name']", "${userName}"))
+    );
+}
+
+
+
+
XML
+
+
<test name="JsonPathTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="someEndpoint">
+            <message type="json">
+                <body>
+                    <resource file="classpath:path/to/request.xml" />
+                </body>
+            </message>
+            <validate path="$.user.name" value="Penny"/>
+            <validate path="$['user']['name']" value="${userName}"/>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JsonPathTest
+actions:
+  - receive:
+      endpoint: "someEndpoint"
+      message:
+        type: json
+        resource:
+          file: "classpath:path/to/request.xml"
+        validate:
+          jsonPath:
+            - expression: '$.user.name'
+              value: "Penny"
+            - expression: '$["user"]["name"]'
+              value: '${userName}'
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JsonPathTest">
+        <actions>
+            <receive endpoint="someEndpoint">
+                <message type="json">
+                    <resource file="classpath:path/to/request.xml" />
+                    <validate path="$.user.name" value="Penny"/>
+                    <validate path="$['user']['name']" value="${userName}"/>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In addition to that you can ignore some elements that are skipped in comparison. We will describe this later on in this section. +Now let’s continue with message header validation.

+
+
+
+

8.2.2. Validate message headers

+
+

Message headers are used widely in enterprise messaging. +The message headers often represent a critical part of the message semantics and need to be validated, too. +Citrus is able to validate message headers by name and value.

+
+
+
Java
+
+
@CitrusTest
+public void messageHeaderTest() {
+    $(receive("helloService")
+        .message()
+        .header("Operation", "sayHello")
+        .body("""
+            <TestMessage xmlns="http://citrusframework.org/schema">
+                <Text>Hello!</Text>
+            </TestMessage>
+        """)
+    );
+}
+
+
+
+
XML
+
+
<test name="MessageHeaderTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="someEndpoint">
+            <message>
+                <headers>
+                    <header name="Operation" value="sayHello"/>
+                </headers>
+                <body>
+                    <payload>
+                        <TestMessage xmlns="http://citrusframework.org/schema">
+                            <Text>Hello!</Text>
+                        </TestMessage>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: MessageHeaderTest
+actions:
+  - receive:
+      endpoint: "helloService"
+      message:
+        headers:
+          - name: "Operation"
+            value: "sayHello"
+        body:
+          data: |
+            <TestMessage xmlns="http://citrusframework.org/schema">
+                <Text>Hello!</Text>
+            </TestMessage>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="MessageHeaderTest">
+        <actions>
+            <receive endpoint="helloService">
+                <message>
+                    <payload>
+                        <TestMessage xmlns="http://citrusframework.org/schema">
+                            <Text>Hello!</Text>
+                        </TestMessage>
+                    </payload>
+                </message>
+                <header>
+                    <element name="Operation" value="sayHello"/>
+                </header>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The expected message headers are defined by a name and value pair. +Citrus will check that the expected message header is present and will verify the value accordingly. +In case the message header is not found or the value does not match Citrus will raise +an exception and the test fails. +You can use validation matchers (validation-matcher) for a more powerful validation of header values, too.

+
+
+

Header definition in Java DSL is straight forward as we just define name and value as usual. +This completes tha basic message validation in Citrus. +The individual message validator implementations may add additional validation capabilities such as XML schema validation or XPath and JSONPath validation. Please refer to the respective chapters in this guide to learn more about that.

+
+
+
+

8.2.3. Ignore elements

+
+

Sometimes a tester can not verify all values because specifying expected values is not possible for non deterministic values +(e.g. timestamps, dynamic and generated identifiers).

+
+
+

You can use a path expressions (e.g. Xpath, JsonPath) to ignoring a very specific entry in the message body.

+
+
+
Java
+
+
@CitrusTest
+public void ignorePathTest() {
+    $(receive(someEndpoint)
+        .message()
+        .type(MessageType.JSON)
+        .body("""
+            {
+              "users":
+              [{
+                "name": "Jane",
+                "token": "?",
+                "lastLogin": 0
+              },
+              {
+                "name": "Penny",
+                "token": "?",
+                "lastLogin": 0
+              },
+              {
+                "name": "Mary",
+                "token": "?",
+                "lastLogin": 0
+              }]
+            }
+        """)
+        .validate(json()
+                    .ignore("$.users[*].token")
+                    .ignore("$..lastLogin"))
+    );
+}
+
+
+
+
XML
+
+
<test name="IgnorePathTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="someEndpoint">
+            <message type="json">
+                <body>
+                    <data>
+                    {
+                      "users":
+                      [{
+                        "name": "Jane",
+                        "token": "?",
+                        "lastLogin": 0
+                      },
+                      {
+                        "name": "Penny",
+                        "token": "?",
+                        "lastLogin": 0
+                      },
+                      {
+                        "name": "Mary",
+                        "token": "?",
+                        "lastLogin": 0
+                      }]
+                    }
+                    </data>
+                </body>
+            </message>
+            <ignore path="$..lastLogin" />
+            <ignore path="$.users[*].token" />
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: IgnorePathTest
+actions:
+  - receive:
+      endpoint: "someEndpoint"
+      message:
+        type: "json"
+        body:
+          data: |
+            {
+              "users":
+              [{
+                "name": "Jane",
+                "token": "?",
+                "lastLogin": 0
+              },
+              {
+                "name": "Penny",
+                "token": "?",
+                "lastLogin": 0
+              },
+              {
+                "name": "Mary",
+                "token": "?",
+                "lastLogin": 0
+              }]
+            }
+          ignore:
+            - path: "$.users[*].token"
+            - path: "$..lastLogin"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="IgnorePathTest">
+        <actions>
+            <receive endpoint="someEndpoint">
+                <message type="json">
+                    <data>
+                    {
+                      "users":
+                      [{
+                        "name": "Jane",
+                        "token": "?",
+                        "lastLogin": 0
+                      },
+                      {
+                        "name": "Penny",
+                        "token": "?",
+                        "lastLogin": 0
+                      },
+                      {
+                        "name": "Mary",
+                        "token": "?",
+                        "lastLogin": 0
+                      }]
+                    }
+                    </data>
+                    <ignore path="$.users[*].token" />
+                    <ignore path="$..lastLogin" />
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The sample above adds JsonPath expressions as ignore statements. This means that we explicitly leave out the evaluated elements +from validation. In the example above we explicitly skip the token entry and all lastLogin values that are obviously +timestamp values in milliseconds.

+
+
+

The path evaluation is very powerful when it comes to select a set of objects and elements. This is how you can ignore +several elements with path expressions.

+
+
+

As an alternative you can also use the @ignore@ placeholder in the message content. The placeholder tells Citrus to skip the element in validation.

+
+
+
Java
+
+
@CitrusTest
+public void ignorePathTest() {
+    $(receive(someEndpoint)
+        .message()
+        .type(MessageType.JSON)
+        .body("""
+            {
+              "users":
+              [{
+                "name": "Jane",
+                "token": "@ignore@",
+                "lastLogin": "@ignore@"
+              },
+              {
+                "name": "Penny",
+                "token": "@ignore@",
+                "lastLogin": "@ignore@"
+              },
+              {
+                "name": "Mary",
+                "token": "@ignore@",
+                "lastLogin": "@ignore@"
+              }]
+            }
+        """)
+    );
+}
+
+
+
+
XML
+
+
<test name="IgnorePathTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="someEndpoint">
+            <message type="json">
+                <body>
+                    <data>
+                    {
+                      "users":
+                      [{
+                        "name": "Jane",
+                        "token": "@ignore@",
+                        "lastLogin": "@ignore@"
+                      },
+                      {
+                        "name": "Penny",
+                        "token": "@ignore@",
+                        "lastLogin": "@ignore@"
+                      },
+                      {
+                        "name": "Mary",
+                        "token": "@ignore@",
+                        "lastLogin": "@ignore@"
+                      }]
+                    }
+                    </data>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: IgnorePathTest
+actions:
+  - receive:
+      endpoint: "someEndpoint"
+      message:
+        type: "json"
+        body:
+          data: |
+            {
+              "users":
+              [{
+                "name": "Jane",
+                "token": "@ignore@",
+                "lastLogin": "@ignore@"
+              },
+              {
+                "name": "Penny",
+                "token": "@ignore@",
+                "lastLogin": "@ignore@"
+              },
+              {
+                "name": "Mary",
+                "token": "@ignore@",
+                "lastLogin": "@ignore@"
+              }]
+            }
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="IgnorePathTest">
+        <actions>
+            <receive endpoint="someEndpoint">
+                <message type="json">
+                  <data>
+                    {
+                      "users":
+                      [{
+                        "name": "Jane",
+                        "token": "@ignore@",
+                        "lastLogin": "@ignore@"
+                      },
+                      {
+                        "name": "Penny",
+                        "token": "@ignore@",
+                        "lastLogin": "@ignore@"
+                      },
+                      {
+                        "name": "Mary",
+                        "token": "@ignore@",
+                        "lastLogin": "@ignore@"
+                      }]
+                    }
+                  </data>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +You can also ignore a whole sub-tree in XML and whole objects and arrays in Json with the ignore expression/placeholder. +
+
+
+ + + + + +
+ + +The ignore expression as well as the @ignore@ placeholder will only skip the value matching validations for the selected element or object. +The element still has to be present in the message structure. In case the element is missing for any reason the validation fails even for ignored values. +
+
+
+
+

8.2.4. Message selectors

+
+

The <selector> element inside the receiving action defines key-value pairs in order to filter the messages being received. +The filter applies to the message headers. +This means that a receiver will only accept messages matching a header element value. +In messaging applications the header information often holds message ids, correlation ids, operation names and so on. +With this information given you can explicitly listen for messages that belong to your test case. +This is very helpful to avoid receiving messages that are still available on the message destination.

+
+
+

Let’s say the tested software application keeps sending messages that belong to previous test cases. This could happen in +retry situations where the application error handling automatically tries to solve a communication problem that occurred +during previous test cases. As a result a message destination (e.g. a JMS message queue) contains messages that are not +valid anymore for the currently running test case. The test case might fail because the received message does not apply +to the actual use case. So we will definitely run into validation errors as the expected message control values do not match.

+
+
+

Now we have to find a way to avoid these problems. The test could filter the messages on a destination to only receive messages +that apply for the use case that is being tested. The Java Messaging System (JMS) came up with a message header selector that +will only accept messages that fit the expected header values.

+
+
+

Let us have a closer look at a message selector inside a receiving action:

+
+
+
Java
+
+
@CitrusTest
+public void selectorTest() {
+    Map<String, String> selectorMap = new HashMap<>();
+    selectorMap.put("correlationId", "Cx1x123456789");
+    selectorMap.put("operation", "getOrders");
+
+    $(receive(someEndpoint)
+        .selector(selectorMap)
+        .message()
+        .body("...")
+    );
+}
+
+
+
+
XML
+
+
<test name="SelectorTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="someEndpoint">
+            <selector>
+                <element name="correlationId" value="Cx1x123456789"/>
+                <element name="operation" value="getOrders"/>
+            </selector>
+            <message>
+                <!-- -->
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: SelectorTest
+actions:
+  - receive:
+      endpoint: "someEndpoint"
+      selector:
+        element:
+          - name: correlationId
+            value: "Cx1x123456789"
+          - name: operation
+            value: "getOrders"
+      message:
+        # ...
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SelectorTest">
+        <actions>
+            <receive endpoint="someEndpoint">
+              <selector>
+                <element name="correlationId" value="Cx1x123456789"/>
+                <element name="operation" value="getOrders"/>
+              </selector>
+              <!-- ... -->
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

This example shows how message selectors work. The selector will only accept messages that meet the correlation id and the +operation in the header values. All other messages on the message destination are ignored. The selector elements are automatically +associated to each other using the logical AND operator. This means that the message selector string would look like this:

+
+
+
+
correlationId = 'Cx1x123456789' AND operation = 'getOrders'
+
+
+
+

Instead of using several elements in the selector you can also define a selector string directly which gives you more power +in constructing the selection logic yourself. This way you can use AND logical operators yourself.

+
+
+
Java
+
+
@CitrusTest
+public void selectorTest() {
+    $(receive(someEndpoint)
+        .selector("correlationId = 'Cx1x123456789' AND operation = 'getOrders'")
+        .message()
+        .body("...")
+    );
+}
+
+
+
+
XML
+
+
<test name="SelectorTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="someEndpoint">
+            <selector>
+                <value>
+                    correlationId = 'Cx1x123456789' AND operation = 'getOrders'
+                </value>
+            </selector>
+            <message>
+                <!-- -->
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: SelectorTest
+actions:
+  - receive:
+      endpoint: "someEndpoint"
+      selector:
+        value: "correlationId = 'Cx1x123456789' AND operation = 'getOrders'"
+      message:
+        # ...
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SelectorTest">
+        <actions>
+            <receive endpoint="someEndpoint">
+              <selector>
+                <value>
+                    correlationId = 'Cx1x123456789' AND operation = 'getOrders'
+                </value>
+              </selector>
+              <!-- ... -->
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +In case you want to run tests in parallel message selectors become essential in your test cases. The different +tests running at the same time will steal messages from each other when you lack of message selection mechanisms. +
+
+
+
+

8.2.5. Groovy Markup builder

+
+

With the Groovy markup builder you can build XML message body content in a simple way, without having to write the typical XML overhead.

+
+
+ + + + + +
+ + +The Groovy test action support lives in a separate module. +You need to add the module to your project to use the functionality. +
+
+
+
citrus-groovy dependency module
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-groovy</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

For example, we use a Groovy script to construct the XML message to be sent out. +Instead of a plain CDATA XML section or the nested body XML data we write a Groovy script snippet.

+
+
+
Java
+
+
@CitrusTest
+public void scriptMessageBuilderTest() {
+    $(receive("helloService")
+        .message()
+        .body(new GroovyScriptPayloadBuilder("""
+                    markupBuilder.TestRequest(xmlns: 'https://citrus.schemas/samples/sayHello.xsd') {
+                        Message('Hello World!')
+                    }
+        """))
+    );
+}
+
+
+
+
XML
+
+
<test name="ScriptMessageBuilderTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="helloService">
+            <message>
+                <body>
+                    <builder type="groovy">
+                        markupBuilder.TestRequest(xmlns: 'https://citrus.schemas/samples/sayHello.xsd') {
+                            Message('Hello World!')
+                        }
+                    </builder>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ScriptMessageBuilderTest
+actions:
+  - receive:
+      endpoint: "helloService"
+      message:
+        builder:
+          type: "groovy"
+          value: |
+            markupBuilder.TestRequest(xmlns: 'https://citrus.schemas/samples/sayHello.xsd') {
+                Message('Hello World!')
+            }
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ScriptMessageBuilderTest">
+        <actions>
+            <receive endpoint="helloService">
+              <message>
+                <builder type="groovy">
+                    markupBuilder.TestRequest(xmlns: 'https://citrus.schemas/samples/sayHello.xsd') {
+                        Message('Hello World!')
+                    }
+                </builder>
+              </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The Groovy markup builder generates the XML message body with following content:

+
+
+
Generated markup
+
+
<TestRequest xmlns="https://citrus.schemas/samples/sayHello.xsd">
+  <Message>Hello World</Message>
+</TestRequest>
+
+
+
+

We use the builder element with type groovy and the markup builder code is directly written to this element. As you can +see from the example above, you can mix XPath and Groovy markup builder code. The markup builder syntax is very easy and follows +the simple rule: markupBuilder.ROOT-ELEMENT{ CHILD-ELEMENTS } . However the tester has to follow some simple rules and naming +conventions when using the Citrus markup builder extension:

+
+
+
    +
  • +

    The markup builder is accessed within the script over an object named markupBuilder. The name of the custom root element follows with all its child elements.

    +
  • +
  • +

    Child elements may be defined within curly brackets after the root-element (the same applies for further nested child elements)

    +
  • +
  • +

    Attributes and element values are defined within round brackets, after the element name

    +
  • +
  • +

    Attribute and element values have to stand within apostrophes (e.g. attribute-name: 'attribute-value')

    +
  • +
+
+
+

The Groovy markup builder script may also be used as external file resource:

+
+
+
Java
+
+
@CitrusTest
+public void scriptMessageBuilderTest() {
+    $(receive("helloService")
+        .message()
+        .body(new GroovyFileResourcePayloadBuilder("classpath:path/to/helloRequest.groovy"))
+    );
+}
+
+
+
+
XML
+
+
<test name="ScriptMessageBuilderTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="helloService">
+            <message>
+                <body>
+                    <builder type="groovy" file="classpath:path/to/helloRequest.groovy"/>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ScriptMessageBuilderTest
+actions:
+  - receive:
+      endpoint: "helloService"
+      message:
+        builder:
+          type: "groovy"
+          file: "classpath:path/to/helloRequest.groovy"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ScriptMessageBuilderTest">
+        <actions>
+            <receive endpoint="helloService">
+              <message>
+                <builder type="groovy" file="classpath:path/to/helloRequest.groovy"/>
+              </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The markup builder implementation in Groovy offers great possibilities in defining message body content. +We do not need to write XML the tag overhead anymore. +The approach also enables us to construct complex message body content with Groovy script logic like iterations and conditional elements. +For detailed markup builder descriptions please see the official Groovy documentation.

+
+
+
+
+

8.3. SQL

+
+

In many cases it is necessary to access the database during a test. This enables a tester to also validate the persistent +data in a database. It might also be helpful to prepare the database with some test data before running a test. You can do this +using the two database actions that are described in the following sections.

+
+
+ + + + + +
+ + +The SQL test actions live in a separate module. +You need to add the module to your project to use the actions. +
+
+
+
citrus-sql dependency module
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-sql</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

In general Citrus handles SELECT statements differently to other statements like INSERT, UPDATE and DELETE. When executing an SQL query with +SELECT you are able to add validation steps on the result sets returned from the database. This is not allowed when executing update statements like +INSERT, UPDATE, DELETE.

+
+
+ + + + + +
+ + +Do not mix statements of type SELECT with others in a single sql test action. This will lead to errors because validation steps are not valid +for statements other than SELECT. Please use separate test actions for update statements. +
+
+
+

8.3.1. SQL update, insert, delete

+
+

The <sql> action simply executes a group of SQL statements in order to change data in a database. Typically the action is used to prepare the database at the beginning of a test or to clean up the database at the end of a test. You can specify SQL statements like INSERT, UPDATE, DELETE, CREATE TABLE, ALTER TABLE and many more.

+
+
+

On the one hand you can specify the statements as inline SQL or stored in an external SQL resource file as shown in the next two examples.

+
+
+
Java
+
+
@Autowired
+@Qualifier("myDataSource")
+private DataSource dataSource;
+
+@CitrusTest
+public void sqlTest() {
+    $(sql()
+        .dataSource(dataSource)
+        .statement("DELETE FROM CUSTOMERS")
+        .statement("DELETE FROM ORDERS"))
+    );
+
+    $(sql()
+        .dataSource(dataSource)
+        .sqlResource("file:tests/unit/resources/script.sql"))
+    );
+}
+
+
+
+
XML
+
+
<test name="SQLTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <sql datasource="myDataSource">
+            <statements>
+                <statement>DELETE FROM CUSTOMERS</statement>
+                <statement>DELETE FROM ORDERS</statement>
+            </statements>
+        </sql>
+
+        <sql datasource="myDataSource">
+            <statements file="file:tests/unit/resources/script.sql"/>
+        </sql>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: "SQLTest"
+actions:
+  - sql:
+      dataSource: "myDataSource"
+      statements:
+        - statement: "DELETE FROM CUSTOMERS"
+        - statement: "DELETE FROM ORDERS"
+
+  - sql:
+      dataSource: "myDataSource"
+      statements:
+        - file: "file:tests/unit/resources/script.sql"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SQLTest">
+        <actions>
+            <sql datasource="myDataSource">
+                <statement>DELETE FROM CUSTOMERS</statement>
+                <statement>DELETE FROM ORDERS</statement>
+            </sql>
+
+            <sql datasource="myDataSource">
+                <resource file="file:tests/unit/resources/script.sql"/>
+            </sql>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The first action uses inline SQL statements defined directly inside the test case. The next action uses an external SQL resource file instead. The file resource can hold several SQL statements separated by new lines. All statements inside the file are executed sequentially by the framework.

+
+
+ + + + + +
+ + +You have to pay attention to some rules when dealing with external SQL resources. +
+
+
+
    +
  • +

    Each statement should begin in a new line

    +
  • +
  • +

    It is not allowed to define statements with word wrapping

    +
  • +
  • +

    Comments begin with two dashes "–"

    +
  • +
+
+
+ + + + + +
+ + +The external file is referenced either as file system resource or class path resource, by using the "file:" or "classpath:" prefix. +
+
+
+

Both examples use the "datasource" attribute. This value defines the database data source to be used. The connection to a data source is mandatory, because the test case does not know about user credentials or database names. The 'datasource' attribute references predefined data sources that are located in a separate Spring configuration file.

+
+
+
+

8.3.2. SQL query

+
+

The <sql> query action is specially designed to execute SQL queries (SELECT * FROM). So the test is able to read data from a database. The query results are validated against expected data as shown in the next example.

+
+
+
Java
+
+
@Autowired
+@Qualifier("myDataSource")
+private DataSource dataSource;
+
+@CitrusTest
+public void sqlQueryTest() {
+    $(sql()
+        .dataSource(dataSource)
+        .query()
+            .statement("select NAME from CUSTOMERS where CUSTOMER_ID='${customerId}'")
+            .statement("select COUNT(1) as overall_cnt from ERRORS")
+            .statement("select ORDER_ID from ORDERS where DESCRIPTION LIKE 'Migrate%'")
+            .statement("select DESCRIPTION from ORDERS where ORDER_ID = 2")
+        .validate("ORDER_ID", "1")
+        .validate("NAME", "Christoph")
+        .validate("OVERALL_CNT", "${rowsCount}")
+        .validate("DESCRIPTION", "NULL"));
+}
+
+
+
+
XML
+
+
<test name="SqlQueryTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <sql datasource="myDataSource">
+            <statements>
+                <statement>select NAME from CUSTOMERS where ID='${customerId}'</statement>
+                <statement>select count(*) from ERRORS</statement>
+                <statement>select ID from ORDERS where DESC LIKE 'Def%'</statement>
+                <statement>select DESCRIPTION from ORDERS where ID='${id}'</statement>
+            </statements>
+            <validate column="ID" value="1"/>
+            <validate column="NAME" value="Christoph"/>
+            <validate column="COUNT(*)" value="${rowsCount}"/>
+            <validate column="DESCRIPTION" value="null"/>
+        </sql>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: "SqlQueryTest"
+actions:
+  - sql:
+      dataSource: "dataSource"
+      statements:
+        - statement: "select NAME from CUSTOMERS where CUSTOMER_ID='${customerId}'"
+        - statement: "select COUNT(1) as overall_cnt from ERRORS"
+        - statement: "select ORDER_ID from ORDERS where DESCRIPTION LIKE 'Migrate%'"
+        - statement: "select DESCRIPTION from ORDERS where ORDER_ID = 2"
+      validate:
+        - column: "ID"
+          value: "1"
+        - column: "NAME"
+          value: "Christoph"
+        - column: "COUNT(*)"
+          value: '${rowsCount}'
+        - column: "DESCRIPTION"
+          value: "null"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- ... -->
+    <sql datasource="myDataSource">
+        <statement>select NAME from CUSTOMERS where ID='${customerId}'</statement>
+        <statement>select count(*) from ERRORS</statement>
+        <statement>select ID from ORDERS where DESC LIKE 'Def%'</statement>
+        <statement>select DESCRIPTION from ORDERS where ID='${id}'</statement>
+
+        <validate column="ID" value="1"/>
+        <validate column="NAME" value="Christoph"/>
+        <validate column="COUNT(*)" value="${rowsCount}"/>
+        <validate column="DESCRIPTION" value="null"/>
+    </sql>
+</spring:beans>
+
+
+
+

The action offers a wide range of validating functionality for database result sets. First of all you have to select the data via SQL statements. Here again you have the choice to use inline SQL statements or external file resource pattern.

+
+
+

The result sets are validated through <validate> elements. It is possible to do a detailed check on every selected column of the result set. Simply refer to the selected column name in order to validate its value. The usage of test variables is supported as well as database expressions like count(), avg(), min(), max().

+
+
+

You simply define the <validate> entry with the column name as the "column" attribute and any expected value expression as expected "value". The framework then will check the column to fit the expected value and raise validation errors in case of mismatch.

+
+
+

Looking at the first SELECT statement in the example you will see that test variables are supported in the SQL statements. The framework will replace the variable with its respective value before sending it to the database.

+
+
+

In the validation section variables can be used too. Look at the third validation entry, where the variable "${rowsCount}" is used. The last validation in this example shows, that NULL values are also supported as expected values.

+
+
+

If a single validation happens to fail, the whole action will fail with respective validation errors.

+
+
+ + + + + +
+ + +The validation with "<validate column="…​" value="…​"/>" meets single row result sets as you specify a single column control value. In case you have multiple rows in a result set you can pass a variable argument list to the validate method like this: +
+
+
+
Java
+
+
$(sql()
+    .query()
+    .statement("...")
+    .validate("SOME_COLUMN",
+        "Value in 1st row",
+        "Value in 2nd row",
+        "Value in 3rd row",
+        "Value in x row")
+);
+
+
+
+
XML
+
+
<sql datasource="myDataSource">
+    <statements>
+        <statement>...</statement>
+    </statement>
+    <validate column="SOME_COLUMN">
+      <values>
+          <value>Value in 1st row</value>
+          <value>Value in 2nd row</value>
+          <value>Value in 3rd row</value>
+          <value>Value in x row</value>
+      </values>
+    </validate>
+</sql>
+
+
+
+
YAML
+
+
- sql:
+  dataSource: myDataSource
+  statements:
+    - statement: {}
+  validate:
+    - column: "SOME_COLUMN"
+      values:
+        - "Value in 1st row"
+        - "Value in 2nd row"
+        - "Value in 3rd row"
+        - "Value in x row"
+
+
+
+
Spring XML
+
+
<sql dataSource="myDataSource">
+    <statement>...</statement>
+    <validate column="SOME_COLUMN">
+      <values>
+          <value>Value in 1st row</value>
+          <value>Value in 2nd row</value>
+          <value>Value in 3rd row</value>
+          <value>Value in x row</value>
+      </values>
+    </validate>
+</sql>
+
+
+
+

Next example shows how to work with multiple row result sets and multiple values to expect within one column:

+
+
+
Java
+
+
$(sql()
+    .dataSource(myDataSource)
+    .query()
+    .statement("select WEEKDAY as DAY, DESCRIPTION from WEEK")
+    .validate("DAY",
+        "Monday",
+        "Tuesday",
+        "Wednesday",
+        "Thursday",
+        "Friday",
+        "@ignore@",
+        "@ignore@")
+    .validate("DESCRIPTION",
+        "I hate Mondays!",
+        "Tuesday is sports day",
+        "The mid of the week",
+        "Thursday we play chess",
+        "Friday, the weekend is near!",
+        "@ignore@",
+        "@ignore@")
+);
+
+
+
+
XML
+
+
<sql datasource="myDataSource">
+    <statements>
+        <statement>select WEEKDAY as DAY, DESCRIPTION from WEEK</statement>
+    </statements>
+    <validate column="DAY">
+      <values>
+          <value>Monday</value>
+          <value>Tuesday</value>
+          <value>Wednesday</value>
+          <value>Thursday</value>
+          <value>Friday</value>
+          <value>@ignore@</value>
+          <value>@ignore@</value>
+      </values>
+    </validate>
+    <validate column="DESCRIPTION">
+      <values>
+          <value>I hate Mondays!</value>
+          <value>Tuesday is sports day</value>
+          <value>The mid of the week</value>
+          <value>Thursday we play chess</value>
+          <value>Friday, the weekend is near!</value>
+          <value>@ignore@</value>
+          <value>@ignore@</value>
+      </values>
+    </validate>
+</sql>
+
+
+
+
YAML
+
+
- sql:
+  dataSource: "myDataSource"
+  statements:
+    - statement: "select WEEKDAY as DAY, DESCRIPTION from WEEK"
+  validate:
+    - column: "SOME_COLUMN"
+      values:
+        - "Value in 1st row"
+        - "Value in 2nd row"
+        - "Value in 3rd row"
+        - "Value in x row"
+
+
+
+
Spring XML
+
+
<sql datasource="myDataSource">
+    <statement>select WEEKDAY as DAY, DESCRIPTION from WEEK</statement>
+    <validate column="DAY">
+      <values>
+          <value>Monday</value>
+          <value>Tuesday</value>
+          <value>Wednesday</value>
+          <value>Thursday</value>
+          <value>Friday</value>
+          <value>@ignore@</value>
+          <value>@ignore@</value>
+      </values>
+    </validate>
+    <validate column="DESCRIPTION">
+      <values>
+          <value>I hate Mondays!</value>
+          <value>Tuesday is sports day</value>
+          <value>The mid of the week</value>
+          <value>Thursday we play chess</value>
+          <value>Friday, the weekend is near!</value>
+          <value>@ignore@</value>
+          <value>@ignore@</value>
+      </values>
+    </validate>
+</sql>
+
+
+
+

For the validation of multiple rows the `<validate>` element is able to host a list of control values for a column. As you can see from the example above, you have to add a control value for each row in the result set. This also means that we have to take care of the total number of rows. Fortunately we can use the ignore placeholder, in order to skip the validation of a specific row in the result set. Functions and variables are supported as usual.

+
+
+ + + + + +
+ + +It is important, that the control values are defined in the correct order, because they are compared one on one with the actual result set coming from database query. You may need to add "order by" SQL expressions to get the right order of rows returned. If any of the values fails in validation or the total number of rows is not equal, the whole action will fail with respective validation errors. +
+
+
+
+

8.3.3. Transaction management

+
+

By default no transactions are used when Citrus executes SQL statements on a datasource. You can enable transaction management by selecting a transaction manager.

+
+
+
Java
+
+
$(sql()
+    .dataSource(myDataSource)
+    .transactionManager(transactionManager)
+    .transactionTimeout(15000)
+    .transactionIsolationLevel("ISOLATION_READ_COMMITTED")
+    .statement("DELETE FROM CUSTOMERS")
+    .statement("DELETE FROM ORDERS")
+);
+
+
+
+
XML
+
+
<sql datasource="someDataSource">
+    <transaction>
+        <manager>"someTransactionManager"</manager>
+        <timeout>"15000"</timeout>
+        <isolation-level>"ISOLATION_READ_COMMITTED"</isolation-level>
+    </transaction>
+    <statements>
+        <statement>DELETE FROM CUSTOMERS</statement>
+        <statement>DELETE FROM ORDERS</statement>
+    </statements>
+</sql>
+
+
+
+
YAML
+
+
- sql:
+    datasource: "myDataSource"
+    transaction:
+      manager: "someTransactionManager"
+      timeout: 15000
+      isolation-level: "ISOLATION_READ_COMMITTED"
+    statements:
+      - statement: "DELETE FROM CUSTOMERS"
+      - statement: "DELETE FROM ORDERS"
+
+
+
+
Spring XML
+
+
<sql datasource="myDataSource"
+     transaction-manager="someTransactionManager"
+     transaction-timeout="15000"
+     transaction-isolation-level="ISOLATION_READ_COMMITTED">
+    <statement>DELETE FROM CUSTOMERS</statement>
+    <statement>DELETE FROM ORDERS</statement>
+</sql>
+
+
+
+

The transaction-manager attribute references a Spring bean of type "org.springframework.transaction.PlatformTransactionManager". You can add this transaction manager to the Spring bean configuration:

+
+
+
Spring Bean
+
+
@Bean
+public TransactionManager myTransactionManager(DataSource myDataSource) {
+    return new DataSourceTransactionManager(myDataSource);
+}
+
+
+
+
Spring XML
+
+
<bean id="myTransactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager">
+  <constructor-arg ref="myDataSource"/>
+</bean>
+
+
+
+

The transaction isolation level as well as the transaction timeout get set on the transaction definition used during SQL statement execution. The isolation level should evaluate to one of the constants given in "org.springframework.transaction.TransactionDefinition". Valid isolation level are:

+
+
+
    +
  • +

    ISOLATION_DEFAULT

    +
  • +
  • +

    ISOLATION_READ_UNCOMMITTED

    +
  • +
  • +

    ISOLATION_READ_COMMITTED

    +
  • +
  • +

    ISOLATION_REPEATABLE_READ

    +
  • +
  • +

    ISOLATION_SERIALIZABLE

    +
  • +
+
+
+
+

8.3.4. Groovy SQL result set validation

+
+

Groovy provides great support for accessing Java list objects and maps. As a Java SQL result set is nothing but a list of map representations, where each entry in the list defines a row in the result set and each map entry represents the columns and values. So with Groovy’s list and map access we have great possibilities to validate a SQL result set - out of the box.

+
+
+
Java
+
+
$(sql()
+    .dataSource(myDataSource)
+    .query()
+    .statement("select ORDERTYPE, STATUS from ORDERS where ID='${orderId}'")
+    .validateScript("assert rows.size() == 2;" +
+            "assert rows[0].ID == '1';" +
+            "assert rows[0].STATUS == 'in progress';", "groovy")
+);
+
+
+
+
XML
+
+
<sql datasource="myDataSource">
+    <statements>
+        <statement>select ID from CUSTOMERS where NAME='${customerName}'</statement>
+        <statement>select ORDERTYPE, STATUS from ORDERS where ID='${orderId}'</statement>
+    </statements>
+    <validate>
+        <script type="groovy">
+          assert rows.size() == 2
+          assert rows[0].ID == '1'
+          assert rows[1].STATUS == 'in progress'
+          assert rows[1] == [ORDERTYPE:'SampleOrder', STATUS:'in progress']
+        </script>
+    </validate>
+</sql>
+
+
+
+
YAML
+
+
- sql:
+  dataSource: "myDataSource"
+  statements:
+    - statement: "select ID from CUSTOMERS where NAME='${customerName}'"
+    - statement: "select ORDERTYPE, STATUS from ORDERS where ID='${orderId}'"
+  validate:
+    - script:
+        type: "groovy"
+        value: |
+          assert rows.size() == 2
+          assert rows[0].ID == '1'
+          assert rows[1].STATUS == 'in progress'
+          assert rows[1] == [ORDERTYPE:'SampleOrder', STATUS:'in progress']
+
+
+
+
Spring XML
+
+
<sql datasource="myDataSource">
+    <statement>select ID from CUSTOMERS where NAME='${customerName}'</statement>
+    <statement>select ORDERTYPE, STATUS from ORDERS where ID='${orderId}'</statement>
+
+    <validate-script type="groovy">
+        assert rows.size() == 2
+        assert rows[0].ID == '1'
+        assert rows[1].STATUS == 'in progress'
+        assert rows[1] == [ORDERTYPE:'SampleOrder', STATUS:'in progress']
+    </validate-script>
+</sql>
+
+
+
+

As you can see Groovy provides fantastic access methods to the SQL result set. We can browse the result set with named column values and check the size of the result set. We are also able to search for an entry, iterate over the result set and have other helpful operations. For a detailed description of the list and map handling in Groovy my advice for you is to have a look at the official Groovy documentation.

+
+
+ + + + + +
+ + +In general other script languages do also support this kind of list and map access. For now we just have implemented the Groovy script support, but the framework is ready to work with all other great script languages out there, too (e.g. Scala, Clojure, Fantom, etc.). So if you prefer to work with another language join and help us implement those features. +
+
+
+
+

8.3.5. Save result set values

+
+

Now the validation of database entries is a very powerful feature but sometimes we simply do not know the persisted content values. The test may want to read database entries into test variables without validation. Citrus is able to do that with the following <extract> expressions:

+
+
+
Java
+
+
$(sql()
+    .dataSource(myDataSource)
+    .query()
+        .statement("select ID from CUSTOMERS where NAME='${customerName}'")
+        .statement("select STATUS from ORDERS where ID='${orderId}'")
+    .extract("ID", "customerId")
+    .extract("STATUS", "orderStatus")
+);
+
+
+
+
XML
+
+
<sql datasource="myDataSource">
+    <statements>
+        <statement>select ID from CUSTOMERS where NAME='${customerName}'</statement>
+        <statement>select STATUS from ORDERS where ID='${orderId}'</statement>
+    </statements>
+    <extract  column="ID" variable="customerId"/>
+    <extract  column="STATUS" variable="orderStatus"/>
+</sql>
+
+
+
+
YAML
+
+
- sql:
+  dataSource: "myDataSource"
+  statements:
+    - statement: "select ID from CUSTOMERS where NAME='${customerName}'"
+    - statement: "select ORDERTYPE, STATUS from ORDERS where ID='${orderId}'"
+  extract:
+    - column: "ID"
+      variable: "customerId"
+    - column: "STATUS"
+      variable: "orderStatus"
+
+
+
+
Spring XML
+
+
<sql datasource="testDataSource">
+    <statement>select ID from CUSTOMERS where NAME='${customerName}'</statement>
+    <statement>select STATUS from ORDERS where ID='${orderId}'</statement>
+
+    <extract column="ID" variable="${customerId}"/>
+    <extract column="STATUS" variable="${orderStatus}"/>
+</sql>
+
+
+
+

We can save the database column values directly to test variables. Of course you can combine the value extraction with the normal column validation described earlier in this chapter. Please keep in mind that we can not use these operations on result sets with multiple rows. Citrus will always use the first row in a result set.

+
+
+
+
+

8.4. Sleep

+
+

This action shows how to make the test framework execution stop for a given amount of time. +The attribute 'time' defines the amount of time to wait in seconds. +As shown in the next example decimal values are supported too. +When no waiting time is specified the default time of 50000 milliseconds applies.

+
+
+
Java
+
+
@CitrusTest
+public void sleepTest() {
+    $(sleep().seconds(3.5));
+
+    $(sleep().milliseconds(500));
+
+    $(sleep());
+}
+
+
+
+
XML
+
+
<test name="SleepTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <sleep seconds="3.5"/>
+
+        <sleep milliseconds="500"/>
+
+        <sleep/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: SleepTest
+actions:
+  - sleep:
+      seconds: "3.5"
+  - sleep:
+      milliseconds: "500"
+  - sleep: {}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SleepTest">
+        <actions>
+            <sleep seconds="3.5"/>
+
+            <sleep milliseconds="500"/>
+
+            <sleep/>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

When should somebody use this action? +To us this action was always very useful in case the test needed to wait until an application had done some work. +For example in some cases the application took some time to write some data into the database. +We waited then a small amount of time in order to avoid unnecessary test failures, because the test framework simply validated the database too early. +Or as another example the test may wait a given time until retry mechanisms are triggered in the tested application and then proceed with the test actions.

+
+
+
+

8.5. Delay

+
+

This action shows how to make the test framework execution stop for a given amount of time. +The attribute 'time' defines the amount of time to wait in seconds. +As shown in the next example decimal values are supported too. +When no waiting time is specified the default time of 50000 milliseconds applies.

+
+
+
Java
+
+
@CitrusTest
+public void delayTest() {
+    $(delay().seconds(3.5));
+
+    $(delay().milliseconds(500));
+
+    $(delay());
+}
+
+
+
+
XML
+
+
<test name="DelayTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <delay seconds="3.5"/>
+
+        <delay milliseconds="500"/>
+
+        <delay/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: DelayTest
+actions:
+  - delay:
+      seconds: "3.5"
+  - delay:
+      milliseconds: "500"
+  - delay: {}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="DelayTest">
+        <actions>
+            <delay seconds="3.5"/>
+
+            <delay milliseconds="500"/>
+
+            <delay/>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

When should somebody use this action? +To us this action was always very useful in case the test needed to wait until an application had done some work. +For example in some cases the application took some time to write some data into the database. +We waited then a small amount of time in order to avoid unnecessary test failures, because the test framework simply validated the database too early. +Or as another example the test may wait a given time until retry mechanisms are triggered in the tested application and then proceed with the test actions.

+
+
+
+

8.6. Java

+
+

The test framework is written in Java and runs inside a Java virtual machine. The functionality of calling other Java objects and methods in this same Java VM through Java Reflection is self-evident. With this action you can call any Java API available at runtime through the specified Java classpath.

+
+
+

The action syntax looks like follows:

+
+
+
Java
+
+
@CitrusTest
+public void javaActionTest() {
+    $(java("org.citrusframework.test.util.InvocationDummy")
+        .constructorArgs("Test Invocation")
+        .method("invoke")
+        .methodArgs(new String[] { "1","2" })
+    );
+
+    $(java(new InvocationDummy("Test Invocation"))
+        .method("invoke")
+        .methodArgs(new Object[] { 4, "Test Invocation", true })
+    );
+
+    $(java(InvocationDummy.class)
+        .method("main")
+        .methodArgs(new String[] { "4", "Test Invocation", "true" })
+    );
+}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JavaTest">
+        <actions>
+            <java class="org.citrusframework.test.util.InvocationDummy">
+                <constructor>
+                    <argument type="">Test Invocation</argument>
+                </constructor>
+                <method name="invoke">
+                    <argument type="String[]">1,2</argument>
+                </method>
+            </java>
+
+            <java class="org.citrusframework.test.util.InvocationDummy">
+                <constructor>
+                    <argument type="">Test Invocation</argument>
+                </constructor>
+                <method name="invoke">
+                    <argument type="int">4</argument>
+                    <argument type="String">Test Invocation</argument>
+                    <argument type="boolean">true</argument>
+                </method>
+            </java>
+
+            <java class="org.citrusframework.test.util.InvocationDummy">
+                <method name="main">
+                    <argument type="String[]">4,Test,true </argument>
+                </method>
+            </java>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The Java class is specified by fully qualified class name. Constructor arguments are added using the <constructor> element with a list of <argument> child elements. The type of the argument is defined within the respective attribute "type". By default the type would be String.

+
+
+

The invoked method on the Java object is simply referenced by its name. Method arguments do not bring anything new after knowing the constructor argument definition, do they?.

+
+
+

Method arguments support data type conversion too, even string arrays (useful when calling CLIs). In the third action in the example code you can see that colon separated strings are automatically converted to string arrays.

+
+
+

Simple data types are defined by their name (int, boolean, float etc.). Be sure that the invoked method and class constructor fit your arguments and vice versa, otherwise you will cause errors at runtime.

+
+
+

Besides instantiating a fully new object instance for a class how about reusing a bean instance available in Spring bean container. Simply use the ref attribute and refer to an existing bean in Spring application context.

+
+
+
Java
+
+
InvocationDummy invocationDummy = new InvocationDummy("Test Invocation");
+$(java(invocationDummy)
+    .method("invoke")
+    .methodArgs(new Object[] { 4, "Test Invocation", true })
+);
+
+
+
+
Spring XML
+
+
<java ref="invocationDummy">
+    <method name="invoke">
+        <argument type="int">4</argument>
+        <argument type="String">Test Invocation</argument>
+        <argument type="boolean">true</argument>
+    </method>
+</java>
+
+<bean id="invocationDummy" class="org.citrusframework.test.util.InvocationDummy"/>
+
+
+
+

The method is invoked on the Spring bean instance. This is very useful as you can inject other objects (e.g. via Autowiring) to the Spring bean instance before method invocation in test takes place. This enables you to execute any Java logic inside a test case.

+
+
+
+

8.7. Expect timeout

+
+

In some cases it might be necessary to validate that a message is not present on a destination. This means that this action expects a timeout when receiving a message from an endpoint destination. For instance the tester intends to ensure that no message is sent to a certain destination in a time period. In that case the timeout would not be a test aborting error but the expected behavior. And in contrast to the normal behavior when a message is received in the time period the test will fail with error.

+
+
+

In order to validate such a timeout situation the action <expectTimout> shall help. The usage is very simple as the following example shows:

+
+
+
Java
+
+
@Autowired
+@Qualifier("myEndpoint")
+private Endpoint myEndpoint;
+
+@CitrusTest
+public void expectTimeoutTest() {
+    $(expectTimeout()
+            .endpoint(myEndpoint)
+            .timeout(500)
+    );
+}
+
+
+
+
XML
+
+
<test name="ExpectTimeoutTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <expect-timeout endpoint="myEndpoint" wait="500"/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ExpectTimeoutTest
+actions:
+  - expect-timeout:
+      endpoint: "myEndpoint"
+      wait: "500"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ExpectTimeoutTest">
+        <actions>
+            <expect-timeout endpoint="myEndpoint" wait="500"/>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The action offers two attributes:

+
+
+ + + + + + + + + +
+endpoint + +

Reference to a message endpoint that will try to receive messages.

+
+wait/timeout + +

Time period to wait for messages to arrive

+
+
+
+

Sometimes you may want to add some selector on the timeout receiving action. This way you can very selective check on a message to not be present on a message destination. This is possible with defining a message selector on the test action as follows.

+
+
+
Java
+
+
@Autowired
+@Qualifier("myEndpoint")
+private Endpoint myEndpoint;
+
+@CitrusTest
+public void expectTimeoutTest() {
+    $(expectTimeout()
+            .endpoint(myEndpoint)
+            .timeout(500)
+            .selector("MessageId = '123456789'")
+    );
+}
+
+
+
+
XML
+
+
<test name="ExpectTimeoutTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <expect-timeout endpoint="myEndpoint" wait="500">
+            <selector>MessageId='123456789'</selector>
+        </expect-timeout>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ExpectTimeoutTest
+actions:
+  - expect-timeout:
+      endpoint: "myEndpoint"
+      wait: "500"
+      selector:
+        value: "MessageId='123456789'"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ExpectTimeoutTest">
+        <actions>
+            <expect-timeout endpoint="myEndpoint" wait="500">
+                <select>MessageId='123456789'<select/>
+            </expect-timeout>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+
+

8.8. Echo

+
+

The <echo> action prints messages to the console/logger. This functionality is useful when debugging test runs. The property "message" defines the text that is printed. Tester might use it to print out debug messages and variables as shown in the next code example:

+
+
+
Java
+
+
@CitrusTest
+public void echoTest() {
+    variable("date", "citrus:currentDate()");
+
+    $(echo().message("Hello Test Framework"));
+    $(echo().message("Current date is: ${date}"));
+}
+
+
+
+
XML
+
+
<test name="EchoTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="today" value="citrus:currentDate()"/>
+    </variables>
+    <actions>
+        <echo>
+            <message>Hello Test Framework</message>
+        </echo>
+
+        <echo>
+            <message>Current date is: ${date}</message>
+        </echo>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: EchoTest
+variables:
+  - name: "today"
+    value: "citrus:currentDate()"
+actions:
+  - echo:
+      message: "Hello Test Framework"
+  - echo:
+      message: "Current date is: ${date}"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="EchoTest">
+        <variables>
+            <variable name="today" value="citrus:currentDate()"/>
+        </variables>
+        <actions>
+            <echo>
+                <message>Hello Test Framework</message>
+            </echo>
+
+            <echo>
+                <message>Current date is: ${today}</message>
+            </echo>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Result on the console:

+
+
+
+
Hello Test Framework
+Current time is: 05.08.2008
+
+
+
+
+

8.9. Print

+
+

The <print> action prints messages to the console/logger. +This functionality is useful when debugging test runs. +The property "message" defines the text that is printed. +Tester might use it to print out debug messages and variables as shown the next code example:

+
+
+
Java
+
+
@CitrusTest
+public void printTest() {
+    variable("date", "citrus:currentDate()");
+
+    $(print().message("Hello Test Framework"));
+    $(print().message("Current date is: ${date}"));
+}
+
+
+
+
XML
+
+
<test name="PrintTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="today" value="citrus:currentDate()"/>
+    </variables>
+    <actions>
+        <print>
+            <message>Hello Test Framework</message>
+        </print>
+
+        <print>
+            <message>Current date is: ${date}</message>
+        </print>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: PrintTest
+variables:
+  - name: "today"
+    value: "citrus:currentDate()"
+actions:
+  - print:
+      message: "Hello Test Framework"
+  - print:
+      message: "Current date is: ${date}"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="PrintTest">
+        <variables>
+            <variable name="today" value="citrus:currentDate()"/>
+        </variables>
+        <actions>
+            <print>
+                <message>Hello Test Framework</message>
+            </print>
+
+            <print>
+                <message>Current date is: ${today}</message>
+            </print>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Result on the console:

+
+
+
+
Hello Test Framework
+Current time is: 05.08.2008
+
+
+
+
+

8.10. Stop time

+
+

Time measurement during a test can be very helpful. +The <trace-time> action creates and monitors multiple timelines. +The action offers the attribute id to identify a timeline. +The tester can of course use more than one timeline with different ids simultaneously.

+
+
+

Read the next example, and you will understand the mix of different timelines:

+
+
+
Java
+
+
@CitrusTest
+public void sleepTest() {
+    $(stopTime());
+
+    $(stopTime().id("time_line_id"));
+
+    $(sleep().seconds(3.5));
+
+    $(stopTime().id(" time_line_id "));
+
+    $(sleep().milliseconds(5000));
+
+    $(stopTime());
+
+    $(stopTime().id(" time_line_id "));
+
+}
+
+
+
+
XML
+
+
<test name="SleepTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <stop-time/>
+
+        <stop-time id="time_line_id"/>
+
+        <sleep seconds="3.5"/>
+
+        <stop-time id=" time_line_id "/>
+
+        <sleep milliseconds="5000"/>
+
+        <stop-time/>
+
+        <stop-time id=" time_line_id "/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: SleepTest
+actions:
+  - stop-time: {}
+
+  - stop-time:
+      id: "time_line_id"
+
+  - sleep:
+      seconds: "3.5"
+
+  - stop-time:
+      id: "time_line_id"
+
+  - sleep:
+      milliseconds: "5000"
+
+  - stop-time: {}
+
+  - stop-time:
+      id: "time_line_id"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SleepTest">
+        <actions>
+            <trace-time/>
+
+            <trace-time id="time_line_id"/>
+
+            <sleep seconds="3.5"/>
+
+            <trace-time id=" time_line_id "/>
+
+            <sleep milliseconds="5000"/>
+
+            <trace-time/>
+
+            <trace-time id=" time_line_id "/>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The test output looks like follows:

+
+
+
+
Starting TimeWatcher:
+Starting TimeWatcher: time_line_id
+TimeWatcher time_line_id after 3500 milliseconds
+TimeWatcher after 8500 seconds
+TimeWatcher time_line_id after 8500 milliseconds
+
+
+
+ + + + + +
+ + +Timeline ids should not exist as test variables before the action is called for the first time. This would break the timeline initialization. +
+
+
+ + + + + +
+ + +In case no timeline id is specified the framework will measure the time for a default timeline. To print out the current elapsed time for a timeline you simply have to place the +`<trace-time> action into the action chain again and again, using the respective timeline identifier. The elapsed time will be printed out to the console every time. +
+
+
+

Each timeline is stored as test variable in the test case. By default you will have the following test variables set for each timeline:

+
+
+ + + + + + + + + +
+CITRUS_TIMELINE + +

first timestamp of timeline

+
+CITRUS_TIMELINE_VALUE + +

latest time measurement value (time passed since first timestamp in milliseconds)

+
+
+
+

According to your timeline id you will get different test variable names. Also you can customize the time value suffix (default: _VALUE):

+
+
+
Java
+
+
@CitrusTest
+public void sleepTest() {
+    $(stopTime().id("custom_watcher").suffix("_1st"));
+
+    $(sleep());
+
+    $(stopTime().id(" custom_watcher ").suffix("_2nd"));
+}
+
+
+
+
XML
+
+
<test name="SleepTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <stop-time id="custom_watcher" suffix="_1st"/>
+
+        <sleep/>
+
+        <stop-time id="custom_watcher" suffix="_2nd"/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: SleepTest
+actions:
+  - stop-time:
+      id: "custom_watcher"
+      suffix: "_1st"
+
+  - sleep: {}
+
+  - stop-time:
+      id: "custom_watcher"
+      suffix: "_2nd"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SleepTest">
+        <actions>
+            <trace-time id="custom_watcher" suffix="_1st"/>
+
+            <sleep/>
+
+            <trace-time id="custom_watcher" suffix="_2nd"/>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

You will get following test variables set:

+
+
+ + + + + + + + + + + + + +
+custom_watcher + +

first timestamp of timeline

+
+custom_watcher_1st + +

time passed since start

+
+custom_watcher_2nd + +

time passed since start

+
+
+
+

Of course using the same suffix multiple times will overwrite the timestamps in test variables.

+
+
+
+

8.11. Create variables

+
+

As you know variables usually are defined at the beginning of the test case (test-variables). +It might also be helpful to reset existing variables as well as to define new variables during the test. +The action <create-variables> is able to declare new variables or overwrite existing ones.

+
+
+
Java
+
+
@CitrusTest
+public void createVariableTest() {
+    variable("myVariable", "12345");
+    variable("id", "54321");
+
+    $(echo()
+        .message("Current variable value: ${myVariable}"));
+
+    $(createVariable("myVariable", "${id}"));
+    $(createVariable("newVariable", "this is a test"));
+
+    $(echo()
+        .message("Current variable value: ${myVariable}"));
+
+    $(echo()
+        .message("New variable 'newVariable' has the value: ${newVariable}"));
+}
+
+
+
+
XML
+
+
<test name="CreateVariablesTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="myVariable" value="12345"/>
+        <variable name="id" value="54321"/>
+    </variables>
+    <actions>
+        <echo>
+            <message>Current variable value: ${myVariable}</message>
+        </echo>
+
+        <create-variables>
+            <variable name="myVariable" value="${id}"/>
+            <variable name="newVariable" value="'this is a test'"/>
+        </create-variables>
+
+        <echo>
+            <message>Current variable value: ${myVariable} </message>
+        </echo>
+
+        <echo>
+            <message>New variable 'newVariable' has the value: ${newVariable}</message>
+        </echo>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: "CreateVariablesTest"
+variables:
+  - name: "myVariable"
+    value: "12345"
+  - name: "id"
+    value: "54321"
+actions:
+  - echo:
+      message: "Current variable value: ${myVariable}"
+  - create-variable:
+      variables:
+        - name: "myVariable"
+          value: "${id}"
+        - name: "newVariable"
+          value: "this is a test"
+  - echo:
+      message: "Current variable value: ${myVariable}"
+  - echo:
+      message: "New variable 'newVariable' has the value: ${newVariable}"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="createVariablesTest">
+        <variables>
+            <variable name="myVariable" value="12345"/>
+            <variable name="id" value="54321"/>
+        </variables>
+        <actions>
+            <echo>
+                <message>Current variable value: ${myVariable}</message>
+            </echo>
+
+            <create-variables>
+                <variable name="myVariable" value="${id}"/>
+                <variable name="newVariable" value="'this is a test'"/>
+            </create-variables>
+
+            <echo>
+                <message>Current variable value: ${myVariable} </message>
+            </echo>
+
+            <echo>
+                <message>
+                  New variable 'newVariable' has the value: ${newVariable}
+                </message>
+            </echo>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +Please note the difference between the variable() method and the createVariable() method. +The first initializes the test case with the test variables. +So all variables defined with this method are valid from the very beginning of the test. +In contrary to that the createVariable() is executed within the test action chain. The newly created variables are then valid for the rest of the test. +Trailing actions can reference the variables as usual with the variable expression. +
+
+
+
+

8.12. Trace variables

+
+

You already know the <echo> action that prints messages to the console or logger. The <trace-variables> action is specially designed to trace all currently valid test variables to the console. This was mainly used by us for debug reasons. The usage is quite simple:

+
+
+
Java
+
+
@CitrusTest
+public void traceVariablesTest() {
+    variable("myVariable", "12345");
+    variable("nextVariable", "54321");
+
+    $(traceVariables("myVariable", "nextVariable"));
+    $(traceVariables());
+}
+
+
+
+
XML
+
+
<test name="TraceVariablesTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="myVariable" value="12345"/>
+        <variable name="nextVariable" value="54321"/>
+    </variables>
+    <actions>
+        <trace>
+            <variable name="myVariable"/>
+            <variable name="nextVariable"/>
+        </trace>
+
+        <trace-variables/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TraceVariablesTest
+variables:
+  - name: "myVariable"
+    value: "12345"
+  - name: "nextVariable"
+    value: "54321"
+actions:
+  - trace:
+      variables:
+          - name: "myVariable"
+          - name: "nextVariable"
+  - trace: {}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="TraceVariablesTest">
+        <variables>
+            <variable name="myVariable" value="12345"/>
+            <variable name="nextVariable" value="54321"/>
+        </variables>
+        <actions>
+            <trace-variables>
+                <variable name="myVariable"/>
+                <variable name="nextVariable"/>
+            </trace-variables>
+
+            <trace-variables/>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Simply add the <trace-variables> action to your action chain and all variables will be printed out to the console. You are able to define a special set of variables by using the <variable> child elements. See the output that was generated by the test example above:

+
+
+
+
Current value of variable myVariable = 12345
+Current value of variable nextVariable = 54321
+
+
+
+
+

8.13. Transform

+
+

The `<transform>` action transforms XML fragments with XSLT in order to construct various XML representations. The transformation result is stored into a test variable for further usage. The property xml-data defines the XML source, that is going to be transformed, while xslt-data defines the XSLT transformation rules. The attribute variable specifies the target test variable which receives the transformation result. The tester might use the action to transform XML messages as shown in the next code example:

+
+
+
Java
+
+
@CitrusTest
+public void transformTest() {
+    $(transform()
+        .variable("result")
+        .source("""
+            <TestRequest>
+                <Message>Hello World!</Message>
+            </TestRequest>
+        """)
+        .xslt("""
+            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+              <xsl:template match="/">
+                  <html>
+                      <body>
+                          <h2>Test Request</h2>
+                          <p>Message: <xsl:value-of select="TestRequest/Message"/></p>
+                      </body>
+                  </html>
+              </xsl:template>
+            </xsl:stylesheet>
+        """)
+    );
+
+    $(echo().message("${result}"));
+}
+
+
+
+
XML
+
+
<test name="TransformTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <transform variable="result">
+            <source>
+              <![CDATA[
+                  <TestRequest>
+                      <Message>Hello World!</Message>
+                  </TestRequest>
+              ]]>
+            </source>
+            <xslt>
+              <![CDATA[
+                  <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+                      <xsl:template match="/">
+                          <html>
+                              <body>
+                                  <h2>Test Request</h2>
+                                  <p>Message: <xsl:value-of select="TestRequest/Message"/></p>
+                              </body>
+                          </html>
+                      </xsl:template>
+                  </xsl:stylesheet>
+              ]]>
+            </xslt>
+        </transform>
+        <echo>
+          <message>${result}</message>
+        </echo>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TransformTest
+actions:
+  - transform:
+      variable: result
+      source:
+        value: |
+          <TestRequest>
+              <Message>Hello World!</Message>
+          </TestRequest>
+      xslt:
+        value: |
+          <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+              <xsl:template match="/">
+              <html>
+                  <body>
+                      <h2>Test Request</h2>
+                      <p>Message: <xsl:value-of select="TestRequest/Message"/></p>
+                  </body>
+              </html>
+              </xsl:template>
+          </xsl:stylesheet>
+  - echo:
+      message: '${result}'
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="TransformTest">
+        <actions>
+            <transform variable="result">
+                <xml-data>
+                  <![CDATA[
+                      <TestRequest>
+                          <Message>Hello World!</Message>
+                      </TestRequest>
+                  ]]>
+                </xml-data>
+                <xslt-data>
+                    <![CDATA[
+                    <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
+                        <xsl:template match="/">
+                          <html>
+                              <body>
+                                  <h2>Test Request</h2>
+                                  <p>Message: <xsl:value-of select="TestRequest/Message"/></p>
+                              </body>
+                          </html>
+                        </xsl:template>
+                    </xsl:stylesheet>
+                    ]]>
+                </xslt-data>
+            </transform>
+            <echo>
+              <message>${result}</message>
+            </echo>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The transformation above results to:

+
+
+
+
  <html>
+      <body>
+          <h2>Test Request</h2>
+          <p>Message: Hello World!</p>
+      </body>
+  </html>
+
+
+
+

In the example we used CDATA sections to define the transformation source as well as the XSL transformation rules. +As usual you can also use external file resources here. +The transform action with external file resources looks like follows:

+
+
+
Java
+
+
@CitrusTest
+public void transformTest() {
+    $(transform()
+        .variable("result")
+        .source(new ClassPathResource("org/citrusframework/actions/transform-source.xml"))
+        .xslt(new ClassPathResource("org/citrusframework/actions/transform.xslt"))
+    );
+
+    $(echo().message("${result}"));
+}
+
+
+
+
XML
+
+
<test name="TransformTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <transform variable="result">
+            <source file="classpath:transform-source.xml"/>
+            <xslt file="classpath:transform.xslt"/>
+        </transform>
+        <echo>
+          <message>${result}</message>
+        </echo>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TransformTest
+actions:
+  - transform:
+      variable: result
+      source:
+        file: "classpath:transform-source.xml"
+      xslt:
+        file: "classpath:transform.xslt"
+  - echo:
+      message: '${result}'
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="TransformTest">
+        <actions>
+            <transform variable="result">
+                <xml-resource file="classpath:transform-source.xml"/>
+                <xslt-resource file="classpath:transform.xslt"/>
+            </transform>
+            <echo>
+              <message>${result}</message>
+            </echo>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Defining multi-line Strings with nested quotes is no fun in Java. +So you may want to use external file resources for your scripts as shown in the second part of the example. +In fact, you could also use script languages like Groovy or Scala that have much better support for multi-line Strings.

+
+
+
+

8.14. Groovy script execution

+
+

Groovy is an agile dynamic language for the Java Platform. +Groovy ships with a lot of very powerful features and fits perfectly with Java as it is based on Java and runs inside the JVM.

+
+
+ + + + + +
+ + +The Groovy test action support lives in a separate module. +You need to add the module to your project to use the functionality. +
+
+
+
citrus-groovy dependency module
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-groovy</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

The Citrus Groovy support might be the entrance for you to write customized test actions. +You can easily execute Groovy code inside a test case, just like a normal test action. +The whole test context with all variables is available to the Groovy action. This means someone can change variable values or create new variables very easily.

+
+
+

Let’s have a look at some examples in order to understand the possible Groovy code interactions in Citrus:

+
+
+
Java
+
+
@CitrusTest
+public void GroovyTest() {
+    $(groovy()
+        .script("println 'Hello Citrus'")
+    );
+
+    $(groovy()
+        .script("println 'The variable is: ${time}'")
+    );
+
+    $(groovy()
+        .scriptResourcePath("classpath:org/citrusframework/script/example.groovy")
+    );
+}
+
+
+
+
XML
+
+
<test name="GroovyTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="time" value="citrus:currentDate()"/>
+    </variables>
+    <actions>
+        <groovy>
+            println 'Hello Citrus'
+        </groovy>
+        <groovy>
+            println 'The variable is: ${time}'
+        </groovy>
+        <groovy file="classpath:org/citrusframework/script/example.groovy"/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: GroovyTest
+variables:
+  - name: "time"
+    value: "citrus:currentDate()"
+actions:
+  - groovy:
+      script: "println 'Hello Citrus'"
+  - groovy:
+      script: |
+        println 'The variable is: ${time}'
+  - groovy:
+      file: classpath:org/citrusframework/script/example.groovy
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="GroovyTest">
+      <variables>
+        <variable name="time" value="citrus:currentDate()"/>
+      </variables>
+      <actions>
+        <groovy>
+            println 'Hello Citrus'
+        </groovy>
+        <groovy>
+            println 'The variable is: ${time}'
+        </groovy>
+        <groovy resource="classpath:org/citrusframework/script/example.groovy"/>
+      </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

As you can see it is possible to write Groovy code directly into the test case. Citrus will interpret and execute the Groovy code at runtime. As usual nested variable expressions are replaced with respective values. In general this is done in advance before the Groovy code is interpreted. For more complex Groovy code sections which grow in lines of code you can also reference external file resources.

+
+
+

After this basic Groovy code usage inside a test case we might be interested accessing the whole TestContext. The TestContext Java object holds all test variables and function definitions for the test case and can be referenced in Groovy code via simple naming convention. Just access the object reference 'context' and you are able to manipulate the TestContext (e.g. setting a new variable which is directly ready for use in following test actions).

+
+
+
Java
+
+
@CitrusTest
+public void GroovyTest() {
+    $(groovy()
+        .script("""
+            context.setVariable("greetingText","Hello Citrus")
+            println context.getVariable("greetingText")
+        """)
+    );
+
+    $(echo()
+        .message("New variable: ${greetingText}")
+    );
+}
+
+
+
+
XML
+
+
<test name="GroovyTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <groovy>
+            context.setVariable("greetingText","Hello Citrus")
+            println context.getVariable("greetingText")
+        </groovy>
+        <echo>
+            <message>New variable: ${greetingText}</message>
+        </echo>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: GroovyTest
+actions:
+  - groovy:
+      script: |
+        context.setVariable("greetingText","Hello Citrus")
+        println context.getVariable("greetingText")
+  - echo:
+      message: "New variable: ${greetingText}"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="groovyTest">
+      <actions>
+        <groovy>
+          context.setVariable("greetingText","Hello Citrus")
+          println context.getVariable("greetingText")
+        </groovy>
+
+        <echo>
+          <message>New variable: ${greetingText}</message>
+        </echo>
+      </actions>
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +The implicit TestContext access that was shown in the previous sample works with a default Groovy script template provided by Citrus. The Groovy code you write in the test case is automatically surrounded with a Groovy script which takes care of handling the TestContext. The default template looks like follows: +
+
+
+
Groovy script template
+
+
import org.citrusframework.*
+import org.citrusframework.variable.*
+import org.citrusframework.context.TestContext
+import org.citrusframework.script.GroovyAction.ScriptExecutor
+
+public class GScript implements ScriptExecutor {
+    public void execute(TestContext context) {
+        @SCRIPTBODY@
+    }
+}
+
+
+
+

Your code is placed in substitution to the @SCRIPTBODY@ placeholder. Now you might understand how Citrus handles the context automatically. You can also write your own script templates making more advanced usage of other Java APIs and Groovy code. Just add a script template path to the test action like this:

+
+
+
Java
+
+
$(groovy()
+    .template("classpath:my-custom-template.groovy")
+    .script("...")
+);
+
+
+
+
XML
+
+
<groovy script-template="classpath:my-custom-template.groovy">
+    <!-- ... -->
+</groovy>
+
+
+
+
YAML
+
+
- groovy:
+  script-template: "classpath:my-custom-template.groovy"
+  script: "..."
+
+
+
+
Spring XML
+
+
<groovy script-template="classpath:my-custom-template.groovy">
+  <!-- ... -->
+</groovy>
+
+
+
+

On the other hand you can disable the automatic script template wrapping in your action at all:

+
+
+
Java
+
+
$(groovy()
+    .useScriptTemplate(false)
+    .script("println 'Just use some Groovy code'")
+);
+
+
+
+
XML
+
+
<groovy use-script-template="false">
+    println 'Just use some Groovy code'
+</groovy>
+
+
+
+
YAML
+
+
- groovy:
+  use-script-template: false
+  script: "println 'Just use some Groovy code'"
+
+
+
+
Spring XML
+
+
<groovy use-script-template="false">
+  println 'Just use some Groovy code'
+</groovy>
+
+
+
+

The next example deals with advanced Groovy code and writing whole classes. We write a new Groovy class which implements the ScriptExecutor interface offered by Citrus. This interface defines a special execute method and provides access to the whole TestContext for advanced test variables access.

+
+
+
Java
+
+
@CitrusTest
+public void GroovyTest() {
+    variable("time", "citrus:currentDate()");
+
+    $(groovy()
+        .script("""
+            import org.citrusframework.*
+            import org.citrusframework.variable.*
+            import org.citrusframework.context.TestContext
+            import org.citrusframework.script.GroovyAction.ScriptExecutor
+
+            public class GScript implements ScriptExecutor {
+                public void execute(TestContext context) {
+                    println context.getVariable("time")
+                }
+            }
+        """)
+    );
+}
+
+
+
+
XML
+
+
<test name="GroovyTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="time" value="citrus:currentDate()"/>
+    </variables>
+    <actions>
+        <groovy>
+        <![CDATA[
+            import org.citrusframework.*
+            import org.citrusframework.variable.*
+            import org.citrusframework.context.TestContext
+            import org.citrusframework.script.GroovyAction.ScriptExecutor
+
+            public class GScript implements ScriptExecutor {
+                public void execute(TestContext context) {
+                    println context.getVariable("time")
+                }
+            }
+        ]]>
+        </groovy>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: GroovyTest
+variables:
+  - name: time
+    value: citrus:currentDate()
+actions:
+  - groovy:
+      script: |
+        import org.citrusframework.*
+        import org.citrusframework.variable.*
+        import org.citrusframework.context.TestContext
+        import org.citrusframework.script.GroovyAction.ScriptExecutor
+
+        public class GScript implements ScriptExecutor {
+            public void execute(TestContext context) {
+                println context.getVariable("time")
+            }
+        }
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="groovyTest">
+      <variables>
+        <variable name="time" value="citrus:currentDate()"/>
+      </variables>
+      <actions>
+        <groovy>
+          <![CDATA[
+            import org.citrusframework.*
+            import org.citrusframework.variable.*
+            import org.citrusframework.context.TestContext
+            import org.citrusframework.script.GroovyAction.ScriptExecutor
+
+            public class GScript implements ScriptExecutor {
+                public void execute(TestContext context) {
+                    println context.getVariable("time")
+                }
+            }
+          ]]>
+        </groovy>
+      </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Implementing the ScriptExecutor interface in a custom Groovy class is applicable for very special test context manipulations as you are able to import and use other Java API classes in this code.

+
+
+
+

8.15. Failing the test

+
+

The fail action will generate an exception in order to terminate the test case with error. The test case will therefore not be successful in the reports.

+
+
+

The user can specify a custom error message for the exception in order to describe the error cause. Here is a very simple example to clarify the syntax:

+
+
+
Java
+
+
@CitrusTest
+public void failTest() {
+    $(fail().message("Test will fail with custom message"));
+}
+
+
+
+
XML
+
+
<test name="FailTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <fail message="Test will fail with custom message"/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: FailTest
+actions:
+  - fail:
+      message: "Test will fail with custom message"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="FailTest">
+        <actions>
+            <fail message="Test will fail with custom message"/>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Test results:

+
+
+
+
Execution of test: failTest failed! Nested exception is:
+org.citrusframework.exceptions.CitrusRuntimeException:
+Test will fail with custom message
+
+[...]
+
+CITRUS TEST RESULTS
+
+failTest          : failed - Exception is: Test will fail with custom message
+
+Found 1 test cases to execute
+Skipped 0 test cases (0.0%)
+Executed 1 test cases, containing 3 actions
+Tests failed:        1 (100.0%)
+Tests successfully:  0 (0.0%)
+
+
+
+

While using the Java DSL you can also raise arbitrary Java exceptions and let the test fail.

+
+
+
Java
+
+
@CitrusTest
+public void throwExceptionSample() {
+    // some test actions
+
+    throw new ValidationException("This test should fail now");
+}
+
+
+
+

The validation exception above will cause the test to fail as expected. However you may consider using the fail action to raise errors because this ensures to properly report the error in the Citrus test reports.

+
+
+
+

8.16. Input

+
+

During the test case execution it is possible to read some user input from the command line. The test execution will stop and wait for keyboard inputs over the standard input stream. The user has to type the input and end it with the return key.

+
+
+

The user input is stored to the respective variable value.

+
+
+
Java
+
+
@CitrusTest
+public void inputActionTest() {
+    variable("userinput", "");
+    variable("userinput1", "");
+    variable("userinput2", "y");
+    variable("userinput3", "yes");
+    variable("userinput4", "");
+
+    $(input());
+
+    $(echo().message("user input was: ${userinput}"));
+
+    $(input().message("Now press enter:").result("userinput1"));
+
+    $(echo().message("user input was: ${userinput1}"));
+
+    $(input().message("Do you want to continue?").answers("y", "n").result("userinput2"));
+
+    $(echo().message("user input was: ${userinput2}"));
+
+    $(input().message("Do you want to continue?").answers("yes", "no").result("userinput3"));
+
+    $(echo().message("user input was: ${userinput3}"));
+
+    $(input().result("userinput4"));
+
+    $(echo().message("user input was: ${userinput4}"));
+}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="InputTest">
+        <variables>
+            <variable name="userinput" value=""></variable>
+            <variable name="userinput1" value=""></variable>
+            <variable name="userinput2" value="y"></variable>
+            <variable name="userinput3" value="yes"></variable>
+            <variable name="userinput4" value=""></variable>
+        </variables>
+        <actions>
+            <input/>
+            <echo><message>user input was: ${userinput}</message></echo>
+
+            <input message="Now press enter:" variable="userinput1"/>
+            <echo><message>user input was: ${userinput1}</message></echo>
+
+            <input message="Do you want to continue?"
+                      valid-answers="y/n" variable="userinput2"/>
+            <echo><message>user input was: ${userinput2}</message></echo>
+
+            <input message="Do you want to continue?"
+                      valid-answers="yes/no" variable="userinput3"/>
+            <echo><message>user input was: ${userinput3}</message></echo>
+
+            <input variable="userinput4"/>
+            <echo><message>user input was: ${userinput4}</message></echo>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

As you can see the input action is customizable with a prompt message that is displayed to the user and some valid answer possibilities. The user input is stored to a test variable for further use in the test case. In detail the input action offers following attributes:

+
+
+ + + + + + + + + + + + + +
+message + +

message displayed to the user

+
+valid-answers + +

possible valid answers separated with '/' character

+
+variable + +

result variable name holding the user input (default = ${userinput})

+
+
+
+

When the user input is restricted to a set of valid answers the input validation of course can fail due to mismatch. This is the case when the user provides some input not matching the valid answers given. In this case the user is again asked to provide valid input. The test action will continue to ask for valid input until a valid answer is given.

+
+
+ + + + + +
+ + +User inputs may not fit to automatic testing in terms of continuous integration testing where no user is present to type in the correct answer over the keyboard. In this case you can always skip the user input in advance by specifying a variable that matches the user input variable name. As the user input variable is then already present the user input is missed out and the test proceeds automatically. +
+
+
+
+

8.17. Load Properties

+
+

You are able to load properties from external property files and store them as test variables. The action will require a file resource either from class path or file system in order to read the property values.

+
+
+

Let us look at an example to get an idea about this action:

+
+
+
Content of load.properties
+
+
username=Mickey Mouse
+greeting.text=Hello Test Framework
+
+
+
+
Java
+
+
@CitrusTest
+public void loadPropertiesTest() {
+    $(load().filePath("file:tests/resources/load.properties"));
+}
+
+
+
+
XML
+
+
<test name="LoadPropertiesTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <load>
+            <properties file="file:tests/resources/load.properties"/>
+        </load>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: LoadPropertiesTest
+actions:
+  - load:
+      properties:
+        file: "file:tests/resources/load.properties"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="LoadPropertiesTest">
+        <actions>
+            <load>
+                <properties file="file:tests/resources/load.properties"/>
+            </load>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+
Output
+
+
Current value of variable username = Mickey Mouse
+Current value of variable greeting.text = Hello Test Framework
+
+
+
+

The action will load all available properties in the file load.properties and store them to the test case as local variables.

+
+
+ + + + + +
+ + +Please be aware of the fact that existing variables are overwritten! +
+
+
+
+

8.18. Purging JMS destinations

+
+

Purging JMS destinations during the test run is quite essential. Different test cases can influence each other when sending messages to the same JMS destinations. A test case should only receive those messages that actually belong to it.

+
+
+

Therefore, it is a good idea to purge all JMS queue destinations between the test cases. Obsolete messages that are stuck in a JMS queue for some reason are then removed so that the following test case is not offended.

+
+
+
Java
+
+
@Autowired
+@Qualifier("connectionFactory")
+private ConnectionFactory connectionFactory;
+
+@CitrusTest
+public void purgeJmsQueuesTest() {
+    $(purgeQueues()
+        .connectionFactory(connectionFactory)
+        .queue("JMS.Queue.1")
+        .queue("JMS.Queue.2")
+        .queue("JMS.Queue.3")
+    );
+}
+
+
+
+
XML
+
+
<test name="PurgeJmsQueuesTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <purge-jms-queues connection-factory="connectionFactory">
+            <queue name="JMS.Queue.1"/>
+            <queue name="JMS.Queue.2"/>
+            <queue name="JMS.Queue.3"/>
+        </purge-jms-queues>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: PurgeJmsQueuesTest
+actions:
+  - purge-queues:
+      connection-factory: "connectionFactory"
+      queues:
+        - "JMS.Queue.1"
+        - "JMS.Queue.2"
+        - "JMS.Queue.3"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="purgeJmsQueuesTest">
+      <actions>
+          <jms:purge-jms-queues connection-factory="connectionFactory">
+              <jms:queue name="JMS.Queue.1"/>
+              <jms:queue name="JMS.Queue.2"/>
+              <jms:queue name="JMS.Queue.3"/>
+          </jms:purge-jms-queues>
+      </actions>
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +Citrus provides special support for JMS related features when using the Spring XML bean integration. You have to activate those JMS features in our test case by adding a special "jms" namespace and schema definition location to the test case XML. +
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+        xmlns:spring="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:jms="http://www.citrusframework.org/schema/jms/testcase"
+        xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/testcase
+        http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd
+        http://www.citrusframework.org/schema/jms/testcase
+        http://www.citrusframework.org/schema/jms/testcase/citrus-jms-testcase.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

Notice that we have referenced the jms namespace when using the purge-jms-queues test action.

+
+
+

Purging the JMS queues in every test case is quite exhausting because every test case needs to define a purging action at the very beginning of the test. Fortunately the test suite definition offers tasks to run before, between and after the test cases which should ease up these tasks a lot. The test suite offers a very simple way to purge the destinations between the tests. See testsuite-before-test for more information about this.

+
+
+

As you can see in the next example it is quite easy to specify a group of destinations in the Spring configuration that get purged before a test is executed.

+
+
+
Spring Bean
+
+
@Bean
+public SequenceBeforeTest beforeTest() {
+    return SequenceBeforeTest.Builder.beforeTest()
+            .actions(
+                purgeQueues()
+                    .queue("fooChannel")
+                    .queue("barChannel")
+            );
+}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
+              xmlns:citrus="http://www.citrusframework.org/schema/config">
+    <citrus:before-test id="purgeBeforeTest">
+        <citrus:actions>
+            <jms:purge-jms-queues>
+                <jms:queue name="fooChannel"/>
+                <jms:queue name="barChannel"/>
+            </jms:purge-jms-queues>
+        </citrus:actions>
+    </citrus:before-test>
+</spring:beans>
+
+
+
+ + + + + +
+ + +Please keep in mind that the JMS related configuration components in Citrus belong to a separate XML namespace jms: . We have to add this namespace declaration to each test case XML and Spring bean XML configuration file as described at the very beginning of this section. +
+
+
+

The syntax for purging the destinations is the same as we used it inside the test case. So now we are able to purge JMS destinations with given destination names. But sometimes we do not want to rely on queue or topic names as we retrieve destinations over JNDI for instance. We can deal with destinations coming from JNDI lookup like follows:

+
+
+
Spring XML
+
+
<jee:jndi-lookup id="jmsQueueHelloRequestIn" jndi-name="jms/jmsQueueHelloRequestIn"/>
+<jee:jndi-lookup id="jmsQueueHelloResponseOut" jndi-name="jms/jmsQueueHelloResponseOut"/>
+
+<citrus:before-test id="purgeBeforeTest">
+    <citrus:actions>
+        <jms:purge-jms-queues>
+            <jms:queue ref="jmsQueueHelloRequestIn"/>
+            <jms:queue ref="jmsQueueHelloResponseOut"/>
+        </jms:purge-jms-queues>
+    </citrus:actions>
+</citrus:before-test>
+
+
+
+

We just use the attribute 'ref' instead of 'name' and Citrus is looking for a bean reference for that identifier that resolves to a JMS destination. You can use the JNDI bean references inside a test case, too.

+
+
+
Java
+
+
@Autowired
+@Qualifier("jmsQueue1")
+private Queue jmsQueue1;
+
+@Autowired
+@Qualifier("jmsQueue2")
+private Queue jmsQueue2;
+
+@CitrusTest
+public void purgeJmsQueuesTest() {
+    $(purgeQueues()
+        .queue(jmsQueue1)
+        .queue(jmsQueue1)
+    );
+}
+
+
+
+
XML
+
+
<test name="PurgeJmsQueuesTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <purge-jms-queues>
+            <queue ref="jmsQueue1"/>
+            <queue ref="jmsQueue2"/>
+        </purge-jms-queues>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: PurgeJmsQueuesTest
+actions:
+  - purge-queues:
+      queue: jmsQueue1
+  - purge-queues:
+      queue: jmsQueue2
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="purgeJmsQueuesTest">
+      <actions>
+          <jms:purge-jms-queues>
+              <jms:queue ref="jmsQueue1"/>
+              <jms:queue ref="jmsQueue2"/>
+          </jms:purge-jms-queues>
+      </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Of course you can use queue object references also in Java DSL test cases. Here we easily can use Spring’s dependency injection with autowiring to get the object references from the IoC container.

+
+
+ + + + + +
+ + +You can mix queue name and queue object references as you like within one single purge queue test action. +
+
+
+
+

8.19. Purging Spring Message Channels

+
+

The Spring Integration project defines message channels as a central messaging destination. +These are in-memory message queues holding messages for test cases. +Messages that are queued on a channel may become obsolete during a test run, especially when test cases fail and stop in their message consumption. +Purging these message channel destinations is essential in these scenarios in order to avoid bad influence on upcoming test cases. +Each test case should only receive those messages that actually refer to the test model. +Therefore, it is a good idea to purge all message channel destinations between the test cases. +Obsolete messages that get stuck in a message channel destination for some reason are then removed so that upcoming test case are not broken.

+
+
+

Following action definition purges all messages from a list of message channels:

+
+
+
Java
+
+
@Autowired
+@Qualifier("someChannelName")
+private MessageChannel someChannel;
+
+@Autowired
+@Qualifier("anotherChannelName")
+private MessageChannel anotherChannel;
+
+@CitrusTest
+public void purgeChannelTest() {
+    $(purgeChannels()
+        .channelResolver(channelResolver)
+        .channelNames("someChannelName", "anotherChannelName")
+    );
+
+    $(purgeChannels()
+        .channels(someChannel, anotherChannel)
+    );
+}
+
+
+
+
XML
+
+
<test name="PurgeChannelTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <purge-channels channel-resolver="channelResolver">
+            <channel name="someChannelName"/>
+            <channel name="anotherChannelName"/>
+        </purge-channels>
+
+        <purge-channels>
+            <channel ref="someChannel"/>
+            <channel ref="anotherChannel"/>
+        </purge-channels>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: PurgeChannelTest
+actions:
+  - purge-channels:
+      channel-resolver: "channelResolver"
+      channels:
+        - "someChannelName"
+        - "anotherChannelName"
+  - purge-channels:
+      channel: someChannel
+  - purge-channels:
+      channel: anotherChannel
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="PurgeChannelTest">
+      <actions>
+          <purge-channel>
+              <channel name="someChannelName"/>
+              <channel name="anotherChannelName"/>
+          </purge-channel>
+
+          <purge-channel>
+              <channel ref="someChannel"/>
+              <channel ref="anotherChannel"/>
+          </purge-channel>
+      </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

As you can see the test action supports channel names as well as channel references to Spring bean instances. +When using channel references you refer to the bean id or name in your application context.

+
+
+

The channel resolver reference is optional and points to a channel resolver that is used to resolve names to actual channel instances. +By default, Citrus will automatically use a Spring application context channel resolver, so you just have to use the respective Spring bean names that are configured in the Spring application context. +However, setting a custom channel resolver may be adequate for you in some special cases.

+
+
+

Message selectors enable you to selectively remove messages from the destination. +All messages that pass the message selection logic get deleted the other messages will remain unchanged inside the channel destination. The message selector is a Spring bean that implements a special message selector interface. A possible implementation could be a selector deleting all messages that are older than five seconds:

+
+
+
Message selector implementation
+
+
import org.springframework.messaging.Message;
+import org.springframework.integration.core.MessageSelector;
+
+public class TimeBasedMessageSelector implements MessageSelector {
+
+    public boolean accept(Message<?> message) {
+        if (System.currentTimeMillis() - message.getHeaders().getTimestamp() > 5000) {
+            return false;
+        } else {
+            return true;
+        }
+    }
+}
+
+
+
+ + + + + +
+ + +The message selector returns false for those messages that should be deleted from the channel! +
+
+
+

You simply define the message selector as a new Spring bean in the Citrus application context and reference it in your test action property.

+
+
+
Spring Bean
+
+
@Bean
+public MessageSelector specialMessageSelector() {
+    return new TimeBasedMessageSelector();
+}
+
+
+
+
Spring XML
+
+
<bean id="specialMessageSelector"
+    class="org.citrusframework.special.TimeBasedMessageSelector"/>
+
+
+
+

Now let us have a look at how you reference the selector in your test case:

+
+
+
Java
+
+
@CitrusTest
+public void purgeChannelTest() {
+    $(purgeChannels()
+        .selector(specialMessageSelector)
+        .channels(someChannel, anotherChannel)
+    );
+}
+
+
+
+
XML
+
+
<test name="PurgeChannelTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <purge-channels message-selector="specialMessageSelector">
+            <channel ref="someChannel"/>
+            <channel ref="anotherChannel"/>
+        </purge-channels>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: PurgeChannelTest
+actions:
+  - purge-channels:
+      message-selector: "specialMessageSelector"
+      channels:
+        - "someChannel"
+        - "anotherChannel"
+
+
+
+
Spring XML
+
+
<purge-channel message-selector="specialMessageSelector">
+  <channel ref="someChannel"/>
+  <channel red="anotherChannel"/>
+</purge-channel>
+
+
+
+

In the examples above we use a message selector implementation that gets injected via Spring IoC container.

+
+
+

Purging channels in each test case every time is quite exhausting because every test case needs to define a purging action at the very beginning of the test. A more straight forward approach would be to introduce some purging action which is automatically executed before each test. Fortunately the Citrus test suite offers a very simple way to do this. It is described in testsuite-before-test.

+
+
+

When using the special action sequence before test cases we are able to purge channel destinations every time a test case executes. See the upcoming example to find out how the action is defined in the Spring configuration application context.

+
+
+
Spring Bean
+
+
@Bean
+public SequenceBeforeTest beforeTest() {
+    return SequenceBeforeTest.Builder.beforeTest()
+            .actions(
+                purgeChannels()
+                    .channel("fooChannel")
+                    .channel("barChannel")
+            );
+}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
+              xmlns:citrus="http://www.citrusframework.org/schema/config">
+    <citrus:before-test id="purgeBeforeTest">
+        <citrus:actions>
+            <purge-channel>
+                <channel name="fooChannel"/>
+                <channel name="barChannel"/>
+            </purge-channel>
+        </citrus:actions>
+    </citrus:before-test>
+</spring:beans>
+
+
+
+

Just use this before-test bean in the Spring bean application context and the purge channel action is active. Obsolete messages that are waiting on the message channels for consumption are purged before the next test in line is executed.

+
+
+ + + + + +
+ + +Purging message channels becomes also very interesting when working with server instances in Citrus. Each server component automatically has an inbound message channel where incoming messages are stored internally. So if you need to clean up a server that has already stored some incoming messages you can do this easily by purging the internal message channel. The message channel follows a naming convention {serverName}.inbound where {serverName} is the Spring bean name of the Citrus server endpoint component. If you purge this internal channel in a before test nature you are sure that obsolete messages on a server instance get purged before each test is executed. +
+
+
+
+

8.20. Purging endpoints

+
+

Citrus works with message endpoints when sending and receiving messages. +In general endpoints can also queue messages. +This is especially the case when using JMS message endpoints or any server endpoint component in Citrus. +These are in-memory message queues holding messages for test cases. +The enqueued messages may become obsolete during a test run, especially when a test case that would consume the messages fails.

+
+
+

Deleting all messages from a message endpoint is therefore a useful task and is essential in such scenarios so that upcoming test cases are not influenced. +Each test case should only receive those messages that actually refer to the test model. +Therefore it is a good idea to purge all message endpoint destinations between the test cases. +Obsolete messages that get stuck in a message endpoint destination for some reason are then removed so that upcoming test case are not broken.

+
+
+

Following action definition purges all messages from a list of message endpoints:

+
+
+
Java
+
+
@Autowired
+@Qualifier("someEndpointName")
+private DirectEndpoint someEndpoint;
+
+@Autowired
+@Qualifier("anotherEndpointName")
+private DirectEndpoint anotherEndpoint;
+
+@CitrusTest
+public void purgeEndpointTest() {
+    $(purgeEndpoints()
+        .endpointNames("someEndpointName", "anotherEndpointName")
+    );
+
+    $(purgeEndpoints()
+        .endpoints(someEndpoint, anotherEndpoint)
+    );
+}
+
+
+
+
XML
+
+
<test name="PurgeEndpointTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <purge-endpoint>
+            <endpoint name="someChannelName"/>
+            <endpoint name="anotherChannelName"/>
+        </purge-endpoint>
+
+        <purge-endpoint>
+            <endpoint ref="someChannel"/>
+            <endpoint ref="anotherChannel"/>
+        </purge-endpoint>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: PurgeEndpointTest
+actions:
+  - purge:
+      endpoints:
+        - name: "someEndpointName"
+        - name: "anotherEndpointName"
+  - purge:
+      endpoints:
+        - ref: someEndpoint
+        - ref: anotherEndpoint
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="purgeEndpointTest">
+      <actions>
+          <purge-endpoint>
+              <endpoint name="someEndpointName"/>
+              <endpoint name="anotherEndpointName"/>
+          </purge-endpoint>
+
+          <purge-endpoint>
+              <endpoint ref="someEndpoint"/>
+              <endpoint ref="anotherEndpoint"/>
+          </purge-endpoint>
+      </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

As you can see the test action supports endpoint names as well as endpoint references to Spring bean instances. When using endpoint references you refer to the Spring bean name in your application context.

+
+
+

When using the Java DSL we can inject endpoint objects with Spring bean container IoC.

+
+
+

Message selectors enable you to selectively remove messages from an endpoint. All messages that meet the message selector condition get deleted and the other messages remain inside the endpoint destination. The message selector is either a normal String name-value representation or a map of key value pairs:

+
+
+
Java
+
+
@CitrusTest
+public void purgeEndpointTest() {
+    $(purgeEndpoints()
+        .selector("operation = 'sayHello'")
+        .endpoints(someEndpoint, anotherEndpoint)
+    );
+}
+
+
+
+
XML
+
+
<test name="PurgeEndpointTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <purge-endpoint>
+            <selector>
+                <value>operation = 'sayHello'</value>
+            </selector>
+            <endpoint ref="someEndpoint"/>
+            <endpoint ref="anotherEndpoint"/>
+        </purge-endpoint>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: PurgeEndpointTest
+actions:
+  - purge-endpoints:
+      selector:
+        value: "operation = 'sayHello'"
+      endpoints:
+        - "someEndpoint"
+        - "anotherEndpoint"
+
+
+
+
Spring XML
+
+
<purge-endpoints>
+  <selector>
+    <value>operation = 'sayHello'</value>
+  </selector>
+  <endpoint name="someEndpointName"/>
+  <endpoint name="anotherEndpointName"/>
+</purge-endpoints>
+
+
+
+

In the examples above we use a String to represent the message selector expression. In general the message selector operates on the message header. So following on from that we remove all messages selectively that have a message header operation with its value sayHello .

+
+
+

Purging endpoints in each test case every time is quite exhausting because every test case needs to define a purging action at the very beginning of the test. A more straight forward approach would be to introduce some purging action which is automatically executed before each test. Fortunately the Citrus test suite offers a very simple way to do this. It is described in testsuite-before-test.

+
+
+

When using the special action sequence before test cases we are able to purge endpoint destinations every time a test case executes. See the upcoming example to find out how the action is defined in the Spring configuration application context.

+
+
+
Spring Bean
+
+
@Bean
+public SequenceBeforeTest beforeTest() {
+    return SequenceBeforeTest.Builder.beforeTest()
+            .actions(
+                purgeEndpoints()
+                    .endpoint("fooChannel")
+                    .endpoint("barChannel")
+            );
+}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
+              xmlns:citrus="http://www.citrusframework.org/schema/config">
+    <citrus:before-test id="purgeBeforeTest">
+        <citrus:actions>
+            <purge-endpoints>
+                <channel name="fooChannel"/>
+                <channel name="barChannel"/>
+            </purge-endpoints>
+        </citrus:actions>
+    </citrus:before-test>
+</spring:beans>
+
+
+
+

Just use this before-test bean in the Spring bean application context and the purge endpoint action is active. Obsolete messages that are waiting on the message endpoints for consumption are purged before the next test in line is executed.

+
+
+ + + + + +
+ + +Purging message endpoints becomes also very interesting when working with server instances in Citrus. Each server component automatically has an inbound message endpoint where incoming messages are stored too internally. Citrus will automatically use this incoming message endpoint as target for the purge action so you can just use the server instance as you know it from your configuration in any purge action. +
+
+
+
+

8.21. Assert failure

+
+

Citrus test actions fail with Java exceptions and error messages. +This gives you the opportunity to expect an action to fail during test execution. +You can simply assert a Java exception to be thrown during execution. See the example for an assert action definition in a test case:

+
+
+
Java
+
+
@CitrusTest
+public void assertFailureTest() {
+    $(assertException()
+            .exception(org.citrusframework.exceptions.CitrusRuntimeException.class)
+            .message("Unknown variable ${date}")
+            .when(
+                echo().message("Current date is: ${date}")
+            )
+    );
+}
+
+
+
+
XML
+
+
<test name="AssertFailureTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <assert exception="org.citrusframework.exceptions.CitrusRuntimeException"
+                message="Unknown variable ${date}">
+            <when>
+                <echo>
+                    <message>Current date is: ${date}</message>
+                </echo>
+            </when>
+        </assert>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: "AssertFailureTest"
+actions:
+  - assert:
+      exception: "org.citrusframework.exceptions.CitrusRuntimeException"
+      message: 'Unknown variable ${date}'
+      when:
+        - echo:
+            message: 'Current date is: ${date}'
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="AssertFailureTest">
+        <actions>
+            <assert exception="org.citrusframework.exceptions.CitrusRuntimeException"
+                    message="Unknown variable ${date}">
+                <when>
+                    <echo>
+                        <message>Current date is: ${date}</message>
+                    </echo>
+                </when>
+            </assert>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +Note that the assert action requires an exception. +In case no exception is thrown by the embedded test action the assertion and the test case will fail! +
+
+
+

The assert action always wraps a single test action, which is then monitored for failure. +In case the nested test action fails with error you can validate the error in its type and error message (optional). +The failure has to fit the expected one exactly otherwise the assertion fails itself.

+
+
+ + + + + +
+ + +Important to notice is the fact that asserted exceptions do not cause failure of the test case. +As you expect the failure to happen the test continues with its work once the assertion is done successfully. +
+
+
+
+

8.22. Catch exceptions

+
+

In the previous chapter we have seen how to expect failures in Citrus with assert action. +Now the assert action is designed for single actions to be monitored and for failures to be expected in any case. +The 'catch' action in contrary can hold several nested test actions and exception failure is optional.

+
+
+

The nested actions are error proof for the chosen exception type. +This means possible exceptions are caught and ignored - the test case will not fail for this exception type. +But only for this particular exception type! Other exception types that occur during execution do cause the test to fail as usual.

+
+
+
Java
+
+
@CitrusTest
+public void catchFailureTest() {
+    $(catchException()
+        .exception(CitrusRuntimeException.class)
+        .when(
+            echo().message("Current date is: ${date}")
+        );
+    );
+}
+
+
+
+
XML
+
+
<test name="CatchFailureTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <catch exception="org.citrusframework.exceptions.CitrusRuntimeException">
+            <when>
+                <echo>
+                    <message>Current date is: ${date}</message>
+                </echo>
+            </when>
+        </assert>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: "CatchFailureTest"
+actions:
+  - catch:
+      exception: "org.citrusframework.exceptions.CitrusRuntimeException"
+      when:
+        - echo:
+            message: 'Current date is: ${date}'
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="catchExceptionTest">
+        <actions>
+            <catch exception="org.citrusframework.exceptions.CitrusRuntimeException">
+                <echo>
+                    <message>Current date is: ${date}</message>
+                </echo>
+            </catch>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +Note that there is no validation available in a catch block. +So catching exceptions is just to make a test more stable towards errors that can occur. +The caught exception does not cause any failure in the test. +The test case may continue with execution as if there was no failure. +Also notice that the catch action is also happy when no exception at all is raised. +In contrary to that the assert action requires the exception and an assert action is failing in positive processing. +
+
+
+

Catching exceptions like this may only fit to very error-prone action blocks where failures do not harm the test case success. +Otherwise, a failure in a test action should always reflect to the whole test case to fail with errors.

+
+
+ + + + + +
+ + +Java developers might ask why not use try-catch Java block instead? +The answer is simple yet very important to understand. +The test method is called by the Java DSL test case builder for building the Citrus test. +This can be referred to as the design time of the test. +After the building test method was processed the test gets executed, which can be called the runtime of the test. +This means that a try-catch block within the design time method will never perform during the test run. +The only reliable way to add the catch capability to the test as part of the test case runtime is to use the Citrus test action which gets executed during test runtime. +
+
+
+
+

8.23. Apache Ant build

+
+

The <ant> action loads a build.xml Ant file and executes one or more targets in the Ant project. The target is executed with optional build properties passed to the Ant run. The Ant build output is logged with Citrus logger and the test case success is bound to the Ant build success. This means in case the Ant build fails for some reason the test case will also fail with build exception accordingly.

+
+
+

See this basic Ant run example to see how it works within your test case:

+
+
+
Java
+
+
@CitrusTest
+public void antRunTest() {
+    variable("today", "citrus:currentDate()");
+
+    $(antrun()
+        .buildFilePath("classpath:org/citrusframework/actions/build.xml")
+        .target("sayHello")
+        .property("date", "${today}")
+        .property("welcomeText", "$Hello!"))
+    );
+}
+
+
+
+
XML
+
+
<test name="AntRunTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="today" value="citrus:currentDate()"/>
+    </variables>
+    <actions>
+        <ant build-file="classpath:org/citrusframework/actions/build.xml">
+            <execute target="sayHello"/>
+            <properties>
+                <property name="date" value="${today}"/>
+                <property name="welcomeText" value="Hello!"/>
+            </properties>
+        </ant>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: AntRunTest
+variables:
+  - name: "today"
+    value: "citrus:currentDate()"
+actions:
+  - ant:
+      build-file: "classpath:org/citrusframework/actions/build.xml"
+      execute:
+        target: "sayHello"
+      properties:
+        - name: "date"
+          value: "${today}"
+        - name: "welcomeText"
+          value: "Hello!"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="AntRunTest">
+        <variables>
+            <variable name="today" value="citrus:currentDate()"/>
+        </variables>
+        <actions>
+            <ant build-file="classpath:org/citrusframework/actions/build.xml">
+                <execute target="sayHello"/>
+                <properties>
+                    <property name="date" value="${today}"/>
+                    <property name="welcomeText" value="Hello!"/>
+                </properties>
+            </ant>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The respective build.xml Ant file must provide the target to call. For example:

+
+
+
build.xml
+
+
<project name="citrus-build" default="sayHello">
+    <property name="welcomeText" value="Welcome to Citrus!"></property>
+
+    <target name="sayHello">
+        <echo message="${welcomeText} - Today is ${date}"></echo>
+    </target>
+
+    <target name="sayGoodbye">
+        <echo message="Goodbye everybody!"></echo>
+    </target>
+</project>
+
+
+
+

As you can see you can pass custom build properties to the Ant build execution. Existing Ant build properties are replaced and you can use the properties in your build file as usual.

+
+
+

You can also call multiple targets within one single build run by using a comma separated list of target names:

+
+
+
Java
+
+
@CitrusTest
+public void antRunTest() {
+    variable("today", "citrus:currentDate()");
+
+    $(antrun()
+        .buildFilePath("classpath:org/citrusframework/actions/build.xml")
+        .targets("sayHello", "sayGoodbye")
+        .property("date", "${today}"))
+    );
+}
+
+
+
+
XML
+
+
<test name="AntRunTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="today" value="citrus:currentDate()"/>
+    </variables>
+    <actions>
+        <ant build-file="classpath:org/citrusframework/actions/build.xml">
+            <execute targets="sayHello,sayGoodbye"/>
+            <properties>
+                <property name="date" value="${today}"/>
+            </properties>
+        </ant>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: AntRunTest
+variables:
+  - name: "today"
+    value: "citrus:currentDate()"
+actions:
+  - ant:
+      build-file: "classpath:org/citrusframework/actions/build.xml"
+      execute:
+        targets: "sayHello,sayGoodbye"
+      properties:
+        - name: "date"
+          value: "${today}"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="AntRunTest">
+        <variables>
+            <variable name="today" value="citrus:currentDate()"/>
+        </variables>
+        <actions>
+            <ant build-file="classpath:org/citrusframework/actions/build.xml">
+                <execute targets="sayHello,sayGoodbye"/>
+                <properties>
+                    <property name="date" value="${today}"/>
+                </properties>
+            </ant>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The build properties can live in external file resource as an alternative to the inline property definitions. You just have to use the respective file resource path and all nested properties get loaded as build properties.

+
+
+

In addition to that you can also define a custom build listener. The build listener must implement the Ant API interface org.apache.tools.ant.BuildListener . During the Ant build run the build listener is called with several callback methods (e.g. buildStarted(), buildFinished(), targetStarted(), targetFinished(), …). This is how you can add additional logic to the Ant build run from Citrus. A custom build listener could manage the fail state of your test case, in particular by raising some exception forcing the test case to fail accordingly.

+
+
+
Java
+
+
@Autowired
+private BuildListener customBuildListener;
+
+@CitrusTest
+public void antRunTest() {
+    $(antrun()
+        .buildFilePath("classpath:org/citrusframework/actions/build.xml")
+        .target("sayHello")
+        .propertyFile("classpath:org/citrusframework/actions/build.properties")
+        .listener(customBuildListener))
+    );
+}
+
+
+
+
XML
+
+
<test name="AntRunTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <ant build-file="classpath:org/citrusframework/actions/build.xml"
+             build-listener="customBuildListener">
+            <execute target="sayHello"/>
+            <properties  file="classpath:org/citrusframework/actions/build.properties" />
+        </ant>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: AntRunTest
+actions:
+  - ant:
+      build-file: "classpath:org/citrusframework/actions/build.xml"
+      build-listener: "customBuildListener"
+      execute:
+        target: "sayHello"
+      properties-file: "classpath:org/citrusframework/actions/build.properties"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="AntRunTest">
+        <actions>
+            <ant build-file="classpath:org/citrusframework/actions/build.xml"
+                 build-listener="customBuildListener">
+                <execute target="sayHello"/>
+                <properties file="classpath:org/citrusframework/actions/build.properties"/>
+            </ant>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The customBuildListener used in the example above should reference a Spring bean in the Citrus application context. The bean implements the interface org.apache.tools.ant.BuildListener and controls the Ant build run.

+
+
+
+

8.24. Start/Stop server

+
+

Citrus is working with server components that are started and stopped within a test run. This can be a Http server or some SMTP mail server for instance. Usually the Citrus server components are automatically started when Citrus is starting and respectively stopped when Citrus is shutting down. Sometimes it might be helpful to explicitly start and stop a server instance within your test case. Here you can use special start and stop test actions inside your test. This is a good way to test downtime scenarios of interface partners with respective error handling when connections to servers are lost

+
+
+

Let me explain with a simple sample test case:

+
+
+
Java
+
+
@Autowired
+@Qualifier("myMailServer")
+private MailServer myMailServer;
+
+@CitrusTest
+public void manageServerTest() {
+    $(start()
+        .server(myMailServer));
+
+    $(sequential()
+        .actions(...)); // do something
+
+    $(stop()
+        .server(myMailServer));
+}
+
+
+
+
XML
+
+
<test name="ManageServerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <start server="myMailServer"/>
+
+        <sequential>
+            <!-- do something -->
+        </sequential>
+
+        <stop server="myMailServer"/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ManageServerTest
+actions:
+  - start:
+      server: "myMailServer"
+  - sequential:
+      actions: {}
+  - stop:
+      server: "myMailServer"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="manageServerTest">
+        <actions>
+            <start server="myMailServer"/>
+
+            <sequential>
+                <!-- do something -->
+            </sequential>
+
+            <stop server="myMailServer"/>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The start and stop server test action receive a server name which references a Spring bean component of type org.citrusframework.server.Server in your basic Spring application context. The server instance is started or stopped within the test case. As you can see in the next listing we can also start and stop multiple server instances within a single test action.

+
+
+
Java
+
+
@Autowired
+@Qualifier("myMailServer")
+private MailServer myMailServer;
+
+@Autowired
+@Qualifier("myFtpServer")
+private FtpServer myFtpServer;
+
+@CitrusTest
+public void manageServerTest() {
+    $(start()
+        .server(myMailServer, myFtpServer));
+
+    $(sequential()
+        .actions(...)); // do something
+
+    $(stop()
+        .server(myMailServer, myFtpServer));
+}
+
+
+
+
XML
+
+
<test name="ManageServerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <start>
+            <servers>
+                <server name="myMailServer"/>
+                <server name="myFtpServer"/>
+            </servers>
+        </start>
+
+        <sequential>
+            <!-- do something -->
+        </sequential>
+
+        <stop>
+            <servers>
+                <server name="myMailServer"/>
+                <server name="myFtpServer"/>
+            </servers>
+        </stop>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ManageServerTest
+actions:
+  - start:
+      servers:
+        - "myMailServer"
+        - "myFtpServer"
+  - sequential:
+      actions: {}
+  - stop:
+      servers:
+        - "myMailServer"
+        - "myFtpServer"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="manageServerTest">
+        <actions>
+            <start>
+                <servers>
+                    <server name="myMailServer"/>
+                    <server name="myFtpServer"/>
+                </servers>
+            </start>
+
+            <sequential>
+                <!-- do something -->
+            </sequential>
+
+            <stop>
+                <servers>
+                    <server name="myMailServer"/>
+                    <server name="myFtpServer"/>
+                </servers>
+            </stop>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

When using the Java DSL the best way to reference a server instance is to autowire the Spring bean via dependency injection. The Spring framework takes care of injecting the proper Spring bean component defined in the Spring application context. This way you can easily start and stop server instances within Java DSL test cases.

+
+
+ + + + + +
+ + +Starting and stopping server instances is a synchronous test action. This means that your test case is waiting for the server to start before other test actions take place. Startup times and shut down of server instances may delay your test accordingly. +
+
+
+

As you can see starting and stopping Citrus server instances is very easy. You can also write your own server implementations by implementing the interface org.citrusframework.server.Server. All custom server implementations can then be started and stopped during a test case.

+
+
+
+

8.25. Stop Timer

+
+

The <stop-timer> action can be used for stopping either a specific timer (containers-timer) or all timers running within a test. This action is useful when timers are started in the background (using parallel or fork=true) and you wish to stop these timers at the end of the test. Some examples of using this action are provided below:

+
+
+
Java
+
+
@CitrusTest
+public void timerTest() {
+    $(timer()
+      .id("forkedTimer")
+      .fork(true)
+      .actions(sleep(50L))
+    );
+
+    $(timer()
+      .fork(true)
+      .actions(sleep(50L))
+    );
+
+    $(timer()
+      .repeatCount(5)
+      .actions(sleep(50L))
+    );
+
+    $(stopTimer("forkedTimer"));
+
+    $(doFinally().actions(
+      stopTimer()
+    ));
+}
+
+
+
+
XML
+
+
<test name="TimerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <timer id="forkedTimer" fork="true">
+            <actions>
+                <sleep milliseconds="50" />
+            </actions>
+        </timer>
+
+        <timer fork="true">
+            <actions>
+                <sleep milliseconds="50" />
+            </actions>
+        </timer>
+
+        <timer repeatCount="5">
+            <actions>
+                <sleep milliseconds="50" />
+            </actions>
+        </timer>
+
+        <stop-timer id="forkedTimer" />
+    </actions>
+
+    <finally>
+        <stop-timer/>
+    </finally>
+</test>
+
+
+
+
YAML
+
+
name: TimerTest
+actions:
+  - timer:
+      id: "forkedTimer"
+      fork: true
+      actions:
+        - sleep:
+            milliseconds: "50"
+  - timer:
+      fork: true
+      actions:
+        - sleep:
+            milliseconds: "50"
+  - timer:
+      repeatCount: 5
+      actions:
+        - sleep:
+            milliseconds: "50"
+  - stop-timer:
+      id: "forkedTimer"
+finally:
+  - stop-timer: {}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="TimerTest">
+        <actions>
+            <timer id="forkedTimer" fork="true">
+                <sleep milliseconds="50" />
+            </timer>
+
+            <timer fork="true">
+                <sleep milliseconds="50" />
+            </timer>
+
+            <timer repeatCount="5">
+                <sleep milliseconds="50" />
+            </timer>
+
+            <stop-timer timerId="forkedTimer" />
+        </actions>
+
+        <finally>
+            <stop-timer/>
+        </finally>
+    </testcase>
+</spring:beans>
+
+
+
+

In the above example 3 timers are started, the first 2 in the background and the third in the test execution thread. Timer #3 has a repeatCount set to 5 so it will terminate automatically after 5 runs. Timer #1 and #2 however have no repeatCount set so they will execute until they are told to stop.

+
+
+

Timer #1 is stopped explicitly using the first stopTimer action. Here the stopTimer action includes the name of the timer to stop. This is convenient when you wish to terminate a specific timer. However since no timerId was set for timer #2, you can terminate this (and all other timers) using the 'stopTimer' action with no explicit timerId set.

+
+
+
+

8.26. Custom action

+
+

Now we have a look at the opportunity to add custom test actions to the test case flow. Let us start this section with an example:

+
+
+
Java
+
+
@CitrusTest
+public void actionReferenceTest() {
+    $(action().reference("clearDatabase"));
+    $(action().reference("mySpecialAction"));
+}
+
+
+
+
XML
+
+
<test name="ActionReferenceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <action reference="clearDatabase"/>
+        <action reference="mySpecialAction"/>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ActionReferenceTest
+actions:
+  - action:
+      ref: "clearDatabase"
+  - action:
+      ref: "mySpecialAction"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ActionReferenceTest">
+        <actions>
+            <action reference="clearDatabase"/>
+            <action reference="mySpecialAction"/>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The generic <action> element references Spring beans that implement the Java interface org.citrusframework.TestAction . This is a very fast way to add your own action implementations to a Citrus test case. This way you can easily implement your own actions in Java and include them into the test case.

+
+
+

In the example above the called actions are special database cleanup implementations. The actions are defined as Spring beans in the Citrus configuration and get referenced by their bean name or id.

+
+
+
Spring Bean
+
+
@Bean
+public SpecialDatabaseCleanupAction clearDatabase(DataSource ds) {
+    return new SpecialDatabaseCleanupAction(ds);
+}
+
+
+
+
Spring XML
+
+
<bean id="clearDatabase" class="my.domain.citrus.actions.SpecialDatabaseCleanupAction">
+    <constructor-arg ref="myDataSource"/>
+</bean>
+
+
+
+

The Spring application context holds your custom bean implementations. You can set properties and use the full Spring power while implementing your custom test action in Java. Let us have a look on how such a Java class may look like.

+
+
+
SpecialDatabaseCleanupAction
+
+
import org.citrusframework.actions.AbstractTestAction;
+import org.citrusframework.context.TestContext;
+
+public class SpecialDatabaseCleanupAction extends AbstractTestAction {
+
+    @Autowired
+    private DataSource dataSource;
+
+    @Override
+    public void doExecute(TestContext context) {
+        JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
+
+        jdbcTemplate.execute("...");
+    }
+}
+
+
+
+

All you need to do in your Java class is to implement the Citrus org.citrusframework.TestAction interface. The abstract class org.citrusframework.actions.AbstractTestAction may help you to start with your custom test action implementation as it provides basic method implementations so you just have to implement the doExecute() method.

+
+
+

When using the Java test case DSL you are also quite comfortable with including your custom test actions.

+
+
+
Java
+
+
@Autowired
+private SpecialDatabaseCleanupAction clearDatabaseAction;
+
+@CitrusTest
+public void actionReferenceTest() {
+    $(echo().message("Now let's include our special test action"));
+
+    $(clearDatabaseAction);
+
+    $(echo().message("That's it!"));
+}
+
+
+
+

Using anonymous class uses as Lambda expression is also possible.

+
+
+
Java
+
+
@CitrusTest
+public void genericActionTest() {
+    $(echo().message("Now let's call our special test action anonymously"));
+
+    $(context -> {
+        // do something
+    });
+
+    $(echo().message("That's it!"));
+}
+
+
+
+

The test action receives a single argument context which represent the org.citrusframework.context.TestContext. The context provides access to test variables and shared components resolvable via reference resolver API.

+
+
+
+
+
+

9. Containers

+
+
+

Similar to templates a container element holds one to many test actions. In contrast to the template the container appears directly inside the test case action chain, meaning that the container is not referenced by more than one test case.

+
+
+

Containers execute the embedded test actions in specific logic. This can be an execution in iteration for instance. Combine different containers with each other and you will be able to generate very powerful hierarchical structures in order to create a complex execution logic. In the following sections some predefined containers are described.

+
+
+

9.1. Sequential

+
+

The sequential container executes the embedded test actions in strict sequence. Readers now might search for the difference to the normal action chain that is specified inside the test case. The actual power of sequential containers does show only in combination with other containers like iterations and parallels. We will see this later when handling these containers.

+
+
+

For now the sequential container seems not very sensational - one might say boring - because it simply groups a pair of test actions to sequential execution.

+
+
+
Java
+
+
@CitrusTest
+public void sequentialTest() {
+    $(sequential()
+        .actions(
+            sleep().seconds(1),
+            echo("Hello Citrus!")
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="SequentialTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <sequential>
+            <actions>
+                <sleep seconds="1"/>
+                <echo>
+                    <message>Hello Citrus!</message>
+                </echo>
+            </actions>
+        </sequential>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: SequentialTest
+actions:
+  - sequential:
+      actions:
+        - sleep:
+            seconds: 1
+        - echo:
+            message: "Hello Citrus!"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="SequentialTest">
+        <actions>
+            <sequential>
+                <sleep seconds="1"/>
+                <echo>
+                    <message>Hello Citrus!</message>
+                </echo>
+            </sequential>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+
+

9.2. Conditional

+
+

Now we deal with conditional executions of test actions. Nested actions inside a conditional container are executed only in case a boolean expression evaluates to true. Otherwise the container execution is not performed at all.

+
+
+

See some example to find out how it works with the conditional expression string.

+
+
+
Java
+
+
@CitrusTest
+public void conditionalTest() {
+    variable("index", 5);
+    variable("shouldSleep", true);
+
+    $(conditional().when("${index} = 5")
+        .actions(
+            sleep(10000L)
+        )
+    );
+
+    $(conditional().when("${shouldSleep}")
+        .actions(
+            sleep(10000L)
+        )
+    );
+
+    $(conditional().when("${shouldSleep}", anyOf(is("true"), isEmptyString()))
+        .actions(
+            sleep(10000L)
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="ConditionalTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+      <variable name="index" value="5"/>
+      <variable name="shouldSleep" value="true"/>
+    </variables>
+
+    <actions>
+        <conditional when="${index} = 5">
+            <actions>
+                <sleep seconds="10"/>
+            </actions>
+        </conditional>
+
+        <conditional when="${shouldSleep}">
+            <actions>
+                <sleep seconds="10"/>
+            </actions>
+        </conditional>
+
+        <conditional when="@assertThat('${shouldSleep}', 'anyOf(is(true), isEmptyString())')@">
+            <actions>
+                <sleep seconds="10"/>
+            </actions>
+        </conditional>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ConditionalTest
+variables:
+  - name: "index"
+    value: 5
+  - name: "shouldSleep"
+    value: true
+
+actions:
+  - conditional:
+      when: '${index} = 5'
+      actions:
+        - sleep:
+            seconds: 10
+  - conditional:
+      when: '${shouldSleep}'
+      actions:
+        - sleep:
+            seconds: 10
+  - conditional:
+      when: '@assertThat("${shouldSleep}", "anyOf(is(true), isEmptyString())")@'
+      actions:
+        - sleep:
+            seconds: 10
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ConditionalTest">
+        <variables>
+          <variable name="index" value="5"/>
+          <variable name="shouldSleep" value="true"/>
+        </variables>
+
+        <actions>
+            <conditional expression="${index} = 5">
+                <sleep seconds="10"/>
+            </conditional>
+
+            <conditional expression="${shouldSleep}">
+                <sleep seconds="10"/>
+            </conditional>
+
+            <conditional expression="@assertThat('${shouldSleep}', 'anyOf(is(true), isEmptyString())')@">
+                <sleep seconds="10"/>
+            </conditional>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The nested sleep action is executed in case the variable ${index} is equal to the value '5'. This conditional execution of test actions is useful when dealing with different test environments such as different operating systems for instance. The conditional container also supports expressions that evaluate to the character sequence "true" or "false" as shown in the ${shouldSleep} example.

+
+
+

The last conditional container in the example above makes use of Hamcrest matchers. The matcher evaluates to true or false and based on that the container actions are executed or skipped. The Hamcrest matchers are very powerful when it comes to evaluation of multiple conditions at a time.

+
+
+
+

9.3. Parallel

+
+

Parallel containers execute embedded test actions concurrently to each other. Every action in this container will be +executed in a separate Java thread. The following example should clarify the usage:

+
+
+
Java
+
+
@CitrusTest
+public void parallelTest() {
+    $(parallel()
+        .actions(
+            sleep(),
+            sequential().actions(
+                sleep(),
+                echo("1")
+            ),
+            echo("2"),
+            echo("3"),
+            iterate().condition("i lt= 5").index("i"))
+                .actions(
+                    echo("10")
+                )
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="ParallelTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <parallel>
+            <actions>
+                <sleep/>
+
+                <sequential>
+                    <actions>
+                        <sleep/>
+                        <echo>
+                            <message>1</message>
+                        </echo>
+                    </actions>
+                </sequential>
+
+                <echo>
+                    <message>2</message>
+                </echo>
+
+                <echo>
+                    <message>3</message>
+                </echo>
+
+                <iterate condition="i lt= 5"
+                            index="i">
+                    <actions>
+                        <echo>
+                            <message>10</message>
+                        </echo>
+                    </actions>
+                </iterate>
+            </actions>
+        </parallel>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ParallelTest
+actions:
+  - parallel:
+      actions:
+        - sleep: {}
+        - sequential:
+            actions:
+              - sleep: {}
+              - echo:
+                  message: "1"
+        - echo:
+            message: "2"
+        - echo:
+            message: "3"
+        - iterate:
+            index: "i"
+            condition: "i lt 5"
+            actions:
+              - echo:
+                  message: "10"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="ParallelTest">
+        <actions>
+            <parallel>
+                <sleep/>
+
+                <sequential>
+                    <sleep/>
+                    <echo>
+                        <message>1</message>
+                    </echo>
+                </sequential>
+
+                <echo>
+                    <message>2</message>
+                </echo>
+
+                <echo>
+                    <message>3</message>
+                </echo>
+
+                <iterate condition="i lt= 5"
+                            index="i">
+                    <echo>
+                        <message>10</message>
+                    </echo>
+                </iterate>
+            </parallel>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

By default, test actions are processed and executed one action after another. +Since the first action is a sleep of five seconds, the whole test would stop and wait for 5 seconds. +Things are different inside the parallel container. +Here, the descending test actions will not wait, but execute at the same time.

+
+
+

If you are using this container to send or receive messages, you have to use the unique correlation ID of the message to link the actions concerning this message. +Otherwise, the testcase might associate a send or receive action with the wrong message. +Please note that this ID is not passed to your system under test. +The management of correlation IDs as well as the assignment to messages is done internally. +Only the mapping between the request and response has to be done by the author of the test. +As you can see in the following example, the value of the header MessageHeaders.ID is stored in the variable request#1 respectively request#2. +This variable is reused in the receive action to identify the correct response from the server.

+
+
+
Java
+
+
@CitrusTest
+public void paralletTest() {
+
+    $(parallel()
+        .actions(
+            sequential()
+                .actions(
+                    http().client(httpClient)
+                            .send()
+                            .post("/foo")
+                            .extract(fromHeaders().header(MessageHeaders.ID, "request#1")
+                            .payload("{ \"info\": \"foo\"}"),
+
+                    //SUT echoing the input
+
+                    http().client(httpClient)
+                            .receive()
+                            .response(HttpStatus.OK)
+                            .payload("{ \"info\": \"foo\"}")
+                            .selector(
+                                Collections.singletonMap(
+                                    MessageHeaders.ID, "${request#1}"))
+                ),
+
+            sequential()
+                .actions(
+                    http().client(httpClient)
+                         .send()
+                         .post("/boo")
+                         .extract(fromHeaders().header(MessageHeaders.ID, "request#2")
+                         .payload("{ \"info\": \"boo\"}"),
+
+                    //SUT echoing the input
+
+                    http().client(httpClient)
+                         .receive()
+                         .response(HttpStatus.OK)
+                         .payload("{ \"info\": \"boo\"}")
+                         .selector(
+                            Collections.singletonMap(
+                                MessageHeaders.ID, "${request#2}"))
+                )
+        )
+    );
+}
+
+
+
+ + + + + +
+ + +Containers can easily wrap other containers. +The example shows a simple combination of sequential and parallel containers that will achieve more complex execution logic. +Actions inside the sequential container will execute one after another. +But actions in parallel will be executed at the same time. +
+
+
+
+

9.4. Iterate

+
+

Iterations are very powerful elements when describing complex logic. The container executes the embedded actions several times. The container will continue with looping as long as the defined breaking condition string evaluates to true . In case the condition evaluates to false the iteration will break and finish execution.

+
+
+
Java
+
+
@CitrusTest
+public void iterateTest() {
+    $(iterate().condition("i lt 5").index("i")
+        .actions(
+            echo().message("index is: ${i}")
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="IterateTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <iterate index="i" condition="i lt 5">
+            <actions>
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+            </actions>
+        </iterate>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: IterateTest
+actions:
+  - iterate:
+      index: "i"
+      condition: "i lt 5"
+      actions:
+        - echo:
+            message: "index is: ${i}"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="IterateTest">
+        <actions>
+            <iterate index="i" condition="i lt 5">
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+            </iterate>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The attribute "index" automatically defines a new variable that holds the actual loop index starting at "1". This index variable is available as a normal variable inside the iterate container. Therefore it is possible to print out the actual loop index in the echo action as shown in the above example.

+
+
+

The condition string is mandatory and describes the actual end of the loop. +In iterate containers the loop will break in case the condition evaluates to false.

+
+
+

The condition string can be any Boolean expression and supports several operators:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+lt + +

lower than

+
+lt= + +

lower than equals

+
+gt + +

greater than

+
+gt= + +

greater than equals

+
+= + +

equals

+
+and + +

logical combining of two Boolean values

+
+or + +

logical combining of two Boolean values

+
+() + +

brackets

+
+
+
+ + + + + +
+ + +It is very important to notice that the condition is evaluated before the very first iteration takes place. The loop therefore can be executed 0-n times according to the condition value. +
+
+
+

Now the boolean expression evaluation as described above is limited to very basic operation such as lower than, greater than and so on. We also can use Hamcrest matchers in conditions that are way more powerful than that.

+
+
+
Java
+
+
@CitrusTest
+public void iterateTest() {
+    $(iterate().condition(assertThat(lessThan(5)).index("i"))
+        .actions(
+            echo().message("index is: ${i}")
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="IterateTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <iterate index="i" condition="@assertThat(lessThan(5))@">
+            <actions>
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+            </actions>
+        </iterate>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: IterateTest
+actions:
+  - iterate:
+      index: "i"
+      condition: "@assertThat(lessThan(5))@"
+      actions:
+        - echo:
+            message: "index is: ${i}"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="IterateTest">
+        <actions>
+            <iterate index="i" condition="@assertThat(lessThan(5))@">
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+            </iterate>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In the example above we use Hamcrest matchers as a condition expression. +In Java you may use the org.citrusframework.container.HamcrestConditionExpression.assertThat(org.hamcrest.Matcher<?>) method. +This way you can combine Hamcrest matchers and create very powerful condition evaluations here.

+
+
+

The Hamcrest expression evaluation in Citrus gets added with this module:

+
+
+
citrus-validation-hamcrest Module
+
+
<dependency>
+    <groupId>org.citrusframework</groupId>
+    <artifactId>citrus-validation-hamcrest</artifactId>
+    <version>${citrus.version}</version>
+</dependency>
+
+
+
+

You need to add this module to your project accordingly when using the Hamcrest matcher support.

+
+
+
+

9.5. Repeat

+
+

Quite similar to the previously described iterate container this repeating container will execute its actions in a loop according to an ending condition. The condition describes a Boolean expression using the operators as described in the previous chapter.

+
+
+ + + + + +
+ + +The loop continues its work until the provided condition evaluates to true . It is very important to notice that the repeat loop will execute the actions before evaluating the condition. This means the actions get executed n-1 times. +
+
+
+
Java
+
+
@CitrusTest
+public void repeatTest() {
+    $(repeat().until("(i gt 5) or (i = 3)").index("i")
+        .actions(
+            echo("index is: ${i}")
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="RepeatTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <repeat index="i" until="(i = 3) or (i = 5)">
+            <actions>
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+            </actions>
+        </repeat>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RepeatTest
+actions:
+  - repeat:
+      index: "i"
+      until: "(i = 3) or (i = 5)"
+      actions:
+        - echo:
+            message: "index is: ${i}"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RepeatTest">
+        <actions>
+            <repeat-until-true index="i" condition="(i = 3) or (i = 5)">
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+            </repeat-until-true>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

As you can see the repeat container is only executed when the iterating condition expression evaluates to false . By the time the condition is true execution is discontinued. You can use basic logical operators such as and, or and so on.

+
+
+

A more powerful way is given by Hamcrest matchers that are directly supported in condition expressions.

+
+
+
Java
+
+
@CitrusTest
+public void repeatTest() {
+    $(repeat().until(assertThat(anyOf(is(3), is(5))).index("i")
+        .actions(
+            echo("index is: ${i}")
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="RepeatTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <repeat index="i" until="@assertThat(anyOf(is(3), is(5))@">
+            <actions>
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+            </actions>
+        </repeat>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RepeatTest
+actions:
+  - repeat:
+      index: "i"
+      until: "@assertThat(anyOf(is(3), is(5))@"
+      actions:
+        - echo:
+            message: "index is: ${i}"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RepeatTest">
+        <actions>
+            <repeat-until-true index="i" condition="@assertThat(anyOf(is(3), is(5))@">
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+            </repeat-until-true>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The Hamcrest matcher usage simplifies the reading a lot. +In addition to that it empowers you to combine more complex condition expressions. +In Java you may use the org.citrusframework.container.HamcrestConditionExpression.assertThat(org.hamcrest.Matcher<?>) method.

+
+
+

The Hamcrest expression evaluation in Citrus gets added with this module:

+
+
+
citrus-validation-hamcrest Module
+
+
<dependency>
+    <groupId>org.citrusframework</groupId>
+    <artifactId>citrus-validation-hamcrest</artifactId>
+    <version>${citrus.version}</version>
+</dependency>
+
+
+
+

You need to add this module to your project accordingly when using the Hamcrest matcher support.

+
+
+
+

9.6. Repeat on error

+
+

The next looping container is called repeat-on-error-until-true. This container repeats a group of actions in case one embedded action failed with error. In case of an error inside the container the loop will try to execute all embedded actions again in order to seek for overall success. The execution continues until all embedded actions were processed successfully or the ending condition evaluates to true and the error-loop will lead to final failure.

+
+
+
Java
+
+
@CitrusTest
+public void repeatOnErrorTest() {
+    $(repeatOnError().until("i = 5").index("i")
+        .actions(
+            echo().message("index is: ${i}"),
+            fail().message("Force loop to fail!")
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="RepeatOnErrorTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <repeat-on-error index="i" until="i = 5">
+            <actions>
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+                <fail message="Force loop to fail!"/>
+            </actions>
+        </repeat-on-error>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RepeatOnErrorTest
+actions:
+  - repeat-on-error:
+      index: "i"
+      until: "i = 5"
+      actions:
+        - echo:
+            message: "index is: ${i}"
+        - fail:
+            message: "Force loop to fail!"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RepeatOnErrorTest">
+        <actions>
+            <repeat-onerror-until-true index="i" condition="i = 5">
+                <echo>
+                    <message>index is: ${i}</message>
+                </echo>
+                <fail message="Force loop to fail!"/>
+            </repeat-onerror-until-true>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In the code example the error-loop continues four times as the <fail> action definitely fails the test. During the fifth iteration the condition "i=5" evaluates to true and the loop breaks its processing leading to a final failure as the test actions were not successful.

+
+
+ + + + + +
+ + +The overall success of the test case depends on the error situation inside the repeat-onerror-until-true container. In case the loop breaks because of failing actions and the loop will discontinue its work the whole test case is failing too. The error loop processing is successful in case all embedded actions were not raising any errors during an iteration. +
+
+
+

The repeat-on-error container also offers an automatic sleep mechanism. This auto-sleep property will force the container to wait a given amount of time before executing the next iteration. We used this mechanism a lot when validating database entries. Let’s say we want to check the existence of an order entry in the database. Unfortunately the system under test is not very well performing and may need some time to store the new order. This amount of time is not predictable, especially when dealing with different hardware on our test environments (local testing vs. server testing). Following from that our test case may fail unpredictably only because of runtime conditions.

+
+
+

We can avoid unstable test cases that are based on these runtime conditions with the auto-sleep functionality.

+
+
+
Java
+
+
@CitrusTest
+public void repeatOnErrorTest() {
+    $(repeatOnError().until("i = 5").index("i").autoSleep(1000)
+        .actions(
+            sql()
+                .dataSource(testDataSource)
+                .query()
+                .statement("""
+                    SELECT COUNT(1) AS CNT_ORDERS
+                    FROM ORDERS
+                    WHERE CUSTOMER_ID='${customerId}'
+                """)
+                .validate("CNT_ORDERS", 1)
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="RepeatOnErrorTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <repeat-on-error auto-sleep="1000" until="i = 5" index="i">
+            <actions>
+                <sql datasource="testDataSource">
+                    <statements>
+                        <statement>
+                          SELECT COUNT(1) AS CNT_ORDERS
+                          FROM ORDERS
+                          WHERE CUSTOMER_ID='${customerId}'
+                        </statement>
+                    </statements>
+                    <validate column="CNT_ORDERS" value="1"/>
+                </sql>
+            </actions>
+        </repeat-on-error>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RepeatOnErrorTest
+actions:
+  - repeat-on-error:
+      index: "i"
+      until: "i = 5"
+      auto-sleep: 1000
+      actions:
+        - sql:
+            dataSource: "testDataSource"
+            statements:
+              - statement: |
+                  SELECT COUNT(1) AS CNT_ORDERS
+                  FROM ORDERS
+                  WHERE CUSTOMER_ID='${customerId}'
+            validate:
+              - column: "CNT_ORDERS"
+                value: 1
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RepeatOnErrorTest">
+        <actions>
+            <repeat-onerror-until-true auto-sleep="1000" condition="i = 5" index="i">
+                <sql datasource="testDataSource">
+                    <statement>
+                      SELECT COUNT(1) AS CNT_ORDERS
+                      FROM ORDERS
+                      WHERE CUSTOMER_ID='${customerId}'
+                    </statement>
+                    <validate column="CNT_ORDERS" value="1"/>
+                </sql>
+            </repeat-onerror-until-true>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

We surrounded the database check with a repeat-onerror container having the auto-sleep property set to 1000 milliseconds. The repeat container will try to check the database up to five times with an automatic sleep of 1 second before every iteration. This gives the system under test up to five seconds time to store the new entry to the database. The test case is very stable and just fits to the hardware environment. On slow test environments the test may need several iterations to successfully read the database entry. On very fast environments the test may succeed right on the first try.

+
+
+ + + + + +
+ + +We changed auto sleep time from seconds to milliseconds with Citrus 2.0 release. So if you are coming from previous Citrus versions be sure to now use proper millisecond values. +
+
+
+

So fast environments are not slowed down by static sleep operations and slower environments are still able to execute this test case with high stability.

+
+
+
+

9.7. Timer

+
+

Timers are very useful containers when you wish to execute a collection of test actions several times at regular intervals. The timer component generates an event which in turn triggers the execution of the nested test actions associated with the timer. This can be useful in a number of test scenarios for example when Citrus needs to simulate a heart beat or if you are debugging a test and you wish to query the contents of the database, to mention just a few. The following code sample should demonstrate the power and flexibility of timers:

+
+
+
Java
+
+
@CitrusTest
+public void timerTest() {
+    $(timer()
+        .id("forkedTimer")
+        .interval(100L)
+        .fork(true)
+        .actions(
+            echo()
+                .message("I'm going to run in the background and let some other test actions run (nested action run ${forkedTimer-index} times)"),
+            sleep().milliseconds(50L)
+        )
+    );
+
+    $(timer()
+        .repeatCount(3)
+        .interval(100L)
+        .delay(50L)
+        .actions(
+            sleep().milliseconds(50L),
+            echo().message("I'm going to repeat this message 3 times before the next test actions are executed")
+        )
+    );
+
+    $(echo()
+        .message("Test almost complete. Make sure all timers running in the background are stopped")
+    );
+
+    $(doFinally().actions(
+        stopTimer("forkedTimer")
+    ));
+}
+
+
+
+
XML
+
+
<test name="TimerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <timer id="forkedTimer" interval="100" fork="true">
+            <actions>
+                <echo>
+                    <message>I'm going to run in the background and let some other test actions run (nested action run ${forkedTimer-index} times)</message>
+                </echo>
+                <sleep milliseconds="50" />
+            </actions>
+        </timer>
+
+        <timer repeatCount="3" interval="100" delay="50">
+            <actions>
+                <sleep milliseconds="50" />
+                <echo>
+                    <message>I'm going to repeat this message 3 times before the next test actions are executed</message>
+                </echo>
+            </actions>
+        </timer>
+
+        <echo>
+          <message>Test almost complete. Make sure all timers running in the background are stopped</message>
+        </echo>
+    </actions>
+
+    <finally>
+        <stop-timer id="forkedTimer" />
+    </finally>
+</test>
+
+
+
+
YAML
+
+
name: TimerTest
+actions:
+  - timer:
+      id: forkedTimer
+      fork: true
+      delay: 5000
+      interval: 100
+      repeatCount: 1
+      actions:
+        - echo:
+            message: |
+              I'm going to run in the background and let some other test actions run (nested action run ${forkedTimer-index} times)
+        - sleep:
+            milliseconds: 50
+  - timer:
+      delay: 50
+      interval: 100
+      repeatCount: 3
+      actions:
+        - sleep:
+            milliseconds: 50
+        - echo:
+            message: |
+              I'm going to repeat this message 3 times before the next test actions are executed
+  - echo:
+      message: |
+        Test almost complete. Make sure all timers running in the background are stopped
+finally:
+  - stop-timer:
+      id: "forkedTimer"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="TimerTest">
+        <actions>
+            <timer id="forkedTimer" interval="100" fork="true">
+              <echo>
+                <message>I'm going to run in the background and let some other test actions run (nested action run ${forkedTimer-index} times)</message>
+              </echo>
+              <sleep milliseconds="50" />
+            </timer>
+
+            <timer repeatCount="3" interval="100" delay="50">
+              <sleep milliseconds="50" />
+              <echo>
+                <message>I'm going to repeat this message 3 times before the next test actions are executed</message>
+              </echo>
+            </timer>
+
+            <echo>
+              <message>Test almost complete. Make sure all timers running in the background are stopped</message>
+            </echo>
+        </actions>
+
+        <finally>
+            <stop-timer timerId="forkedTimer" />
+        </finally>
+    </testcase>
+</spring:beans>
+
+
+
+

In the above example the first timer (timerId = forkedTimer) is started in the background. By default timers are run in the current thread of execution but to start it in the background just use "fork=true". Every 100 milliseconds this timer emits an event which will result in the nested actions being executed. The nested 'echo' action outputs the number of times this timer has already been executed. It does this with the help of an 'index' variable, in this example ${forkedTimer-index}, which is named according to the timer id with the suffix '-index'. No limit is set on the number of times this timer should run so it will keep on running until either a nested test action fails or it is instructed to stop (more on this below).

+
+
+

The second timer is configured to run 3 times with a delay of 100 milliseconds between each iteration. Using the attribute 'delay' we can get the timer pause for 50 milliseconds before running the nested actions for the first time. The timer is configured to run in the current thread of execution so the last test action, the 'echo', has to wait for this timer to complete before it is executed.

+
+
+

So how do we tell the forked timer to stop running? If we forget to do this the timer will just execute indefinitely. To help us out here we can use the 'stop-timer' action. By adding this to the finally block we ensure that the timer will be stopped, even if some nested test action fails. We could have easily added it as a nested test action, to the forkedTimer for example, but if some other test action failed before the stop-timer was called, the timer would never stop.

+
+
+ + + + + +
+ + +You can also configure timers to run in the background using the 'parallel' container, rather than setting the attribute 'fork' to true. Using parallel allows more fine-grained control of the test and has the added advantage that all errors generated from a nested timer action are visible to the test executer. If an error occurs within the timer then the test status is set to failed. Using fork=true an error causes the timer to stop executing, but the test status is not influenced by this error. +
+
+
+
+

9.8. Async

+
+

Now we deal with parallel execution of test actions. Nested actions inside an async container are executed in a separate +thread. This allows to continue test execution without having to wait for actions inside the async container to complete. +The test immediately continues to execute the next test actions, which will be executed in parallel to those actions inside +the async container.

+
+
+

This mechanism comes in handy when a test action should be forked to the rest of the test. In send operations we were +already able to achieve this by setting fork="true". With async containers, we’re able to execute all +kinds of test actions asynchronous.

+
+
+

See some example to find out how it works.

+
+
+
Java
+
+
@CitrusTest
+public void asyncTest() {
+    $(async()
+        .actions(
+            send(fooEndpoint)
+                .message(fooRequest()),
+            receive(fooEndpoint)
+                .message(fooResponse())
+        )
+    );
+
+    $(echo().message("Continue with test"));
+}
+
+
+
+
XML
+
+
<test name="AsyncTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <async>
+            <actions>
+                <send endpoint="fooEndpoint">
+                    <message><!-- ... --></message>
+                </send>
+                <receive endpoint="fooEndpoint">
+                    <message><!-- ... --></message>
+                </receive>
+            </actions>
+        </async>
+
+        <echo>
+          <message>Continue with test</message>
+        </echo>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: AsyncTest
+actions:
+  - async:
+      actions:
+        - send:
+            endpoint: "fooEndpoint"
+            message: {}
+        - receive:
+            endpoint: "fooEndpoint"
+            message: {}
+  - echo:
+      message: "Continue with test"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="AsyncTest">
+        <actions>
+            <async>
+                <actions>
+                    <send endpoint="fooEndpoint">
+                        <message><!-- ... --></message>
+                    </send>
+                    <receive endpoint="fooEndpoint">
+                        <message><!-- ... --></message>
+                    </receive>
+                </actions>
+            </async>
+
+            <echo>
+              <message>Continue with test</message>
+            </echo>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The nested send and receive actions get executed in parallel to the other test actions in that test case. +So the test will not wait for these actions to finish before executing next actions. +Of course possible errors inside the async container will also cause the whole test case to fail. +And the test will definitely wait for all async actions to be finished before finishing the whole test case. +This safely lets us execute test actions in parallel to each other.

+
+
+

The async container also supports success and error callback actions.

+
+
+
Java
+
+
@CitrusTest
+public void asyncTest() {
+    $(async()
+        .actions(
+            send(fooEndpoint)
+                .message(fooRequest()),
+            receive(fooEndpoint)
+                .message(fooResponse())
+        )
+        .successActions(
+            echo().message("Success!")
+        )
+        .errorActions(
+            echo().message("Error!")
+        )
+    );
+
+    $(echo().message("Continue with test"));
+}
+
+
+
+
XML
+
+
<test name="AsyncTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <async>
+            <actions>
+                <send endpoint="fooEndpoint">
+                    <message><!-- ... --></message>
+                </send>
+                <receive endpoint="fooEndpoint">
+                    <message><!-- ... --></message>
+                </receive>
+            </actions>
+            <success>
+                <echo><message>Success!</message></echo>
+            </success>
+            <error>
+                <echo><message>Failed!</message></echo>
+            </error>
+        </async>
+
+        <echo>
+          <message>Continue with test</message>
+        </echo>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: AsyncTest
+actions:
+  - async:
+      actions:
+        - send:
+            endpoint: "fooEndpoint"
+            message: {}
+        - receive:
+            endpoint: "fooEndpoint"
+            message: {}
+      success:
+        - echo:
+            message: "Success!"
+      error:
+        - echo:
+            message: "Error!"
+  - echo:
+      message: "Continue with test"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="AsyncTest">
+        <actions>
+            <async>
+                <actions>
+                    <send endpoint="fooEndpoint">
+                        <message><!-- ... --></message>
+                    </send>
+                    <receive endpoint="fooEndpoint">
+                        <message><!-- ... --></message>
+                    </receive>
+                </actions>
+                <success>
+                    <echo><message>Success!</message></echo>
+                </success>
+                <error>
+                    <echo><message>Failed!</message></echo>
+                </error>
+            </async>
+
+            <echo>
+              <message>Continue with test</message>
+            </echo>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

So you can add test actions which are executed based on the async test actions outcome success or error.

+
+
+

If you are using this container to send or receive messages, you have to use the unique correlation ID of the message to link the actions concerning this message. +Otherwise the testcase might associate a send or receive action with the wrong message. +Please note that this ID is not provided to your system under test. +The management of correlation IDs as well as the assignment to messages is done internally. +Only the mapping between the request and response has to be done by the author of the test. +As you can see in the following example, the value of the header MessageHeaders.ID is stored in the variable request#1 respectively request#2. +This variable is reused in the receive action to identify the correct response from the server.

+
+
+
Java
+
+
@CitrusTest
+public void testAsync() {
+
+    $(async()
+        .actions(
+            http().client(httpClient)
+                    .send()
+                    .post("/foo")
+                    .extract(fromHeaders().header(MessageHeaders.ID, "request#1")
+                    .payload("{ \"info\": \"foo\"}"),
+
+            //SUT echoing the input
+
+            http().client(httpClient)
+                    .receive()
+                    .response(HttpStatus.OK)
+                    .payload("{ \"info\": \"foo\"}")
+                    .selector(
+                        Collections.singletonMap(
+                            MessageHeaders.ID, "${request#1}"))
+        )
+    );
+
+    $(async()
+        .actions(
+            http().client(httpClient)
+                    .send()
+                    .post("/boo")
+                    .extract(fromHeaders().header(MessageHeaders.ID, "request#2")
+                    .payload("{ \"info\": \"boo\"}"),
+
+            //SUT echoing the input
+
+            http().client(httpClient)
+                    .receive()
+                    .response(HttpStatus.OK)
+                    .payload("{ \"info\": \"boo\"}")
+                    .selector(
+                        Collections.singletonMap(
+                            MessageHeaders.ID, "${request#2}"))
+        )
+    );
+}
+
+
+
+
+

9.9. Wait

+
+

With this action you can make your test wait until a certain condition is satisfied. The attribute seconds defines the amount of time to wait in seconds. You can also use the milliseconds attribute for a more fine grained time value. The attribute interval defines the amount of time to wait between each check. The interval is always specified as millisecond time interval.

+
+
+

If the check does not exceed within the defined overall waiting time then the test execution fails with an appropriate error message. There are different types of conditions to check.

+
+
+ + + + + + + + + + + + + + + + + +
+http + +

This condition is based on an Http request call on a server endpoint. Citrus will wait until the Http response is as defined (e.g. Http 200 OK). This is useful when you want to wait for a server to start.

+
+file + +

This condition checks for the existence of a file on the local file system. Citrus will wait until the file is present.

+
+message + +

This condition checks for the existence of a message in the local message store of the current test case. Citrus will wait until the message with the given name is present.

+
+action + +

This condition executes another test action and checks for successful execution. Citrus will wait until the nested action is executed without any errors.

+
+
+
+

When should somebody use this action? This action is very useful when you want your test to wait for a certain event to occur before continuing with the test execution. For example if you wish that your test waits until a Docker container is started or for an application to create a log file before continuing, then use this action. You can also create your own condition statements +and bind it to the test action.

+
+
+

9.9.1. Http condition

+
+

Next let us have a look at a simple example:

+
+
+
Java
+
+
@CitrusTest
+public void waitTest() {
+    $(waitFor()
+        .time(Duration.ofMillis(10000))
+        .interval(2000)
+        .http()
+            .url("http://sample.org/resource")
+            .status(200)
+            .timeout(2000);
+    );
+}
+
+
+
+
XML
+
+
<test name="WaitTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <wait-for timeout="10" interval="2000">
+          <http url="http://sample.org/resource" status="200" timeout="2000" />
+        </wait-for>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: WaitTest
+actions:
+  - wait-for:
+      timeout: "10"
+      interval: "2000"
+      http:
+        url: path/to/resource/file.txt
+        status: 200
+        timeout: 2000
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="WaitTest">
+        <actions>
+            <wait seconds="10" interval="2000">
+              <http url="http://sample.org/resource" status="200" timeout="2000" />
+            </wait>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The example waits for some Http server resource to be available with Http 200 OK response. Citrus will use HEAD request method by default. You can set the request method with the method attribute on the Http condition.

+
+
+
+

9.9.2. File condition

+
+

Next let us have a look at the file condition usage:

+
+
+
Java
+
+
@CitrusTest
+public void waitTest() {
+    $(waitFor()
+        .time(Duration.ofMillis(10000))
+        .interval(2000)
+        .file().path("path/to/resource/file.txt")
+    );
+}
+
+
+
+
XML
+
+
<test name="WaitTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <wait-for timeout="10" interval="2000">
+          <file path="path/to/resource/file.txt" />
+        </wait-for>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: WaitTest
+actions:
+  - wait-for:
+      timeout: "10"
+      interval: "2000"
+      file:
+        path: path/to/resource/file.txt
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="WaitTest">
+        <actions>
+            <wait seconds="10" interval="2000">
+              <file path="path/to/resource/file.txt" />
+            </wait>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Citrus checks for the file to exist under the given path. Only if the file exists the test will continue with further test actions.

+
+
+
+

9.9.3. Message condition

+
+

Next let us have a look at the message condition usage:

+
+
+
Java
+
+
@CitrusTest
+public void waitTest() {
+    $(waitFor()
+        .time(Duration.ofMillis(10000))
+        .interval(2000)
+        .message().name("helloRequest")
+    );
+}
+
+
+
+
XML
+
+
<test name="WaitTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <wait-for timeout="10" interval="2000">
+          <message name="helloRequest" />
+        </wait-for>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: WaitTest
+actions:
+  - wait-for:
+      timeout: "10"
+      interval: "2000"
+      message:
+        name: "helloRequest"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="WaitTest">
+        <actions>
+            <wait seconds="10" interval="2000">
+              <message name="helloRequest" />
+            </wait>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Citrus checks for the message with the name helloRequest in the local message store. Only if the message with the given name is found the test will continue with further test actions. The local message +store is automatically filled with all exchanged messages (send or receive) in a test case. The message names are defined in the respective send or receive operations in the test.

+
+
+
+

9.9.4. Action condition

+
+

Now we would like to wait for some other test action to execute.

+
+
+
Java
+
+
@CitrusTest
+public void waitTest() {
+    $(waitFor()
+        .time(Duration.ofMillis(10000))
+        .interval(2000)
+        .execution()
+        .action(
+            receive(jmsEndpoint)
+                .message()
+                .body("Wait for me!")
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="WaitTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <wait-for timeout="10" interval="2000">
+          <action>
+            <receive endpoint="jmsEndpoint">
+                <message>
+                    <body><data>Wait for me!</data></body>
+                </message>
+            </receive>
+          </action>
+        </wait-for>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: WaitTest
+actions:
+  - wait-for:
+      timeout: "10"
+      interval: "2000"
+      action:
+        receive:
+          endpoint: "jmsEndpoint"
+          message:
+            body: |
+              Wait for me!
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="WaitTest">
+        <actions>
+            <wait seconds="10" interval="2000">
+              <action>
+                <receive endpoint="jmsEndpoint">
+                    <message>
+                        <payload>Wait for me!</payload>
+                    </message>
+                </receive>
+              </action>
+            </wait>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

You can add any test action to the wait condition so you can execute any other action and wait for its success. This enables us to also use the full send and receive operations on other message transports.

+
+
+
+
+

9.10. Custom containers

+
+

In case you have a custom action container implementation you might also want to use it in Java DSL. The action containers are handled with special care in the Java DSL because they have nested actions. So when you call a test action container in the Java DSL you always have something like this:

+
+
+
Java
+
+
@CitrusTest
+public void containerTest() {
+    $(echo("This echo is outside of the action container"));
+
+    $(sequential()
+        .actions(
+            echo().message("Inside"),
+            echo().message("Inside once more"),
+            echo().message("And again: Inside!")
+        )
+    );
+
+    $(echo().message("This echo is outside of the action container"));
+}
+
+
+
+

Now the three nested actions are added to the action sequential container rather than to the test case itself although we are using the same action Java DSL methods outside the container. This mechanism is only working because Citrus is handling test action containers with special care.

+
+
+

A custom test action container implementation could look like this:

+
+
+
Custom container implementation
+
+
public class ReverseActionContainer extends AbstractActionContainer {
+    @Override
+    public void doExecute(TestContext context) {
+        for (int i = getActions().size(); i > 0; i--) {
+            getActions().get(i-1).execute(context);
+        }
+    }
+}
+
+
+
+

The container logic is very simple: The container executes the nested actions in reverse order. As already mentioned Citrus needs to take special care on all action containers when executing a Java DSL test. This is why you should not execute a custom test container implementation on your own.

+
+
+
Run custom container
+
+
@CitrusTest
+public void containerTest() {
+    ReverseActionContainer reverseContainer = new ReverseActionContainer();
+    reverseContainer.addTestActions(
+        echo().message("Foo"),
+        echo().message("Bar")
+    );
+
+    $(reverseContainer);
+}
+
+
+
+

The above custom container execution is going to fail with internal error as the Citrus Java DSL was not able to recognise the action container as it should be. Also the EchoAction instance creation is not very comfortable. Instead you can use a special container Java DSL syntax also with your custom container implementation:

+
+
+
Generic container syntax
+
+
@CitrusTest
+public void containerTest() {
+    $(container(new ReverseActionContainer())
+        .actions(
+            echo("Foo"),
+            echo("Bar")
+        )
+    );
+}
+
+
+
+

The custom container implementation now works fine with the automatically nested echo actions. And we are able to use the usual Java DSL syntactic sugar for test actions like echo .

+
+
+

In a next step we add a custom superclass for all our test classes which provides a helper method for the custom container implementation in order to have an even more comfortable syntax.

+
+
+
Container creating helper method
+
+
public static AbstractTestContainerBuilder<ReverseActionContainer> reverse() {
+    return container(new ReverseActionContainer());
+}
+
+
+
+

Now all subclasses can use the new reverse method for calling the custom container implementation.

+
+
+
Java
+
+
@CitrusTest
+public void containerTest() {
+    $(reverse()
+        .actions(
+            echo().message("Foo"),
+            echo().message("Bar")
+        )
+    );
+}
+
+
+
+

Nice! This is how we should integrate customized test action containers to the Citrus Java DSL.

+
+
+
+
+
+

10. Endpoints

+
+
+

In one of the previous chapters we have discussed the basic test case structure as we introduced variables and test actions. +The <actions> section contains a list of test actions that take place during the test case. Each test action is executed in +sequential order by default. Citrus offers several built-in test actions that the user can choose from to construct a complex +testing workflow without having to code everything from scratch. In particular Citrus aims to provide all the test actions +that you need as predefined components ready for you to use. The goal is to minimize the coding effort for you so you can +concentrate on the test logic itself.

+
+
+

Exactly the same approach is used in Citrus to provide ready-to-use endpoint components for connecting to different message +transports. There are several ways in an enterprise application to exchange messages with some other application. We have +synchronous interfaces like Http and SOAP WebServices. We have asynchronous messaging with JMS or file transfer FTP interfaces.

+
+
+

Citrus provides endpoint components as client and server to connect with these typical message transports. So you as a tester +must not care about how to send a message to a JMS queue. The Citrus endpoints are configured in the Spring application context +and receive endpoint specific properties like endpoint uri or ports or message timeouts as configuration.

+
+
+

The next figure shows a typical message sending endpoint component in Citrus:

+
+
+

figure_002.jpg

+
+
+

The endpoint producer publishes messages to a destination. This destination can be a JMS queue/topic, a SOAP WebService +endpoint, an Http URL, an FTP folder destination and so on. The producer just takes a previously defined message definition +(header and body) and sends it to the message destination.

+
+
+

Similar to that Citrus defines several endpoint consumer components to consume messages from destinations. This can be +a simple subscription on message channels and JMS queues/topics. In case of SOAP WebServices and Http GET/POST things are +more complicated as we have to provide a server component that clients can connect to. We will handle server related communication +in more detail later on. For now the endpoint consumer component in its most simple way is defined like this:

+
+
+

figure_003.jpg

+
+
+

This is all you need to know about Citrus endpoints. We have mentioned that the endpoints are defined in the Spring application +context. Let’s have a simple example that shows the basic idea:

+
+
+
+
<citrus-jms:endpoint id="helloServiceEndpoint"
+        destination-name="Citrus.HelloService.Request.Queue"
+        connection-factory="myConnectionFactory"/>
+
+
+
+

This is a simple JMS endpoint component in Citrus. The endpoint XML bean definition follows a custom XML namespace and defines +endpoint specific properties like the JMS destination name and the JMS connection factory. The endpoint id is a significant +property as the test cases will reference this endpoint when sending and receiving messages by its identifier.

+
+
+

In the next sections you will learn how a test case uses those endpoint components for producing and consuming messages.

+
+
+

10.1. Send messages

+
+

The <send> action in a test case publishes messages to a destination. The actual message transport connection is defined +with the endpoint component. The test case simply defines the message contents and references a predefined message endpoint +component by its identifier. Endpoint specific configurations are centralized in the Spring bean application context while +multiple test cases can reference the endpoint to actually publish the constructed message to a destination. There are several +message endpoint implementations in Citrus available representing different transport protocols like JMS, SOAP, HTTP, TCP/IP +and many more.

+
+
+

Again the type of transport to use is not specified inside the test case but in the message endpoint definition. The separation +of concerns (test case/message sender transport) gives us a good flexibility of our test cases. The test case does not know +anything about connection factories, queue names or endpoint uri, connection timeouts and so on. The transport internals underneath +a sending test action can change easily without affecting the test case definition. We will see later in this document how to +create different message endpoints for various transports in Citrus. For now we concentrate on constructing the message content +to be sent.

+
+
+

We assume that the message’s body will be plain XML format. Citrus uses XML as the default data format for message body data. +But Citrus is not limited to XML message format though; you can always define other message data formats such as JSON, plain text, +CSV. As XML is still a very popular message format in enterprise applications and message-based solution architectures we have +this as a default format. Anyway Citrus works best on XML bodies and you will see a lot of example code in this document using +XML. Finally let us have a look at a first example how a sending action is defined in the test.

+
+
+
XML DSL
+
+
<testcase name="SendMessageTest">
+    <description>Basic send message example</description>
+
+    <actions>
+        <send endpoint="helloServiceEndpoint">
+            <message>
+                <payload>
+                    <TestMessage>
+                        <Text>Hello!</Text>
+                    </TestMessage>
+                </payload>
+            </message>
+            <header>
+                <element name="Operation" value="sayHello"/>
+            </header>
+        </send>
+    </actions>
+</testcase>
+
+
+
+

Now let’s have a closer look at the sending action. The 'endpoint' attribute might catch your attention first. This attribute +references the message endpoint in Citrus configuration by its identifier. As previously mentioned the message endpoint definition +lives in a separate configuration file and contains the actual message transport settings. In this example the "helloServiceEndpoint" +is referenced which is a JMS endpoint for sending out messages to a JMS queue for instance.

+
+
+

The test case is not aware of any transport details, because it does not have to. The advantages are obvious: On the one +hand multiple test cases can reference the message endpoint definition for better reuse. Secondly test cases are independent +of message transport details. So connection factories, user credentials, endpoint uri values and so on are not present in +the test case.

+
+
+

In other words the "endpoint" attribute of the <send> element specifies which message endpoint definition to use +and therefore where the message should go to. Once again all available message endpoints are configured in a separate Citrus +configuration file. Be sure to always pick the right message endpoint type in order to publish your message to the right +destination.

+
+
+

If you do not like the XML language you can also use pure Java code to define the same test. In Java you would also make +use of the message endpoint definition and reference this instance. The same test as shown above in Java DSL looks like this:

+
+
+
Java DSL designer
+
+
import org.testng.ITestContext;
+import org.testng.annotations.Test;
+import org.citrusframework.annotations.CitrusTest;
+import org.citrusframework.dsl.testng.TestNGCitrusTestDesigner;
+
+@Test
+public class SendMessageTestDesigner extends TestNGCitrusTestDesigner {
+
+    @CitrusTest(name = "SendMessageTest")
+    public void sendMessageTest() {
+        description("Basic send message example");
+
+        send("helloServiceEndpoint")
+            .message()
+            .body("<TestMessage>" +
+                        "<Text>Hello!</Text>" +
+                    "</TestMessage>")
+            .header("Operation", "sayHello");
+    }
+}
+
+
+
+

Instead of using the XML tags for send we use methods from TestNGCitrusTestDesigner class. The same message endpoint is +referenced within the send message action. The body is constructed as plain Java character sequence which is a bit verbose. +We will see later on how we can improve this. For now it is important to understand the combination of send test action +and a message endpoint.

+
+
+ + + + + +
+ + +It is good practice to follow naming conventions when defining names for message endpoints. The intended purpose of +the message endpoint as well as the sending/receiving actor should be clear when choosing the name. For instance messageEndpoint1, +messageEndpoint2 will not give you much hints to the purpose of the message endpoint. +
+
+
+

This is basically how to send messages in Citrus. The test case is responsible for constructing the message content while +the predefined message endpoint holds transport specific settings. Test cases reference endpoint components to publish messages +to the outside world. This is just the start of action. Citrus supports a whole package of other ways how to define and manipulate +the message contents. Read more about message sending actions in actions-send.

+
+
+
+

10.2. Receive messages

+
+

Now we have a look at the message receiving part inside the test. A simple example shows how it works.

+
+
+
XML DSL
+
+
<receive endpoint="helloServiceEndpoint">
+    <message>
+        <payload>
+            <TestMessage>
+                <Text>Hello!</Text>
+            </TestMessage>
+        </payload>
+    </message>
+    <header>
+        <element name="Operation" value="sayHello"/>
+    </header>
+</receive>
+
+
+
+

If we recap the send action of the previous chapter we can identify some common mechanisms that apply for both sending and +receiving actions. The test action also uses the endpoint attribute for referencing a predefined message endpoint. This +time we want to receive a message from the endpoint. Again the test is not aware of the transport details such as JMS connections, +endpoint uri, and so on. The message endpoint component encapsulates this information.

+
+
+

Before we go into detail on validating the received message we have a quick look at the Java DSL variation for the receive +action. The same receive action as above looks like this in Java DSL.

+
+
+
Java DSL designer
+
+
@CitrusTest
+public void messagingTest() {
+    receive("helloServiceEndpoint")
+        .message()
+        .body("<TestMessage>" +
+                    "<Text>Hello!</Text>" +
+                "</TestMessage>")
+        .header("Operation", "sayHello");
+}
+
+
+
+

The receive action waits for a message to arrive. The whole test execution is stopped while waiting for the message. This +is important to ensure the step by step test workflow processing. Of course you can specify message timeouts so the receiver +will only wait a given amount of time before raising a timeout error. Following from that timeout exception the test case +fails as the message did not arrive in time. Citrus defines default timeout settings for all message receiving tasks.

+
+
+

At this point you know the two most important test actions in Citrus. Sending and receiving actions will become the main +components of your integration tests when dealing with loosely coupled message based components in an enterprise application +environment. It is very easy to create complex message flows, meaning a sequence of sending and receiving actions in your +test case. You can replicate use cases and test your message exchange with extended message validation capabilities. See +actions-receive for a more detailed description on how to validate incoming messages and how to expect +message contents in a test case.

+
+
+
+

10.3. Local message store

+
+

All messages that are sent and received during a test case are stored in a local memory storage. This is because we might +want to access the message content later on in a test case. We can do so by using message store functions for loading messages +that have been exchanged earlier in the test. When storing a message in the local storage Citrus uses a message name as +identifier key. This message name is later on used to access the message. You can define the message name in any send or +receive action:

+
+
+
XML DSL
+
+
<receive endpoint="helloServiceEndpoint">
+    <message name="helloMessage">
+        <payload>
+            <TestMessage>
+                <Text>Hello!</Text>
+            </TestMessage>
+        </payload>
+    </message>
+    <header>
+        <element name="Operation" value="sayHello"/>
+    </header>
+</receive>
+
+
+
+
Java DSL designer
+
+
@CitrusTest
+public void messagingTest() {
+    receive("helloServiceEndpoint")
+        .message()
+        .name("helloMessage")
+        .body("<TestMessage>" +
+                    "<Text>Hello!</Text>" +
+                "</TestMessage>")
+        .header("Operation", "sayHello");
+}
+
+
+
+

The receive operation above set the message name to helloMessage. The message received is automatically stored in the local +storage with that name. You can access the message content for instance by using a function:

+
+
+
+
<echo>
+    <message>citrus:message(helloMessage.body())</message>
+</echo>
+
+
+
+

The function loads the helloMessage and prints the body information with the echo test action. In combination with Xpath +or JsonPath functions this mechanism is a good way to access the exchanged message contents later in a test case.

+
+
+ + + + + +
+ + +The storage is for both sent and received messages in a test case. The storage is per test case and contains all sent +and received messages. +
+
+
+

When no explicit message name is given the local storage will construct a default message name. The default name is built +from the action (send or receive) plus the endpoint used to exchange the message. For instance:

+
+
+
+
send(helloEndpoint)
+receive(helloEndpoint)
+
+
+
+

The names above would be generated by a send and receive operation on the endpoint named helloEndpoint.

+
+
+ + + + + +
+ + +The message store is not able to handle multiple message of the same name in one test case. So messages with +identical names will overwrite existing messages in the local storage. +
+
+
+

Now we have seen the basic endpoint concept in Citrus. The endpoint components represent the connections to the test boundary +systems. This is how we can connect to the system under test for message exchange. And this is our main goal with this integration +test framework. We want to provide easy access to common message transports on client and server side so that we can test +the communication interfaces on a real message transport exchange.

+
+
+
+
+
+

11. Direct endpoint

+
+
+

Direct endpoints represent the default in memory messaging solution in Citrus. Producer and consumer components are linked +via queues exchanging messages in memory.

+
+
+ + + + + +
+ + +The direct endpoint configuration components use the default "citrus" configuration namespace and schema definition. +Include this namespace into your Spring bean configuration in order to use the Citrus configuration elements. The namespace +URI and schema location are added to the Spring configuration XML file as follows. +
+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:citrus="http://www.citrusframework.org/schema/config"
+        xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/config
+        http://www.citrusframework.org/schema/config/citrus-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

Right now you are able to use the Citrus XML elements in order to define the direct endpoint components.

+
+
+

11.1. Channel endpoint

+
+

Citrus offers a direct endpoint component that is able to create producers and consumers. Producer and consumer +send and receive messages both to and from a direct endpoint. By default, the endpoint is asynchronous when configured +in the Citrus context.

+
+
+
Java
+
+
@Bean
+public ChannelEndpoint helloEndpoint() {
+    return new ChannelEndpointBuilder()
+        .queue("helloChannel")
+        .build();
+}
+
+@Bean
+public MessageSelectingQueueChannel helloChannel() {
+    return new MessageSelectingQueueChannel();
+}
+
+
+
+
XML
+
+
<citrus:direct-endpoint id="helloEndpoint" queue="helloChannel"/>
+
+<citrus:queue id="helloChannel"/>
+
+
+
+

The Citrus direct endpoint references a queue directly. Inside your test case you can reference the +Citrus endpoint as usual to send and receive messages.

+
+
+

The message sender is now ready to publish messages on the defined queue. The communication is supposed to be asynchronous, +so the producer is not able to process any reply message. We will deal with synchronous communication and reply messages +later in this chapter. You can reference the id of the endpoint in a send and receive test action.

+
+
+
Java
+
+
when(send("helloEndpoint")
+        .message()
+        .body("<v1:HelloRequest xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello World!</v1:Text>" +
+            "</v1:HelloRequest>"));
+
+then(receive("helloEndpoint")
+        .message()
+        .body("<v1:HelloResponse xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello Citrus!</v1:Text>" +
+            "</v1:HelloResponse>"));
+
+
+
+
XML
+
+
<send endpoint="helloEndpoint">
+    <message>
+        <payload>
+            <v1:HelloRequest xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello World!</v1:Text>
+            </v1:HelloRequest>
+        </payload>
+    </message>
+</send>
+
+<receive endpoint="helloEndpoint">
+    <message>
+        <payload>
+            <v1:HelloResponse xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello Citrus!</v1:Text>
+            </v1:HelloResponse>
+        </payload>
+    </message>
+</receive>
+
+
+
+

You can send and receive messages from the same direct endpoint. As usual the receiver connects +to the message destination and waits for messages to arrive. The user can set a receive timeout which is set to 5000 milliseconds +by default. In case no message was received in this time frame the receiver raises timeout errors and the test fails.

+
+
+
+

11.2. Synchronous direct endpoints

+
+

The synchronous direct producer publishes messages and waits synchronously for the response to arrive on a reply queue +destination. The reply queue name is set in the message headers. The counterpart in this communication must send its +reply to that queue. The basic configuration for a synchronous direct endpoint component looks like follows:

+
+
+
Java
+
+
@Bean
+public ChannelSyncEndpoint helloEndpoint() {
+    return new ChannelSyncEndpointBuilder()
+        .queue("helloChannel")
+        .pollingInterval(1000)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus:direct-sync-endpoint id="helloSyncEndpoint"
+                            queue="helloChannel"
+                            polling-interval="1000"/>
+
+
+
+

Synchronous direct endpoints usually do poll for synchronous reply messages for processing the reply messages. +The poll interval is an optional setting in order to manage the amount of reply message handshake attempts. When the endpoint +was able to receive the reply message synchronously the test case can verify the reply.

+
+
+

In case all polling attempts have failed the action raises a timeout error, and the test will fail.

+
+
+ + + + + +
+ + +By default, the direct endpoint uses temporary reply queue destinations. The temporary reply queues are only +used once for a single communication handshake. The temporary reply queue is deleted automatically. +
+
+
+

When sending a message to this endpoint in the first place the producer will wait synchronously for the response message +to arrive on the reply queue. You can receive the reply message in your test case using the same endpoint component. So +we have two actions on the same endpoint, first send then receive.

+
+
+
Java
+
+
when(send("helloSyncEndpoint")
+        .message()
+        .body("<v1:HelloRequest xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello World!</v1:Text>" +
+            "</v1:HelloRequest>"));
+
+then(receive("helloSyncEndpoint")
+        .message()
+        .body("<v1:HelloResponse xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello Citrus!</v1:Text>" +
+            "</v1:HelloResponse>"));
+
+
+
+
XML
+
+
<send endpoint="helloSyncEndpoint">
+    <message>
+        <payload>
+            <v1:HelloRequest xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello World!</v1:Text>
+            </v1:HelloRequest>
+        </payload>
+    </message>
+</send>
+
+<receive endpoint="helloSyncEndpoint">
+    <message>
+        <payload>
+            <v1:HelloResponse xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello Citrus!</v1:Text>
+            </v1:HelloResponse>
+        </payload>
+    </message>
+</receive>
+
+
+
+

This is how you handle synchronous communication as a sender. You publish messages to a queue and wait for reply messages +on a temporary reply queue. The next section deals with the same synchronous communication, but now Citrus will receive +a request and send a synchronous reply message to a temporary reply queue.

+
+
+

As usual the reply queue name is stored in the message headers. Citrus handles this synchronous communication with the +same synchronous direct endpoint component. The handling of temporary reply destinations is done automatically behind +the scenes.

+
+
+

So we have again two actions in our test case, but this time first receive then send.

+
+
+
Java
+
+
when(receive("helloSyncEndpoint")
+        .message()
+        .body("<v1:HelloRequest xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello World!</v1:Text>" +
+            "</v1:HelloRequest>"));
+
+then(send("helloSyncEndpoint")
+        .message()
+        .body("<v1:HelloResponse xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello Citrus!</v1:Text>" +
+            "</v1:HelloResponse>"));
+
+
+
+
XML
+
+
<receive endpoint="helloSyncEndpoint">
+    <message>
+        <payload>
+            <v1:HelloRequest xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello World!</v1:Text>
+            </v1:HelloRequest>
+        </payload>
+    </message>
+</receive>
+
+<send endpoint="helloSyncEndpoint">
+    <message>
+        <payload>
+            <v1:HelloResponse xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello Citrus!</v1:Text>
+            </v1:HelloResponse>
+        </payload>
+    </message>
+</send>
+
+
+
+
+

11.3. Message selectors

+
+

A queue can hold multiple messages at the same time. Usually you receive messages using first-in-first-out pattern. Message +selectors enable you to select messages form that queue so you can pick messages form a queue based on a selector evaluation.

+
+
+

Citrus introduces a special message queue implementation that supports message selectors.

+
+
+
Java
+
+
@Bean
+public MessageSelectingQueueChannel helloChannel() {
+    return new MessageSelectingQueueChannel();
+}
+
+
+
+
XML
+
+
<citrus:queue id="orderChannel" capacity="5"/>
+
+
+
+

We can add a capacity attribute for this queue. A receive test action makes use of message selectors on header values as described +in message-selector.

+
+
+

In addition to that we have implemented other message filter possibilities on message queues that we discuss in the next +sections.

+
+
+
+

11.4. Payload matching selector

+
+

You can select messages based on the payload content. Either you define the expected payload as an exact match in the selector +or you make use of Citrus validation matchers which is more adequate in most scenarios.

+
+
+

Assume there are two different plain text messages living on a message queue waiting to be picked up by a consumer.

+
+
+
+
Hello, welcome!
+
+
+
+
+
GoodBye, see you next time!
+
+
+
+

The tester would like to pick up the message starting with GoodBye in our test case. The other messages should be left on the +queue as we are not interested in it right now. We can define a payload matching selector in the receive action like this:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("payload", "@startsWith(GoodBye)@"))
+        .message()
+        .body("GoodBye, see you next time!"));
+
+
+
+
XML
+
+
<receive endpoint="orderChannelEndpoint">
+    <selector>
+        <element name="payload" value="@startsWith(GoodBye)@"/>
+    </selector>
+    <message>
+        <payload>GoodBye, see you next time!</payload>
+    </message>
+</receive>
+
+
+
+

The Citrus receiver picks up the GoodBye from the queue selected via the payload matching expression defined in the +selector element. Of course, you can also combine message header selectors and payload matching selectors as shown in this +example below where a message header sequenceId is added to the selection logic.

+
+
+
Java
+
+
Map<String, String> selectorMap = new HashMap<>();
+selectorMap.put("payload", "@startsWith(GoodBye)@");
+selectorMap.put("sequenceId", "1234");
+
+when(receive("orderChannelEndpoint")
+        .selector(selector)
+        .message()
+        .body("GoodBye, see you next time!"));
+
+
+
+
XML
+
+
<selector>
+    <element name="payload" value="@startsWith(GoodBye)@"/>
+    <element name="sequenceId" value="1234"/>
+</selector>
+
+
+
+
+

11.5. Root QName selector

+
+

As a special payload matching selector you can use the XML root QName of your message as selection criteria when dealing +with XML message content. Let’s see how this works in a small example:

+
+
+

We have two different XML messages on a message queue waiting to be picked up by a consumer.

+
+
+
+
<HelloMessage xmlns="http://citrusframework.org/schema">Hello Citrus</HelloMessage>
+
+
+
+
+
<GoodbyeMessage xmlns="http://citrusframework.org/schema">Goodbye Citrus</GoodbyeMessage>
+
+
+
+

We would like to pick up the GoodbyeMessage in our test case. The HelloMessage should be left on the message queue +as we are not interested in it right now. We can define a root qname message selector in the receive action like this:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("root-qname", "GoodbyeMessage"))
+        .message()
+        .body("<GoodbyeMessage xmlns=\"http://citrusframework.org/schema\">Goodbye Citrus</GoodbyeMessage>"));
+
+
+
+
XML
+
+
<receive endpoint="orderChannelEndpoint">
+    <selector>
+        <element name="root-qname" value="GoodbyeMessage"/>
+    </selector>
+    <message>
+        <payload>
+            <GoodbyeMessage xmlns="http://citrusframework.org/schema">Goodbye Citrus</GoodbyeMessage>
+        </payload>
+    </message>
+</receive>
+
+
+
+

The Citrus receiver picks up the GoodbyeMessage from the queue selected via the root qname of the XML message payload. +Of course, you can also combine message header selectors and root qname selectors as shown in this example below where a +message header sequenceId is added to the selection logic.

+
+
+
Java
+
+
Map<String, String> selectorMap = new HashMap<>();
+selectorMap.put("root-qname", "GoodbyeMessage");
+selectorMap.put("sequenceId", "1234");
+
+when(receive("orderChannelEndpoint")
+        .selector(selector)
+        .message()
+        .body("GoodBye, see you next time!"));
+
+
+
+
XML
+
+
<selector>
+    <element name="root-qname" value="GoodbyeMessage"/>
+    <element name="sequenceId" value="1234"/>
+</selector>
+
+
+
+

As we deal with XML qname values, we can also use namespaces in our selector root qname selection.

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("root-qname", "{http://citrusframework.org/schema}GoodbyeMessage"))
+        .message()
+        .body("<GoodbyeMessage xmlns=\"http://citrusframework.org/schema\">Goodbye Citrus</GoodbyeMessage>"));
+
+
+
+
XML
+
+
<selector>
+    <element name="root-qname" value="{http://citrusframework.org/schema}GoodbyeMessage"/>
+</selector>
+
+
+
+
+

11.6. Xpath selector

+
+

It is also possible to evaluate some XPath expression on the message payload in order to select a message from a message +queue. The XPath expression outcome must match an expected value and only then the message is consumed from the queue.

+
+
+

The syntax for the XPath expression is to be defined as the element name like this:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("xpath://Order/status", "pending"))
+        .message()
+        .body("<Order><status>pending</status></Order>"));
+
+
+
+
XML
+
+
<selector>
+    <element name="xpath://Order/status" value="pending"/>
+</selector>
+
+
+
+

The message selector looks for order messages with status="pending" in the message payload. This means that following +messages would get accepted/declined by the message selector.

+
+
+
+
<Order><status>pending</status></Order> <!-- ACCEPTED -->
+<Order><status>finished</status></Order> <!-- NOT ACCEPTED -->
+
+
+
+

Of course, you can also use XML namespaces in your XPath expressions when selecting messages from queues.

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("xpath://ns1:Order/ns1:status", "pending"))
+        .message()
+        .body("<Order><status>pending</status></Order>"));
+
+
+
+
XML
+
+
<selector>
+    <element name="xpath://ns1:Order/ns1:status" value="pending"/>
+</selector>
+
+
+
+

Namespace prefixes must match the incoming message - otherwise the XPath expression will not work as expected. In our example +the message should look like this:

+
+
+
+
<ns1:Order xmlns:ns1="http://citrus.org/schema"><ns1:status>pending</ns1:status></ns1:Order>
+
+
+
+

Knowing the correct XML namespace prefix is not always easy. If you are not sure which namespace prefix to choose Citrus +ships with a dynamic namespace replacement for XPath expressions. The XPath expression looks like this and is most flexible:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap(
+                "xpath://{http://citrus.org/schema}:Order/{http://citrus.org/schema}:status", "pending"))
+        .message()
+        .body("<Order><status>pending</status></Order>"));
+
+
+
+
XML
+
+
<selector>
+    <element name="xpath://{http://citrus.org/schema}:Order/{http://citrus.org/schema}:status"
+                value="pending"/>
+</selector>
+
+
+
+

This will match all incoming messages regardless the XML namespace prefix that is used.

+
+
+
+

11.7. JsonPath selector

+
+

It is also possible to evaluate some JsonPath expression on the message payload in order to select a message from a message +queue. The JsonPath expression outcome must match an expected value and only then the message is consumed from the queue.

+
+
+

The syntax for the JsonPath expression is to be defined as the element name like this:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("jsonPath:$.order.status", "pending"))
+        .message()
+        .body("{ \"order\": { \"status\": \"pending\" } }"));
+
+
+
+
XML
+
+
<selector>
+    <element name="jsonPath:$.order.status" value="pending"/>
+</selector>
+
+
+
+

The message selector looks for order messages with status="pending" in the message payload. This means that following messages would get accepted/declined by the message selector.

+
+
+
+
{ "order": { "status": "pending" } } //ACCEPTED
+{ "order": { "status": "finished" } } //NOT ACCEPTED
+
+
+
+
+
+
+

12. JMS support

+
+
+

Citrus provides support for sending and receiving JMS messages. We have to separate between synchronous and asynchronous +communication. So in this chapter we explain how to work with JMS message endpoints for synchronous and asynchronous communication

+
+
+ + + + + +
+ + +The JMS components in Citrus are kept in a separate Maven module. If not already done so you have to include the module +as Maven dependency to your project +
+
+
+
Maven module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-jms</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

Citrus provides a "citrus-jms" configuration namespace and schema definition for JMS related components and features. Include +this namespace into your Spring configuration in order to use the Citrus JMS configuration elements. The namespace URI and +schema location are added to the Spring configuration XML file as follows.

+
+
+
Spring configuration namespace
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:citrus-jms="http://www.citrusframework.org/schema/jms/config"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans
+       http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.citrusframework.org/schema/jms/config
+       http://www.citrusframework.org/schema/jms/config/citrus-jms-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

Now you are able to use customized Citrus XML elements in order to define the JMS endpoint components.

+
+
+

12.1. JMS endpoints

+
+

By default, Citrus JMS endpoints are asynchronous. Asynchronous messaging means that the endpoint will not wait for a response +message after sending a message.

+
+
+

The test case itself should not know about JMS transport details like queue names or connection credentials. This information +is stored in the endpoint component configuration that lives in the basic project configuration files in Citrus. So let us +have a look at a simple JMS message endpoint configuration in Citrus.

+
+
+
Java
+
+
@Bean
+public JmsEndpoint helloServiceEndpoint() {
+    return new JmsEndpointBuilder()
+        .destination("Citrus.HelloService.Request.Queue")
+        .timeout(10000L)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-jms:endpoint id="helloServiceEndpoint"
+          destination-name="Citrus.HelloService.Request.Queue"
+          timeout="10000"/>
+
+
+
+

The endpoint component receives a unique id as well as a JMS destination name. This can be a queue or topic destination. +JMS topics are described later on in this chapter. For now the timeout setting completes the first JMS endpoint component +definition example.

+
+
+ + + + + +
+ + +In addition to the destination-name attribute you can also provide a reference to a destination implementation. +
+
+
+
Java
+
+
@Bean
+public JmsEndpoint helloServiceEndpoint() {
+    return new JmsEndpointBuilder()
+        .destination(helloServiceQueue())
+        .build();
+}
+
+@Bean
+public ActiveMQQueue helloServiceQueue() {
+    return new ActiveMQQueue("Citrus.HelloService.Request.Queue");
+}
+
+
+
+
XML
+
+
<citrus-jms:endpoint id="helloServiceEndpoint"
+                     destination="helloServiceQueue"/>
+
+<amq:queue id="helloServiceQueue" physicalName="Citrus.HelloService.Request.Queue"/>
+
+
+
+

The destination attribute references to a JMS destination object in the same Spring application context. In the example +above we used the ActiveMQ queue destination component. The destination reference can also refer to a JNDI lookup for instance.

+
+
+

The endpoint needs a JMS connection factory for connecting to a JMS message broker. The connection factory is also added +as component bean to the Citrus project (e.g. in the Spring application context).

+
+
+
Java
+
+
@Bean
+public ActiveMQConnectionFactory connectionFactory() {
+    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
+    factory.setBrokerURL("tcp://localhost:61616");
+    return factory;
+}
+
+
+
+
XML
+
+
<bean id="connectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory">
+  <property name="brokerURL" value="tcp://localhost:61616"/>
+</bean>
+
+
+
+

The JMS connection factory receives the broker URL and is able to hold many other connection specific options. In this example +we use the Apache ActiveMQ connection factory implementation as we want to use the ActiveMQ message broker. Citrus works +with a bean id connectionFactory. All Citrus JMS component will automatically recognize this connection factory.

+
+
+ + + + + +
+ + +The configuration makes it very easy to connect to other JMS broker implementations, too (e.g. Apache ActiveMQ, TIBCO Enterprise +Messaging Service, IBM Websphere MQ). Just add the required connection factory implementation as connectionFactory bean. +
+
+
+ + + + + +
+ + +All JMS endpoint components in Citrus will automatically load the factory named connectionFactory. +You can use the connection-factory endpoint attribute in order to use another connection factory instance with different +bean names. +
+
+
+
Java
+
+
@Bean
+public JmsEndpoint helloServiceEndpoint() {
+    return new JmsEndpointBuilder()
+        .destination("Citrus.HelloService.Request.Queue")
+        .connectionFactory(myConnectionFactory())
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-jms:endpoint id="helloServiceEndpoint"
+      destination-name="Citrus.HelloService.Request.Queue"
+      connection-factory="myConnectionFactory"/>
+
+
+
+

As an alternative to that you may want to use a special Spring JMS template implementation as custom bean in your endpoint.

+
+
+
Java
+
+
@Bean
+public JmsEndpoint helloServiceEndpoint() {
+    return new JmsEndpointBuilder()
+        .destination("Citrus.HelloService.Request.Queue")
+        .jmsTemplate(myJmsTemplate())
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-jms:endpoint id="helloServiceEndpoint"
+              destination-name="Citrus.HelloService.Request.Queue"
+              jms-template="myJmsTemplate"/>
+
+
+
+

The endpoint is now ready to be used inside a test case. You can send or receive messages using this endpoint. The test +actions reference the JMS endpoint using its unique identifier. When sending a message the message endpoint creates a JMS +message producer and will simply publish the message to the defined JMS destination. As the communication is asynchronous +by default the producer does not wait for a synchronous response.

+
+
+

When receiving messages the endpoint creates a JMS consumer on the JMS destination. The endpoint then acts as a message +driven listener. This means that the message consumer connects to the given destination and waits for messages to arrive.

+
+
+
Java
+
+
when(send("helloServiceEndpoint")
+        .message()
+        .body("..."));
+
+then(receive("helloServiceEndpoint")
+        .message()
+        .body("..."));
+
+
+
+
XML
+
+
<testcase name="jmsMessagingTest">
+    <actions>
+        <send endpoint="helloServiceEndpoint">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </send>
+
+        <receive endpoint="helloServiceEndpoint">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </receive>
+    </actions>
+</testcase>
+
+
+
+
+

12.2. JMS synchronous endpoints

+
+

When using synchronous message endpoints Citrus will manage a reply destination for receiving a synchronous response message +on the reply destination. The following figure illustrates that we now have two destinations in our communication scenario.

+
+
+

figure_006.jpg

+
+
+

The synchronous message endpoint component is similar to the asynchronous variant that has been discussed before. The only +difference is that the endpoint will automatically manage a reply destination behind the scenes. By default, Citrus uses +temporary reply destinations that get automatically deleted after the communication handshake is done. Again we need to use +a JMS connection factory in the configuration as the component needs to connect to a JMS message broker.

+
+
+
Java
+
+
@Bean
+public JmsSyncEndpoint helloServiceSyncEndpoint() {
+    return new JmsSyncEndpointBuilder()
+        .destination("Citrus.HelloService.InOut.Queue")
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-jms:sync-endpoint id="helloServiceSyncEndpoint"
+          destination-name="Citrus.HelloService.InOut.Queue"
+          timeout="10000"/>
+
+
+
+

The synchronous component defines a target destination which again is either a queue or topic destination. The endpoint will +create the temporary reply destinations on its own. As soon as the endpoint has published a request message it waits synchronously for the +response message to arrive at the reply destination. You can receive this reply message in your test case by referencing +this same endpoint in a receiving test action. The timeout setting defines how long the endpoint waits for the synchronous reply. +In case no reply message arrives in time a message timeout error is raised respectively.

+
+
+

See the following example test case which references the synchronous message endpoint in its send and receive test action +in order to send out a message and wait for the synchronous response.

+
+
+
Java
+
+
when(send("helloServiceSyncEndpoint")
+        .message()
+        .body("..."));
+
+then(receive("helloServiceSyncEndpoint")
+        .message()
+        .body("..."));
+
+
+
+
XML
+
+
<testcase name="jmsSyncMessagingTest">
+    <actions>
+        <send endpoint="helloServiceSyncEndpoint">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </send>
+
+        <receive endpoint="helloServiceSyncEndpoint">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </receive>
+    </actions>
+</testcase>
+
+
+
+

We initiated the synchronous communication by sending a message on the synchronous endpoint. The second step then receives +the synchronous message on the temporary reply destination that was automatically created for you.

+
+
+

If you rather want to define a static reply destination you can do so, too. The static reply destination is not deleted +after the communication handshake. You may need to work with message selectors then in order to pick the right response message +that belongs to a specific communication handshake. You can define a static reply destination on the synchronous endpoint +component as follows.

+
+
+
Java
+
+
@Bean
+public JmsSyncEndpoint helloServiceSyncEndpoint() {
+    return new JmsSyncEndpointBuilder()
+        .destination("Citrus.HelloService.InOut.Queue")
+        .replyDestination("Citrus.HelloService.Reply.Queue")
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-jms:sync-endpoint id="helloServiceSyncEndpoint"
+          destination-name="Citrus.HelloService.InOut.Queue"
+          reply-destination-name="Citrus.HelloService.Reply.Queue"
+          timeout="10000"/>
+
+
+
+

Instead of using the reply-destination-name feel free to use the destination reference with reply-destination attribute. +Again you can use a JNDI lookup then to reference a destination object.

+
+
+ + + + + +
+ + +Be aware of permissions that are mandatory for creating temporary destinations. Citrus tries to create temporary +queues on the JMS message broker. Following from that the Citrus JMS user has to have the permission to do so. Be sure that +the user has the sufficient rights when using temporary reply destinations. +
+
+
+

Up to now we have sent a message and waited for a synchronous response in the next step. Now it is also possible to switch +the directions of send and receive actions. Then we have the situation where Citrus receives a JMS message first and then +Citrus is in charge of providing a proper synchronous response message to the initial sender.

+
+
+

figure_007.jpg

+
+
+

In this scenario the foreign message producer has stored a dynamic JMS reply queue destination to the JMS header. So Citrus +has to send the reply message to this specific reply destination, which is dynamic of course. Fortunately the heavy lift +is done with the JMS endpoint and we do not have to change anything in our configuration. Again we just define a synchronous +message endpoint in the application context.

+
+
+
Java
+
+
@Bean
+public JmsSyncEndpoint helloServiceSyncEndpoint() {
+    return new JmsEndpointBuilder()
+        .destination("Citrus.HelloService.InOut.Queue")
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-jms:sync-endpoint id="helloServiceSyncEndpoint"
+      destination-name="Citrus.HelloService.InOut.Queue"
+      timeout="10000"/>
+
+
+
+

Now the only thing that changes here is that we first receive a message in our test case on this endpoint. The second step +is a send message action that references this same endpoint and we are done. Citrus automatically manages the reply destinations +for us.

+
+
+
Java
+
+
when(receive("helloServiceSyncEndpoint")
+        .message()
+        .body("..."));
+
+then(send("helloServiceSyncEndpoint")
+        .message()
+        .body("..."));
+
+
+
+
XML
+
+
<testcase name="jmsSyncMessagingTest">
+  <actions>
+        <receive endpoint="helloServiceSyncEndpoint">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </receive>
+
+        <send endpoint="helloServiceSyncEndpoint">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </send>
+    </actions>
+</testcase>
+
+
+
+
+

12.3. JMS topics

+
+

Up to now we have used JMS queue destinations on our endpoints. Citrus is also able to connect to JMS topic destinations. +In contrary to JMS queues which represents the point-to-point communication JMS topics use publish-subscribe mechanism +in order to spread messages over JMS.

+
+
+

A JMS topic producer publishes messages to the topic, while the topic accepts multiple message subscriptions and delivers +the message to all subscribers.

+
+
+

The Citrus JMS endpoints offer the attribute 'pub-sub-domain'. Once this attribute is set to true Citrus will use JMS +topics instead of queue destinations.

+
+
+ + + + + +
+ + +When using JMS topics in your project you may want to configure a jakarta.jms.TopicConnectionFactory instead of a +jakarta.jms.QueueConnectionFactory. +
+
+
+

See the following example where the publish-subscribe attribute is set to true in JMS message endpoint components.

+
+
+
Java
+
+
@Bean
+public JmsSyncEndpoint helloServiceSyncEndpoint() {
+    return new JmsEndpointBuilder()
+        .destination("Citrus.HelloService.Topic")
+        .pubSubDomain(true)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-jms:endpoint id="helloServiceTopicEndpoint"
+            destination="Citrus.HelloService.Topic"
+            pub-sub-domain="true"/>
+----
+
+
+
+

When using JMS topics you will be able to subscribe several test actions to the topic destination and receive a message +multiple times as all subscribers will receive the message. Also other applications besides Citrus are also able to consume +messages with a topic subscription. This allows Citrus and other software components to coexist in a test environment.

+
+
+

12.3.1. JMS topic subscriber

+
+

By default, Citrus does not deal with durable subscribers when using JMS topics. This means that messages that were sent +in advance to the message subscription are not delivered to the Citrus message endpoint. Following from that racing conditions +may cause problems when using JMS topic endpoints in Citrus.

+
+
+

Be sure to start the Citrus subscription before messages are sent to the topic. Otherwise, you may lose some messages that +were sent in advance to the subscription. By default Citrus will use a subscription per receive action using the JMS endpoint +in the test cases. This means that the topic subscription is started and stopped per receive action when the action is performed +inside a test case.

+
+
+

In order to solve racing conditions for messages that are sent prior to the subscription you can also use an auto-start +setting on the JMS endpoint component. This causes Citrus to start/stop the subscription based on the endpoint lifecycle +instead of linking the subscription to the receive action. When the endpoint is ready the subscription is started and all +incoming message events are cached and stored to an internal in-memory message channel for later consumption in the tests.

+
+
+

Here is the endpoint configuration with auto-start enabled.

+
+
+
Java
+
+
@Bean
+public JmsSyncEndpoint helloServiceSyncEndpoint() {
+    return new JmsEndpointBuilder()
+        .destination("Citrus.HelloService.Topic")
+        .pubSubDomain(true)
+        .autoStart(true)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-jms:endpoint id="helloServiceTopicEndpoint"
+            destination="helloServiceTopic"
+            pub-sub-domain="true"
+            auto-start="true"/>
+
+
+
+ + + + + +
+ + +The auto-start option is only valid in combination with pub-sub-domain enabled. Other combinations may be ignored +or lead to configuration failure at start-up. +
+
+
+

Now with auto-start set to true the Citrus JMS endpoint will setup a subscription at the very beginning when the endpoint +is loaded in the project. The internal message channel name is derived from the JMS endpoint id and follows the pattern:

+
+
+

{citrus-jms:endpoint@id}":subscriber.inbound"

+
+
+

The in-memory channel id is the combined result of the JMS endpoint id and the postfix :subscriber.inbound. In our example +this would be helloServiceTopicEndpoint:subscriber.inbound. Now all messages sent to the topic in advance to the tests are +cached and ready for consumption and verification in the test.

+
+
+

In the test nothing really changes for you. You simply use a receive test action on the JMS endpoint as you would have done +before. In the background Citrus will automatically receive the messages from the in memory cache. This mechanism enables +us to not loose any messages that were sent to the topic in prior to Citrus firing up the test cases.

+
+
+ + + + + +
+ + +There is a small downside of the auto-start topic subscriber. As incoming events are cached internally you +will not be able to receive the same topic event in multiple receive actions within the Citrus project. If you need to receive +the topic message in several places within Citrus you need to set up several JMS topic endpoints with auto-start enabled. +In case you just have one receive action at a time you are good to go with the auto-start subscriber as it is described here. +
+
+
+
+
+

12.4. JMS topic durable subscription

+
+

When using durable subscriptions on JMS message brokers the message events on a topic are preserved for a subscriber even +if the subscriber is inactive. This means that the subscriber may not loose any message events on that particular topic as +the subscription is durable and all events are stored for later consumption.

+
+
+

In case you want to activate durable subscriptions on the Citrus JMS endpoint use the durable-subscription setting in the +configuration:

+
+
+
Java
+
+
@Bean
+public JmsSyncEndpoint helloServiceSyncEndpoint() {
+    return new JmsEndpointBuilder()
+        .destination("Citrus.HelloService.Topic")
+        .pubSubDomain(true)
+        .durableSubscription(true)
+        .autoStart(true)
+        .build();
+}
+
+@Bean SingleConnectionFactory topicConnectionFactory() {
+    ActiveMQConnectionFactory factory = new ActiveMQConnectionFactory();
+    factory.setBrokerURL("tcp://localhost:61616");
+    factory.setClientID("citrusDurableConnectionFactory");
+    factory.setWatchTopicAdvisories(false);
+
+    return new SingleConnectionFactory(factory);
+}
+
+
+
+
XML
+
+
<citrus-jms:endpoint id="helloServiceTopicEndpoint"
+            connection-factory="topicConnectionFactory"
+            destination="helloServiceTopic"
+            pub-sub-domain="true"
+            durable-subscription="true"
+            auto-start="true"/>
+
+<bean class="org.apache.activemq.artemis.core.server.embedded.EmbeddedActiveMQ" init-method="start" destroy-method="stop">
+  <property name="SecurityManager" ref="securityManager"/>
+</bean>
+
+<bean id="topicConnectionFactory" class="org.springframework.jms.connection.SingleConnectionFactory">
+  <constructor-arg>
+    <bean class="org.apache.activemq.artemis.jms.client.ActiveMQTopicConnectionFactory">
+      <property name="brokerURL" value="tcp://localhost:61616"/>
+      <property name="clientID" value="citrusDurableConnectionFactory"/>
+    </bean>
+  </constructor-arg>
+</bean>
+
+<bean id="securityManager" class="org.apache.activemq.artemis.spi.core.security.ActiveMQJAASSecurityManager">
+  <constructor-arg value="org.apache.activemq.artemis.spi.core.security.jaas.InVMLoginModule"/>
+  <constructor-arg>
+    <bean class="org.apache.activemq.artemis.core.config.impl.SecurityConfiguration">
+      <constructor-arg name="users">
+        <map>
+          <entry key="citrus" value="citrus"/>
+        </map>
+      </constructor-arg>
+      <constructor-arg name="roles">
+        <map>
+          <entry key="citrus">
+            <list>
+              <value>citrus</value>
+            </list>
+          </entry>
+        </map>
+      </constructor-arg>
+      <property name="DefaultUser" value="citrus"/>
+    </bean>
+  </constructor-arg>
+</bean>
+
+
+
+

The durable subscription in Citrus implies that the subscriber is started when the endpoint configuration is done. All +messages received on that subscription are cached internally until the receive action in the test case is performed for +actual message consumption. The auto-start setting is required to be enabled for this reason when using durable subscriptions.

+
+
+

By default, Citrus is using the JMS endpoint subscriber name as durable subscription name (e.g. helloServiceTopicEndpoint:subscriber). +You can overwrite the durable subscriber name with durable-subscriber-name setting on the endpoint.

+
+
+

In addition to that you need to add a client id on the connection factory so the message broker is able to identify the durable +subscription with the client address. Also we use the SingleConnectionFactory implementation of Spring as a connection factory +wrapper so we do not fail because of multiple connections with the same durable subscriber id.

+
+
+
+

12.5. JMS message headers

+
+

The JMS specification defines a set of special message header entries that can go into your JMS message. These JMS headers +are stored differently in a JMS message header than other custom header entries do. This is why these special header values +should be set in a special syntax that we discuss in the next paragraphs.

+
+
+
Java
+
+
when(receive("helloServiceSyncEndpoint")
+        .message()
+        .header("citrus_jms_correlationId", "${correlationId}")
+        .header("citrus_jms_messageId", "${messageId}")
+        .header("citrus_jms_redelivered", "${redelivered}")
+        .header("citrus_jms_timestamp", "${timestamp}")
+        .body("..."));
+
+
+
+
XML
+
+
<header>
+    <element name="citrus_jms_correlationId" value="${correlationId}"/>
+    <element name="citrus_jms_messageId" value="${messageId}"/>
+    <element name="citrus_jms_redelivered" value="${redelivered}"/>
+    <element name="citrus_jms_timestamp" value="${timestamp}"/>
+</header>
+
+
+
+

As you see all JMS specific message headers use the citrus_jms_ prefix. This prefix comes from Spring Integration message +header mappers that take care of setting those headers in the JMS message header properly.

+
+
+

Typing of message header entries may also be of interest in order to meet the JMS standards of typed message headers. For +instance the following message header is of type double and is therefore transferred via JMS as a double value.

+
+
+
Java
+
+
when(receive("jmsEndpoint")
+        .message()
+        .header("amount", 19.75D)
+        .body("..."));
+
+
+
+
XML
+
+
<header>
+    <element name="amount" value="19.75" type="double"/>
+</header>
+
+
+
+
+

12.6. Dynamic destination names

+
+

Usually you set the target destination as property on the JMS endpoint component. In some cases it might be useful to set +the target destination in a more dynamic way during the test run. You can do this by adding a special message header named +citrus_jms_destination_name. This header is automatically interpreted by the Citrus JMS endpoint and is set as the target +destination before a message is sent.

+
+
+
Java
+
+
when(send("jmsEndpoint")
+        .message()
+        .header("citrus_jms_destination_name", "dynamic.destination.name")
+        .body("..."));
+
+
+
+
XML
+
+
<send endpoint="jmsEndpoint">
+    <message>
+        ...
+    </message>
+    <header>
+        <element name="citrus_jms_destination_name" value="dynamic.destination.name"/>
+    </header>
+</send>
+
+
+
+

This action above will send the message to the destination "dynamic.destination.name" no matter what default destination +is set on the referenced endpoint component named jmsEndpoint. The dynamic destination name setting also supports test +variables. This means you can use variables and functions in the destination name, too.

+
+
+

Another possibility for dynamic JMS destinations is given with the dynamic endpoints.

+
+
+
+

12.7. SOAP over JMS

+
+

When sending SOAP messages you have to deal with proper envelope, body and header construction. In Citrus you can add a +special message converter that performs the heavy lift for you. Just add the message converter to the JMS endpoint as shown +in the next program listing:

+
+
+
Java
+
+
@Bean
+public JmsSyncEndpoint helloServiceSoapJmsEndpoint() {
+    return new JmsEndpointBuilder()
+        .destination("Citrus.HelloService.Request.Queue")
+        .messageConverter(soapJmsMessageConverter())
+        .build();
+}
+
+@Bean
+public SoapJmsMessageConverter soapJmsMessageConverter() {
+    return new SoapJmsMessageConverter();
+}
+
+
+
+
XML
+
+
<citrus-jms:endpoint id="helloServiceSoapJmsEndpoint"
+        destination-name="Citrus.HelloService.Request.Queue"
+        message-converter="soapJmsMessageConverter"/>
+
+<bean id="soapJmsMessageConverter" class="org.citrusframework.jms.message.SoapJmsMessageConverter"/>
+
+
+
+

With this message converter you can skip the SOAP envelope completely in your test case. You just deal with the message +body payload and the header entries. The rest is done by the message converter. So you get proper SOAP messages on the +producer and consumer side.

+
+
+
+
+
+

13. Apache Kafka Support

+
+
+

Kafka is a distributed streaming platform that enables you to publish and subscribe to streams of records, similar to a +message queue or enterprise messaging system. Citrus provides support for publishing/consuming records to/from a Kafka topic. +Citrus acts as producer or consumer as the Citrus Kafka endpoint can be used bidirectional. In the current version Citrus +supports asynchronous communication only.

+
+
+ + + + + +
+ + +The Kafka components in Citrus are shipped in a separate Maven module. If not already done so you have to include +the module as Maven dependency to your project +
+
+
+
Maven dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-kafka</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

In case you are using XML Spring configuration files Citrus provides a "citrus-kafka" configuration namespace and schema +definition for Kafka related components and features. Include this namespace into your Spring XML configuration in order +to use the Citrus Kafka configuration elements. The namespace URI and schema location are added to the Spring bean root element.

+
+
+
Spring bean configuration namespace
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:citrus-kafka="http://www.citrusframework.org/schema/kafka/config"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans
+       http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.citrusframework.org/schema/kafka/config
+       http://www.citrusframework.org/schema/kafka/config/citrus-kafka-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

Now you are able to use customized Citrus XML elements in order to define the Kafka endpoint components. In case you are +using the Spring Java configuration with @Bean annotations you do not require this step.

+
+
+

13.1. Kafka Endpoint

+
+

By default, Citrus Kafka endpoints are asynchronous. Asynchronous messaging means that the endpoint will not wait for any +response message after sending or receiving a message.

+
+
+

The endpoint component configuration holds transport specific configuration details such as topic names and server connectivity +settings. So let us have a look at a simple Kafka message endpoint configuration in Citrus.

+
+
+
Java
+
+
@Bean
+public KafkaEndpoint helloKafkaEndpoint() {
+    return new KafkaEndpointBuilder()
+                    .topic("hello")
+                    .server("localhost:9092")
+                    .build();
+}
+
+
+
+
XML
+
+
<citrus-kafka:endpoint id="helloKafkaEndpoint"
+          topic="hello"
+          server="localhost:9092"/>
+
+
+
+

The endpoint component receives a unique id as well as a Kafka topic name. The bootstrap server url that points to the Kafka +message brokers completes our first Kafka endpoint component definition. With this configuration you will be able to send and +receive records on the given topic.

+
+
+

By default, the endpoint uses the topic partition 0. The consumer on this endpoint is automatically added to a consumer +group citrus_kafka_group. You can customize these settings on the endpoint.

+
+
+
Java
+
+
@Bean
+public KafkaEndpoint helloKafkaEndpoint() {
+    return new KafkaEndpointBuilder()
+                    .topic("hello")
+                    .server("localhost:9092")
+                    .partition(1)
+                    .consumerGroup("citrus_group")
+                    .build();
+}
+
+
+
+
XML
+
+
<citrus-kafka:endpoint id="helloKafkaEndpoint"
+          topic="hello"
+          server="localhost:9092"
+          partition="1"
+          consumer-group="citrus_group"/>
+
+
+
+

Note that for effective message consumption it is advisable to use random consumer groups. +Both the Java and XML DSL support random consumer groups, when enabled: randomConsumerGroup(true) or random-consumer-group="true".

+
+
+

The endpoint is now ready to be used inside a test case. +The test simply references the endpoint by its name when sending or receiving.

+
+
+

In case of a send operation the endpoint creates a Kafka producer and will simply publish the records to the defined Kafka topic. +As the communication is asynchronous by default, the producer does not wait for a response.

+
+
+

In case of a receive operation the endpoint creates a Kafka consumer instance in the defined (possibly random) consumer group.

+
+
+ + + + + +
+ + +By default, the consumer starts a subscription on the given topic and acts as a polling listener. +This means that the message consumer connects to the given topic and polls one single record at a time. +The action is the ready to perform the validation process that verifies the record, once it has been received. +This approach requires looping to find specific Kafka messages, which can be highly inefficient, especially when the Kafka topic experiences high traffic. +See Kafka message selectors for a more effective Kafka message selection. +
+
+
+

13.1.1. Configuration

+
+

The following table shows all available settings on a Kafka endpoint in Citrus:

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyMandatoryDefaultDescription

id

Yes

-

+

Identifying name of the endpoint. Only required for XML configuration.

+

topic

No

-

+

Default topic to use with this endpoint. Multiple topics are supported by using a comma delimited list of names (e.g. topic1,topic2,topicN). + If not specified the test case send operation needs to set the topic as message header information.

+

server

No

localhost:9092

+

A comma delimited list of host/port pairs to use for establishing the initial connection to the Kafka cluster. + Usually it is only required to connect to one Kafka server instance in the cluster. + Kafka then makes sure that the endpoint is automatically introduced to all other servers in the cluster. + This list only impacts the initial hosts used to discover the full set of servers.

+

timeout

No

5000

+

Timeout in milliseconds. + For producers the timeout is set as time to wait for the message to be accepted by the cluster. + For consumers the timeout is used for polling records on a specific topic.

+

message-converter

No

org.citrusframework.kafka.message.KafkaMessageConverter

+

Converter maps internal Citrus message objects to ProducerRecord/ConsumerRecord objects. + The converter implementation takes care of message key, value, timestamp and special message headers.

+

header-mapper

No

org.citrusframework.kafka.message.KafkaMessageHeaderMapper

+

Header mapper maps Kafka record information (e.g. topic name, timestamp, message key) to internal message headers (org.citrusframework.kafka.message.KafkaMessageHeaders) and vice versa.

+

auto-commit

No

true

+

When this setting is enabled the consumer will automatically commit consumed records so the offset pointer on the Kafka topic is set to the next record.

+

auto-commit-interval

No

1000

+

Interval in milliseconds the auto commit operation on consumed records is performed.

+

offset-reset

No

earliest

+

When consuming records from a topic partition and the current offset does not exist on that partition Kafka will automatically seek to a valid offset position on that partition. + The offset-reset setting sets where to find the new position (latest, earliest, none). + If none is set the consumer will receive an exception instead of resetting the offset to a valid position.

+

partition

No

0

+

Partition id that the consumer will be assigned to.

+

consumer-group

No

citrus_kafka_group

+

Consumer group name. +Please keep in mind that records are load balanced across consumer instances with the same consumer group name set. +So you might run into message timeouts when using multiple Kafka endpoints with the same consumer group name.

+

random-consumer-group

No

false

+

Whether to use random consumer gorup names. + Note that these will all be prefixed by citrus_kafka_ and end with a random 10 characters alphabetic suffix.

+

key-serializer

No

org.apache.kafka.common.serialization.StringSerializer

+

Serializer implementation that converts message key values. + By default, keys are serialized to String values.

+

key-deserializer

No

org.apache.kafka.common.serialization.StringDeserializer

+

Deserializer implementation that converts message key values. + By default, keys are deserialized as String values.

+

value-serializer

No

org.apache.kafka.common.serialization.StringSerializer

+

Serializer implementation that converts record values. + By default values are serialized to String values.

+

value-deserializer

No

org.apache.kafka.common.serialization.StringDeserializer

+

Deserializer implementation that converts record values. + By default, values are deserialized as String values.

+

client-id

No

citrus_kafka_[producer/consumer]_{randomUUID}

+

An id string to pass to the server when producing/consuming records. + Used as logical application name to be included in server-side request logging.

+

consumer-properties

No

-

+

Map of consumer property settings to apply to the Kafka consumer configuration. + This enables you to overwrite any consumer setting with respective property key value pairs.

+

producer-properties

No

-

+

Map of producer property settings to apply to the Kafka producer configuration. + This enables you to overwrite any producer setting with respective property key value pairs.

+
+
+
+

13.1.2. Producer and Consumer Properties

+
+

The Citrus Kafka endpoint component is also able to receive a map of Kafka producer and consumer properties. These property +settings overwrite any predefined setting on the producer/consumer instance created by the endpoint. You can use the Kafka +property keys with respective values for producer and consumer config maps.

+
+
+
Java
+
+
@Bean
+public KafkaEndpoint helloKafkaEndpoint() {
+    return new KafkaEndpointBuilder()
+                    .consumerProperties(getConsumerProps())
+                    .producerProperties(getProducerProps())
+                    .build();
+}
+
+private Map<String, Object> getProducerProps() {
+    ...
+}
+
+private Map<String, Object> getConsumerProps() {
+    ...
+}
+
+
+
+
XML
+
+
<citrus-kafka:endpoint id="helloKafkaEndpoint"
+                               consumer-properties="consumerProps"
+                               producer-properties="producerProps"/>
+
+
+<util:map id="producerProps">
+  <entry key="bootstrap.servers" value="localhost:9093,localhost:9094"/>
+  <entry key="retries" value="10" value-type="java.lang.Integer"/>
+  <entry key="max.request.size" value="1024" value-type="java.lang.Integer"/>
+  <entry key="ssl.keystore.location" value="/path/to/keystore.jks"/>
+  <entry key="ssl.kestore.password" value="secr3t"/>
+</util:map>
+
+<util:map id="consumerProps">
+  <entry key="bootstrap.servers" value="localhost:9093,localhost:9094"/>
+  <entry key="session.timeout.ms" value="10000" value-type="java.lang.Integer"/>
+  <entry key="enable.auto.commit" value="true" value-type="java.lang.Boolean"/>
+  <entry key="ssl.truststore.location" value="/path/to/truststore.jks"/>
+  <entry key="ssl.truststore.password" value="secr3t"/>
+</util:map>
+
+
+
+
+
+

13.2. Kafka Synchronous Endpoints

+
+

Not implemented yet.

+
+
+
+

13.3. Kafka Message Headers

+
+

The Kafka Citrus integration defines a set of special message header entries that are either used to manipulate the endpoint +behavior or as validation object. These Kafka specific headers are stored with a header key prefix citrus_kafka_*. You +can set or verify those headers in send and receive actions as follows:

+
+
+
Java
+
+
send(helloKafkaEndpoint)
+    .message()
+    .header(KafkaMessageHeaders.TOPIC, "my.very.special.topic")
+    .header(KafkaMessageHeaders.MESSAGE_KEY, "myKey")
+    .header(KafkaMessageHeaders.PARTITION, 1);
+
+
+
+
XML
+
+
<header>
+    <element name="citrus_kafka_topic" value="my.very.special.topic"/>
+    <element name="citrus_kafka_messageKey" value="myKey"/>
+    <element name="citrus_kafka_partition" value="1" />
+</header>
+
+
+
+

The header entries above are used in a send operation in order to overwrite the topic destination, to set the record key +and to specify the target partition of the producer record. These settings do only apply for the very specific send operation. +Default values on the Kafka endpoint are overwritten respectively.

+
+
+ + + + + +
+ + +Typing of message header entries may also be of interest in order to meet the Kafka standards. For instance the following +message key is of type java.lang.Integer and is therefore transferred via Kafka’s key-serializer as an integer value. You need +to set the header type to integer and use a org.apache.kafka.common.serialization.IntegerSerializer as key-serializer on +the Kafka endpoint configuration. +
+
+
+
Java
+
+
send(helloKafkaEndpoint)
+    .message()
+    .header(KafkaMessageHeaders.MESSAGE_KEY, 1L);
+
+
+
+
XML
+
+
<header>
+    <element name="citrus_kafka_messageKey" value="1" type="integer"/>
+</header>
+
+
+
+

In case of a receive operation message headers are valuable validation objects that can be used to verify the message content with +an expected behavior.

+
+
+
Java
+
+
receive(helloKafkaEndpoint)
+    .message()
+    .header(KafkaMessageHeaders.TIMESTAMP, Matchers.greaterThan(0))
+    .header(KafkaMessageHeaders.TOPIC, "my.expected.topic")
+    .header(KafkaMessageHeaders.MESSAGE_KEY, "myKey")
+    .header(KafkaMessageHeaders.PARTITION, 1)
+    .header(KafkaMessageHeaders.OFFSET, Matchers.greaterThanOrEqualTo(0));
+
+
+
+
XML
+
+
<header>
+    <element name="citrus_kafka_timestamp" value="@assertThat(greaterThan(0))@"/>
+    <element name="citrus_kafka_topic" value="my.expected.topic"/>
+    <element name="citrus_kafka_messageKey" value="myKey"/>
+    <element name="citrus_kafka_partition" value="1"/>
+    <element name="citrus_kafka_offset" value="@assertThat(greaterThanOrEqualTo(0))@"/>
+</header>
+
+
+
+

These are the available Kafka message headers in Citrus:

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
HeaderNameTypeDescription

KafkaMessageHeaders.TIMESTAMP

citrus_kafka_timestamp

java.lang.Long

+

Record timestamp value

+

KafkaMessageHeaders.TOPIC

citrus_kafka_topic

java.lang.String

+

Topic name

+

KafkaMessageHeaders.MESSAGE_KEY

citrus_kafka_messageKey

java.lang.Object

+

Record key

+

KafkaMessageHeaders.PARTITION

citrus_kafka_partition

java.lang.Integer

+

Topic partition id

+

KafkaMessageHeaders.OFFSET

citrus_kafka_offset

java.lang.Long

+

Record offset on partition

+
+
+
+

13.4. Kafka Message

+
+

Citrus also provides a Kafka message implementation that you can use on any send and receive operation. This enables you +to set special message headers in a more comfortable way when using the Java fluent API:

+
+
+
Use message objects
+
+
send(helloKafkaEndpoint)
+    .message(new KafkaMessage("sayHello")
+                    .topic("my.very.special.topic")
+                    .messageKey("myKey")
+                    .partition(1));
+
+
+
+

The message implementation provides fluent API builder methods for each Kafka specific header.

+
+
+

Additionally, when receiving messages, you might want to use Kafka message selectors.

+
+
+
+

13.5. Kafka Message Selector

+
+

The Kafka Message Selector feature allows you to selectively receive messages from a Kafka topic based on specific criteria. +This powerful functionality enables you to filter Kafka messages by different criteria, e.g. based on headers. +Additionally, the defined time window for message retrieval significantly improves the performance. +Imagine a large Kafka topic with thousands of events. +Looking through all of these would require an immense amount of resources and time. +Instead, selective message consumption starts at an offset Ox = OT-n. +Where T is the current timestamp and n is the maximum timespan in which the wanted event is expected to have been published.

+
+
+

13.5.1. Basic Usage

+
+

The Kafka Message Selector can be used in various ways, depending on your preferred syntax and test framework.

+
+
+
Java
+
+
then(
+    receive(kafkaEndpoint)
+        .selector(
+            kafkaMessageFilter()
+                .eventLookbackWindow(Duration.ofSeconds(1L))
+                .kafkaMessageSelector(kafkaHeaderEquals("key", "value"))
+                .build()
+        )
+);
+
+
+
+
Java 2
+
+
then(
+    kafkaEndpoint.findKafkaEventHeaderEquals(Duration.ofSeconds(1L), "key", "value")
+);
+
+
+
+
XML
+
+
<receive endpoint="helloKafkaEndpoint">
+    <description>Receive selective Kafka message</description>
+    <selector>
+      <element name="header-filter-key" value="key"/>
+      <element name="header-filter-value" value="value"/>
+      <element name="event-lookback-window" value="PT1S"/>
+    </selector>
+</receive>
+
+
+
+
+

13.5.2. Configuration

+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Java DSLXML DSLDescription

eventLookbackWindow

event-lookback-window

This defines how far back in time the selector should search for messages. + When using XML configuration, the event lookback window must be specified as an <<https://en.wikipedia.org/wiki/ISO_8601,ISO-8601 duration string>>. + For example, PT1S represents a duration of 1 second.

kafkaMessageSelector

See <<kafka-message-selector-types,Selector Types

This specifies the criteria for message selection. + In the examples, we’re using kafkaHeaderEquals("key", "value"), which selects messages where a header with the key "key" exactly matches the value "value".

pollTimeout

poll-timeout

The timeout duration for each poll operation when consuming messages from Kafka. + This value determines how long the consumer will wait for new records in each poll cycle. + It is not the overall receive action timeout! + When using XML configuration, the poll timeout must be specified as an <<https://en.wikipedia.org/wiki/ISO_8601,ISO-8601 duration string>>. + For example, PT0.100S represents a duration of 1 millisecond.

+
+
+

13.5.3. Selector Types

+
+
Message Header
+

The framework provides two main types of message header selectors. +From within the Java DSL, these two can be easily invoked using statically provided methods:

+
+
+
    +
  1. +

    kafkaHeaderEquals: Matches messages where the specified header key exactly equals the given value.

    +
  2. +
  3. +

    kafkaHeaderContains: Matches messages where the specified header key contains the given value as a substring.

    +
  4. +
+
+
+

More advanced users might want to do pre- or suffix matching. +That is also possible.

+
+
+
Java
+
+
then(
+    receive(kafkaWithRandomConsumerGroupEndpoint)
+        .selector(
+            kafkaMessageFilter()
+                .eventLookbackWindow(Duration.ofSeconds(1L))
+                .kafkaMessageSelector(
+                    KafkaMessageByHeaderSelector.builder()
+                        .key("key")
+                        .value("prefix")
+                        .matchingMechanism(STARTS_WITH)
+                        .build()
+                )
+                .build()
+        )
+);
+
+
+
+

Note that if the specified key is null, all headers in the record will be matched against the value. +If the value is null however, all headers with the exact key match.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
Java DSLXML DSLDescription

key

header-filter-key

Key-filter being applied to Kafka messages. + Matches exact if specified, all keys if null or empty.

value

header-filter-value

Value-filter being applied to Kafka messages. + Matches all values if null or empty. + Otherwise matches as specified by strategy.

valueMatchingStrategy

header-filter-comparator

Specifies how the value is being matched. + Must be one of EQUALS, CONTAINS, STARTS_WITH or ENDS_WITH. + It defaults to EQUALS, if not specified.

+
+
+

13.5.4. Best Practices

+
+

Set Appropriate Lookback Window: Choose a lookback window that balances between finding the desired message and performance. +A larger window might find older messages but could impact performance.

+
+
+

Combine with Other Citrus Features: The Kafka Message Selector can be combined with other Citrus testing features for comprehensive Kafka integration testing.

+
+
+
+
+

13.6. Dynamic Kafka Endpoints

+
+

As we have seen before the topic name can be overwritten in each send and receive operation by specifying the citrus_kafka_topic +message header. In addition to that you can make use of completely dynamic Kafka endpoints, too.

+
+
+

The dynamic endpoint is created on the fly with respective settings. So you can use the kafka endpoint component in your +test as follows:

+
+
+
Java
+
+
send("kafka:hello")
+    .message()
+    .body("foo")
+    .header(KafkaMessageHeaders.MESSAGE_KEY, 1);
+
+
+
+
XML
+
+
<send endpoint="kafka:hello">
+    <message>
+        ...
+    </message>
+    <header>
+        <element name="citrus_kafka_messageKey" value="1"/>
+    </header>
+</send>
+
+
+
+

This action above will create a dynamic Kafka endpoint and publish the message to the hello topic. The dynamic endpoint +url uses the kafka: scheme and gives the topic name as resource path. In addition to that the dynamic endpoint url is able +to set multiple parameters such as server. Let’s have a look at this in a small example.

+
+
+
Java
+
+
send("kafka:hello?server=localhost:9091")
+    .message(new KafkaMessage("foo"));
+
+
+
+
XML
+
+
<send endpoint="kafka:hello?server=localhost:9091">
+    <message>
+        ...
+    </message>
+</send>
+
+
+
+

You can add multiple parameters to the endpoint url in order to set properties on the dynamic endpoint. You can read more +about dynamic endpoints in chapter dynamic endpoints.

+
+
+
+

13.7. Embedded Kafka Server

+
+

The Kafka message broker is composed of a Zookeeper server and a Kafka server. Citrus provides an embedded server (for testing purpose only!) +that is able to be started within your integration test environment. The server cluster is configured with one single Zookeeper +server and a single Kafka server. You can define server ports and broker properties such as topics, number of partitions and +broker ids. Given topics are automatically added via admin client on the Kafka server with given amount of partitions.

+
+
+

You can add the embedded server component to the Spring application context as normal Spring bean. The server will automatically +start and stop within the application context lifecycle. The Zookeeper log directory is located in the Java temp directory +and is automatically deleted on JVM exit.

+
+
+

See the following configuration how to use the embedded server component:

+
+
+
Java
+
+
@Bean
+public EmbeddedKafkaServer kafkaServer() {
+    return new EmbeddedKafkaServerBuilder()
+                    .topics("foo", "bar")
+                    .kafkaServerPort(9091)
+                    .build();
+}
+
+
+
+
XML
+
+
<citrus-kafka:embedded-server id="kafkaServer"
+                                topics="foo,bar"
+                                kafka-server-port="9091"/>
+
+
+
+

The embedded server component provides following properties to set:

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
NameTypeDescription

topics

java.lang.String

+

Comma delimited list of topic names that automatically will be created on the server.

+

kafka-server-port

java.lang.Integer

+

Port of the embedded Kafka server

+

zookeeper-port

java.lang.Integer

+

Zookeeper server port. By default, a random port is used.

+

broker-properties

java.util.Map

+

Map of broker property key-value pairs that overwrite the default broker properties. For a list of available properties + please review the official Kafka documentation.

+

partitions

java.lang.Integer

+

Number of partitions to create for each topic

+

log-dir-path

java.lang.String

+

Path to Zookeeper log directory. The Zookeeper server will create its data directory in this directory. By default, the + Java temp directory is used.

+

auto-delete-logs

java.lang.Boolean

+

Auto delete Zookeeper log directories on exit. Default is true.

+
+
+
+
+
+

14. Http REST support

+
+
+

REST APIs have gained more and more significance regarding client-server interfaces with message exchange over Http. Http +is a synchronous protocol by nature so the client blocks in order to wait for the server response synchronously. Citrus +is able to connect with Http services and REST APIs on both client and server side with a powerful JSON message data support.

+
+
+

In the next sections you will learn how to invoke Http services as a client and how to handle REST Http requests in a test case. +The chapter deals with setting up an Http server in order to accept client requests and provide proper Http responses with +GET, PUT, DELETE or POST request method.

+
+
+ + + + + +
+ + +The http components in Citrus are kept in a separate Maven module. So you should add the module as Maven dependency +to your project accordingly. +
+
+
+
Http module dependency
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-http</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

As Citrus provides a customized Http configuration schema for the Spring application context configuration files. Simply +include the http-config namespace in the configuration XML files as follows.

+
+
+
Spring bean definition namespace
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+   xmlns:citrus="http://www.citrusframework.org/schema/config"
+   xmlns:citrus-http="http://www.citrusframework.org/schema/http/config"
+   xsi:schemaLocation="
+   http://www.springframework.org/schema/beans
+   http://www.springframework.org/schema/beans/spring-beans.xsd
+   http://www.citrusframework.org/schema/config
+   http://www.citrusframework.org/schema/config/citrus-config.xsd
+   http://www.citrusframework.org/schema/http/config
+   http://www.citrusframework.org/schema/http/config/citrus-http-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

Now we are ready to use the customized Citrus Http configuration elements with the citrus-http namespace prefix.

+
+
+

14.1. Http REST client

+
+

On the client side Citrus uses a simple Http message client component connecting to the server. The request-url attribute +defines the Http server endpoint URL to connect to. You can reference this client in your test case in order to send and +receive messages. Citrus as client waits for the response message from the server. After that the response message goes +through the validation process as usual.

+
+
+
Java
+
+
@Bean
+public HttpClient httpClient() {
+    return new HttpClientBuilder()
+        .requestUrl("http://localhost:8080/hello")
+        .requestMethod(HttpMethod.GET)
+        .contentType("application/xml")
+        .charset("UTF-8")
+        .timeout(60000L)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:client id="httpClient"
+          request-url="http://localhost:8080/hello"
+          request-method="GET"
+          content-type="application/xml"
+          charset="UTF-8"
+          timeout="60000"/>
+
+
+
+

The request-method defines the Http method to use. In addition to that we can specify the content-type of the request +we are about to send. The charset is also added to the content-type header. In case you do not want to set the charset at +all please specify an empty string as the default value is UTF-8.

+
+
+

The client builds the Http request and sends it to the Http server. While the client is waiting for the synchronous Http +response to arrive we are able to poll several times for the response message in our test case. As usual you can use the +same client endpoint in your test case to send and receive messages synchronously. In case the reply message comes in too +late according to the timeout settings a respective timeout error is raised.

+
+
+

Http defines several request methods that a client can use to access Http server resources. In the example client above we +are using GET as default request method. Of course you can overwrite this setting in a test case action by setting the +Http request method inside the sending test action. The Http client component can be used as normal endpoint in a sending +test action. Use something like this in your test:

+
+
+
Java
+
+
send("httpClient")
+    .message()
+    .body("Hello HttpServer")
+    .header(HttpMessageHeaders.HTTP_REQUEST_METHOD, HttpMethod.POST.name())
+
+
+
+
XML
+
+
<send endpoint="httpClient">
+    <message>
+        <payload>
+            <TestMessage>
+                <Text>Hello HttpServer</Text>
+            </TestMessage>
+        </payload>
+    </message>
+    <header>
+        <element name="citrus_http_method" value="POST"/>
+    </header>
+</send>
+
+
+
+ + + + + +
+ + +Citrus uses the Spring REST template mechanism for sending out Http requests. This means you have great customizing +opportunities with a special REST template configuration. You can think of basic Http authentication, read timeouts and +special message factory implementations. Just use the custom REST template attribute in client configuration like this: +
+
+
+
Java
+
+
@Bean
+public HttpClient httpClient() {
+    return new HttpClientBuilder()
+        .requestUrl("http://localhost:8080/hello")
+        .requestMethod(HttpMethod.GET)
+        .contentType("text/plain")
+        .restTemplate(customizedRestTemplate())
+        .timeout(60000L)
+        .build();
+}
+
+@Bean
+public RestTemplate customizedRestTemplate() {
+    RestTemplate restTemplate = new RestTemplate();
+
+    StringHttpMessageConverter converter = new StringHttpMessageConverter();
+    converter.setSupportedMediaTypes(Collections.singletonList("text/plain"));
+
+    restTemplate.setMessageConverters(Collections.singletonList(converter));
+
+    restTemplate.setErrorHandler(customErrorHandler());
+
+    HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory();
+    requestFactory.setReadTimeout(9000L);
+
+    restTemplate.setRequestFactory(requestFactory);
+
+    return restTemplate;
+}
+
+
+
+
XML
+
+
<citrus-http:client id="httpClient"
+                   request-url="http://localhost:8080/hello"
+                   request-method="GET"
+                   content-type="text/plain"
+                   rest-template="customizedRestTemplate"/>
+
+<!-- Customized rest template -->
+<bean name="customizedRestTemplate" class="org.springframework.web.client.RestTemplate">
+  <property name="messageConverters">
+    <util:list id="converter">
+      <bean class="org.springframework.http.converter.StringHttpMessageConverter">
+        <property name="supportedMediaTypes">
+          <util:list id="types">
+            <value>text/plain</value>
+          </util:list>
+        </property>
+      </bean>
+    </util:list>
+  </property>
+  <property name="errorHandler">
+    <!-- Custom error handler -->
+    <ref bean ="customErrorHandler"/>
+  </property>
+  <property name="requestFactory">
+    <bean class="org.springframework.http.client.HttpComponentsClientHttpRequestFactory">
+      <property name="readTimeout" value="9000"/>
+    </bean>
+  </property>
+</bean>
+
+
+
+

Up to now we have used a generic send test action to send Http requests as a client. This is completely valid strategy +as the Citrus Http client is a normal message endpoint.

+
+
+

In order to simplify the Http usage in a test case Citrus also provides special test action implementations for Http.

+
+
+ + + + + +
+ + +These Http specific actions are located in a separate XML namespace. In case you are writing XML test cases you need +to add this namespace to our test case XML first. +
+
+
+
Add Citrus Http action namespace
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:http="http://www.citrusframework.org/schema/http/testcase"
+        xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/http/testcase
+        http://www.citrusframework.org/schema/http/testcase/citrus-http-testcase.xsd">
+
+      [...]
+
+    </beans>
+
+
+
+

The test case is now ready to use the specific Http test actions.

+
+
+
Java
+
+
http().client("httpClient")
+        .send()
+        .post("/customer")
+        .message()
+        .body("<customer>" +
+                "<id>citrus:randomNumber()</id>" +
+                "<name>testuser</name>" +
+              "</customer>")
+        .contentType(MediaType.APPLICATION_XML_VALUE)
+        .accept(MediaType.APPLICATION_XML_VALUE)
+        .header("X-CustomHeaderId", "${custom_header_id}");
+
+
+
+
XML
+
+
<http:send-request client="httpClient">
+  <http:POST path="/customer">
+    <http:headers content-type="application/xml" accept="application/xml">
+      <http:header name="X-CustomHeaderId" value="${custom_header_id}"/>
+    </http:headers>
+    <http:body>
+      <http:data>
+        <![CDATA[
+          <customer>
+            <id>citrus:randomNumber()</id>
+            <name>testuser</name>
+          </customer>
+        ]]>
+      </http:data>
+    </http:body>
+  </http:POST>
+</http:send-request>
+
+
+
+

The action above uses several Http specific settings such as the request method POST as well as the content-type and +accept headers. As usual the send action needs a target Http client endpoint component. We can specify a request path +attribute that added as relative path to the base uri used on the client.

+
+
+

When using a GET request we can specify some request uri parameters.

+
+
+
Java
+
+
http().client("httpClient")
+        .send()
+        .get("/customer/${custom_header_id}")
+        .message()
+        .contentType(MediaType.APPLICATION_XML_VALUE)
+        .accept(MediaType.APPLICATION_XML_VALUE)
+        .queryParam("type", "active");
+
+
+
+
XML
+
+
<http:send-request client="httpClient">
+  <http:GET path="/customer/${custom_header_id}">
+    <http:params content-type="application/xml" accept="application/xml">
+      <http:param name="type" value="active"/>
+    </http:params>
+  </http:GET>
+</http:send-request>
+
+
+
+

The send action above uses a GET request on the endpoint uri http://localhost:8080/customer/1234?type=active.

+
+
+

Of course when sending Http client requests we are also interested in receiving Http response messages. We want to validate +the success response with Http status code.

+
+
+
Java
+
+
http().client("httpClient")
+        .receive()
+        .response(HttpStatus.OK)
+        .message()
+        .body("<customer>" +
+                "<id>citrus:randomNumber()</id>" +
+                "<name>testuser</name>" +
+              "</customer>")
+        .header("X-CustomHeaderId", "${custom_header_id}");
+
+
+
+
XML
+
+
<http:receive-response client="httpClient">
+  <http:headers status="200" reason-phrase="OK" version="HTTP/1.1">
+    <http:header name="X-CustomHeaderId" value="${custom_header_id}"/>
+  </http:headers>
+  <http:body>
+    <http:data>
+      <![CDATA[
+          <customerResponse>
+            <success>true</success>
+          </customerResponse>
+      ]]>
+    </http:data>
+  </http:body>
+</http:receive-response>
+
+
+
+

The receive-response test action also uses a client component. We can expect response status code information such as +status and reason-phrase . Of course Citrus will raise a validation exception in case Http status codes mismatch.

+
+
+ + + + + +
+ + +By default, the client component will add the Accept http header and set its value to a list of all supported encodings +on the host operating system. This list can get quite big so you may want to not set this default accept header. The setting +is done in the Spring RestTemplate: +
+
+
+
Java
+
+
@Bean
+public RestTemplate customizedRestTemplate() {
+    RestTemplate restTemplate = new RestTemplate();
+
+    StringHttpMessageConverter converter = new StringHttpMessageConverter();
+    converter.setWriteAcceptCharset(false);
+
+    restTemplate.setMessageConverters(Collections.singletonList(converter));
+
+    return restTemplate;
+}
+
+
+
+
XML
+
+
<bean name="customizedRestTemplate" class="org.springframework.web.client.RestTemplate">
+    <property name="messageConverters">
+        <util:list id="converter">
+            <bean class="org.springframework.http.converter.StringHttpMessageConverter">
+                <property name="writeAcceptCharset" value="false"/>
+            </bean>
+        </util:list>
+    </property>
+</bean>
+
+
+
+

Add this custom RestTemplate configuration and set it to the client component with rest-template property. Fortunately the +Citrus client component provides a separate setting default-accept-header which is a Boolean setting. By default, this +setting is set to true so the default accept header is automatically added to all requests. If you set this flag to false +the header is not set:

+
+
+
Java
+
+
@Bean
+public HttpClient httpClient() {
+    return new HttpClientBuilder()
+        .requestUrl("http://localhost:8080/hello")
+        .requestMethod(HttpMethod.GET)
+        .contentType("text/plain")
+        .defaultAcceptHeader(false)
+        .timeout(60000L)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:client id="httpClient"
+                   request-url="http://localhost:8080/hello"
+                   request-method="GET"
+                   content-type="text/plain"
+                   default-accept-header="false"/>
+
+
+
+

Of course, you can set the Accept header on each send operation in order to tell the server what kind of content types +are supported in response messages.

+
+
+

Now we can send and receive messages as Http client with specific test actions. Now let’s move on to the Http server.

+
+
+
+

14.2. Http client interceptors

+
+

The client component is able to add custom interceptors that participate in the request/response processing. The interceptors +need to implement the common interface org.springframework.http.client.ClientHttpRequestInterceptor.

+
+
+
Java
+
+
@Bean
+public HttpClient httpClient() {
+    return new HttpClientBuilder()
+        .requestUrl("http://localhost:8080/hello")
+        .requestMethod(HttpMethod.GET)
+        .interceptor(new LoggingClientInterceptor())
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:client id="httpClient"
+                  request-url="http://localhost:8080/hello"
+                  request-method="GET"
+                  interceptors="clientInterceptors"/>
+
+<util:list id="clientInterceptors">
+  <bean class="org.citrusframework.http.interceptor.LoggingClientInterceptor"/>
+</util:list>
+
+
+
+

The sample above adds the Citrus logging client interceptor that logs requests and responses exchanged with that client +component. You can add custom interceptor implementations here in order to participate in the request/response message processing.

+
+
+
+

14.3. Http REST server

+
+

Receiving Http requests requires an Http server listening on a port on your local machine. Citrus offers an embedded Http +server which is capable of handling incoming Http requests. The server accepts client connections and must provide a proper +Http response. In the next section you will see how to simulate server side Http REST service with Citrus.

+
+
+
Java
+
+
@Bean
+public HttpServer httpServer() {
+    return new HttpServerBuilder()
+        .port(8080)
+        .autoStart(true)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:server id="httpServer"
+                port="8080"
+                auto-start="true"/>
+
+
+
+

Citrus uses an embedded Jetty server that will automatically start when the Citrus context is loaded (auto-start="true"). +The basic connector is listening on port 8080 for requests. Test cases can interact with this server instance via message +channels by default. The server provides an inbound channel that holds incoming request messages. The test case can receive +those requests from the channel with a normal receive test action. In a second step the test case can provide a synchronous +response message as reply which will be automatically sent back to the Http client as response.

+
+
+

figure_008.jpg

+
+
+

The figure above shows the basic setup with inbound channel and reply channel. You as a tester should not worry about this +too much. By default, you as a tester just use the server as synchronous endpoint in your test case. This means that you +simply receive a message from the server and send a response back.

+
+
+
Java
+
+
receive("httpServer")
+    .message()
+    .body("...");
+
+send("httpServer")
+    .message()
+    .body("...")
+    .header(HttpMessageHeaders.HTTP_STATUS_CODE, 200);
+
+
+
+
XML
+
+
<receive endpoint="httpServer">
+    <message>
+        <data>
+          [...]
+        </data>
+    </message>
+</receive>
+
+<send endpoint="httpServer">
+    <message>
+        <data>
+          [...]
+        </data>
+    </message>
+</send>
+
+
+
+

As you can see we reference the server id in both receive and send actions. The Citrus server instance will automatically +send the response back to the calling Http client. In most cases this is exactly what we want to do - send back a response +message that is specified inside the test. The Http server component by default uses a channel endpoint adapter in order to +forward all incoming requests to an in-memory message channel. This is done completely behind the scenes. The Http server +component provides some more customization possibilities when it comes to endpoint adapter implementations. This topic is +discussed in a separate section endpoint-adapter. Up to now we keep it simple by synchronously receiving +and sending messages in the test case.

+
+
+ + + + + +
+ + +The default channel endpoint adapter automatically creates an inbound message channel where incoming messages are stored +too internally. So if you need to clean up a server that has already stored some incoming messages you can do this easily by +purging the internal message channel. The message channel follows a naming convention {serverName}.inbound where {serverName} +is the Spring bean name of the Citrus server endpoint component. If you purge this internal channel in a before test nature +you are sure that obsolete messages on a server instance get purged before each test is executed. +
+
+
+

So let’s get back to our mission of providing response messages as server to connected clients. As you might know Http REST +works with some characteristic properties when it comes to send and receive messages. For instance a client can send different +request methods GET, POST, PUT, DELETE, HEAD and so on. The Citrus server may verify this method when receiving client requests. +Therefore we have introduced special Http test actions for server communication. Have a look at a simple example:

+
+
+
Java
+
+
http().server("httpServer")
+    .receive()
+    .post("/test")
+    .message()
+    .contentType("application/xml")
+    .accept("application/xml")
+    .body("<testRequestMessage>" +
+            "<text>Hello HttpServer</text>" +
+          "</testRequestMessage>")
+    .header("Authorization", "Basic c29tZVVzZXJuYW1lOnNvbWVQYXNzd29yZA==")
+    .header("X-CustomHeaderId", "${custom_header_id}")
+    .extract(fromHeaders()
+                .header("X-MessageId", "message_id"));
+
+http().server("httpServer")
+    .send()
+    .response(HttpStatus.OK)
+    .message()
+    .contentType("application/xml")
+    .body("<testResponseMessage>" +
+            "<text>Hello Citrus</text>" +
+          "</testResponseMessage>")
+    .header("X-CustomHeaderId", "${custom_header_id}")
+    .header("X-MessageId", "${message_id}");
+
+
+
+
XML
+
+
<http:receive-request server="helloHttpServer">
+  <http:POST path="/test">
+    <http:headers content-type="application/xml" accept="application/xml, */*">
+      <http:header name="X-CustomHeaderId" value="${custom_header_id}"/>
+      <http:header name="Authorization" value="Basic c29tZVVzZXJuYW1lOnNvbWVQYXNzd29yZA=="/>
+    </http:headers>
+    <http:body>
+    <http:data>
+      <![CDATA[
+        <testRequestMessage>
+          <text>Hello HttpServer</text>
+        </testRequestMessage>
+      ]]>
+    </http:data>
+    </http:body>
+  </http:POST>
+  <http:extract>
+    <http:header name="X-MessageId" variable="message_id"/>
+  </http:extract>
+</http:receive-request>
+
+<http:send-response server="helloHttpServer">
+  <http:headers status="200" reason-phrase="OK" version="HTTP/1.1">
+    <http:header name="X-MessageId" value="${message_id}"/>
+    <http:header name="X-CustomHeaderId" value="${custom_header_id}"/>
+    <http:header name="Content-Type" value="application/xml"/>
+  </http:headers>
+  <http:body>
+  <http:data>
+    <![CDATA[
+      <testResponseMessage>
+        <text>Hello Citrus</text>
+      </testResponseMessage>
+    ]]>
+  </http:data>
+  </http:body>
+</http:send-response>
+
+
+
+

We receive a client request and validate that the request method is POST on request path /test . Now we can validate +special message headers such as content-type . In addition to that we can check custom headers and basic authorization +headers. As usual the optional message body is compared to an expected message template. The custom X-MessageId header +is saved to a test variable message_id for later usage in the response.

+
+
+

The response message defines Http typical entities such as status and reason-phrase. Here the tester can simulate +404 NOT_FOUND errors or similar other status codes that get sent back to the client. In our example everything is OK +and we send back a response body and some custom header entries.

+
+
+

That is basically how Citrus simulates Http server operations. We receive the client request and validate the request properties. +Then we send back a response with an Http status code.

+
+
+

This completes the server actions on Http message transport. Now we continue with some more Http specific settings and features.

+
+
+
+

14.4. Http headers

+
+

When dealing with Http request/response communication we always deal with Http specific headers. The Http protocol defines +a group of header attributes that both client and server need to be able to handle. You can set and validate these Http +headers in Citrus quite easy. Let us have a look at a client operation in Citrus where some Http headers are explicitly +set before the request is sent out.

+
+
+
Java
+
+
http().client("httpClient")
+    .send()
+    .post()
+    .message()
+    .contentType("application/xml")
+    .accept("application/xml")
+    .body("<testRequestMessage>" +
+            "<text>Hello HttpServer</text>" +
+          "</testRequestMessage>")
+    .header("X-CustomHeaderId", "${custom_header_id}");
+
+
+
+
XML
+
+
<http:send-request client="httpClient">
+  <http:POST>
+    <http:headers>
+        <http:header name="X-CustomHeaderId" value="${custom_header_id}"/>
+        <http:header name="Content-Type" value="application/xml"/>
+        <http:header name="Accept" value="application/xml"/>
+    </http:headers>
+    <http:body>
+        <http:payload>
+            <testRequestMessage>
+                <text>Hello HttpServer</text>
+            </testRequestMessage>
+        </http:payload>
+    </http:body>
+  </http:POST>
+</http:send-request>
+
+
+
+

We are able to set custom headers (X-CustomHeaderId) that go directly into the Http header section of the request. In +addition to that testers can explicitly set Http reserved headers such as Content-Type . Fortunately you do not have +to set all headers on your own. Citrus will automatically set the required Http headers for the request. So we have the +following Http request which is sent to the server:

+
+
+
Sample Http request
+
+
POST /test HTTP/1.1
+Accept: application/xml
+Content-Type: application/xml
+X-CustomHeaderId: 123456789
+Accept-Charset: macroman
+User-Agent: Jakarta Commons-HttpClient/3.1
+Host: localhost:8091
+Content-Length: 175
+<testRequestMessage>
+    <text>Hello HttpServer</text>
+</testRequestMessage>
+
+
+
+

On server side testers are interested in validating the Http headers. Within Citrus receive action you simply define the +expected header entries. The Http specific headers are automatically available for validation as you can see in this example:

+
+
+
Java
+
+
http().server("httpServer")
+    .receive()
+    .post()
+    .message()
+    .contentType("application/xml")
+    .accept("application/xml")
+    .body("<testRequestMessage>" +
+            "<text>Hello HttpServer</text>" +
+          "</testRequestMessage>")
+    .header("X-CustomHeaderId", "${custom_header_id}");
+
+
+
+
XML
+
+
<http:receive-request server="httpServer">
+  <http:POST>
+    <http:headers>
+        <http:header name="X-CustomHeaderId" value="${custom_header_id}"/>
+        <http:header name="Content-Type" value="application/xml"/>
+        <http:header name="Accept" value="application/xml"/>
+    </http:headers>
+    <http:body>
+        <http:payload>
+            <testRequestMessage>
+                <text>Hello HttpServer</text>
+            </testRequestMessage>
+        </http:payload>
+    </http:body>
+  </http:POST>
+</http:receive-request>
+
+
+
+

The test checks on custom headers and Http specific headers to meet the expected values.

+
+
+

Now that we have accepted the client request and validated the contents we are able to send back a proper Http response +message. Same thing here with Http specific headers. The Http protocol defines several headers marking the success or failure +of the server operation. In the test case you can set those headers for the response message with conventional Citrus header +names. See the following example to find out how that works for you.

+
+
+
Java
+
+
http().server("httpServer")
+    .send()
+    .response(HttpStatus.OK)
+    .message()
+    .contentType("application/xml")
+    .body("<testResponseMessage>" +
+            "<text>Hello Citrus</text>" +
+          "</testResponseMessage>")
+    .header("X-CustomHeaderId", "${custom_header_id}");
+
+
+
+
XML
+
+
<http:send-response server="httpServer">
+    <http:headers status="200" reason-phrase="OK">
+        <http:header name="X-CustomHeaderId" value="${custom_header_id}"/>
+        <http:header name="Content-Type" value="application/xml"/>
+    </http:headers>
+    <http:body>
+        <http:payload>
+            <testResponseMessage>
+                <text>Hello Citrus</text>
+            </testResponseMessage>
+        </http:payload>
+    </http:body>
+</http:send-response>
+
+
+
+

Once more we set the custom header entry (X-CustomHeaderId) and an Http reserved header (Content-Type) for the response +message. On top of this we are able to set the response status for the Http response. We use the reserved header names status +in order to mark the success of the server operation. With this mechanism we can easily simulate different server behaviour +such as Http error response codes (e.g. 404 - Not found, 500 - Internal error). Let us have a closer look at the generated +response message:

+
+
+
Sample Http response
+
+
HTTP/1.1 200 OK
+Content-Type: application/xml;charset=UTF-8
+Accept-Charset: macroman
+Content-Length: 205
+Server: Jetty(7.0.0.pre5)
+<testResponseMessage>
+    <text>Hello Citrus Client</text>
+</testResponseMessage>
+
+
+
+ + + + + +
+ + +You do not have to set the reason phrase all the time. It is sufficient to only set the Http status code. Citrus will +automatically add the proper reason phrase for well known Http status codes. +
+
+
+

The only thing that is missing right now is the validation of Http status codes when receiving the server response in a +Citrus test case. It is very easy as you can use the Citrus reserved header names for validation, too.

+
+
+
Java
+
+
http().client("httpClient")
+    .receive()
+    .response(HttpStatus.OK)
+    .message()
+    .contentType("application/xml")
+    .body("<testResponseMessage>" +
+            "<text>Hello Citrus</text>" +
+          "</testResponseMessage>")
+    .header("X-CustomHeaderId", "${custom_header_id}");
+
+
+
+
XML
+
+
<http:receive-response client="httpClient">
+    <http:headers status="200" reason-phrase="OK" version="HTTP/1.1">
+        <http:header name="X-CustomHeaderId" value="${custom_header_id}"/>
+    </http:headers>
+    <http:body>
+        <http:payload>
+            <testResponseMessage>
+                <text>Hello Citrus</text>
+            </testResponseMessage>
+        </http:payload>
+    </http:body>
+</http:receive-response>
+
+
+
+ + + + + +
+ + +Be aware of the slight differences in request URI and context path. The context path gives you the web application +context path within the servlet container for your web application. The request URI always gives you the complete path that +was called for this request. +
+
+
+

As you can see we are able to validate all parts of the initial request endpoint URI the client was calling. This completes +the Http header processing within Citrus. On both client and server side Citrus is able to set and validate Http specific +header entries which is essential for simulating Http communication.

+
+
+
+

14.5. Http query parameter

+
+

Up to now we have used some of the basic Citrus reserved Http header names (status, version, reason-phrase). In Http RESTful +services some other header names are essential for validation. These are request attributes like query parameters, context +path and request URI. The Citrus server side REST message controller will automatically add all this information to the message +header for you. So all you need to do is validate the header entries in your test.

+
+
+

The next example receives an Http GET method request on server side. Here the GET request does not have any message payload, +so the validation just works on the information given in the message header. We assume the client to call http://localhost:8080/app/users?id=123456789. +As a tester we need to validate the request method, request URI, context path and the query parameters.

+
+
+
Java
+
+
http()
+    .server(httpServer)
+    .receive()
+    .get("/api/users")
+    .message()
+    .queryParam("id", "123456789")
+    .contentType(MediaType.APPLICATION_XML_VALUE)
+    .accept(MediaType.APPLICATION_XML_VALUE)
+    .header("Host", "localhost:8080");
+
+
+
+
XML
+
+
<http:receive-request server="httpServer">
+  <http:GET path="/api/users" context-path="/app">
+    <http:params>
+        <http:param name="id" value="123456789"/>
+    </http:params>
+    <http:headers content-type="application/xml" accept="application/xml">
+        <http:header name="Host" value="localhost:8080"/>
+    </http:headers>
+    <http:body>
+        <http:data></http:data>
+    </http:body>
+  </http:GET>
+</http:receive-request>
+
+
+
+

The http server is able to validate incoming Http query parameters. You can add as many parameters as you would like to +verify. Each parameter value is able to use test variables and validation matcher expressions as usual.

+
+
+

On the client side we are able to send query parameters in our request.

+
+
+
Java
+
+
http()
+    .client(httpClient)
+    .send()
+    .get("/api/users")
+    .message()
+    .queryParam("id", "123456789")
+    .contentType(MediaType.APPLICATION_XML_VALUE)
+    .accept(MediaType.APPLICATION_XML_VALUE);
+
+
+
+
XML
+
+
<http:send-request client="httpClient">
+  <http:GET path="/app/users">
+    <http:params>
+        <http:param name="id" value="123456789"/>
+    </http:params>
+    <http:headers content-type="application/xml" accept="application/xml"/>
+    <http:body>
+        <http:data></http:data>
+    </http:body>
+  </http:GET>
+</http:send-request>
+
+
+
+

The parameters are automatically added to the request URL that is configured on the httpClient component.

+
+
+
+

14.6. Http server interceptors

+
+

The server component is able to add custom interceptors that participate in the request/response processing. The interceptors +need to implement the common interface org.springframework.web.servlet.HandlerInterceptor.

+
+
+
Java
+
+
@Bean
+public HttpServer httpServer() {
+    return new HttpServerBuilder()
+        .port(8080)
+        .autoStart(true)
+        .interceptor(new LoggingHandlerInterceptor())
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:server id="httpServer"
+                  port="8080"
+                  auto-start="true"
+                  interceptors="serverInterceptors"/>
+
+<util:list id="serverInterceptors">
+  <bean class="org.citrusframework.http.interceptor.LoggingHandlerInterceptor"/>
+</util:list>
+
+
+
+

The sample above adds the Citrus logging handler interceptor that logs requests and responses exchanged with that server +component. You can add custom interceptor implementations here in order to participate in the request/response message processing.

+
+
+
+

14.7. Http form urlencoded data

+
+

HTML form data can be sent to the server using different methods and content types. One of them is a POST method with x-www-form-urlencoded +body content. The form data elements are sent to the server using key-value pairs POST data where the form control name is +the key and the control data is the url encoded value.

+
+
+

Form urlencoded form data content could look like this:

+
+
+
Form urlencoded data
+
+
password=s%21cr%21t&username=foo
+
+
+
+

As you can see the form data is automatically encoded. In the example above we transmit two form controls password and +username with respective values s$cr$t and foo . In case we would validate this form data in Citrus we are able to +do this with plaintext message validation.

+
+
+
Java
+
+
receive("httpServer")
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("password=s%21cr%21t&username=${username}")
+    .header(HttpMessageHeaders.HTTP_REQUEST_METHOD, HttpMethod.POST.name())
+    .header(HttpMessageHeaders.HTTP_REQUEST_URI, "/form-test")
+    .header(HttpMessageHeaders.HTTP_CONTENT_TYPE, "application/x-www-form-urlencoded");
+
+send("httpServer")
+    .message()
+    .header(HttpMessageHeaders.HTTP_STATUS_CODE, 200);
+
+
+
+
XML
+
+
<receive endpoint="httpServer">
+  <message type="plaintext">
+    <data>
+      <![CDATA[
+        password=s%21cr%21t&username=${username}
+      ]]>
+    </data>
+  </message>
+  <header>
+    <element name="citrus_http_method" value="POST"/>
+    <element name="citrus_http_request_uri" value="/form-test"/>
+    <element name="Content-Type" value="application/x-www-form-urlencoded"/>
+  </header>
+</receive>
+
+<send endpoint="httpServer">
+  <message>
+    <data></data>
+  </message>
+  <header>
+    <element name="citrus_http_status_code" value="200"/>
+  </header>
+</send>
+
+
+
+

Obviously validating these key-value pair character sequences can be hard especially when having HTML forms with lots of +form controls. This is why Citrus provides a special message validator for x-www-form-urlencoded contents. First of all +we have to add citrus-http module as dependency to our project if we have not done so yet. After that we can add the validator +implementation to the list of message validators used in Citrus.

+
+
+
Java
+
+
@Bean
+public FormUrlEncodedMessageValidator formUrlEncodedMessageValidator() {
+    return new FormUrlEncodedMessageValidator();
+}
+
+
+
+
XML
+
+
<citrus:message-validators>
+  <citrus:validator class="org.citrusframework.http.validation.FormUrlEncodedMessageValidator"/>
+</citrus:message-validators>
+
+
+
+

Now we are able to receive the urlencoded form data message in a test.

+
+
+
Java
+
+
receive("httpServer")
+    .message()
+    .type("x-www-form-urlencoded")
+    .body("<form-data xmlns=\"http://www.citrusframework.org/schema/http/message\">\n" +
+            "<content-type>application/x-www-form-urlencoded</content-type>\n" +
+            "<action>/form-test</action>\n" +
+            "<controls>\n" +
+                "<control name=\"password\">\n" +
+                    "<value>${password}</value>\n" +
+                "</control>\n" +
+                "<control name=\"username\">\n" +
+                    "<value>${username}</value>\n" +
+                "</control>\n" +
+            "</controls>\n" +
+            "</form-data>")
+    .header(HttpMessageHeaders.HTTP_REQUEST_METHOD, HttpMethod.POST.name())
+    .header(HttpMessageHeaders.HTTP_REQUEST_URI, "/form-test")
+    .header(HttpMessageHeaders.HTTP_CONTENT_TYPE, "application/x-www-form-urlencoded");
+
+
+
+
XML
+
+
<receive endpoint="httpServer">
+  <message type="x-www-form-urlencoded">
+    <payload>
+      <form-data xmlns="http://www.citrusframework.org/schema/http/message">
+        <content-type>application/x-www-form-urlencoded</content-type>
+        <action>/form-test</action>
+        <controls>
+          <control name="password">
+            <value>${password}</value>
+          </control>
+          <control name="username">
+            <value>${username}</value>
+          </control>
+        </controls>
+      </form-data>
+    </payload>
+  </message>
+  <header>
+    <element name="citrus_http_method" value="POST"/>
+    <element name="citrus_http_request_uri" value="/form-test"/>
+    <element name="Content-Type" value="application/x-www-form-urlencoded"/>
+  </header>
+</receive>
+
+
+
+

We use a special message type x-www-form-urlencoded so the new message validator will take action. The form url encoded +message validator is able to handle a special XML representation of the form data. This enables the very powerful XML +message validation capabilities of Citrus such as ignoring elements and usage of test variables inline.

+
+
+

Each form control is translated to a control element with respective name and value properties. The form data is validated +in a more comfortable way as the plaintext message validator would be able to offer.

+
+
+
+

14.8. Http error handling

+
+

So far we have received response messages with Http status code 200 OK . How to deal with server errors like 404 Not +Found or 500 Internal server error ? The default Http message client error strategy is to propagate server error response +messages to the receive action for validation. We simply check on Http status code and status text for error validation.

+
+
+
Java
+
+
http().client("httpClient")
+        .send()
+        .post()
+        .message()
+        .body("<testRequestMessage>" +
+                "<text>Hello HttpServer</text>" +
+              "</testRequestMessage>");
+
+http().client("httpClient")
+        .receive()
+        .response(HttpStatus.FORBIDDEN);
+
+
+
+
XML
+
+
<http:send-request client="httpClient">
+    <http:POST>
+        <http:body>
+            <http:payload>
+                <testRequestMessage>
+                    <text>Hello HttpServer</text>
+                </testRequestMessage>
+            </http:payload>
+        </http:body>
+    </http:POST>
+</http:send-request>
+
+<http:receive-response client="httpClient">
+    <http:headers status="403" reason-phrase="FORBIDDEN"/>
+    <http:body>
+        <http:data><![CDATA[]]></http:data>
+    </http:body>
+</http:receive-response>
+
+
+
+

The message data can be empty depending on the server logic for these error situations. If we receive additional error +information as message payload just add validation assertions as usual.

+
+
+

Instead of receiving such empty messages with checks on Http status header information we can change the error strategy in +the message sender component in order to automatically raise exceptions on response messages other than 200 OK . Therefore +we go back to the Http message sender configuration for changing the error strategy.

+
+
+
Java
+
+
@Bean
+public HttpClient httpClient() {
+    return new HttpClientBuilder()
+        .requestUrl("http://localhost:8080/test")
+        .errorHandlingStrategy(ErrorHandlingStrategy.THROWS_EXCEPTION)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:client id="httpClient"
+                  request-url="http://localhost:8080/test"
+                  error-strategy="throwsException"/>
+
+
+
+

Now we expect an exception to be thrown because of the error response. Following from that we have to change our test case. +Instead of receiving the error message with receive action we assert the client exception and check on the Http status code +and status text.

+
+
+
Java
+
+
assertException()
+    .exception(HttpClientErrorException.class)
+    .message("403 Forbidden")
+    .when(
+        http().client("httpClient")
+            .send()
+            .post()
+            .message()
+            .body("<testRequestMessage>" +
+                    "<text>Hello HttpServer</text>" +
+                  "</testRequestMessage>")
+    );
+
+
+
+
XML
+
+
<assert exception="org.springframework.web.client.HttpClientErrorException"
+           message="403 Forbidden">
+    <when>
+        <http:send-request client="httpClient">
+            <http:body>
+                <http:payload>
+                    <testRequestMessage>
+                        <text>Hello HttpServer</text>
+                    </testRequestMessage>
+                </http:payload>
+            </http:body>
+        </http:send-request>
+    </when>
+</assert>
+
+
+
+

Both ways of handling Http error messages on client side are valid for expecting the server to raise Http error codes. Choose +the preferred way according to your test project requirements.

+
+
+
+

14.9. Http client basic authentication

+
+

As a client you may have to authenticate properly in order to access a resource on the server. +In many cases this will be basic authentication with username/password where the credentials are transmitted in the request header section with base64 encoding.

+
+
+

The easiest approach to set the Authorization header for a basic authentication Http request would be to explicitly set the header in the send action definition. +Of course, you have to use the correct basic authentication header syntax with base64 encoding for the username:password phrase. +See how it works in this simple example.

+
+
+
Java
+
+
http().client("httpClient")
+    .send()
+    .get()
+    .message()
+    .header("Authorization", "Basic c29tZVVzZXJuYW1lOnNvbWVQYXNzd29yZA==");
+
+
+
+
XML
+
+
<http:send-request client="httpClient">
+  <http:GET>
+    <http:headers>
+      <http:header name="Authorization" value="Basic c29tZVVzZXJuYW1lOnNvbWVQYXNzd29yZA=="/>
+    </http:headers>
+  </http:GET>
+</http:send-request>
+
+
+
+

Citrus will add this header to the Http requests and the server will read the Authorization username and password. +For more convenient base64 encoding you can also use a Citrus function citrus:encodeBase64(username:password). +See functions-encode-base64 for more details.

+
+
+

Instead of adding the Http Authorization header manually you can also enable the basic authentication on the Http client endpoint. +Simply configure the basic authentication credentials on the Citrus Http client component. +Just see the following example and learn how to do that.

+
+
+
Java
+
+
@Bean
+public HttpClient httpClient() {
+    return new HttpClientBuilder()
+        .requestUrl("http://localhost:8080/test")
+        .authentication(HttpAuthentication.basic("username", "password"))
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:client id="httpClient"
+                    request-url="http://localhost:8080/test"
+                    request-factory="clientRequestFactory"/>
+
+<bean id="clientRequestFactory"
+    class="org.citrusframework.http.security.HttpClientRequestFactoryBean">
+    <constructor-arg>
+        <bean class="org.citrusframework.http.security.BasicAuthentication">
+            <constructor-arg value="username"/>
+            <constructor-arg value="password"/>
+        </bean>
+    </constructor-arg>
+</bean>
+
+
+
+

In case you need a more powerful configuration of the basic authentication you can also directly use the request factory as a configuration item for basic authentication.

+
+
+
Java
+
+
@Bean
+public HttpClient httpClient() {
+    return new HttpClientBuilder()
+        .requestUrl("http://localhost:8080/test")
+        .requestFactory(basicAuthFactory())
+        .build();
+}
+
+@Bean
+public BasicAuthClientHttpRequestFactory basicAuthFactory() {
+    BasicAuthClientHttpRequestFactory factory = new BasicAuthClientHttpRequestFactory();
+
+    AuthScope scope = new AuthScope("localhost", "8080", "", "basic");
+    factory.setAuthScope(scope);
+
+    UsernamePasswordCredentials credentials = new UsernamePasswordCredentials("username", "password");
+    factory.setCredentials(credentials);
+
+    return factory;
+}
+
+
+
+
XML
+
+
<citrus-http:client id="httpClient"
+                    request-url="http://localhost:8080/test"
+                    request-factory="basicAuthFactory"/>
+
+<bean id="basicAuthFactory"
+    class="org.citrusframework.http.client.BasicAuthClientHttpRequestFactory">
+  <property name="authScope">
+      <bean class="org.apache.hc.client5.http.auth.AuthScope">
+        <constructor-arg value="localhost"/>
+        <constructor-arg value="8080"/>
+      </bean>
+  </property>
+  <property name="credentials">
+    <bean class="org.apache.hc.client5.http.auth.UsernamePasswordCredentials">
+        <constructor-arg value="username"/>
+        <constructor-arg value="password"/>
+    </bean>
+  </property>
+</bean>
+
+
+
+

The advantage of setting the basic authentication on the Http client is obvious. +All test actions that reference the client component will automatically use the basic authentication.

+
+
+

The above configuration results in Http client requests with authentication headers properly set for basic authentication. +The client request factory takes care of adding the proper basic authentication header to each request that is sent with this +Citrus message sender. Citrus uses preemptive authentication. The message sender only sends a single request to the server +with all authentication information set in the message header. The request which determines the authentication scheme on the +server is skipped. This is why you have to add some auth scope in the client request factory so Citrus can set up an authentication +cache within the Http context in order to have preemptive authentication.

+
+
+

As a result of the basic auth client request factory the following example request that is created by the Citrus Http client +has the Authorization header set. This is done now automatically for all requests with this Http client.

+
+
+
Sample request with basic authentication
+
+
POST /test HTTP/1.1
+Accept: application/xml
+Content-Type: application/xml
+Accept-Charset: iso-8859-1, us-ascii, utf-8
+Authorization: Basic c29tZVVzZXJuYW1lOnNvbWVQYXNzd29yZA==
+User-Agent: Jakarta Commons-HttpClient/3.1
+Host: localhost:8080
+Content-Length: 175
+<testRequestMessage>
+  <text>Hello HttpServer</text>
+</testRequestMessage>
+
+
+
+
+

14.10. Http server basic authentication

+
+

The Citrus Http server is able to configure basic authentication so clients need to authenticate properly when accessing server resources.

+
+
+
Java
+
+
@Bean
+public HttpServer httpServer() {
+    return new HttpServerBuilder()
+        .port(8080)
+        .autoStart(true)
+        .authentication("/foo/*", HttpAuthentication.basic("username", "password"))
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:server id="basicAuthHttpServer"
+                port="8080"
+                auto-start="true"
+                security-handler="securityHandlerFactory"/>
+
+<bean id="securityHandlerFactory" class="org.citrusframework.http.security.HttpSecurityHandlerFactoryBean">
+    <constructor-arg>
+        <bean class="org.citrusframework.http.security.BasicAuthentication">
+            <constructor-arg value="username"/>
+            <constructor-arg value="password"/>
+            <property name="resourcePath" value="/foo/*"/>
+        </bean>
+    </constructor-arg>
+</bean>
+
+
+
+

In case you need a more powerful server configuration you can also set the security handler directly.

+
+
+
Java
+
+
@Bean
+public HttpServer httpServer() {
+    return new HttpServerBuilder()
+        .port(8080)
+        .autoStart(true)
+        .securityHandler(securityHandler())
+        .build();
+}
+
+@Bean
+public SecurityHandlerFactory securityHandler() {
+    SecurityHandlerFactory factory = new SecurityHandlerFactory();
+
+    User user = new User();
+    user.setName("citrus");
+    user.setPassword("secret");
+    user.setRoles("CitrusRole");
+    factory.setUsers(Collections.singletonList(user));
+
+    factory.setConstraints(Collections.singletonMap("/foo/*",
+                                    new BasicAuthConstraint("CitrusRole")));
+
+    return factory;
+}
+
+
+
+
XML
+
+
<citrus-http:server id="basicAuthHttpServer"
+                port="8080"
+                auto-start="true"
+                security-handler="securityHandler"/>
+
+<bean id="securityHandler" class="org.citrusframework.http.security.SecurityHandlerFactory">
+    <property name="users">
+        <list>
+            <bean class="org.citrusframework.http.security.User">
+                <property name="name" value="citrus"/>
+                <property name="password" value="secret"/>
+                <property name="roles" value="CitrusRole"/>
+            </bean>
+        </list>
+    </property>
+    <property name="constraints">
+        <map>
+            <entry key="/foo/*">
+                <bean class="org.citrusframework.http.security.BasicAuthConstraint">
+                    <constructor-arg value="CitrusRole"/>
+                </bean>
+            </entry>
+        </map>
+    </property>
+</bean>
+
+
+
+

We have set a security handler on the server web container with a constraint on all resources with /foo/*. Following +from that the server requires basic authentication for these resources. The granted users and roles are specified within +the security handler bean definition. Connecting clients have to set the basic auth Http header properly using the correct +user and role for accessing the Citrus server now.

+
+
+

You can customize the security handler for your very specific needs (e.g. load users and roles with JDBC from a database). +Just have a look at the code base and inspect the settings and properties offered by the security handler interface.

+
+
+ + + + + +
+ + +This mechanism is not restricted to basic authentication only. With other settings you can also set up digest or form-based +authentication constraints very easy. +
+
+
+
+

14.11. Http client SSL

+
+

You can use SSL when establishing a client connection with the server. +The Citrus Http client supports a secure connection with these settings.

+
+
+
Java
+
+
@Bean
+public HttpClient httpClient() {
+    return new HttpClientBuilder()
+        .requestUrl("https://localhost:8080/test")
+        .secured(HttpSecureConnection.ssl())
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:client id="httpClient"
+                    request-url="http://localhost:8080/test"
+                    connection-manager="sslConnectionManager"/>
+
+<bean id="sslConnectionManager"
+    class="org.citrusframework.http.security.HttpClientConnectionManagerFactory">
+    <constructor-arg>
+        <bean class="org.citrusframework.http.security.SSLConnection"/>
+    </constructor-arg>
+</bean>
+
+
+
+

The example Http client uses SSL secure connection. +By default, the client will accept any server certificates and hostnames often referred to as trust-all-strategy.

+
+
+

You may want to also use a proper trust store to explicitly accept server certificates. +The client by default allows self-signed certificates.

+
+
+
Java
+
+
@Bean
+public HttpClient sslHttpClient() {
+    return new HttpClientBuilder()
+        .requestUrl("https://localhost:8080/test")
+        .secured(HttpSecureConnection.ssl()
+            .trustStore("path/to/server.jks", "trustStorePassword"))
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:client id="sslHttpClient"
+                    request-url="http://localhost:8080/test"
+                    connection-manager="sslConnectionManager"/>
+
+<bean id="sslConnectionManager"
+    class="org.citrusframework.http.security.HttpClientConnectionManagerFactory">
+    <constructor-arg>
+        <bean class="org.citrusframework.http.security.SSLConnection">
+            <constructor-arg value="path/to/server.jks"/>
+            <constructor-arg value="trustStorePassword"/>
+        </bean>
+    </constructor-arg>
+</bean>
+
+
+
+

You need to provide a key store file (.jks) and a password to access the certificates located in the store. +The client now will do proper SSL handshake with the server in order to use secure connections.

+
+
+
+

14.12. Http server SSL

+
+

The Citrus Http server is able to configure a SSL connector so clients need to use secure connections to access the server resources. +The connector

+
+
+
Java
+
+
@Bean
+public HttpServer sslHttpServer() {
+    return new HttpServerBuilder()
+        .port(8080)
+        .autoStart(true)
+        .secured(8443, HttpSecureConnection.ssl()
+            .keyStore("path/to/server.jks", "keyStorePassword"))
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:server id="sslHttpServer"
+                port="8080"
+                auto-start="true"
+                connector="serverConnectorFactory"/>
+
+<bean id="serverConnectorFactory" class="org.citrusframework.http.security.HttpServerConnectorFactory">
+    <constructor-arg>
+        <bean class="org.citrusframework.http.security.SSLConnection">
+            <constructor-arg value="path/to/server.jks"/>
+            <constructor-arg value="trustStorePassword"/>
+            <property name="securePort" value="8443"/>
+        </bean>
+    </constructor-arg>
+</bean>
+
+
+
+

The server now uses a securePort and a server certificate. +In most cases the certificate in a test environment is self-signed so please make sure to allow self-signed certificates in your clients.

+
+
+
+

14.13. Http cookies

+
+

Cookies hold any kind of information and are saved as test information on the client side. Http servers are able to instruct +the client (browser) to save a new cookie with name, value and some attributes. This is usually done with a "Set-Cookie" message +header set on the server response message. Citrus is able to add those cookie information in a server response.

+
+
+
Java
+
+
Cookie cookie = new Cookie("Token", "${messageId}");
+cookie.setPath("/test/cookie.py");
+cookie.setSecure(false);
+cookie.setDomain("citrusframework.org");
+cookie.setMaxAge(86400);
+
+http().server("httpServer")
+    .receive()
+    .post()
+    .message()
+    .body("Some request data")
+    .header("Operation", "sayHello");
+
+http().server("httpServer")
+    .send()
+    .response(HttpStatus.OK)
+    .message()
+    .body("Some response body")
+    .header("Operation", "sayHello")
+    .cookie(cookie);
+
+
+
+
XML
+
+
<http:receive-request server="httpServer">
+    <http:POST>
+        <http:headers>
+            <http:header name="Operation" value="getCookie"/>
+        </http:headers>
+    <http:body>
+        <http:data>
+            <![CDATA[
+            Some request data
+            ]]>
+        </http:data>
+    </http:body>
+    </http:POST>
+</http:receive-request>
+
+<http:send-response server="httpServer">
+    <http:headers status="200" reason-phrase="OK" version="HTTP/1.1">
+        <http:header name="Operation" value="getCookie"/>
+        <http:cookie name="Token"
+                     value="${messageId}"
+                     secure="false"
+                     domain="citrusframework.org"
+                     path="/test/cookie.py"
+                     max-age="86400"/>
+    </http:headers>
+    <http:body>
+        <http:data>
+            <![CDATA[
+            Some response body
+            ]]>
+        </http:data>
+    </http:body>
+</http:send-response>
+
+
+
+

The sample above receives an Http request with method POST and some request data. The server response is specified with Http 200 OK +and some additional cookie information. The cookie is part of the message header specification and gets a name and value +as well as several other attributes. This response will result in an Http response with the "Set-Cookie" header set:

+
+
+
Set cookie header
+
+
Set-Cookie:Token=5877643571;Path=/test/cookie.py;Domain=citrusframework.org;Max-Age=86400
+
+
+
+

As you can see test variables are replaced before the cookie is added to the response. The client now is able to receive +the cookie information for validation:

+
+
+
Java
+
+
Cookie cookie = new Cookie("Token", "${messageId}");
+cookie.setPath("/test/cookie.py");
+cookie.setSecure(false);
+cookie.setDomain("citrusframework.org");
+cookie.setMaxAge(86400);
+
+http().client("echoHttpClient")
+    .receive()
+    .response(HttpStatus.OK)
+    .message()
+    .body("Some response body")
+    .header("Operation", "sayHello")
+    .cookie(cookie);
+
+
+
+
XML
+
+
<http:receive-response server="echoHttpClient">
+  <http:headers status="200" reason-phrase="OK" version="HTTP/1.1">
+  <http:header name="Operation" value="getCookie"/>
+  <http:cookie name="Token"
+               value="${messageId}"
+               secure="false"
+               domain="citrusframework.org"
+               path="/test/cookie.py"
+               max-age="86400"/>
+  </http:headers>
+  <http:body>
+    <http:data>
+      <![CDATA[
+        Some response body
+      ]]>
+    </http:data>
+  </http:body>
+</http:receive-response>
+
+
+
+

Once again the cookie information is added to the header specification. The Citrus message validation will make sure that +the cookie information is present with all specified attributes.

+
+
+

In all further actions the client is able to continue to send the cookie information with name and value:

+
+
+
Java DSL
+
+
http().client("echoHttpClient")
+    .send()
+    .post()
+    .fork(true)
+    .message()
+    .body("Some other request data")
+    .header("Operation", "sayHello")
+    .cookie(new Cookie("Token", "${messageId}"));
+
+
+
+
XML
+
+
<http:send-request client="echoHttpClient" fork="true">
+  <http:POST>
+    <http:headers>
+      <http:header name="Operation" value="sayHello"/>
+      <http:cookie name="Token" value="${messageId}"/>
+    </http:headers>
+    <http:body>
+      <http:data>
+        <![CDATA[
+          Some other request data
+        ]]>
+      </http:data>
+    </http:body>
+  </http:POST>
+</http:send-request>
+
+
+
+

The cookie now is only specified with name and value as the cookie now goes to the "Cookie" request message header.

+
+
+
Cookie token
+
+
Cookie:Token=5877643571
+
+
+
+

Of course the Citrus Http server can now also validate the cookie information in a request validation:

+
+
+
Java
+
+
http().server("httpServer")
+    .receive()
+    .post()
+    .message()
+    .body("Some other request data")
+    .header("Operation", "sayHello")
+    .cookie(new Cookie("Token", "${messageId}"));
+
+
+
+
XML
+
+
<http:receive-request client="httpServer">
+  <http:POST>
+    <http:headers>
+      <http:header name="Operation" value="sayHello"/>
+      <http:cookie name="Token" value="${messageId}"/>
+    </http:headers>
+    <http:body>
+      <http:data>
+        <![CDATA[
+          Some other request data
+        ]]>
+      </http:data>
+    </http:body>
+  </http:POST>
+</http:receive-request>
+
+
+
+

The Citrus message validation will make sure that the cookie is set in the request with respective name and value.

+
+
+
+

14.14. Http Gzip compression

+
+

Gzip is a very popular compression mechanism for optimizing the message transportation for large content. The Citrus http +client and server components support gzip compression out of the box. This means that you only need to set the specific +encoding headers in your http request/response message.

+
+
+
+
Accept-Encoding=gzip
+
+

Setting for clients when requesting gzip compressed response content. The Http server must support gzip compression then in order to provide the response as zipped byte stream. The Citrus http server component automatically recognizes this header in a request and applies gzip compression to the response.

+
+
Content-Encoding=gzip
+
+

When an http server sends compressed message content to the client this header is set to gzip in order to mark the compression. The Http client must support gzip compression then in order to unzip the message content. The Citrus http client component automatically recognizes this header in a response and applies gzip unzip logic before passing the message to the test case.

+
+
+
+
+

The Citrus client and server automatically take care of gzip compression when those headers are set. In the test case you +do not need to zip or unzip the content then as it is automatically done before.

+
+
+

This means that you can request gzipped content from a server with just adding the message header Accept-Encoding in +your http request operation.

+
+
+
Java
+
+
http().client("gzipClient")
+    .send()
+    .post()
+    .message()
+    .body("Some other request data")
+    .contentType("text/html")
+    .header("Accept-Encoding", "gzip")
+    .header("Accept", "text/plain");
+
+http().client("gzipClient")
+    .receive()
+    .response(HttpStatus.OK)
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .contentType("text/plain")
+    .body("${text}");
+
+
+
+
XML
+
+
<http:send-request client="gzipClient">
+  <http:POST>
+    <http:headers content-type="text/html">
+      <http:header name="Accept-Encoding" value="gzip"/>
+      <http:header name="Accept" value="text/plain"/>
+    </http:headers>
+  </http:POST>
+</http:send-request>
+
+<http:receive-response client="gzipClient">
+    <http:headers status="200" reason-phrase="OK">
+      <http:header name="Content-Type" value="text/plain"/>
+    </http:headers>
+    <http:body type="plaintext">
+      <http:data>${text}</http:data>
+    </http:body>
+</http:receive-response>
+
+
+
+

On the server side if we receive a message and the response should be compressed with Gzip we just have to set the Content-Encoding +header in the response operation.

+
+
+
Java
+
+
http().server("httpServer")
+    .receive()
+    .post()
+    .message()
+    .body("Some other request data")
+    .contentType("text/html")
+    .header("Accept-Encoding", "gzip")
+    .header("Accept", "text/plain");
+
+http().server("httpServer")
+    .send()
+    .response(HttpStatus.OK)
+    .message()
+    .contentType("text/plain")
+    .body("${text}");
+
+
+
+
XML
+
+
<http:receive-request server="httpServer">
+    <http:POST path="/echo">
+      <http:headers>
+        <http:header name="Content-Type" value="text/html"/>
+        <http:header name="Accept-Encoding" value="gzip"/>
+        <http:header name="Accept" value="text/plain"/>
+      </http:headers>
+    </http:POST>
+</http:receive-request>
+
+<http:send-response server="httpServer">
+    <http:headers status="200" reason-phrase="OK">
+      <http:header name="Content-Encoding" value="gzip"/>
+      <http:header name="Content-Type" value="text/plain"/>
+    </http:headers>
+    <http:body>
+      <http:data>${text}</http:data>
+    </http:body>
+</http:send-response>
+
+
+
+

So the Citrus server will automatically add gzip compression to the response for us.

+
+
+

Of course you can also send gzipped content as a client. Then you would just set the Content-Encoding header to gzip +in your request. The client will automatically apply compression for you.

+
+
+
+

14.15. Http servlet filters

+
+

The Citrus http server component supports custom servlet filters that take part in handling an incoming request/response +communication. This might be useful when customizing the basic server behavior such as custom zip/unzip mechanisms. The +custom servlet filters are referenced in the http server component as follows:

+
+
+
Java
+
+
@Bean
+public HttpServer httpServer() {
+    return new HttpServerBuilder()
+        .port(8080)
+        .filters(filters())
+        .filterMappings(filterMappings())
+        .build();
+}
+
+public Map<String, Filter> filters() {
+    Map<String, Filter> filters = new HashMap<>();
+
+    filters.put("request-caching-filter", new RequestCachingServletFilter());
+    filters.put("gzip-filter", new GzipServletFilter());
+
+    return filters;
+}
+
+public Map<String, String> filterMappings() {
+    Map<String, String> filterMappings = new HashMap<>();
+
+    filterMappings.put("request-caching-filter", "/*");
+    filterMappings.put("gzip-filter", "/gzip/*");
+
+    return filterMappings;
+}
+
+
+
+
XML
+
+
<citrus-http:server id="httpServer"
+                    port="8080"
+                    filters="filters"
+                    filter-mappings="filterMappings"/>
+
+<util:map id="filters">
+    <entry key="request-caching-filter">
+        <bean class="org.citrusframework.http.servlet.RequestCachingServletFilter"/>
+    </entry>
+    <entry key="gzip-filter">
+        <bean class="org.citrusframework.http.servlet.GzipServletFilter"/>
+    </entry>
+</util:map>
+
+<util:map id="filterMappings">
+    <entry key="request-caching-filter" value="/*"/>
+    <entry key="gzip-filter" value="/gzip/*"/>
+</util:map>
+
+
+
+

The map of filters are specified as normal Spring configuration entries. The server component uses the attribute filters +to reference a set of custom servlet filters. The map holds one to many servlet filter beans each given a name that is also +referenced in the respective servlet mappings. The servlet mappings specify when to apply those filters.

+
+
+

This way you can set a very custom servlet filter chain for each request/response communication. As usual the filter implementations +can participate in the request and response handling process.

+
+
+

Citrus provides several default servlet implementations that are automatically added to each http server component these +implementations are:

+
+
+
+
org.citrusframework.http.servlet.RequestCachingServletFilter
+
+

caches incoming request data so input streams can be read multiple times during request processing (important when request logging is enabled)

+
+
org.citrusframework.http.servlet.GzipServletFilter
+
+

applies Gzip compression when according headers are set and client explicitly asks for compressed request/response communication

+
+
+
+
+

By the time you define some custom servlet filters or mappings to the server component Citrus will not apply default servlet +filters. This means you always need to construct the whole servlet filter chain including default servlet filters mentioned above.

+
+
+
+

14.16. Http servlet context customization

+
+

The Citrus Http server uses Spring application context loading on startup. For high customizations you can provide a custom +servlet context file which holds all custom configurations as Spring beans for the server. Here is a sample servlet context +with some basic Spring MVC components and the central HttpMessageController which is responsible for handling incoming requests +(GET, PUT, DELETE, POST, etc.).

+
+
+
Java
+
+
@Bean
+public RequestMappingHandlerMapping citrusHandlerMapping() {
+    return new RequestMappingHandlerMapping();
+}
+
+@Bean
+public RequestMappingHandlerAdapter citrusMethodHandlerAdapter() {
+    RequestMappingHandlerAdapter adapter = new RequestMappingHandlerAdapter();
+
+    adapter.setMessageConverters(Collections.singletonList(citrusHttpMessageConverter()));
+
+    return adapter;
+}
+
+@Bean
+public DelegatingHttpEntityMessageConverter citrusHttpMessageConverter() {
+    return new DelegatingHttpEntityMessageConverter();
+}
+
+@Bean
+public HttpMessageController citrusHttpMessageController() {
+    HttpMessageController controller = new HttpMessageController();
+
+    controller.setEndpointAdapter(new EmptyResponseEndpointAdapter());
+
+    return controller;
+}
+
+
+
+
XML
+
+
<bean id="citrusHandlerMapping" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping"/>
+
+<bean id="citrusMethodHandlerAdapter" class="org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter">
+  <property name="messageConverters">
+    <util:list id="converters">
+      <ref bean="citrusHttpMessageConverter"/>
+    </util:list>
+  </property>
+</bean>
+
+<bean id="citrusHttpMessageConverter" class="org.citrusframework.http.message.DelegatingHttpEntityMessageConverter"/>
+
+<bean id="citrusHttpMessageController" class="org.citrusframework.http.controller.HttpMessageController">
+  <property name="endpointAdapter">
+      <bean
+       class="org.citrusframework.endpoint.adapter.EmptyResponseEndpointAdapter"/>
+  </property>
+</bean>
+
+
+
+

The beans above are responsible for proper Http server configuration. In general you do not need to adjust those beans, +but we have the possibility to do so which gives us a great customization and extension points. The important part is the +endpoint adapter definition inside the HttpMessageController. Once a client request was accepted the adapter is responsible +for generating a proper response to the client.

+
+
+

You can add the custom servlet context as file resource to the Citrus Http server component. Just use the context-config-location +attribute as follows:

+
+
+
Java
+
+
@Bean
+public HttpServer httpServer() {
+    return new HttpServerBuilder()
+        .port(8080)
+        .autoStart(true)
+        .contextConfigLocation("classpath:org/citrusframework/http/custom-servlet-context.xml")
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-http:server id="helloHttpServer"
+      port="8080"
+      auto-start="true"
+      context-config-location="classpath:org/citrusframework/http/custom-servlet-context.xml"/>
+
+
+
+
+
+
+

15. SOAP WebServices

+
+
+

SOAP Web Services over HTTP is a widely used communication scenario in modern enterprise applications. A SOAP Web Service client is posting a SOAP request via HTTP to a server. SOAP via HTTP is a synchronous message protocol by default so the client is waiting synchronously for the response message. Citrus provides both SOAP client and server components in order to meet both directions of this scenario. The components used are very similar to the HTTP components that were discussed in the sections before.

+
+
+ + + + + +
+ + +The SOAP WebService components in Citrus are kept in a separate Maven module. So you should add the module as Maven dependency to your project accordingly. +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-ws</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

In order to use the SOAP WebService support you need to include the specific XML configuration schema provided by Citrus. See the following XML definition to find out how to include the citrus-ws namespace.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:citrus="http://www.citrusframework.org/schema/config"
+       xmlns:citrus-ws="http://www.citrusframework.org/schema/ws/config"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans
+       http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.citrusframework.org/schema/config
+       http://www.citrusframework.org/schema/config/citrus-config.xsd
+       http://www.citrusframework.org/schema/ws/config
+       http://www.citrusframework.org/schema/ws/config/citrus-ws-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

Now you are ready to use the customized soap configuration elements - all using the citrus-ws prefix - in your Spring configuration.

+
+
+

15.1. SOAP client

+
+

Citrus is able to form a proper SOAP request in order to pass it to the server via HTTP and validate the respective SOAP response message. Let us see how a message client for SOAP looks like in the Spring configuration:

+
+
+
+
<citrus-ws:client id="soapClient"
+                       request-url="http://localhost:8090/test"
+                       timeout="60000"/>
+
+
+
+

The client component uses the request-url in order to access the server resource. The client will automatically build a proper SOAP request message including the SOAP envelope, SOAP header and the message payload as SOAP body. This means that you as a tester do not care about SOAP envelope specific logic in the test case. The client endpoint component saves the synchronous SOAP response so the test case can receive this message with a normal receive test action.

+
+
+

In detail you as a tester just send and receive using the same client endpoint reference just as you would do with a synchronous JMS or channel communication. In case no response message is available in time according to the timeout settings Citrus raises a timeout error and the test will fail.

+
+
+ + + + + +
+ + +The SOAP client component uses a SoapMessageFactory implementation in order to create the SOAP messages. This is a Spring bean added to the Citrus Spring application context. Spring offers several reference implementations as message factories so you can choose one of them (e.g. for SOAP 1.1 or 1.2 implementations). +
+
+
+
+
<!-- Default SOAP Message Factory (SOAP 1.1) -->
+<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>
+
+<!-- SOAP 1.2 Message Factory -->
+<bean id="soap12MessageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
+  <property name="soapVersion">
+    <util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_12"/>
+  </property>
+</bean>
+
+
+
+

By default Citrus will search for a bean with id 'messageFactory' . In case you intend to use different identifiers you need to tell the SOAP client component which message factory to use:

+
+
+
+
<citrus-ws:client id="soapClient"
+         request-url="http://localhost:8090/test"
+         message-factory="soap12MessageFactory"/>
+
+
+
+ + + + + +
+ + +Up to now we have used a static endpoint request url for the SOAP message sender. Besides that we can use dynamic endpoint uri in configuration. We just use an endpoint uri resolver instead of the static request url like this: +
+
+
+
+
<citrus-ws:client id="soapClient"
+             endpoint-resolver="dynamicEndpointResolver"
+             message-factory="soap12MessageFactory"/>
+
+<bean id="dynamicEndpointResolver"
+       class="org.citrusframework.endpoint.resolver.DynamicEndpointUriResolver"/>
+
+
+
+

The dynamicEndpointResolver bean must implement the EndpointUriResolver interface in order to resolve dynamic endpoint uri values. Citrus offers a default implementation, the DynamicEndpointUriResolver, which uses a specific message header for setting the dynamic endpoint uri for each message. The message header needs to specify the header citrus_endpoint_uri with a valid request uri. Just like this:

+
+
+
+
<header>
+  <element name="citrus_endpoint_uri"
+           value="http://localhost:${port}/${context}" />
+</header>
+
+
+
+

As you can see you can use dynamic test variables then in order to build the request uri to use. The SOAP client evaluates the endpoint uri header and sends the message to this server resource. You can use a different uri value then in different test cases and send actions.

+
+
+
+

15.2. SOAP client interceptors

+
+

The client component is able to add custom interceptors that participate in the request/response processing. The interceptors need to implement the common interface org.springframework.ws.client.support.interceptor.ClientInterceptor.

+
+
+
+
<citrus-ws:client id="secureSoapClient"
+                  request-url="http://localhost:8080/services/ws/todolist"
+                  interceptors="clientInterceptors"/>
+
+<util:list id="clientInterceptors">
+  <bean class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
+    <property name="securementActions" value="Timestamp UsernameToken"/>
+    <property name="securementUsername" value="admin"/>
+    <property name="securementPassword" value="secret"/>
+  </bean>
+  <bean class="org.citrusframework.ws.interceptor.LoggingClientInterceptor"/>
+</util:list>
+
+
+
+

The sample above adds Wss4J WsSecurity interceptors in order to add security constraints to the request messages.

+
+
+ + + + + +
+ + +When customizing the interceptor chain all default interceptors (like logging interceptor) are lost. You need to add these interceptors explicitly as shown with the org.citrusframework.ws.interceptor.LoggingClientInterceptor which +is able to log request/response messages during communication. +
+
+
+
+

15.3. SOAP server

+
+

Every client needs a server to talk to. When receiving SOAP messages we require a web server instance listening on a port. Citrus is using an embedded Jetty server instance in combination with the Spring Web Service API in order to accept SOAP request calls as a server. See how the Citrus SOAP server is configured in the Spring configuration.

+
+
+
+
<citrus-ws:server id="helloSoapServer"
+             port="8080"
+             auto-start="true"
+             resource-base="src/it/resources"/>
+
+
+
+

The server component is able to start automatically when application starts up. In the example above the server is listening for requests on port 8080 . This setup uses the standard connector configuration for the Jetty server. For detailed customization the Citrus Jetty server configuration also supports explicit connector configurations (@connector and @connectors attributes). For more information please see the Jetty connector documentation.

+
+
+

Test cases interact with this server instance via message channels by default. The server component provides an inbound channel that holds incoming request messages. The test case can receive those requests from the channel with a normal receive test action. In a second step the test case can provide a synchronous response message as reply which will be automatically sent back to the calling SOAP client as response.

+
+
+

figure_010.jpg

+
+
+

The figure above shows the basic setup with inbound channel and reply channel. You as a tester should not worry about this too much. By default you as a tester just use the server as synchronous endpoint in your test case. This means that you simply receive a message from the server and send a response back.

+
+
+
+
<testcase name="soapServerTest">
+    <actions>
+        <receive endpoint="helloSoapServer">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </receive>
+
+        <send endpoint="helloSoapServer">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </send>
+    </actions>
+</testcase>
+
+
+
+

As you can see we reference the server id in both receive and send actions. The Citrus server instance will automatically send the response back to the calling client. In most cases this is what you need to simulate a SOAP server instance in Citrus. Of course we have some more customization possibilities that we will go over later on. These customizations are optional so you can also skip the next description on endpoint adapters if you are happy with just what you have learned about the SOAP server component in Citrus.

+
+
+

Just like the HTTP server component the SOAP server component by default uses the channel endpoint adapter in order to forward all incoming requests to an in-memory message channel. This is done completely behind the scenes. The Citrus configuration has become a lot easier here so you do not have to configure this by default. When nothing else is set the test case does not worry about that setting on the server and just uses the server id reference as synchronous endpoint.

+
+
+ + + + + +
+ + +The default channel endpoint adapter automatically creates an inbound message channel where incoming messages are stored too internally. So if you need to clean up a server that has already stored some incoming messages you can do this easily by purging the internal message channel. The message channel follows a naming convention {serverName}.inbound where {serverName} is the Spring bean name of the Citrus server endpoint component. If you purge this internal channel in a before test nature you are sure that obsolete messages on a server instance get purged before each test is executed. +
+
+
+

However, we do not want to lose the great extendability and customizing capabilities of the Citrus server component. This is why you can optionally define the endpoint adapter implementation used by the Citrus SOAP server. We provide several message endpoint adapter implementations for different simulation strategies. With these endpoint adapters you should be able to generate proper SOAP response messages for the client in various ways. Before we have a closer look at the different adapter implementations we want to show how you can set a custom endpoint adapter on the server component.

+
+
+
+
<citrus-ws:server id="helloSoapServer"
+        port="8080"
+        auto-start="true"
+        endpoint-adapter="emptyResponseEndpointAdapter"
+        resource-base="src/it/resources"/>
+
+        <citrus:empty-response-adapter id="emptyResponseEndpointAdapter"/>
+
+
+
+

With this endpoint adapter configuration above we change the Citrus server behavior from scratch. Now the server automatically sends back an empty SOAP response message every time. Setting a custom endpoint adapter implementation with custom logic is as easy as defining a custom endpoint adapter Spring bean and reference it in the server attribute. You can read more about endpoint adapters in endpoint-adapter.

+
+
+
+

15.4. SOAP send and receive

+
+

Citrus provides test actions for sending and receiving messages of all kind. Different message content and different message transports are available to these send and receive actions. When using SOAP message transport we might need to set special information on those messages. These are special SOAP headers, SOAP faults and so on. So we have created a special SOAP namespace for all your SOAP related send and receive operations in an XML DSL test:

+
+
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+          xmlns:spring="http://www.springframework.org/schema/beans"
+          xmlns:ws="http://www.citrusframework.org/schema/ws/testcase"
+          xsi:schemaLocation="http://www.springframework.org/schema/beans
+          http://www.springframework.org/schema/beans/spring-beans.xsd
+          http://www.citrusframework.org/schema/testcase
+          http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd
+          http://www.citrusframework.org/schema/ws/testcase
+          http://www.citrusframework.org/schema/ws/testcase/citrus-ws-testcase.xsd">
+
+
+
+

Once you have added the ws namespace from above to your test case you are ready to use special send and receive operations in the test.

+
+
+
XML DSL
+
+
<ws:send endpoint="soapClient" soap-action="MySoapService/sayHello">
+    <message>
+        [...]
+    </message>
+</ws:send>
+
+<ws:receive endpoint="soapServer" soap-action="MySoapService/sayHello">
+    <message>
+        [...]
+    </message>
+</ws:receive>
+
+
+
+

The special namespace contains the following elements:

+
+
+ + + + + + + + + + + + + + + + + +
+send + +

Special send operation for sending out SOAP message content.

+
+receive + +

Special receive operation for validating SOAP message content.

+
+send-fault + +

Special send operation for sending out SOAP fault message content.

+
+assert-fault + +

Special assertion operation for expecting a SOAP fault message as response.

+
+
+
+

The special SOAP related send and receive actions can coexist with normal Citrus actions. In fact you can mix those action types as you want inside a test case. All test actions that work with SOAP message content on client and server side should use this special namespace.

+
+
+

In Java DSL we have something similar to that. The Java DSL provides special SOAP related features when calling the soap() method. With a fluent API you are able to then send and receive SOAP message content as client and server.

+
+
+
Java DSL
+
+
@CitrusTest
+public void soapTest() {
+
+    soap().client("soapClient")
+        .send()
+        .soapAction("MySoapService/sayHello")
+        .payload("...");
+
+    soap().client("soapClient")
+        .receive()
+        .payload("...");
+}
+
+
+
+

In the following sections the SOAP related capabilities are discussed in more detail.

+
+
+
+

15.5. SOAP headers

+
+

SOAP defines several header variations that we discuss in the following sections. First of all we deal with the special SOAP action header. In case we need to set this SOAP action header we simply need to use the special soap-action attribute in our test. The special header key in combination with an underlying SOAP client endpoint component constructs the SOAP action in the SOAP message.

+
+
+
XML DSL
+
+
<ws:send endpoint="soapClient" soap-action="MySoapService/sayHello">
+    <message>
+        [...]
+    </message>
+</ws:send>
+
+<ws:receive endpoint="soapServer" soap-action="MySoapService/sayHello">
+    <message>
+        [...]
+    </message>
+</ws:receive>
+
+
+
+
Java DSL
+
+
@CitrusTest
+public void soapActionTest() {
+
+    soap().client("soapClient")
+        .send()
+        .soapAction("MySoapService/sayHello")
+        .payload("...");
+
+    soap().server("soapClient")
+        .receive()
+        .soapAction("MySoapService/sayHello")
+        .payload("...");
+}
+
+
+
+

The SOAP action header is added to the message before sending and validated when used in a receive operation.

+
+
+ + + + + +
+ + +The soap-action attribute is defined in the special SOAP namespace in Citrus. We recommend to use this namespace for all your send and receive operations that deal with SOAP message content. However you can also set the special SOAP action header when not using the special SOAP namespace: Just set this header in your test action: +
+
+
+
+
<header>
+    <element name="citrus_soap_action" value="sayHello"/>
+</header>
+
+
+
+

Secondly a SOAP message is able to contain customized SOAP headers. These are key-value pairs where the key is a qualified name (QName) and the value a normal String value.

+
+
+
+
<header>
+    <element name="{http://citrusframework.org/sayHello}h1:Operation" value="sayHello"/>
+    <element name="{http://citrusframework.org/sayHello}h1:Request" value="HelloRequest"/>
+</header>
+
+
+
+

The key is defined as qualified QName character sequence which has a mandatory XML namespace and a prefix along with a header name. Last but not least a SOAP header can contain whole XML fragment values. The next example shows how to set these XML fragments as SOAP header in Citrus:

+
+
+
+
<header>
+    <data>
+      <![CDATA[
+          <User xmlns="http://citrusframework.org/schemas/sayHello">
+              <UserId>123456789</UserId>
+              <Handshake>S123456789</Handshake>
+          </User>
+      ]]>
+    </data>
+</header>
+
+
+
+

You can also use external file resources to set this SOAP header XML fragment as shown in this last example code:

+
+
+
+
<header>
+    <resource file="classpath:request-soap-header.xml"/>
+</header>
+
+
+
+

This completes the SOAP header possibilities for sending SOAP messages with Citrus. Of course you can also use these variants in SOAP message header validation. You define expected SOAP headers, SOAP action and XML fragments and Citrus will match incoming requests to that. Just use citrus_soap_action header key in your receiving message action and you validate this SOAP header accordingly.

+
+
+

When validating SOAP header XML fragments you need to define the whole XML header fragment as expected header data like this:

+
+
+
+
<receive endpoint="soapMessageEndpoint">
+    <message>
+        <data>
+          <![CDATA[
+            <ResponseMessage xmlns="http://citrusframework.org/schema">
+              <resultCode>OK</resultCode>
+            </ResponseMessage>
+          ]]>
+        </data>
+    </message>
+    <header>
+        <data>
+            <![CDATA[
+                <SOAP-ENV:Header
+                    xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+                    <customHeader xmlns="http://citrusframework.org/headerschema">
+                        <correlationId>${correlationId}</correlationId>
+                        <applicationId>${applicationId}</applicationId>
+                        <trackingId>${trackingId}</trackingId>
+                        <serviceId>${serviceId}</serviceId>
+                        <interfaceVersion>1.0</interfaceVersion>
+                        <timestamp>@ignore@</timestamp>
+                    </customHeader>
+                </SOAP-ENV:Header>
+            ]]>
+        </data>
+        <element name="citrus_soap_action" value="doResponse"/>
+    </header>
+</receive>
+
+
+
+

As you can see the SOAP XML header validation can combine header element and XML fragment validation. This is also likely to be used when dealing with WS-Security message headers.

+
+
+
+

15.6. SOAP HTTP mime headers

+
+

Besides the SOAP specific header elements the HTTP mime headers (e.g. Content-Type, Content-Length, Authorization) might be candidates for validation, too. When using HTTP as transport layer the SOAP message may define those mime headers. The tester is able to send and validate these headers inside the test case, although these HTTP headers are located outside the SOAP envelope. Let us first of all speak about validating the HTTP mime headers. This feature is not enabled by default. We have enabled this in our SOAP server configuration.

+
+
+
+
<citrus-ws:server id="helloSoapServer"
+        port="8080"
+        auto-start="true"
+        handle-mime-headers="true"
+        resource-base="src/it/resources"/>
+
+
+
+

With this configuration Citrus will handle all available mime headers and pass those to the test case for normal header validation.

+
+
+
+
<ws:receive endpoint="helloSoapServer">
+    <message>
+        <payload>
+            <SoapMessageRequest xmlns="http://citrusframework.org/schemas/sample.xsd">
+                <Operation>Validate mime headers</Operation>
+            </SoapMessageRequest>
+        </payload>
+    </message>
+    <header>
+        <element name="Content-Type" value="text/xml; charset=utf-8"/>
+    </header>
+</ws:receive>
+
+
+
+

The validation of these HTTP mime headers is as usual now that we have enabled the mime header handling in the SOAP server. The transport HTTP headers are available in the header just like the normal SOAP header elements do. So you can validate the headers as usual.

+
+
+

So much for receiving and validating HTTP mime message headers with SOAP communication. Now we want to send special mime headers on client side. We overwrite or add mime headers to our sending action. We mark some headers with following prefix "citrus_http"_ . This tells the SOAP client to add these headers to the HTTP header section outside the SOAP envelope. Keep in mind that header elements without this prefix go right into the SOAP header section by default.

+
+
+
+
<ws:send endpoint="soapClient">
+  [...]
+  <header>
+    <element name="citrus_http_operation" value="foo"/>
+  </header>
+  [...]
+</ws:send>
+
+
+
+

The listing above defines an HTTP mime header operation . The header prefix citrus_http_ is cut off before the header goes into the HTTP header section. With this feature we can decide where exactly our header information is located in our resulting client message.

+
+
+
+

15.7. SOAP Envelope handling

+
+

By default Citrus will remove the SOAP envelope in message converter. Following from that the Citrus test case is independent from SOAP message formats and is not bothered with handling of SOAP envelope at all. This is great in most cases but sometimes it might be mandatory to also see the whole SOAP envelope inside the test case receive action. Therefore you can keep the SOAP envelope for incoming messages by configuration on the SOAP server side.

+
+
+
+
<citrus-ws:server id="helloSoapServer"
+        port="8080"
+        auto-start="true"
+        keep-soap-envelope="true"/>
+
+
+
+

With this configuration Citrus will handle all available mime headers and pass those to the test case for normal header validation.

+
+
+
+
<ws:receive endpoint="helloSoapServer">
+<message>
+  <payload>
+    <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+      <SOAP-ENV:Header/>
+      <SOAP-ENV:Body>
+        <SoapMessageRequest xmlns="http://citrusframework.org/schemas/sample.xsd">
+        <Operation>Validate mime headers</Operation>
+        </SoapMessageRequest>
+      </SOAP-ENV:Body>
+    </SOAP-ENV:Envelope>
+  </payload>
+  </message>
+</ws:receive>
+
+
+
+

So now you are able to validate the whole SOAP envelope as is. This might be of interest in very special cases. As mentioned by default the Citrus server will automatically remove the SOAP envelope and translate the SOAP body to the message payload for straight forward validation inside the test cases.

+
+
+
+

15.8. SOAP server interceptors

+
+

The Citrus SOAP server supports the concept of interceptors in order to add custom logic to the request/response processing steps. The interceptors need to implement a common interface: org.springframework.ws.server.EndpointInterceptor. We are able to customize the interceptor +chain on the server component as follows:

+
+
+
+
<citrus-ws:server id="secureSoapServer"
+                  port="8080"
+                  auto-start="true"
+                  interceptors="serverInterceptors"/>
+
+<util:list id="serverInterceptors">
+  <bean class="org.citrusframework.ws.interceptor.SoapMustUnderstandEndpointInterceptor">
+    <property name="acceptedHeaders">
+      <list>
+        <value>{http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd}Security</value>
+      </list>
+    </property>
+  </bean>
+  <bean class="org.citrusframework.ws.interceptor.LoggingEndpointInterceptor"/>
+  <bean class="org.springframework.ws.soap.security.wss4j.Wss4jSecurityInterceptor">
+    <property name="validationActions" value="Timestamp UsernameToken"/>
+    <property name="validationCallbackHandler">
+      <bean id="passwordCallbackHandler" class="org.springframework.ws.soap.security.wss4j.callback.SimplePasswordValidationCallbackHandler">
+        <property name="usersMap">
+          <map>
+            <entry key="admin" value="secret"/>
+          </map>
+        </property>
+      </bean>
+    </property>
+  </bean>
+</util:list>
+
+
+
+

The custom interceptors are used to enable WsSecurity features on the soap server component via Wss4J.

+
+
+ + + + + +
+ + +When customizing the interceptor chain of the soap server component all default interceptors (like logging interceptors) are lost. You can see that we had to add +the org.citrusframework.ws.interceptor.LoggingEndpointInterceptor explicitly in order to log request/response messages for the server communication. +
+
+
+
+

15.9. SOAP 1.2

+
+

By default Citrus components use SOAP 1.1 version. Fortunately SOAP 1.2 is supported the same way. As we already mentioned before the Citrus SOAP components do use a SOAP message factory for creating messages in SOAP format.

+
+
+
+
<!-- SOAP 1.1 Message Factory -->
+<bean id="soapMessageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
+  <property name="soapVersion">
+    <util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_11"/>
+  </property>
+</bean>
+
+<!-- SOAP 1.2 Message Factory -->
+<bean id="soap12MessageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory">
+  <property name="soapVersion">
+    <util:constant static-field="org.springframework.ws.soap.SoapVersion.SOAP_12"/>
+  </property>
+</bean>
+
+
+
+

As you can see the SOAP message factory can either create SOAP 1.1 or SOAP 1.2 messages. This is how Citrus can create both SOAP 1.1 and SOAP 1.2 messages. Of course you can have multiple message factories configured in your project. Just set the message factory on a WebService client or server component in order to define which version should be used.

+
+
+
+
<citrus-ws:client id="soap12Client"
+            request-url="http://localhost:8080/echo"
+            message-factory="soap12MessageFactory"
+            timeout="1000"/>
+
+<citrus-ws:server id="soap12Server"
+          port="8080"
+          auto-start="true"
+          root-parent-context="true"
+          message-factory="soap12MessageFactory"/>
+
+
+
+

By default Citrus components do connect with a message factory called messageFactory no matter what SOAP version this factory is using.

+
+
+
+

15.10. SOAP faults

+
+

SOAP faults describe a failed communication in SOAP WebServices world. Citrus is able to send and receive SOAP fault messages. On server side Citrus can simulate SOAP faults with fault-code, fault-reason, fault-actor and fault-detail. On client side Citrus is able to handle and validate SOAP faults in response messages. The next section describes how to deal with SOAP faults in Citrus.

+
+
+
+

15.11. Send SOAP faults

+
+

As Citrus simulates SOAP server endpoints you also need to think about sending a SOAP fault to the calling client. In case Citrus receives a SOAP request as a server you can respond with a proper SOAP fault if necessary.

+
+
+

Please keep in mind that we use the citrus-ws extension for sending SOAP faults in our test case, as shown in this very simple example:

+
+
+
XML DSL
+
+
<ws:send-fault endpoint="helloSoapServer">
+    <ws:fault>
+        <ws:fault-code>{http://citrusframework.org/faults}citrus:TEC-1000</ws:fault-code>
+        <ws:fault-string>Invalid request</ws:fault-string>
+        <ws:fault-actor>SERVER</ws:fault-actor>
+        <ws:fault-detail>
+            <![CDATA[
+                <FaultDetail xmlns="http://citrusframework.org/schemas/sayHello.xsd">
+                    <MessageId>${messageId}</MessageId>
+                    <CorrelationId>${correlationId}</CorrelationId>
+                    <ErrorCode>TEC-1000</ErrorCode>
+                    <Text>Invalid request</Text>
+                </FaultDetail>
+            ]]>
+        </ws:fault-detail>
+    </ws:fault>
+    <ws:header>
+        <ws:element name="citrus_soap_action" value="sayHello"/>
+    </ws:header>
+</ws:send-fault>
+
+
+
+

The example generates a simple SOAP fault that is sent back to the calling client. The fault-actor and the fault-detail elements are optional. Same with the soap action declared in the special Citrus header citrus_soap_action . In the sample above the fault-detail data is placed inline as XML data. As an alternative to that you can also set the fault-detail via external file resource. Just use the file attribute as fault detail instead of the inline CDATA definition.

+
+
+
XML DSL
+
+
<ws:send-fault endpoint="helloSoapServer">
+    <ws:fault>
+        <ws:fault-code>{http://citrusframework.org/faults}citrus:TEC-1000</ws:fault-code>
+        <ws:fault-string>Invalid request</ws:fault-string>
+        <ws:fault-actor>SERVER</ws:fault-actor>
+        <ws:fault-detail file="classpath:myFaultDetail.xml"/>
+    </ws:fault>
+    <ws:header>
+        <ws:element name="citrus_soap_action" value="sayHello"/>
+    </ws:header>
+</ws:send-fault>
+
+
+
+

The generated SOAP fault looks like follows:

+
+
+
+
HTTP/1.1 500 Internal Server Error
+Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
+SOAPAction: "sayHello"
+Content-Type: text/xml; charset=utf-8
+Content-Length: 680
+Server: Jetty(7.0.0.pre5)
+
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+    <SOAP-ENV:Header/>
+    <SOAP-ENV:Body>
+        <SOAP-ENV:Fault>
+            <faultcode xmlns:citrus="http://citrusframework.org/faults">citrus:TEC-1000</faultcode>
+            <faultstring xml:lang="en">Invalid request</faultstring>
+            <detail>
+                <FaultDetail xmlns="http://citrusframework.org/schemas/sayHello.xsd">
+                    <MessageId>9277832563</MessageId>
+                    <CorrelationId>4346806225</CorrelationId>
+                    <ErrorCode>TEC-1000</ErrorCode>
+                    <Text>Invalid request</Text>
+                </FaultDetail>
+            </detail>
+        </SOAP-ENV:Fault>
+    </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+
+
+ + + + + +
+ + +Notice that the send action uses a special XML namespace (ws:send). This ws namespace belongs to the Citrus WebService extension and adds SOAP specific features to the normal send action. When you use such ws extensions you need to define the additional namespace in your test case. This is usually done in the root <spring:beans> element where we simply declare the citrus-ws specific namespace like follows. +
+
+
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+    xmlns:spring="http://www.springframework.org/schema/beans"
+    xmlns:ws="http://www.citrusframework.org/schema/ws/testcase"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans
+    http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://www.citrusframework.org/schema/testcase
+    http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd
+    http://www.citrusframework.org/schema/ws/testcase
+    http://www.citrusframework.org/schema/ws/testcase/citrus-ws-testcase.xsd">
+
+
+
+
+

15.12. Receive SOAP faults

+
+

In case you receive SOAP response messages as a client endpoint you may need to handle and validate SOAP faults in error situations. Citrus can validate SOAP faults with fault-code, fault-actor, fault-string and fault-detail values.

+
+
+

As a client we send out a request and receive a SOAP fault as response. By default the client sending action in Citrus throws a specific exception when the SOAP response is a SOAP fault element. This exception is called SoapFaultClientException coming from the Spring API. You as a tester can assert this kind of exception in a test case in order to expect the SOAP error.

+
+
+
XML DSL
+
+
<assert class="org.springframework.ws.soap.client.SoapFaultClientException">
+    <send endpoint="soapClient">
+        <message>
+            <payload>
+                <SoapFaultForcingRequest
+                  xmlns="http://citrusframework.org/schemas/soap">
+                    <Message>This is invalid</Message>
+                </SoapFaultForcingRequest>
+            </payload>
+        </message>
+    </send>
+</assert>
+
+
+
+

The SOAP message sending action is surrounded by a simple assert action. The asserted exception class is the SoapFaultClientException that we have mentioned before. This means that the test expects the exception to be thrown during the communication. In case the exception is missing the test fails.

+
+
+

So far we have used the Citrus core capabilities of asserting an exception. This basic assertion test action is not able to offer direct access to the SOAP fault-code and fault-string values for validation. The basic assert action simply has no access to the actual SOAP fault elements. Fortunately we can use the citrus-ws namespace again which offers a special assert action implementation especially designed for SOAP faults in this case.

+
+
+
XML DSL
+
+
<ws:assert-fault fault-code="{http://citrusframework.org/faults}TEC-1001"
+           fault-string="Invalid request">
+           fault-actor="SERVER">
+  <ws:when>
+    <send endpoint="soapClient">
+        <message>
+            <payload>
+                <SoapFaultForcingRequest
+                  xmlns="http://citrusframework.org/schemas/soap">
+                    <Message>This is invalid</Message>
+                </SoapFaultForcingRequest>
+            </payload>
+        </message>
+    </send>
+  </ws:when>
+</ws:assert-fault>
+
+
+
+

The special assert action offers several attributes to validate the expected SOAP fault. Namely these are "fault-code", "fault-string" and "fault-actor" . The fault-code is defined as a QName string and is mandatory for the validation. The fault assertion also supports test variable replacement as usual.

+
+
+

The time you use SOAP fault validation you need to tell Citrus how to validate the SOAP faults. Citrus needs an instance of a SoapFaultValidator that we need to add to the Spring application context. By default Citrus is searching for a bean with the id 'soapFaultValidator' .

+
+
+
+
<bean id="soapFaultValidator" class="org.citrusframework.ws.validation.SimpleSoapAttachmentValidator"/>
+
+
+
+

Citrus offers several reference implementations for these SOAP fault validators. These are:

+
+
+
    +
  • +

    org.citrusframework.ws.validation.SimpleSoapAttachmentValidator

    +
  • +
  • +

    org.citrusframework.ws.validation.SimpleSoapFaultValidator

    +
  • +
  • +

    org.citrusframework.ws.validation.XmlSoapFaultValidator

    +
  • +
+
+
+

Please see the API documentation for details on the available reference implementations. Of course you can also define your own SOAP validator logic (would be great if you could share your ideas!). In the test case you can explicitly choose the validator to use:

+
+
+
XML DSL
+
+
<ws:assert-fault fault-code="{http://citrusframework.org/faults}TEC-1001"
+              fault-string="Invalid request"
+              fault-validator="mySpecialSoapFaultValidator">
+   [...]
+</ws:assert-fault>
+
+
+
+ + + + + +
+ + +Another important thing to notice when asserting SOAP faults is the fact, that Citrus needs to have a SoapMessageFactory available in the Spring application context. If you deal with SOAP messaging in general you will already have such a bean in the context. +
+
+
+
+
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>
+
+
+
+

Choose one of Spring’s reference implementations or some other implementation as SOAP message factory. Citrus will search for a bean with id 'messageFactory' by default. In case you have other beans with different identifiers please choose the messageFactory in the test case assert action:

+
+
+
XML DSL
+
+
<ws:assert-fault fault-code="{http://citrusframework.org/faults}TEC-1001"
+              fault-string="Invalid request"
+              message-factory="mySpecialMessageFactory">
+   [...]
+</ws:assert-fault>
+
+
+
+ + + + + +
+ + +Notice the ws specific namespace that belongs to the Citrus WebService extensions. As the ws:assert action uses SOAP specific features we need to refer to the citrus-ws namespace. You can find the namespace declaration in the root element in your test case. +
+
+
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+    xmlns:spring="http://www.springframework.org/schema/beans"
+    xmlns:ws="http://www.citrusframework.org/schema/ws/testcase"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans
+    http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://www.citrusframework.org/schema/testcase
+    http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd
+    http://www.citrusframework.org/schema/ws/testcase
+    http://www.citrusframework.org/schema/ws/testcase/citrus-ws-testcase.xsd">
+
+
+
+

Citrus is also able to validate SOAP fault details. See the following example for understanding how to do it:

+
+
+
XML DSL
+
+
<ws:assert-fault fault-code="{http://citrusframework.org/faults}TEC-1001"
+           fault-string="Invalid request">
+    <ws:fault-detail>
+      <![CDATA[
+          <FaultDetail xmlns="http://citrusframework.org/schemas/soap">
+              <ErrorCode>TEC-1000</ErrorCode>
+              <Text>Invalid request</Text>
+          </FaultDetail>
+      ]]>
+    </ws:fault-detail>
+    <ws:when>
+        <send endpoint="soapClient">
+            <message>
+                <payload>
+                    <SoapFaultForcingRequest
+                      xmlns="http://citrusframework.org/schemas/soap">
+                        <Message>This is invalid</Message>
+                    </SoapFaultForcingRequest>
+                </payload>
+            </message>
+        </send>
+    </ws:when>
+</ws:assert-fault>
+
+
+
+

The expected SOAP fault detail content is simply added to the ws:assert action. The SoapFaultValidator implementation defined in the Spring application context is responsible for checking the SOAP fault detail with validation algorithm. The validator implementation checks the detail content to meet the expected template. Citrus provides some default SoapFaultValidator implementations. Supported algorithms are pure String comparison (org.citrusframework.ws.validation.SimpleSoapFaultValidator) as well as XML tree walk-through (org.citrusframework.ws.validation.XmlSoapFaultValidator).

+
+
+

When using the XML validation algorithm you have the complete power as known from normal message validation in receive actions. This includes schema validation or ignoring elements for instance. On the fault-detail element you are able to add some validation settings such as schema-validation=enabled/disabled, custom schema-repository and so on.

+
+
+
XML DSL
+
+
<ws:assert-fault fault-code="{http://citrusframework.org/faults}TEC-1001"
+           fault-string="Invalid request">
+    <ws:fault-detail schema-validation="false">
+      <![CDATA[
+          <FaultDetail xmlns="http://citrusframework.org/schemas/soap">
+              <ErrorCode>TEC-1000</ErrorCode>
+              <Text>Invalid request</Text>
+          </FaultDetail>
+      ]]>
+    </ws:fault-detail>
+    <ws:when>
+        <send endpoint="soapClient">
+            [...]
+        </send>
+    </ws:when>
+</ws:assert-fault>
+
+
+
+

Please see also the Citrus API documentation for available validator implementations and validation algorithms.

+
+
+

So far we have used assert action wrapper in order to catch SOAP fault exceptions and validate the SOAP fault content. Now we have an alternative way of handling SOAP faults in Citrus. With exceptions the send action aborts and we do not have a receive action for the SOAP fault. This might be inadequate if we need to validate the SOAP message content (SOAPHeader and SOAPBody) coming with the SOAP fault. Therefore the web service message sender component offers several fault strategy options. In the following we discuss the propagation of SOAP fault as messages to the receive action as we would do with normal SOAP messages.

+
+
+
+
<citrus-ws:client id="soapClient"
+                  request-url="http://localhost:8090/test"
+                  fault-strategy="propagateError"/>
+
+
+
+

We have configured a fault strategy propagateError so the message sender will not raise client exceptions but inform the receive action with SOAP fault message contents. By default the fault strategy raises client exceptions (fault-strategy= throwsException).

+
+
+

So now that we do not raise exceptions we can leave out the assert action wrapper in our test. Instead we simply use a receive action and validate the SOAP fault like this.

+
+
+
+
<send endpoint="soapClient">
+    <message>
+        <payload>
+            <SoapFaultForcingRequest xmlns="http://citrusframework.org/schemas/sample.xsd">
+                <Message>This is invalid</Message>
+            </SoapFaultForcingRequest>
+        </payload>
+    </message>
+</send>
+
+<receive endpoint="soapClient" timeout="5000">
+    <message>
+        <payload>
+            <SOAP-ENV:Fault xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+                <faultcode xmlns:CITRUS="http://citrus.org/soap">CITRUS:${soapFaultCode}</faultcode>
+                <faultstring xml:lang="en">${soapFaultString}</faultstring>
+            </SOAP-ENV:Fault>
+        </payload>
+    </message>
+</receive>
+
+
+
+

So choose the preferred way of handling SOAP faults either by asserting client exceptions or propagating fault messages to the receive action on a SOAP client.

+
+
+
+

15.13. Multiple SOAP fault details

+
+

SOAP fault messages can hold multiple SOAP fault detail elements. In the previous sections we have used SOAP fault details in sending and receiving actions as single element. In order to meet the SOAP specification Citrus is also able to handle multiple SOAP fault detail elements in a message. You just use multiple fault-detail elements in your test action like this:

+
+
+
+
<ws:send-fault endpoint="helloSoapServer">
+    <ws:fault>
+        <ws:fault-code>{http://citrusframework.org/faults}citrus:TEC-1000</ws:fault-code>
+        <ws:fault-string>Invalid request</ws:fault-string>
+        <ws:fault-actor>SERVER</ws:fault-actor>
+        <ws:fault-detail>
+            <![CDATA[
+                <FaultDetail xmlns="http://citrusframework.org/schemas/sayHello.xsd">
+                    <MessageId>${messageId}</MessageId>
+                    <CorrelationId>${correlationId}</CorrelationId>
+                    <ErrorCode>TEC-1000</ErrorCode>
+                    <Text>Invalid request</Text>
+                </FaultDetail>
+            ]]>
+        </ws:fault-detail>
+        <ws:fault-detail>
+            <![CDATA[
+                <ErrorDetail xmlns="http://citrusframework.org/schemas/sayHello.xsd">
+                    <ErrorCode>TEC-1000</ErrorCode>
+                </ErrorDetail>
+            ]]>
+        </ws:fault-detail>
+    </ws:fault>
+    <ws:header>
+        <ws:element name="citrus_soap_action" value="sayHello"/>
+    </ws:header>
+</ws:send-fault>
+
+
+
+

This will result in following SOAP envelope message:

+
+
+
+
HTTP/1.1 500 Internal Server Error
+Accept: text/xml, text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
+SOAPAction: "sayHello"
+Content-Type: text/xml; charset=utf-8
+Content-Length: 680
+Server: Jetty(7.0.0.pre5)
+
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+    <SOAP-ENV:Header/>
+    <SOAP-ENV:Body>
+        <SOAP-ENV:Fault>
+            <faultcode xmlns:citrus="http://citrusframework.org/faults">citrus:TEC-1000</faultcode>
+            <faultstring xml:lang="en">Invalid request</faultstring>
+            <detail>
+                <FaultDetail xmlns="http://citrusframework.org/schemas/sayHello.xsd">
+                    <MessageId>9277832563</MessageId>
+                    <CorrelationId>4346806225</CorrelationId>
+                    <ErrorCode>TEC-1000</ErrorCode>
+                    <Text>Invalid request</Text>
+                </FaultDetail>
+                <ErrorDetail xmlns="http://citrusframework.org/schemas/sayHello.xsd">
+                    <ErrorCode>TEC-1000</ErrorCode>
+                </ErrorDetail>
+            </detail>
+        </SOAP-ENV:Fault>
+    </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+
+
+

Of course we can also expect several fault detail elements when receiving a SOAP fault.

+
+
+
XML DSL
+
+
<ws:assert-fault fault-code="{http://citrusframework.org/faults}TEC-1001"
+           fault-string="Invalid request">
+    <ws:fault-detail schema-validation="false">
+      <![CDATA[
+          <FaultDetail xmlns="http://citrusframework.org/schemas/soap">
+              <ErrorCode>TEC-1000</ErrorCode>
+              <Text>Invalid request</Text>
+          </FaultDetail>
+      ]]>
+    </ws:fault-detail>
+    <ws:fault-detail>
+      <![CDATA[
+          <ErrorDetail xmlns="http://citrusframework.org/schemas/soap">
+              <ErrorCode>TEC-1000</ErrorCode>
+          </ErrorDetail>
+      ]]>
+    </ws:fault-detail>
+    <ws:when>
+        <send endpoint="soapClient">
+            [...]
+        </send>
+    </ws:when>
+</ws:assert-fault>
+
+
+
+

As you can see we can individually use validation settings for each fault detail. In the example above we disabled schema validation for the first fault detail element.

+
+
+
+

15.14. Send HTTP error codes with SOAP

+
+

The SOAP server logic in Citrus is able to simulate pure HTTP error codes such as 404 "Not found" or 500 "Internal server error". The good thing is that the Citrus server is able to receive a request for proper validation in a receive action and then simulate HTTP errors on demand.

+
+
+

The mechanism on HTTP error code simulation is not different to the usual SOAP request/response handling in Citrus. We receive the request as usual and we provide a response. The HTTP error situation is simulated according to the special HTTP header citrus_http_status in the Citrus SOAP response definition. In case this header is set to a value other than 200 OK the Citrus SOAP server sends an empty SOAP response with HTTP error status code set accordingly.

+
+
+
+
<receive endpoint="helloSoapServer">
+  <message>
+      <payload>
+          <Message xmlns="http://citrusframework.org/schemas/sample.xsd">
+              <Text>Hello SOAP server</Text>
+          </Message>
+      </payload>
+  </message>
+</receive>
+
+<send endpoint="helloSoapServer">
+    <message>
+        <data></data>
+    </message>
+    <header>
+        <element name="citrus_http_status_code" value="500"/>
+    </header>
+</send>
+
+
+
+

The SOAP response must be empty and the HTTP status code is set to a value other than 200, like 500. This results in an HTTP error sent to the calling client with error 500 "Internal server error".

+
+
+
+

15.15. SOAP attachment support

+
+

Citrus is able to add attachments to a SOAP request on client and server side. As usual you can validate the SOAP attachment content on a received SOAP message. The next chapters describe how to handle SOAP attachments in Citrus.

+
+
+
+

15.16. Send SOAP attachments

+
+

As client Citrus is able to add attachments to the SOAP message. I think it is best to go straight into an example in order to understand how it works.

+
+
+
+
<ws:send endpoint="soapClient">
+    <message>
+        <payload>
+            <SoapMessageWithAttachment xmlns="http://citrusframework.org/schemas/sample.xsd">
+                <Operation>Read the attachment</Operation>
+            </SoapMessageWithAttachment>
+        </payload>
+    </message>
+    <ws:attachment content-id="MySoapAttachment" content-type="text/plain">
+        <ws:resource file="classpath:org/citrusframework/ws/soapAttachment.txt"/>
+    </ws:attachment>
+</ws:send>
+
+
+
+ + + + + +
+ + +In the previous chapters you may have already noticed the citrus-ws namespace that stands for the SOAP extensions in Citrus. Please include the citrus-ws namespace in your test case as described earlier in this chapter so you can use the attachment support. +
+
+
+

The special send action of the SOAP extension namespace is aware of SOAP attachments. The attachment content usually consists of a content-id, a content-type and the actual content as plain text or binary content. Inside the test case you can use external file resources or inline CDATA sections for the attachment content. As you are familiar with Citrus you may know this already from other actions.

+
+
+

Citrus will construct a SOAP message with the SOAP attachment. Currently only one attachment per message is supported.

+
+
+
+

15.17. Receive SOAP attachments

+
+

When Citrus calls SOAP WebServices as a client we may receive SOAP responses with attachments. The tester can validate those received SOAP messages with attachment content quite easy. As usual let us have a look at an example first.

+
+
+
+
<ws:receive endpoint="soapClient">
+    <message>
+        <payload>
+            <SoapMessageWithAttachmentRequest xmlns="http://citrusframework.org/schemas/sample.xsd">
+                <Operation>Read the attachment</Operation>
+            </SoapMessageWithAttachmentRequest>
+        </payload>
+    </message>
+    <ws:attachment content-id="MySoapAttachment"
+                      content-type="text/plain"
+                      validator="mySoapAttachmentValidator">
+        <ws:resource file="classpath:org/citrusframework/ws/soapAttachment.txt"/>
+    </ws:attachment>
+</ws:receive>
+
+
+
+

Again we use the Citrus SOAP extension namespace with the specific receive action that is aware of SOAP attachment validation. The tester can validate the content-id, the content-type and the attachment content. Instead of using the external file resource you could also define an expected attachment template directly in the test case as inline CDATA section.

+
+
+ + + + + +
+ + +The ws:attachment element specifies a validator instance. This validator determines how to validate the attachment content. SOAP attachments are not limited to XML content. Plain text content and binary content is possible, too. So each SOAP attachment validating action can use a different SoapAttachmentValidator instance which is responsible for validating and comparing received attachments to expected template attachments. In the Citrus configuration the validator is set as normal Spring bean with the respective identifier. +
+
+
+
+
<bean id="soapAttachmentValidator" class="org.citrusframework.ws.validation.SimpleSoapAttachmentValidator"/>
+<bean id="mySoapAttachmentValidator" class="com.company.ws.validation.MySoapAttachmentValidator"/>
+
+
+
+

You can define several validator instances in the Citrus configuration. The validator with the general id "soapAttachmentValidator" is the default validator for all actions that do not explicitly set a validator instance. Citrus offers a set of reference validator implementations. The SimpleSoapAttachmentValidator will use a simple plain text comparison. Of course you are able to add individual validator implementations, too.

+
+
+
+

15.18. SOAP MTOM support

+
+

MTOM (Message Transmission Optimization Mechanism) enables you to send and receive large SOAP message content using streamed data handlers. This optimizes the resource allocation on server and client side where not all data is loaded into memory when marshalling/unmarshalling the message payload data. In detail MTOM-enabled messages do have a XOP package inside the message payload replacing the actual large content data. The content is then streamed aas separate attachment. Server and client can operate with a data handler providing access to the streamed content. This is very helpful when using large binary content inside a SOAP message for instance.

+
+
+

Citrus is able to both send and receive MTOM enabled SOAP messages on client and server. Just use the mtom-enabled flag when sending a SOAP message:

+
+
+
+
<ws:send endpoint="soapMtomClient" mtom-enabled="true">
+  <message>
+    <data>
+      <![CDATA[
+        <image:addImage xmlns:image="http://citrusframework.org/imageService/">
+          <image>cid:IMAGE</image>
+        </image:addImage>
+      ]]>
+    </data>
+  </message>
+  <ws:attachment content-id="IMAGE" content-type="application/octet-stream">
+    <ws:resource file="classpath:org/citrusframework/hugeImageData.png"/>
+  </ws:attachment>
+</ws:send>
+
+
+
+

As you can see the example above sends a SOAP message that contains a large binary image content. The actual binary image data is referenced with a content id marker cid:IMAGE inside the message payload. The actual image content is added as attachment with a separate file resource. Important is here the content-id which matches the id marker in the SOAP message payload (IMAGE).

+
+
+

Citrus builds a proper SOAP MTOM enabled message automatically adding the XOP package inside the message. The binary data is sent as separate SOAP attachment accordingly. The resulting SOAP message looks like this:

+
+
+
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+<SOAP-ENV:Header></SOAP-ENV:Header>
+  <SOAP-ENV:Body>
+    <image:addImage xmlns:image="http://citrusframework.org/imageService/">
+      <image><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:IMAGE"/></image>
+    </image:addImage>
+  </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+
+
+

On the server side Citrus is also able to handle MTOM enabled SOAP messages. In a server receive action you can specify the MTOM SOAP attachment content as follows.

+
+
+
+
<ws:receive endpoint="soapMtomServer" mtom-enabled="true">
+  <message schema-validation="false">
+    <data>
+      <![CDATA[
+        <image:addImage xmlns:image="http://citrusframework.org/imageService/">
+          <image><xop:Include xmlns:xop="http://www.w3.org/2004/08/xop/include" href="cid:IMAGE"/></image>
+        </image:addImage>
+      ]]>
+    </data>
+  </message>
+  <ws:attachment content-id="IMAGE" content-type="application/octet-stream">
+    <ws:resource file="classpath:org/citrusframework/hugeImageData.png"/>
+  </ws:attachment>
+</ws:receive>
+
+
+
+

We define the MTOM attachment content as separate SOAP attachment. The content-id is referenced somewhere in the SOAP message payload data. At runtime Citrus will add the XOP package definition automatically and perform validation on the message and its streamed MTOM attachment data.

+
+
+

Next thing that we have to talk about is inline MTOM data. This means that the content should be added as either base64Binary or hexBinary encoded String data directly to the message content. See the following example that uses the mtom-inline setting:

+
+
+
+
<ws:send endpoint="soapMtomClient" mtom-enabled="true">
+  <message>
+    <data>
+      <![CDATA[
+        <image:addImage xmlns:image="http://citrusframework.org/imageService/">
+          <image>cid:IMAGE</image>
+          <icon>cid:ICON</icon>
+        </image:addImage>
+      ]]>
+    </data>
+  </message>
+  <ws:attachment content-id="IMAGE" content-type="application/octet-stream"
+            mtom-inline="true" encoding-type="base64Binary">
+    <ws:resource file="classpath:org/citrusframework/image.png"/>
+  </ws:attachment>
+  <ws:attachment content-id="ICON" content-type="application/octet-stream"
+            mtom-inline="true" encoding-type="hexBinary">
+    <ws:resource file="classpath:org/citrusframework/icon.ico"/>
+  </ws:attachment>
+</ws:send>
+
+
+
+

The listing above defines two inline MTOM attachments. The first attachment cid:IMAGE uses the encoding type base64Binary which is the default. The second attachment cid:ICON uses hexBinary encoding. Both attachments are added as inline data before the message is sent. The final SOAP message looks like follows:

+
+
+
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+<SOAP-ENV:Header></SOAP-ENV:Header>
+  <SOAP-ENV:Body>
+    <image:addImage xmlns:image="http://citrusframework.org/imageService/">
+      <image>VGhpcyBpcyBhIGJpbmFyeSBpbWFnZSBhdHRhY2htZW50IQpWYXJpYWJsZXMgJXt0ZXN0fSBzaG91bGQgbm90IGJlIHJlcGxhY2VkIQ==</image>
+      <icon>5468697320697320612062696E6172792069636F6E206174746163686D656E74210A5661726961626C657320257B746573747D2073686F756C64206E6F74206265207265706C6163656421</icon>
+    </image:addImage>
+  </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+
+
+

The image content is a base64Binary String and the icon a hexBinary String. Of course this mechanism also is supported in receive actions on the server side where the expected message content is added as inline MTOM data before validation takes place.

+
+
+
+

15.19. SOAP client basic authentication

+
+

As a SOAP client you may have to use basic authentication in order to access a server resource. Basic authentication via HTTP stands for username/password authentication where the credentials are transmitted in the HTTP request header section as base64 encoded entry. As Citrus uses the Spring WebService stack we can use the basic authentication support there. We set the user credentials on the HttpClient message sender which is used inside the Spring WebServiceTemplate .

+
+
+

Citrus provides a comfortable way to set the HTTP message sender with basic authentication credentials on the WebServiceTemplate . Just see the following example and learn how to do that.

+
+
+
+
<citrus-ws:client id="soapClient"
+                              request-url="http://localhost:8090/test"
+                              message-sender="basicAuthClient"/>
+
+<bean id="basicAuthClient" class="org.springframework.ws.transport.http.HttpComponentsMessageSender">
+  <property name="authScope">
+      <bean class="org.apache.hc.client5.http.auth.AuthScope">
+        <constructor-arg value="http"/>
+        <constructor-arg value="localhost"/>
+        <constructor-arg value="8090"/>
+        <constructor-arg>
+          <null/>
+        </constructor-arg>
+        <constructor-arg value="basic"/>
+      </bean>
+  </property>
+  <property name="credentials">
+    <bean class="org.apache.hc.client5.http.auth.UsernamePasswordCredentials">
+        <constructor-arg value="someUsername"/>
+        <constructor-arg value="somePassword"/>
+    </bean>
+  </property>
+</bean>
+
+
+
+

The above configuration results in SOAP requests with authentication headers properly set for basic authentication. The special message sender takes care of adding the proper basic authentication header to each request that is sent with this Citrus message sender. By default preemptive authentication is used. The message sender only sends a single request to the server with all authentication information set in the message header. The request which determines the authentication scheme on the server is skipped. This is why you have to add some auth scope so Citrus can setup an authentication cache within the HTTP context in order to have preemptive authentication.

+
+
+ + + + + +
+ + +You can also skip the message sender configuration and set the Authorization header on each request in your send action definition on your own. Be aware of setting the header as HTTP mime header using the correct prefix and take care of using the correct basic authentication with base64 encoding for the username:password phrase. +
+
+
+
+
<header>
+    <element name="citrus_http_Authorization" value="Basic c29tZVVzZXJuYW1lOnNvbWVQYXNzd29yZA=="/>
+</header>
+
+
+
+

For base64 encoding you can also use a Citrus function, see functions-encode-base64

+
+
+
+

15.20. SOAP server basic authentication

+
+

When providing SOAP WebService server functionality Citrus can also set basic authentication so all clients need to authenticate properly when accessing the server resource.

+
+
+
+
<citrus-ws:server id="simpleSoapServer"
+             port="8080"
+             auto-start="true"
+             resource-base="src/it/resources"
+             security-handler="basicSecurityHandler"/>
+
+<bean id="securityHandler" class="org.citrusframework.ws.security.SecurityHandlerFactory">
+    <property name="users">
+        <list>
+            <bean class="org.citrusframework.ws.security.User">
+                <property name="name" value="citrus"/>
+                <property name="password" value="secret"/>
+                <property name="roles" value="CitrusRole"/>
+            </bean>
+        </list>
+    </property>
+    <property name="constraints">
+        <map>
+            <entry key="/foo/*">
+                <bean class="org.citrusframework.ws.security.BasicAuthConstraint">
+                    <constructor-arg value="CitrusRole"/>
+                </bean>
+            </entry>
+        </map>
+    </property>
+</bean>
+
+
+
+

We have set a security handler on the server web container with a constraint on all resources with /foo/*. Following from that the server requires basic authentication for these resources. The granted users and roles are specified within the security handler bean definition. Connecting clients have to set the basic auth HTTP header properly using the correct user and role for accessing the Citrus server now.

+
+
+

You can customize the security handler for your very specific needs (e.g. load users and roles with JDBC from a database). Just have a look at the code base and inspect the settings and properties offered by the security handler interface.

+
+
+ + + + + +
+ + +This mechanism is not restricted to basic authentication only. With other settings you can also set up digest or form-based authentication constraints very easy. +
+
+
+
+

15.21. WS-Addressing support

+
+

The web service stack offers a lot of different technologies and standards within the context of SOAP WebServices. We speak of WS-* specifications in particular. One of these specifications deals with addressing. On client side you may add wsa header information to the request in order to give the server instructions how to deal with SOAP faults for instance.

+
+
+

In Citrus WebService client you can add those header information using the common configuration like this:

+
+
+
+
<citrus-ws:client id="soapClient"
+                         request-url="http://localhost:8090/test"
+                         message-converter="wsAddressingMessageConverter"/>
+
+<bean id="wsAddressingMessageConverter" class="org.citrusframework.ws.message.converter.WsAddressingMessageConverter">
+  <constructor-arg>
+    <bean id="wsAddressing200408" class="org.citrusframework.ws.addressing.WsAddressingHeaders">
+        <property name="version" value="VERSION200408"/>
+        <property name="action" value="http://citrus.sample/sayHello"/>
+        <property name="to" value="http://citrus.sample/server"/>
+        <property name="from">
+            <bean class="org.springframework.ws.soap.addressing.core.EndpointReference">
+                <constructor-arg value="http://citrus.sample/client"/>
+            </bean>
+        </property>
+        <property name="replyTo">
+            <bean class="org.springframework.ws.soap.addressing.core.EndpointReference">
+                <constructor-arg value="http://citrus.sample/client"/>
+            </bean>
+        </property>
+        <property name="faultTo">
+            <bean class="org.springframework.ws.soap.addressing.core.EndpointReference">
+                <constructor-arg value="http://citrus.sample/fault/resolver"/>
+            </bean>
+        </property>
+    </bean>
+  </constructor-arg>
+</bean>
+
+
+
+

The WsAddressing header values will be used for all request messages that are sent with the soap client component soapClient. You can overwrite the WsAddressing +header in each send test action in your test though. Just set the special WsAddressing message header on your request. You can use the following message header names in +order to overwrite the default addressing headers specified in the message converter configuration (also see the class org.citrusframework.ws.addressing.WsAddressingMessageHeaders).

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+citrus_soap_ws_addressing_messageId + +

addressing message id as URI

+
+citrus_soap_ws_addressing_from + +

addressing from endpoint reference as URI

+
+citrus_soap_ws_addressing_to + +

addressing to URI

+
+citrus_soap_ws_addressing_action + +

addressing action URI

+
+citrus_soap_ws_addressing_replyTo + +

addressing reply to endpoint reference as URI

+
+citrus_soap_ws_addressing_faultTo + +

addressing fault to endpoint reference as URI

+
+
+
+

When using these message headers you are able to explicitly overwrite the WsAddressing headers. Test variables are supported of course when specifying the values. Most of the values +are parsed to a URI value at the end so please make sure to use correct URI String representations.

+
+
+ + + + + +
+ + +The WS-Addressing specification knows several versions. Supported versions are: +
+
+
+ + + + + + + + + +
+VERSION10 + +

WS-Addressing 1.0 May 2006

+
+VERSION200408 + +

August 2004 edition of the WS-Addressing specification

+
+
+
+

The addressing headers find a place in the SOAP message header with respective namespaces and values. A possible SOAP request with WS addressing headers looks like follows:

+
+
+
+
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+    <SOAP-ENV:Header xmlns:wsa="http://schemas.xmlsoap.org/ws/2004/08/addressing">
+        <wsa:To SOAP-ENV:mustUnderstand="1">http://citrus.sample/server</wsa:To>
+        <wsa:From>
+            <wsa:Address>http://citrus.sample/client</wsa:Address>
+        </wsa:From>
+        <wsa:ReplyTo>
+            <wsa:Address>http://citrus.sample/client</wsa:Address>
+        </wsa:ReplyTo>
+        <wsa:FaultTo>
+            <wsa:Address>http://citrus.sample/fault/resolver</wsa:Address>
+        </wsa:FaultTo>
+        <wsa:Action>http://citrus.sample/sayHello</wsa:Action>
+        <wsa:MessageID>urn:uuid:4c4d8af2-b402-4bc0-a2e3-ad33b910e394</wsa:MessageID>
+    </SOAP-ENV:Header>
+    <SOAP-ENV:Body>
+        <cit:HelloRequest xmlns:cit="http://citrus/sample/sayHello">
+            <cit:Text>Hello Citrus!</cit:Text>
+        </cit:HelloRequest>
+    </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+
+
+ + + + + +
+ + +By default when not set explicitly on the message headers the WsAddressing message id property is automatically generated for each request. You can set the message id generation strategy in the Spring application context message converter configuration: +
+
+
+
+
<bean id="wsAddressingMessageConverter" class="org.citrusframework.ws.message.converter.WsAddressingMessageConverter">
+  <property name="messageIdStrategy">
+    <bean class="org.springframework.ws.soap.addressing.messageid.UuidMessageIdStrategy"/>
+  </property>
+</bean>
+
+
+
+

By default the strategy will create a new Java UUID for each request. The strategy also uses a common resource name prefix urn:uuid:. You can overwrite the message id +any time for each request explicitly by setting the message header citrus_soap_ws_addressing_messageId with a respective value on the message in your test.

+
+
+
+

15.22. SOAP client fork mode

+
+

SOAP over HTTP uses synchronous communication by nature. This means that sending a SOAP message in Citrus over HTTP will automatically block further test actions until the synchronous HTTP response has been received. In test cases this synchronous blocking might cause problems for several reasons. A simple reason would be that you need to do further test actions in parallel to the synchronous HTTP SOAP communication (e.g. simulate another backend system in the test case).

+
+
+

You can separate the SOAP send action from the rest of the test case by using the "fork" mode. The SOAP client will automatically open a new Java Thread for the synchronous communication and the test is able to continue with execution although the synchronous HTTP SOAP response has not arrived yet.

+
+
+
+
<ws:send endpoint="soapClient" fork="true">
+  <message>
+    <payload>
+        <SoapRequest xmlns="http://citrusframework.org/schemas/sample.xsd">
+          <Operation>Read the attachment</Operation>
+        </SoapRequest>
+    </payload>
+  </message>
+</ws:send>
+
+
+
+

With the "fork" mode enabled the test continues with execution while the sending action waits for the synchronous response in a separate Java Thread. You could reach the same behaviour with a complex <parallel>/<sequential> container construct, but forking the send action is much more straight forward.

+
+
+ + + + + +
+ + +It is highly recommended to use a proper "timeout" setting on the SOAP receive action when using fork mode. The forked send operation might take some time and the corresponding receive action might run into failure as the response was has not been received yet. The result would be a broken test because of the missing response message. A proper "timeout" setting for the receive action solves this problem as the action waits for this time period and occasionally repeatedly asks for the SOAP response message. The following listing sets the receive timeout to 10 seconds, so the action waits for the forked send action to deliver the SOAP response in time. +
+
+
+
+
<ws:receive endpoint="soapClient" timeout="10000">
+  <message>
+    <payload>
+        <SoapResponse xmlns="http://citrusframework.org/schemas/sample.xsd">
+          <Operation>Did something</Operation>
+          <Success>true</Success>
+        </SoapResponse>
+    </payload>
+  </message>
+</ws:receive>
+
+
+
+
+

15.23. SOAP servlet context customization

+
+

For highly customized SOAP server components in Citrus you can define a full servlet context configuration file. Here you have the full power to add Spring endpoint mappings and custom endpoint implementations. You can set the custom servlet context as external file resource on the server component:

+
+
+
+
<citrus-ws:client id="soapClient"
+          context-config-location="classpath:citrus-ws-servlet.xml"
+          message-factory="soap11MessageFactory"/>
+
+
+
+

Now let us have a closer look at the context-config-location attribute. This configuration defines the Spring application context file for endpoints, request mappings and other SpringWS specific information. Please see the official SpringWS documentation for details on this Spring based configuration. You can also just copy the following example application context which should work for you in general.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans
+       http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+  <bean id="loggingInterceptor"
+    class="org.springframework.ws.server.endpoint.interceptor.PayloadLoggingInterceptor">
+      <description>
+          This interceptor logs the message payload.
+      </description>
+  </bean>
+
+  <bean id="helloServicePayloadMapping"
+    class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
+      <property name="mappings">
+          <props>
+              <prop
+                  key="{http://citrusframework.org/schemas/sayHello}HelloRequest">
+                  helloServiceEndpoint
+              </prop>
+          </props>
+      </property>
+      <property name="interceptors">
+          <list>
+              <ref bean="loggingInterceptor"/>
+          </list>
+      </property>
+  </bean>
+
+  <bean id="helloServiceEndpoint" class="org.citrusframework.ws.server.WebServiceEndpoint">
+      <property name="endpointAdapter" ref="staticResponseEndpointAdapter"/>
+  </bean>
+
+  <citrus:static-response-adapter id="staticResponseEndpointAdapter">
+      <citrus:payload>
+          <![CDATA[
+              <HelloResponse xmlns="http://citrusframework.org/schemas/sayHello">
+                  <MessageId>123456789</MessageId>
+                  <CorrelationId>CORR123456789</CorrelationId>
+                  <User>WebServer</User>
+                  <Text>Hello User</Text>
+              </HelloResponse>
+          ]]>
+      </citrus:payload>
+      <citrus:header>
+          <citrus:element name="{http://citrusframework.org/schemas/samples/sayHello.xsd}ns0:Operation"
+                  value="sayHelloResponse"/>
+          <citrus:element name="{http://citrusframework.org/schemas/samples/sayHello.xsd}ns0:Request"
+                  value="HelloRequest"/>
+          <citrus:element name="citrus_soap_action"
+                  value="sayHello"/>
+      </citrus:header>
+  </citrus:static-response-adapter>
+</beans>
+
+
+
+

The program listing above describes a normal SpringWS request mapping with endpoint configurations. The mapping is responsible to forward incoming requests to the endpoint which will handle the request and provide a proper response message. First of all we add a logging interceptor to the context so all incoming requests get logged to the console first. Then we use a payload mapping (PayloadRootQNameEndpointMapping) in order to map all incoming 'HelloRequest' SOAP messages to the 'helloServiceEndpoint' . Endpoints are of essential nature in Citrus SOAP WebServices implementation. They are responsible for processing a request in order to provide a proper response message that is sent back to the calling client. Citrus uses the endpoint in combination with a message endpoint adapter implementation.

+
+
+

figure_009.jpg

+
+
+

The endpoint works together with the message endpoint adapter that is responsible for providing a response message for the client. The various message endpoint adapter implementations in Citrus were already discussed in endpoint-adapter.

+
+
+

In this example the 'helloServiceEndpoint' uses the 'static-response-adapter' which is always returning a static response message. In most cases static responses will not fit the test scenario and you will have to respond more dynamically.

+
+
+

Regardless of which message endpoint adapter setup you are using in your test case the endpoint transforms the response into a proper SOAP message. You can add as many request mappings and endpoints as you want to the server context configuration. So you are able to handle different request types with one single Jetty server instance.

+
+
+

That’s it for connecting with SOAP WebServices! We saw how to send and receive SOAP messages with Jetty and Spring WebServices. Have a look at the samples coming with your Citrus archive in order to learn more about the SOAP message handling.

+
+
+
+
+
+

16. Apache Camel support

+
+
+

Apache Camel is a fantastic Open Source integration framework that empowers you to quickly +and easily integrate various systems consuming or producing data.

+
+
+

Camel implements the enterprise integration patterns for building mediation and routing rules in your software. +With the Camel support in Citrus you are able to directly interact with the 300+ Camel components through route definitions. +You can call Camel routes and receive synchronous response messages from a Citrus test. +You can also simulate the Camel route endpoint with receiving messages and providing simulated response messages.

+
+
+ + + + + +
+ + +The camel components in Citrus are located in a separate Maven module. +So you should add the module as Maven dependency to your project accordingly. +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-camel</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

For XML configurations Citrus provides a special Camel configuration schema that is used in Spring configuration files. +You have to include the citrus-camel namespace in your Spring configuration XML files as follows.

+
+
+
XML
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns:citrus="http://www.citrusframework.org/schema/config"
+      xmlns:citrus-camel="http://www.citrusframework.org/schema/camel/config"
+      xsi:schemaLocation="
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans.xsd
+      http://www.citrusframework.org/schema/config
+      http://www.citrusframework.org/schema/config/citrus-config.xsd
+      http://www.citrusframework.org/schema/camel/config
+      http://www.citrusframework.org/schema/camel/config/citrus-camel-config.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

Now you are ready to use the Camel configuration elements using the citrus-camel namespace prefix.

+
+
+

The next sections explain the Citrus capabilities while working with Apache Camel.

+
+
+

16.1. Camel endpoint

+
+

Camel and Citrus both use the endpoint pattern in order to define message destinations. +Users can interact with these endpoints when creating the mediation and routing logic. +The Citrus endpoint component for Camel interaction is defined as follows in your Citrus Spring configuration.

+
+
+
Java
+
+
@Bean
+public CamelEndpoint helloCamelEndpoint() {
+    return new CamelEndpointBuilder()
+        .endpointUri("direct:hello")
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-camel:endpoint id="helloCamelEndpoint"
+      endpoint-uri="direct:hello"/>
+
+
+
+

The endpoint defines an endpoint uri that will be called when messages are sent/received using the endpoint producer or consumer. +The endpoint uri refers to a Camel route that is located inside a Camel context. +The Camel route should use the respective endpoint uri as from definition.

+
+
+
Java
+
+
@Bean
+public CamelContext camelContext() {
+    CamelContext context = new DefaultCamelContext();
+
+    context.addRoutes(new RouteBuilder() {
+        @Override
+        public void configure() throws Exception {
+            from("direct:hello")
+                .routeId("helloRoute")
+                .to("log:org.citrusframework.camel?level=INFO")
+                .to("seda:greetings");
+        }
+    });
+
+    return context;
+}
+
+
+
+
XML
+
+
<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
+  <route id="helloRoute">
+    <from uri="direct:hello"/>
+    <to uri="log:org.citrusframework.camel?level=INFO"/>
+    <to uri="seda:greetings-feed"/>
+  </route>
+</camelContext>
+
+
+
+

In the example above the Camel context is placed as Spring bean. +The context defines a Camel route the Citrus test case can interact with.

+
+
+

The Camel context is automatically referenced in the Citrus Camel endpoint. +This is because Citrus will automatically look for a Camel context in the Spring bean configuration.

+
+
+

In case you have multiple Camel context instances in your configuration you can explicitly link the endpoint to a +context with camel-context="camelContext".

+
+
+
Java
+
+
@Bean
+public CamelEndpoint helloCamelEndpoint() {
+    return new CamelEndpointBuilder()
+        .camelContext(specialCamelContext)
+        .endpointUri("direct:hello")
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-camel:endpoint id="helloCamelEndpoint"
+      camel-contxt="specialCamelContext"
+      endpoint-uri="direct:hello"/>
+
+
+
+

This explicitly binds the endpoint to the context named "specialCamelContext". +This configuration would be the easiest setup to use Camel with Citrus as you can add the Camel context straight to the +Spring bean application context and interact with it in Citrus. +Of course, you can also import your Camel context and routes from other Spring bean context files, +or you can start the Camel context routes with Java code.

+
+
+

In the example the Camel route is listening on the route endpoint uri direct:hello. +Incoming messages will be logged to the console using a log Camel component. +After that the message is forwarded to a seda Camel component which is a simple queue in memory.

+
+
+

The Citrus endpoint can interact with this sample route definition sending messages to the direct:hello endpoint. +The endpoint configuration holds the endpoint uri information that tells Citrus how to access the Camel route. +This endpoint uri can be any Camel endpoint uri that is used in a Camel route.

+
+
+

The Camel routes support asynchronous and synchronous message communication patterns. +By default, Citrus uses asynchronous communication with Camel routes. +This means that the Citrus producer sends the exchange message to the route endpoint uri and is finished immediately. +There is no synchronous response to await. +In contrary to that the synchronous endpoint will send and receive a synchronous message on the Camel destination route. +This message exchange pattern is discussed in a later section in this chapter.

+
+
+

For now, we have a look on how to use the Citrus Camel endpoint in a test case in order to send a message to the Camel route:

+
+
+
Java
+
+
send(helloCamelEndpoint)
+    .message()
+    .body("Hello from Citrus!");
+
+
+
+
XML
+
+
<send endpoint="helloCamelEndpoint">
+  <message type="plaintext">
+    <payload>Hello from Citrus!</payload>
+  </message>
+</send>
+
+
+
+

You can use the very same Citrus Camel endpoint component to receive messages in your test case, too. +In this situation you would receive a message from the route endpoint. +This is especially designed for queueing endpoint routes such as the Camel seda component. +In our example Camel route above the seda Camel component is called with the endpoint uri seda:greetings-feed.

+
+
+

This means that the Camel route is sending a message to the seda component. +Citrus is able to receive this route message with an endpoint component like this:

+
+
+
Java
+
+
@Bean
+public CamelEndpoint greetingsFeed() {
+    return new CamelEndpointBuilder()
+        .endpointUri("seda:greetings-feed")
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-camel:endpoint id="greetingsFeed"
+    endpoint-uri="seda:greetings-feed"/>
+
+
+
+

You can use the Citrus camel endpoint in your test case receive action in order to consume the message on the seda component.

+
+
+
Java
+
+
receive(greetingsFeed)
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("Hello from Citrus!");
+
+
+
+
XML
+
+
<receive endpoint="greetingsFeed">
+  <message type="plaintext">
+    <payload>Hello from Citrus!</payload>
+  </message>
+</receive>
+
+
+
+ + + + + +
+ + +Instead of defining a static Citrus camel component you could also use the dynamic endpoint components in Citrus. +This would enable you to send your message directly using the endpoint uri direct:news in your test case. +Read more about this in dynamic-endpoint-components. +
+
+
+

Citrus is able to send and receive messages with Camel route endpoint uri. +This enables you to invoke a Camel route. +The Camel components used is defined by the endpoint uri as usual. +When interacting with Camel routes you might need to send back some response messages in order to simulate boundary applications. +We will discuss the synchronous communication in the next section.

+
+
+
+

16.2. Synchronous Camel endpoint

+
+

The synchronous Camel producer sends a message to a route and waits synchronously for the response to arrive. +In Camel this communication is represented with the exchange pattern InOut. +The basic configuration for a synchronous Camel endpoint component looks like follows:

+
+
+
Java
+
+
@Bean
+public CamelSyncEndpoint helloCamelEndpoint() {
+    return new CamelSyncEndpointBuilder()
+        .endpointUri("direct:hello")
+        .timeout(1000L)
+        .pollingInterval(300L)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-camel:sync-endpoint id="helloCamelEndpoint"
+      endpoint-uri="direct:hello"
+      timeout="1000"
+      polling-interval="300"/>
+
+
+
+

Synchronous endpoints poll for synchronous reply messages to arrive. +The poll interval is an optional setting in order to manage the amount of reply message handshake attempts. +Once the endpoint was able to receive the reply message synchronously the test case can receive the reply. +In case the reply message is not available in time we raise some timeout error and the test will fail.

+
+
+

In a first test scenario we write a test case that sends a message to the synchronous endpoint and waits for the synchronous +reply message to arrive. +So we have two actions on the same Citrus endpoint, first send then receive.

+
+
+
Java
+
+
send(helloCamelEndpoint)
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("Hello from Citrus!");
+
+receive(helloCamelEndpoint)
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("This is the reply from Apache Camel!");
+
+
+
+
XML
+
+
<send endpoint="helloCamelEndpoint">
+  <message type="plaintext">
+    <payload>Hello from Citrus!</payload>
+  </message>
+</send>
+
+<receive endpoint="helloCamelEndpoint">
+  <message type="plaintext">
+    <payload>This is the reply from Apache Camel!</payload>
+  </message>
+</receive>
+
+
+
+

The next variation deals with the same synchronous communication, but send and receive roles are switched. +Now Citrus receives a message from a Camel route and has to provide a reply message. +We handle this synchronous communication with the same synchronous Apache Camel endpoint component. +Only difference is that we initially start the communication by receiving a message from the endpoint. +Knowing this Citrus is able to send a synchronous response back. +Again just use the same endpoint reference in your test case. +So we have again two actions in our test case, but this time first receive then send.

+
+
+
Java
+
+
receive(helloCamelEndpoint)
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("Hello from Apache Camel!");
+
+send(helloCamelEndpoint)
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("This is the reply from Citrus!");
+
+
+
+
XML
+
+
<receive endpoint="helloCamelEndpoint">
+  <message type="plaintext">
+    <payload>Hello from Apache Camel!</payload>
+  </message>
+</receive>
+
+<send endpoint="helloCamelEndpoint">
+  <message type="plaintext">
+    <payload>This is the reply from Citrus!</payload>
+  </message>
+</send>
+
+
+
+

This is pretty simple. Citrus takes care of setting the Camel exchange pattern InOut while using synchronous communications. +The Camel routes do respond and Citrus is able to receive the synchronous messages accordingly. +With this pattern you can interact with Camel routes where Citrus simulates synchronous clients and consumers.

+
+
+
+

16.3. Camel exchange headers

+
+

Camel uses exchanges when sending and receiving messages to and from routes. +These exchanges hold specific information on the communication outcome. +Citrus automatically converts these exchange information to special message header entries. +You can validate those exchange headers then easily in your test case:

+
+
+
Java
+
+
receive(greetingsFeed)
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("Hello from Camel!")
+    .header("citrus_camel_route_id", "greetings")
+    .header("citrus_camel_exchange_id", "ID-local-50532-1402653725341-0-3")
+    .header("citrus_camel_exchange_failed", false)
+    .header("citrus_camel_exchange_pattern", "InOnly")
+    .header("CamelCorrelationId", "ID-local-50532-1402653725341-0-1")
+    .header("CamelToEndpoint", "seda://greetings-feed");
+
+
+
+
XML
+
+
<receive endpoint="greetingsFeed">
+  <message type="plaintext">
+    <payload>Hello from Camel!</payload>
+  </message>
+  <header>
+    <element name="citrus_camel_route_id" value="greetings"/>
+    <element name="citrus_camel_exchange_id" value="ID-local-50532-1402653725341-0-3"/>
+    <element name="citrus_camel_exchange_failed" value="false"/>
+    <element name="citrus_camel_exchange_pattern" value="InOnly"/>
+    <element name="CamelCorrelationId" value="ID-local-50532-1402653725341-0-1"/>
+    <element name="CamelToEndpoint" value="seda://greetings-feed"/>
+  </header>
+</receive>
+
+
+
+

In addition to the Camel specific exchange information the Camel exchange does also hold some custom properties. +These properties such as CamelToEndpoint or CamelCorrelationId are also added automatically to the Citrus message header so can expect them in a receive message action.

+
+
+
+

16.4. Camel exception handling

+
+

Let us suppose the following route definition:

+
+
+
Java
+
+
@Bean
+public CamelContext camelContext() {
+    CamelContext context = new DefaultCamelContext();
+
+    context.addRoutes(new RouteBuilder() {
+        @Override
+        public void configure() throws Exception {
+            from("direct:hello")
+                .routeId("helloRoute")
+                .to("log:org.citrusframework.camel?level=INFO")
+                .to("seda:greetings-feed")
+                .onException(CitrusRuntimeException.class)
+                    .to("seda:exceptions");
+        }
+    });
+
+    return context;
+}
+
+
+
+
XML
+
+
<camelContext id="camelContext" xmlns="http://camel.apache.org/schema/spring">
+  <route id="helloRoute">
+    <from uri="direct:hello"/>
+    <to uri="log:org.citrusframework.camel?level=INFO"/>
+    <to uri="seda:greetings-feed"/>
+    <onException>
+      <exception>org.citrusframework.exceptions.CitrusRuntimeException</exception>
+      <to uri="seda:exceptions"/>
+    </onException>
+  </route>
+</camelContext>
+
+
+
+

The route has an exception handling block defined that is called as soon as the exchange processing ends up in some error or exception. +With Citrus you can also simulate an exchange exception when sending back a synchronous response to a calling route.

+
+
+
Java
+
+
send(helloCamelEndpoint)
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("Something went wrong!")
+    .header("citrus_camel_exchange_exception", CitrusRuntimeException.class)
+    .header("citrus_camel_exchange_exception_message", "Something went wrong!")
+    .header("citrus_camel_exchange_failed", true);
+
+
+
+
XML
+
+
<send endpoint="greetingsFeed">
+  <message type="plaintext">
+    <payload>Something went wrong!</payload>
+  </message>
+  <header>
+    <element name="citrus_camel_exchange_exception"
+                value="org.citrusframework.exceptions.CitrusRuntimeException"/>
+    <element name="citrus_camel_exchange_exception_message" value="Something went wrong!"/>
+    <element name="citrus_camel_exchange_failed" value="true"/>
+  </header>
+</send>
+
+
+
+

This message as response to the seda:greetings-feed route would cause Camel to enter the exception handling in the route definition. +The exception handling is activated and calls the error handling route endpoint seda:exceptions . +Of course Citrus would be able to receive such an exception exchange validating the exception handling outcome.

+
+
+

In such failure scenarios the Camel exchange holds the exception information (CamelExceptionCaught) such as causing exception class and error message. +These headers are present in an error scenario and can be validated in Citrus when receiving error messages as follows:

+
+
+
Java
+
+
receive(errorCamelEndpoint)
+    .message()
+    .type(MessageType.PLAINTEXT)
+    .body("Something went wrong!")
+    .header("citrus_camel_route_id", "helloRoute")
+    .header("citrus_camel_exchange_failed", true)
+    .header("CamelExceptionCaught", "org.citrusframework.exceptions.CitrusRuntimeException: Something went wrong!");
+
+
+
+
XML
+
+
<receive endpoint="errorCamelEndpoint">
+  <message type="plaintext">
+    <payload>Something went wrong!</payload>
+  </message>
+  <header>
+    <element name="citrus_camel_route_id" value="helloRoute"/>
+    <element name="citrus_camel_exchange_failed" value="true"/>
+    <element name="CamelExceptionCaught"
+        value="org.citrusframework.exceptions.CitrusRuntimeException: Something went wrong!"/>
+  </header>
+</receive>
+
+
+
+

This completes the basic exception handling in Citrus when using the Camel endpoints.

+
+
+
+

16.5. Camel context handling

+
+

In the previous samples we have used the Camel context as Spring bean context that is automatically loaded when Citrus starts up. +Now when using a single Camel context instance Citrus is able to automatically pick this Camel context for route interaction. +If you use more than one Camel context you have to tell the Citrus endpoint component which context to use. +The endpoint offers an optional attribute called camel-context.

+
+
+
Java
+
+
@Bean
+public CamelEndpoint newsCamelEndpoint() {
+    return new CamelEndpointBuilder()
+        .camelContext(newsContext())
+        .endpointUri("direct:news")
+        .build();
+}
+
+@Bean
+public CamelContext newsContext() {
+    CamelContext context = new DefaultCamelContext();
+
+    context.addRoutes(new RouteBuilder() {
+        @Override
+        public void configure() throws Exception {
+            from("direct:news")
+                .routeId("newsRoute")
+                .to("log:org.citrusframework.camel?level=INFO")
+                .to("seda:news-feed");
+        }
+    });
+
+    return context;
+}
+
+@Bean
+public CamelContext helloContext() {
+    CamelContext context = new DefaultCamelContext();
+
+    context.addRoutes(new RouteBuilder() {
+        @Override
+        public void configure() throws Exception {
+            from("direct:hello")
+                .routeId("helloRoute")
+                .to("log:org.citrusframework.camel?level=INFO")
+                .to("seda:greetings");
+        }
+    });
+
+    return context;
+}
+
+
+
+
XML
+
+
<citrus-camel:endpoint id="newsCamelEndpoint"
+    camel-context="newsContext"
+    endpoint-uri="direct:news"/>
+
+<camelContext id="newsContext" xmlns="http://camel.apache.org/schema/spring">
+    <route id="newsRoute">
+      <from uri="direct:news"/>
+      <to uri="log:org.citrusframework.camel?level=INFO"/>
+      <to uri="seda:news-feed"/>
+    </route>
+</camelContext>
+
+<camelContext id="helloContext" xmlns="http://camel.apache.org/schema/spring">
+  <route id="helloRoute">
+    <from uri="direct:hello"/>
+    <to uri="log:org.citrusframework.camel?level=INFO"/>
+    <to uri="seda:greetings"/>
+  </route>
+</camelContext>
+
+
+
+

In the example above we have two Camel context instances loaded. +The endpoint has to pick the context to use with the attribute camel-context which resides to the Spring bean id of the Camel context.

+
+
+
+

16.6. Camel route actions

+
+

Since Citrus 2.4 we introduced some Camel specific test actions that enable easy interaction with Camel routes and the Camel context.

+
+
+ + + + + +
+ + +In XML the Camel route test actions do follow a specific XML namespace. +This means you have to add this namespace to the test case when using the actions. +
+
+
+
XML
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns:camel="http://www.citrusframework.org/schema/camel/testcase"
+      xsi:schemaLocation="
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans.xsd
+      http://www.citrusframework.org/schema/camel/testcase
+      http://www.citrusframework.org/schema/camel/testcase/citrus-camel-testcase.xsd">
+
+  [...]
+
+</beans>
+
+
+
+

Once you have added the special Camel namespace with prefix camel you are ready to start using the Camel test actions in your test case.

+
+
+

Create Camel routes

+
+

You can create a new Camel route as part of the test using this test action.

+
+
+
Java
+
+
public class CamelRouteActionIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void createCamelRoute() {
+        $(camel().camelContext(camelContext)
+            .route()
+            .create(new RouteBuilder() {
+                @Override
+                public void configure() throws Exception {
+                    from("direct:messages")
+                        .routeId("message-tokenizer")
+                        .split().tokenize(" ")
+                        .to("seda:words");
+                }
+            }));
+    }
+}
+
+
+
+
XML
+
+
<testcase name="CamelRouteIT">
+  <actions>
+      <camel:create-routes>
+        <routeContext xmlns="http://camel.apache.org/schema/spring">
+          <route id="message-tokenizer">
+            <from uri="direct:messages"/>
+            <split>
+              <tokenize token=" "/>
+              <to uri="seda:words"/>
+            </split>
+          </route>
+        </routeContext>
+      </camel:create-routes>
+  </actions>
+</testcase>
+
+
+
+

In the example above we have used the camel:create-route test action that will create new Camel routes at runtime in the Camel context. +The target Camel context is referenced with an automatic context lookup.

+
+
+ + + + + +
+ + +The default Camel context name in this lookup is "citrusCamelContext". You can set this default context name via environment variables (CITRUS_CAMEL_CONTEXT_NAME) or system properties (citrus.camel.context.name). +
+
+
+

If no specific settings are set Citrus will automatically try to look up the Camel context with name "citrusCamelContext" in the Spring bean configuration. +All route operations will target this Camel context then.

+
+
+

In addition to that you can skip this lookup and directly reference a target Camel context with the action attribute camel-context (used in the second action above).

+
+
+
+

Remove Camel routes

+
+

You can remove routes from the Camel context as part of the test.

+
+
+
Java
+
+
public class CamelRouteActionIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void removeCamelRoutes() {
+        $(camel().camelContext(camelContext)
+            .route()
+            .remove("route_1", "route_2", "route_3"));
+    }
+}
+
+
+
+
XML
+
+
<testcase name="CamelRouteIT">
+  <actions>
+      <camel:remove-routes camel-context="camelContext">
+        <route id="route_1"/>
+        <route id="route_2"/>
+        <route id="route_3"/>
+      </camel:remove-routes>
+  </actions>
+</testcase>
+
+
+
+
+

Start/stop routes

+
+

Next operation we will discuss is the start and stop of existing Camel routes:

+
+
+
Java
+
+
public class CamelRouteActionIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void startThenStopCamelRoutes() {
+        $(camel().camelContext(camelContext)
+            .route()
+            .start("route_1"));
+
+        $(camel().camelContext(camelContext)
+            .route()
+            .stop("route_2", "route_3"));
+    }
+}
+
+
+
+
XML
+
+
<testcase name="CamelRouteIT">
+  <actions>
+      <camel:start-routes camel-context="camelContext">
+        <route id="route_1"/>
+      </camel:start-routes>
+
+      <camel:stop-routes camel-context="camelContext">
+        <route id="route_2"/>
+        <route id="route_3"/>
+      </camel:stop-routes>
+  </actions>
+</testcase>
+
+
+
+

Starting and stopping Camel routes at runtime is important when temporarily Citrus need to receive a message on a Camel endpoint URI. +We can stop a route, use a Citrus camel endpoint instead for validation and start the route after the test is done. +This way we can also simulate errors and failure scenarios in a Camel route interaction.

+
+
+
+
+

16.7. Camel controlbus actions

+
+

The Camel controlbus component is a good way to access route statistics and route status information within a Camel context. +Citrus provides controlbus test actions to easily access the controlbus operations at runtime.

+
+
+
Java
+
+
public class CamelControlBusIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void createCamelRoute() {
+        $(camel().camelContext(camelContext)
+            .controlbus()
+            .route("route_1")
+            .status()
+            .result(ServiceStatus.Stopped));
+
+        $(camel().camelContext(camelContext)
+            .controlbus()
+            .route("route_1")
+            .start());
+
+        $(camel().camelContext(camelContext)
+            .controlbus()
+            .route("route_1")
+            .status()
+            .result(ServiceStatus.Started));
+    }
+}
+
+
+
+
XML
+
+
<testcase name="CamelControlBusIT">
+  <actions>
+    <camel:control-bus camel-context="camelContext">
+      <camel:route id="route_1" action="status"/>
+      <camel:result>Stopped</camel:result>
+    </camel:control-bus>
+
+    <camel:control-bus>
+      <camel:route id="route_1" action="start"/>
+    </camel:control-bus>
+
+    <camel:control-bus camel-context="camelContext">
+      <camel:route id="route_1" action="status"/>
+      <camel:result>Started</camel:result>
+    </camel:control-bus>
+
+    <camel:control-bus>
+      <camel:language type="simple">${camelContext.stop()}</camel:language>
+    </camel:control-bus>
+
+    <camel:control-bus camel-context="camelContext">
+      <camel:language type="simple">${camelContext.getRouteController().getRouteStatus('route_3')}</camel:language>
+      <camel:result>Started</camel:result>
+    </camel:control-bus>
+  </actions>
+</testcase>
+
+
+
+

The example test case shows the controlbus access. +As already mentioned you can explicitly reference a target Camel context with camel-context="camelContext". +In case no specific context is referenced Citrus will automatically lookup a target Camel context with the default context name "citrusCamelContext".

+
+
+

Camel provides two different ways to specify operations and parameters. +The first option is the use of an action attribute. +The Camel route id has to be specified as mandatory attribute. +As a result the controlbus action will be executed on the target route during test runtime. +This way we can also start and stop Camel routes in a Camel context.

+
+
+

In case a controlbus operation has a result such as the status action we can specify a control result that is compared. +Citrus will raise validation exceptions when the results differ.

+
+
+

The second option for executing a controlbus action is the language expression. +We can use Camel language expressions on the Camel context for accessing a controlbus operation. +Also, here we can define an optional outcome as expected result.

+
+
+
Java
+
+
public class CamelControlBusIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void createCamelRoute() {
+        $(camel().camelContext(camelContext)
+            .controlbus()
+            .language("simple", "${camelContext.getRouteStatus('my_route')}")
+            .result(ServiceStatus.Stopped));
+
+        $(camel().camelContext(camelContext)
+            .controlbus()
+            .language("simple", "${camelContext.stop()}"));
+    }
+}
+
+
+
+
XML
+
+
<testcase name="CamelControlBusIT">
+  <actions>
+    <camel:control-bus camel-context="camelContext">
+      <camel:language type="simple">${camelContext.getRouteStatus('my_route')}</camel:language>
+      <camel:result>Started</camel:result>
+    </camel:control-bus>
+
+    <camel:control-bus>
+      <camel:language type="simple">${camelContext.stop()}</camel:language>
+    </camel:control-bus>
+  </actions>
+</testcase>
+
+
+
+
+

16.8. Camel endpoint DSL

+
+

Since Camel 3 the endpoint DSL provides a convenient way to construct an endpoint uri. +In Citrus you can use the Camel endpoint DSL to send/receive messages in a test.

+
+
+
Java
+
+
$(send(camel().endpoint(seda("test")::getUri))
+        .message()
+        .body("Citrus rocks!"));
+
+
+
+

The fluent endpoint DSL in Camel allows to build the endpoint uri. +The camel().endpoint(seda("test")::getUri) builds the endpoint uri seda:test. +The endpoint DSL provides all settings and properties that you can set for a Camel endpoint component.

+
+
+
+

16.9. Camel processor support

+
+

Camel implements the concept of processors as enterprise integration pattern. +A processor is able to add custom logic to a Camel route. +Each processor is able to access the Camel exchange that is being processed in the current route. +The processor is able to change the message content (body, headers) as well as the exchange information.

+
+
+

The send/receive operations in Citrus also implement the processor concept. +With the Citrus Camel support you can use the very same Camel processor also in a Citrus test action.

+
+
+
Message processor on send
+
+
public class CamelMessageProcessorIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void shouldProcessMessages() {
+        $(send(camel().endpoint(seda("test")::getUri))
+                .message()
+                .body("Citrus rocks!")
+                .process(camel(camelContext)
+                    .process(exchange -> exchange
+                            .getMessage()
+                            .setBody(exchange.getMessage().getBody(String.class).toUpperCase())))
+        );
+    }
+}
+
+
+
+

The example above uses a Camel processor to change the exchange and the message content before the message is sent to the endpoint. +This way you can apply custom changes to the message as part of the test action.

+
+
+
Message processor on receive
+
+
public class CamelMessageProcessorIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void shouldProcessMessages() {
+        $(send(camel().endpoint(seda("test")::getUri))
+                .message()
+                .body("Citrus rocks!"));
+
+        $(receive(camel().endpoint(seda("test")::getUri))
+                .process(camel(camelContext)
+                        .process(exchange -> exchange
+                                .getMessage()
+                                .setBody(exchange.getMessage().getBody(String.class).toUpperCase())))
+                .message()
+                .type(MessageType.PLAINTEXT)
+                .body("CITRUS ROCKS!"));
+    }
+}
+
+
+
+

The Camel processors are very powerful. +In particular, you can apply transformations of multiple kind.

+
+
+
Transform processor
+
+
public class CamelTransformIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void shouldTransformMessageReceived() {
+        $(send(camel().endpoint(seda("hello")::getUri))
+                .message()
+                .body("{\"message\": \"Citrus rocks!\"}")
+        );
+
+        $(receive(camel().endpoint(seda("hello")::getUri))
+                .transform(
+                    camel()
+                        .camelContext(camelContext)
+                        .transform()
+                        .jsonpath("$.message"))
+                .message()
+                .type(MessageType.PLAINTEXT)
+                .body("Citrus rocks!"));
+    }
+}
+
+
+
+

The transform pattern is able to change the message content before a message is received/sent in Citrus. +The example above applies a JsonPath expression as part of the message processing. +The JsonPath expression evaluates $.message on the Json payload and saves the result as new message body content. +The following message validation expects the plaintext value Citrus rocks!.

+
+
+

The message processor is also able to apply a complete route logic as part of the test action.

+
+
+
Route processor
+
+
public class CamelRouteProcessorIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void shouldProcessRoute() {
+        CamelRouteProcessor.Builder beforeReceive = camel(camelContext).route(route ->
+                route.choice()
+                    .when(jsonpath("$.greeting[?(@.language == 'EN')]"))
+                        .setBody(constant("Hello!"))
+                    .when(jsonpath("$.greeting[?(@.language == 'DE')]"))
+                        .setBody(constant("Hallo!"))
+                    .otherwise()
+                        .setBody(constant("Hi!")));
+
+        $(send(camel().endpoint(seda("greetings")::getUri))
+                .message()
+                .body("{" +
+                        "\"greeting\": {" +
+                            "\"language\": \"EN\"" +
+                        "}" +
+                      "}")
+        );
+
+        $(receive("camel:" + camel().endpoints().seda("greetings").getUri())
+                .process(beforeReceive)
+                .message()
+                .type(MessageType.PLAINTEXT)
+                .body("Hello!"));
+    }
+}
+
+
+
+

With the complete route logic you have the full power of Camel ready to be used in your send/receive test action. +This enables many capabilities as Camel implements the enterprise integration patterns such as split, choice, enrich and many more.

+
+
+
+

16.10. Camel data format support

+
+

Camel uses the concept of data format to transform message content in form of marshal/unmarshal operations. +You can use the data formats supported in Camel in Citrus, too.

+
+
+
Data format marshal/unmarshal
+
+
public class CamelDataFormatIT extends TestNGCitrusSpringSupport {
+
+    @Autowired
+    private CamelContext camelContext;
+
+    @Test
+    @CitrusTest
+    public void shouldApplyDataFormat() {
+        when(send(camel().endpoint(seda("data")::getUri))
+                .message()
+                .body("Citrus rocks!")
+                .transform(camel(camelContext)
+                        .marshal()
+                        .base64())
+        );
+
+        then(receive("camel:" + camel().endpoints().seda("data").getUri())
+                .transform(camel(camelContext)
+                        .unmarshal()
+                        .base64())
+                .transform(camel(camelContext)
+                        .convertBodyTo(String.class))
+                .message()
+                .type(MessageType.PLAINTEXT)
+                .body("Citrus rocks!"));
+    }
+}
+
+
+
+

The example above uses the base64 data format provided in Camel to marshal/unmarshal the message content to/from a base64 encoded String. +Camel provides support for many data formats as you can see in the documentation on data formats.

+
+
+
+
+
+

17. Message channel support

+
+
+

Message channels represent the in memory messaging solution in Citrus. Producer and consumer components are linked via channels +exchanging messages in memory. The transport comes from the Spring Integration project.

+
+
+

This opens up a lot of great possibilities to interact with the Spring Integration transport adapters for FTP, TCP/IP and +so on. In addition to that the message channel support provides us a good way to exchange messages in memory.

+
+
+ + + + + +
+ + +The message channel configuration components use the "citrus-si" configuration namespace and schema definition. Include +this namespace into your Spring configuration in order to use the Citrus configuration elements. The namespace URI and schema +location are added to the Spring configuration XML file as follows. +
+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:citrus-si="http://www.citrusframework.org/schema/spring-integration/config"
+        xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/spring-integration/config
+        http://www.citrusframework.org/schema/spring-integration/config/citrus-spring-integration-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

Right now you are able to use customized Citrus XML elements in order to define the Spring Integration endpoint components.

+
+
+

17.1. Channel endpoint

+
+

Citrus offers a channel endpoint component that is able to create producers and consumers. Producer and consumer +send and receive messages both to and from a channel endpoint. By default, the endpoint is asynchronous when configured +in the Citrus context. With this component you are able to access message channels directly:

+
+
+
Java
+
+
@Bean
+public ChannelEndpoint helloEndpoint() {
+    return new ChannelEndpointBuilder()
+        .channel("helloChannel")
+        .build();
+}
+
+@Bean
+public MessageSelectingQueueChannel helloChannel() {
+    return new MessageSelectingQueueChannel();
+}
+
+
+
+
XML
+
+
<citrus-si:channel-endpoint id="helloEndpoint" channel="helloChannel"/>
+
+<citrus-si:channel id="helloChannel"/>
+
+
+
+

The Citrus channel endpoint references a Spring Integration channel directly. Inside your test case you can reference the +Citrus endpoint as usual to send and receive messages.

+
+
+

The Citrus channel endpoint also supports a customized message channel template that will actually send the messages. The +customized template might give you access to special configuration possibilities.

+
+
+
Java
+
+
@Bean
+public ChannelEndpoint helloEndpoint() {
+    return new ChannelEndpointBuilder()
+        .channel("helloChannel")
+        .messagingTemplate(messagingTemplate())
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-si:channel-endpoint id="helloEndpoint"
+                            channel="helloChannel"
+                            message-channel-template="myMessageChannelTemplate"/>
+
+
+
+

The message sender is now ready to publish messages on the defined channel. The communication is supposed to be asynchronous, +so the producer is not able to process any reply message. We will deal with synchronous communication and reply messages +later in this chapter. You can reference the id of the endpoint in a send and receive test action.

+
+
+
Java
+
+
when(send("helloEndpoint")
+        .message()
+        .body("<v1:HelloRequest xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello World!</v1:Text>" +
+            "</v1:HelloRequest>"));
+
+then(receive("helloEndpoint")
+        .message()
+        .body("<v1:HelloResponse xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello Citrus!</v1:Text>" +
+            "</v1:HelloResponse>"));
+
+
+
+
XML
+
+
<send endpoint="helloEndpoint">
+    <message>
+        <payload>
+            <v1:HelloRequest xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello World!</v1:Text>
+            </v1:HelloRequest>
+        </payload>
+    </message>
+</send>
+
+<receive endpoint="helloEndpoint">
+    <message>
+        <payload>
+            <v1:HelloResponse xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello Citrus!</v1:Text>
+            </v1:HelloResponse>
+        </payload>
+    </message>
+</receive>
+
+
+
+

You can send and receive messages from the same Spring Integration message channel endpoint. As usual the receiver connects +to the message destination and waits for messages to arrive. The user can set a receive timeout which is set to 5000 milliseconds +by default. In case no message was received in this time frame the receiver raises timeout errors and the test fails.

+
+
+
+

17.2. Synchronous channel endpoints

+
+

The synchronous channel producer publishes messages and waits synchronously for the response to arrive on a reply channel +destination. The reply channel name is set in the message headers. The counterpart in this communication must send its +reply to that channel. The basic configuration for a synchronous channel endpoint component looks like follows:

+
+
+
Java
+
+
@Bean
+public ChannelSyncEndpoint helloEndpoint() {
+    return new ChannelSyncEndpointBuilder()
+        .channel("helloChannel")
+        .pollingInterval(1000)
+        .build();
+}
+
+
+
+
XML
+
+
<citrus-si:channel-sync-endpoint id="helloSyncEndpoint"
+                            channel="helloChannel"
+                            polling-interval="1000"/>
+
+
+
+

Synchronous message channel endpoints usually do poll for synchronous reply messages for processing the reply messages. +The poll interval is an optional setting in order to manage the amount of reply message handshake attempts. When the endpoint +was able to receive the reply message synchronously the test case can verify the reply.

+
+
+

In case all polling attempts have failed the action raises a timeout error, and the test will fail.

+
+
+ + + + + +
+ + +By default, the channel endpoint uses temporary reply channel destinations. The temporary reply channels are only +used once for a single communication handshake. The temporary reply channel is deleted automatically. +
+
+
+

When sending a message to this endpoint in the first place the producer will wait synchronously for the response message +to arrive on the reply channel. You can receive the reply message in your test case using the same endpoint component. So +we have two actions on the same endpoint, first send then receive.

+
+
+
Java
+
+
when(send("helloSyncEndpoint")
+        .message()
+        .body("<v1:HelloRequest xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello World!</v1:Text>" +
+            "</v1:HelloRequest>"));
+
+then(receive("helloSyncEndpoint")
+        .message()
+        .body("<v1:HelloResponse xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello Citrus!</v1:Text>" +
+            "</v1:HelloResponse>"));
+
+
+
+
XML
+
+
<send endpoint="helloSyncEndpoint">
+    <message>
+        <payload>
+            <v1:HelloRequest xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello World!</v1:Text>
+            </v1:HelloRequest>
+        </payload>
+    </message>
+</send>
+
+<receive endpoint="helloSyncEndpoint">
+    <message>
+        <payload>
+            <v1:HelloResponse xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello Citrus!</v1:Text>
+            </v1:HelloResponse>
+        </payload>
+    </message>
+</receive>
+
+
+
+

This is how you handle synchronous communication as a sender. You publish messages to a channel and wait for reply messages +on a temporary reply channel. The next section deals with the same synchronous communication, but now Citrus will receive +a request and send a synchronous reply message to a temporary reply channel.

+
+
+

As usual the reply channel name is stored in the message headers. Citrus handles this synchronous communication with the +same synchronous channel endpoint component. The handling of temporary reply destinations is done automatically behind +the scenes.

+
+
+

So we have again two actions in our test case, but this time first receive then send.

+
+
+
Java
+
+
when(receive("helloSyncEndpoint")
+        .message()
+        .body("<v1:HelloRequest xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello World!</v1:Text>" +
+            "</v1:HelloRequest>"));
+
+then(send("helloSyncEndpoint")
+        .message()
+        .body("<v1:HelloResponse xmlns:v1=\"http://citrusframework.org/schemas/HelloService.xsd\">" +
+                "<v1:Text>Hello Citrus!</v1:Text>" +
+            "</v1:HelloResponse>"));
+
+
+
+
XML
+
+
<receive endpoint="helloSyncEndpoint">
+    <message>
+        <payload>
+            <v1:HelloRequest xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello World!</v1:Text>
+            </v1:HelloRequest>
+        </payload>
+    </message>
+</receive>
+
+<send endpoint="helloSyncEndpoint">
+    <message>
+        <payload>
+            <v1:HelloResponse xmlns:v1="http://citrusframework.org/schemas/HelloService.xsd">
+                <v1:Text>Hello Citrus!</v1:Text>
+            </v1:HelloResponse>
+        </payload>
+    </message>
+</send>
+
+
+
+
+

17.3. Message selectors

+
+

A channel can hold multiple messages at the same time. Usually you receive messages using first-in-first-out pattern. Message +selectors enable you to select messages form that channel so you can pick messages form a channel based on a selector evaluation.

+
+
+

Citrus introduces a special queue message channel implementation that support message selectors.

+
+
+
Java
+
+
@Bean
+public MessageSelectingQueueChannel helloChannel() {
+    return new MessageSelectingQueueChannel();
+}
+
+
+
+
XML
+
+
<citrus-si:channel id="orderChannel" capacity="5"/>
+
+
+
+

The Citrus message channel implementation extends the queue channel implementation from Spring Integration. So we can add +a capacity attribute for this channel. A receive test action makes use of message selectors on header values as described +in message-selector.

+
+
+

In addition to that we have implemented other message filter possibilities on message channels that we discuss in the next +sections.

+
+
+
+

17.4. Payload matching selector

+
+

You can select messages based on the payload content. Either you define the expected payload as an exact match in the selector +or you make use of Citrus validation matchers which is more adequate in most scenarios.

+
+
+

Assume there are two different plain text messages living on a message channel waiting to be picked up by a consumer.

+
+
+
+
Hello, welcome!
+
+
+
+
+
GoodBye, see you next time!
+
+
+
+

The tester would like to pick up the message starting with GoodBye in our test case. The other messages should be left on the +channel as we are not interested in it right now. We can define a payload matching selector in the receive action like this:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("payload", "@startsWith(GoodBye)@"))
+        .message()
+        .body("GoodBye, see you next time!"));
+
+
+
+
XML
+
+
<receive endpoint="orderChannelEndpoint">
+    <selector>
+        <element name="payload" value="@startsWith(GoodBye)@"/>
+    </selector>
+    <message>
+        <payload>GoodBye, see you next time!</payload>
+    </message>
+</receive>
+
+
+
+

The Citrus receiver picks up the GoodBye from the channel selected via the payload matching expression defined in the +selector element. Of course, you can also combine message header selectors and payload matching selectors as shown in this +example below where a message header sequenceId is added to the selection logic.

+
+
+
Java
+
+
Map<String, String> selectorMap = new HashMap<>();
+selectorMap.put("payload", "@startsWith(GoodBye)@");
+selectorMap.put("sequenceId", "1234");
+
+when(receive("orderChannelEndpoint")
+        .selector(selector)
+        .message()
+        .body("GoodBye, see you next time!"));
+
+
+
+
XML
+
+
<selector>
+    <element name="payload" value="@startsWith(GoodBye)@"/>
+    <element name="sequenceId" value="1234"/>
+</selector>
+
+
+
+
+

17.5. Root QName selector

+
+

As a special payload matching selector you can use the XML root QName of your message as selection criteria when dealing +with XML message content. Let’s see how this works in a small example:

+
+
+

We have two different XML messages on a message channel waiting to be picked up by a consumer.

+
+
+
+
<HelloMessage xmlns="http://citrusframework.org/schema">Hello Citrus</HelloMessage>
+
+
+
+
+
<GoodbyeMessage xmlns="http://citrusframework.org/schema">Goodbye Citrus</GoodbyeMessage>
+
+
+
+

We would like to pick up the GoodbyeMessage in our test case. The HelloMessage should be left on the message channel +as we are not interested in it right now. We can define a root qname message selector in the receive action like this:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("root-qname", "GoodbyeMessage"))
+        .message()
+        .body("<GoodbyeMessage xmlns=\"http://citrusframework.org/schema\">Goodbye Citrus</GoodbyeMessage>"));
+
+
+
+
XML
+
+
<receive endpoint="orderChannelEndpoint">
+    <selector>
+        <element name="root-qname" value="GoodbyeMessage"/>
+    </selector>
+    <message>
+        <payload>
+            <GoodbyeMessage xmlns="http://citrusframework.org/schema">Goodbye Citrus</GoodbyeMessage>
+        </payload>
+    </message>
+</receive>
+
+
+
+

The Citrus receiver picks up the GoodbyeMessage from the channel selected via the root qname of the XML message payload. +Of course, you can also combine message header selectors and root qname selectors as shown in this example below where a +message header sequenceId is added to the selection logic.

+
+
+
Java
+
+
Map<String, String> selectorMap = new HashMap<>();
+selectorMap.put("root-qname", "GoodbyeMessage");
+selectorMap.put("sequenceId", "1234");
+
+when(receive("orderChannelEndpoint")
+        .selector(selector)
+        .message()
+        .body("GoodBye, see you next time!"));
+
+
+
+
XML
+
+
<selector>
+    <element name="root-qname" value="GoodbyeMessage"/>
+    <element name="sequenceId" value="1234"/>
+</selector>
+
+
+
+

As we deal with XML qname values, we can also use namespaces in our selector root qname selection.

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("root-qname", "{http://citrusframework.org/schema}GoodbyeMessage"))
+        .message()
+        .body("<GoodbyeMessage xmlns=\"http://citrusframework.org/schema\">Goodbye Citrus</GoodbyeMessage>"));
+
+
+
+
XML
+
+
<selector>
+    <element name="root-qname" value="{http://citrusframework.org/schema}GoodbyeMessage"/>
+</selector>
+
+
+
+
+

17.6. Xpath selector

+
+

It is also possible to evaluate some XPath expression on the message payload in order to select a message from a message +channel. The XPath expression outcome must match an expected value and only then the message is consumed from the channel.

+
+
+

The syntax for the XPath expression is to be defined as the element name like this:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("xpath://Order/status", "pending"))
+        .message()
+        .body("<Order><status>pending</status></Order>"));
+
+
+
+
XML
+
+
<selector>
+    <element name="xpath://Order/status" value="pending"/>
+</selector>
+
+
+
+

The message selector looks for order messages with status="pending" in the message payload. This means that following +messages would get accepted/declined by the message selector.

+
+
+
+
<Order><status>pending</status></Order> <!-- ACCEPTED -->
+<Order><status>finished</status></Order> <!-- NOT ACCEPTED -->
+
+
+
+

Of course, you can also use XML namespaces in your XPath expressions when selecting messages from channels.

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("xpath://ns1:Order/ns1:status", "pending"))
+        .message()
+        .body("<Order><status>pending</status></Order>"));
+
+
+
+
XML
+
+
<selector>
+    <element name="xpath://ns1:Order/ns1:status" value="pending"/>
+</selector>
+
+
+
+

Namespace prefixes must match the incoming message - otherwise the XPath expression will not work as expected. In our example +the message should look like this:

+
+
+
+
<ns1:Order xmlns:ns1="http://citrus.org/schema"><ns1:status>pending</ns1:status></ns1:Order>
+
+
+
+

Knowing the correct XML namespace prefix is not always easy. If you are not sure which namespace prefix to choose Citrus +ships with a dynamic namespace replacement for XPath expressions. The XPath expression looks like this and is most flexible:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap(
+                "xpath://{http://citrus.org/schema}:Order/{http://citrus.org/schema}:status", "pending"))
+        .message()
+        .body("<Order><status>pending</status></Order>"));
+
+
+
+
XML
+
+
<selector>
+    <element name="xpath://{http://citrus.org/schema}:Order/{http://citrus.org/schema}:status"
+                value="pending"/>
+</selector>
+
+
+
+

This will match all incoming messages regardless the XML namespace prefix that is used.

+
+
+
+

17.7. JsonPath selector

+
+

It is also possible to evaluate some JsonPath expression on the message payload in order to select a message from a message +channel. The JsonPath expression outcome must match an expected value and only then the message is consumed from the channel.

+
+
+

The syntax for the JsonPath expression is to be defined as the element name like this:

+
+
+
Java
+
+
when(receive("orderChannelEndpoint")
+        .selector(Collections.singletonMap("jsonPath:$.order.status", "pending"))
+        .message()
+        .body("{ \"order\": { \"status\": \"pending\" } }"));
+
+
+
+
XML
+
+
<selector>
+    <element name="jsonPath:$.order.status" value="pending"/>
+</selector>
+
+
+
+

The message selector looks for order messages with status="pending" in the message payload. This means that following messages would get accepted/declined by the message selector.

+
+
+
+
{ "order": { "status": "pending" } } //ACCEPTED
+{ "order": { "status": "finished" } } //NOT ACCEPTED
+
+
+
+
+
+
+

18. WebSocket support

+
+
+

The WebSocket message protocol builds on top of Http standard and brings bidirectional communication to the Http client-server world. Citrus is able to send and receive messages with WebSocket connections as client and server. The Http server implementation is now able to define multiple WebSocket endpoints. The new Citrus WebSocket client is able to publish and consumer messages via bidirectional WebSocket protocol.

+
+
+

The new WebSocket support is located in the module citrus-websocket . Therefore we need to add this module to our project as dependency when we are about to use the WebSocket features in Citrus.

+
+
+
+
<dependency>
+    <groupId>org.citrusframework</groupId>
+    <artifactId>citrus-websocket</artifactId>
+    <version>${citrus.version}</version>
+</dependency>
+
+
+
+

As Citrus provides a customized WebSocket configuration schema for the Spring application context configuration files we have to add name to the top level beans element. Simply include the websocket-config namespace in the configuration XML files as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns:citrus="http://www.citrusframework.org/schema/config"
+      xmlns:citrus-websocket="http://www.citrusframework.org/schema/websocket/config"
+      xsi:schemaLocation="
+            http://www.springframework.org/schema/beans
+            http://www.springframework.org/schema/beans/spring-beans.xsd
+            http://www.citrusframework.org/schema/config
+            http://www.citrusframework.org/schema/config/citrus-config.xsd
+            http://www.citrusframework.org/schema/websocket/config
+            http://www.citrusframework.org/schema/websocket/config/citrus-websocket-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

Now our project is ready to use the Citrus WebSocket support. First of all let us send a message via WebSocket connection to some server.

+
+
+

18.1. WebSocket client

+
+

On the client side Citrus offers a client component that goes directly to the Spring bean application context. The client needs a server endpoint uri. This is a WebSocket protocol endpoint uri.

+
+
+
+
<citrus-websocket:client id="helloWebSocketClient"
+    url="http://localhost:8080/hello"
+    timeout="5000"/>
+
+
+
+

The url defines the endpoint to send messages to. The server has to be a WebSocket ready web server that supports Http connection upgrade for WebSocket protocols. WebSocket by its nature is an asynchronous bidirectional protocol. This means that the connection between client and server remains open and both server and client can send and receive messages. So when the Citrus client is waiting for a message we need a timeout that stops the asynchronous waiting. The receiving test action and the test case will fail when such a timeout is raised.

+
+
+

The WebSocket client will automatically open a connection to the server and ask for a connection upgrade to WebSocket protocol. This handshake is done once when the connection to the server is established. After that the client can push messages to the server and on the other side the server can push messages to the client. Now let’s first push some messages to the server:

+
+
+
+
<send endpoint="helloWebSocketClient">
+  <message>
+      <payload>
+          <TestMessage>
+              <Text>Hello WebSocketServer</Text>
+          </TestMessage>
+      </payload>
+  </message>
+</send>
+
+
+
+

The connection handshake and the connection upgrade is done automatically by the client. After that the message is pushed to the server. As WebSocket is a bidirectional protocol we can also receive messages on the WebSocket client. These messages are pushed from server to all connected clients.

+
+
+
+
<receive endpoint="helloWebSocketClient">
+  <message>
+      <payload>
+          <TestMessage>
+              <Text>Hello WebSocketClient</Text>
+          </TestMessage>
+      </payload>
+  </message>
+</receive>
+
+
+
+

We just use the very same client endpoint component in a message receive action. The client will wait for messages from the server and once received perform the well known message validation. Here we expect some XML message payload. This completes the client side as we are able to push and consumer messages via WebSocket connections.

+
+
+ + + + + +
+ + +Up to now we have used static WebSocket endpoint URIs in our client component configurations. This can be done with a more powerful dynamic endpoint URI in WebSocket client. Similar to the endpoint resolving mechanism in SOAP you can dynamically set the called endpoint uri at test runtime through message header values. By default Citrus will check a specific header entry for dynamic endpoint URI which is simply defined for each message sending action inside the test. +
+
+
+

The dynamicEndpointResolver bean must implement the EndpointUriResolver interface in order to resolve dynamic endpoint uri values. Citrus offers a default implementation, the DynamicEndpointUriResolver, which uses a specific message header for setting dynamic endpoint uri. The message header needs to specify the header citrus_endpoint_uri with a valid request uri.

+
+
+
+
<header>
+  <element name="citrus_endpoint_uri" value="ws://localhost:8080/customers/${customerId}"/>
+</header>
+
+
+
+

The specific send action above will send its message to the dynamic endpoint (ws://localhost:8080/customers/${customerId}[ws://localhost:8080/customers/${customerId}]) which is set in the header citrus_endpoint_uri .

+
+
+
+

18.2. WebSocket server endpoints

+
+

On the server side Citrus has a Http server implementation that we can easily start during test runtime. The Http server accepts connections from clients and also supports WebSocket upgrade strategies. This means clients can ask for an upgrade to the WebSocket standard. In this handshake the server will upgrade the connection to WebSocket and afterwards client and server can exchange messages over this connection. This means the connection is kept alive and multiple messages can be exchanged. Let’s see how WebSocket endpoints are added to a Http server component in Citrus.

+
+
+
+
<citrus-websocket:server id="helloHttpServer"
+        port="8080"
+        auto-start="true"
+        resource-base="src/it/resources">
+    <citrus-websocket:endpoints>
+        <citrus-websocket:endpoint ref="websocket1"/>
+        <citrus-websocket:endpoint ref="websocket2"/>
+    </citrus-websocket:endpoints>
+</citrus-websocket:server>
+
+<citrus-websocket:endpoint id="websocket1" path="/test1"/>
+<citrus-websocket:endpoint id="websocket2" path="/test2" timeout="10000"/>
+
+
+
+

The embedded Jetty WebSocket server component in Citrus now is able to define multiple WebSocket endpoints. The WebSocket endpoints match to a request path on the server and are referenced by a unique id. Each WebSocket endpoint can follow individual timeout settings. In a test we can use these endpoints directly to receive messages.

+
+
+
+
<testcase name="httpWebSocketServerTest">
+    <actions>
+        <receive endpoint="websocket1">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </receive>
+
+        <send endpoint="websocket1">
+            <message>
+                <data>
+                  [...]
+                </data>
+            </message>
+        </send>
+    </actions>
+</testcase>
+
+
+
+

As you can see we reference the endpoint id in both receive and send actions. Each WebSocket endpoint holds one or more open connections to its clients. Each message that is sent is pushed to all connected clients. Each client can send messages to the WebSocket endpoint.

+
+
+

The WebSocket endpoint component handles connection handshakes automatically and caches all open sessions in memory. By default all connected clients will receive the messages pushed from server. This is done completely behind the scenes. The Citrus server is able to handle multiple WebSocket endpoints with different clients connected to it at the same time. This is why we have to choose the WebSocket endpoint on the server by its identifier when sending and receiving messages.

+
+
+

With this WebSocket endpoints we change the Citrus server behavior so that clients can upgrade to WebSocket connection. Now we have a bidirectional connection where the server can push messages to the client and vice versa.

+
+
+
+

18.3. WebSocket headers

+
+

The WebSocket standard defines some default headers to use during connection upgrade. These headers are made available to the test case in both directions. Citrus will handle these header values with special care when WebSocket support is activated on a server or client. Now WebSocket messages can also be split into multiple pieces. Each message part is pushed separately to the server but still is considered to be a single message payload. The server has to collect and aggregate all messages until a special message header isLast is set in one of the message parts.

+
+
+

The Citrus WebSocket client can slice messages into several parts.

+
+
+
+
<send endpoint="webSocketClient">
+    <message type="json">
+        <data>
+        [
+            {
+                "event" : "client_message_1",
+                "timestamp" : "citrus:currentDate()"
+            },
+        </data>
+    </message>
+    <header>
+        <element name="citrus_websocket_is_last" value="false"/>
+    </header>
+</send>
+
+<sleep milliseconds="500"/>
+
+<send endpoint="webSocketClient">
+    <message type="json">
+        <data>
+            {
+                "event" : "client_message_2",
+                "timestamp" : "citrus:currentDate()"
+            }
+          ]
+        </data>
+    </message>
+    <header>
+        <element name="citrus_websocket_is_last" value="true"/>
+    </header>
+</send>
+
+
+
+

The test above has two separate send operations both sending to a WebSocket endpoint. The first sending action sets the header citrus_websocket_is_last to false which indicates that the message is not complete yet. The 2nd send action pushes the rest of the message to the server and set the citrus_websocket_is_last header to true . Now the server is able to aggregate the message pieces to a single message payload. The result is a valida JSON array with both events in it.

+
+
+
+
[
+  {
+    "event" : "client_message_1",
+    "timestamp" : "2015-01-01"
+  },
+  {
+    "event" : "client_message_2",
+    "timestamp" : "2015-01-01"
+  }
+]
+
+
+
+

Now the server part in Citrus is able to handle these sliced messages, too. The server will automatically aggregate those message parts before passing it to the test case for validation.

+
+
+
+
+
+

19. Mail support

+
+
+

Sending and receiving mails is the next interest we are going to talk about. When dealing with mail communication you most certainly need to interact with some sort of IMAP or POP mail server. But in Citrus we do not want to manage mails in a personal inbox. We just need to be able to exchange mail messages the persisting in a user inbox is not part of our business.

+
+
+

This is why Citrus provides just an SMTP mail server which accepts mail messages from clients. Once the SMTP server has accepted an incoming mail it forwards those data to the running test case. In the test case you can receive the incoming mail message and perform message validation as usual. The mail sending part is easy as Citrus offers a mail client that connects to some SMTP server for sending mails to the outside world.

+
+
+ + + + + +
+ + +The mail components in Citrus are kept in a separate Maven module. So you should check that the module is available as Maven dependency in your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-mail</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

As usual Citrus provides a customized mail configuration schema that is used in Spring configuration files. Simply include the citrus-mail namespace in the configuration XML files as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns:citrus="http://www.citrusframework.org/schema/config"
+      xmlns:citrus-mail="http://www.citrusframework.org/schema/mail/config"
+      xsi:schemaLocation="
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans.xsd
+      http://www.citrusframework.org/schema/config
+      http://www.citrusframework.org/schema/config/citrus-config.xsd
+      http://www.citrusframework.org/schema/mail/config
+      http://www.citrusframework.org/schema/mail/config/citrus-mail-config.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

Now you are ready to use the customized Http configuration elements with the citrus-mail namespace prefix.

+
+
+

Read the next section in order to find out more about the mail message support in Citrus.

+
+
+

19.1. Mail client

+
+

The mail sending part is quite easy and straight forward. We just need to send a mail message to some SMTP server. So Citrus provides a mail client that sends out mail messages.

+
+
+
+
<citrus-mail:client id="simpleMailClient"
+      host="localhost"
+      port="25025"/>
+
+
+
+

This is how a Citrus mail client component is defined in the Spring application context. You can use this client referenced by its id or name in your test case in a message sending action. The client defines a host and port attribute which should connect the client to some SMTP server instance.

+
+
+

We all know mail message contents. The mail message has some general properties set by the user:

+
+
+ + + + + + + + + + + + + + + + + + + + + +
+from + +

The message sender mail address

+
+to + +

The message recipient mail address. You can add multiple recipients by using a comma separated list.

+
+cc + +

Copy recipient mail address. You can add multiple recipients by using a comma separated list.

+
+bcc + +

Blind copy recipient mail address. You can add multiple recipients by using a comma separated list.

+
+subject + +

Some subject used as mail headline.

+
+
+
+

As a tester you are able to set these properties in your test case. Citrus defines an XML mail message representation that you can use inside your send action. Let us have a look at this:

+
+
+
+
<send endpoint="simpleMailClient">
+    <message>
+        <payload>
+            <mail-message xmlns="http://www.citrusframework.org/schema/mail/message">
+                <from>christoph@citrusframework.com</from>
+                <to>dev@citrusframework.com</to>
+                <cc></cc>
+                <bcc></bcc>
+                <subject>This is a test mail message</subject>
+                <body>
+                    <contentType>text/plain; charset=utf-8</contentType>
+                    <content>Hello Citrus mail server!</content>
+                </body>
+            </mail-message>
+        </payload>
+    </message>
+</send>
+
+
+
+

The basic XML mail message representation defines a list of basic mail properties such as from, to or subject . In addition to that we define a text body which is either plain text or HTML. You can specify the content type of the mail body very easy (e.g. text/plain or text/html). By default Citrus uses text/plain content type.

+
+
+

Now when dealing with mail messages you often come to use multipart structures for attachments. In Citrus you can define attachment content as base64 character sequence. The Citrus mail client will automatically create a proper multipart mail mime message using the content types and body parts specified.

+
+
+
+
<send endpoint="simpleMailClient">
+    <message>
+        <payload>
+            <mail-message xmlns="http://www.citrusframework.org/schema/mail/message">
+                <from>christoph@citrusframework.com</from>
+                <to>dev@citrusframework.com</to>
+                <cc></cc>
+                <bcc></bcc>
+                <subject>This is a test mail message</subject>
+                <body>
+                    <contentType>text/plain; charset=utf-8</contentType>
+                    <content>Hello Citrus mail server!</content>
+                    <attachments>
+                        <attachment>
+                            <contentType>text/plain; charset=utf-8</contentType>
+                            <content>This is attachment data</content>
+                            <fileName>attachment.txt</fileName>
+                        </attachment>
+                    </attachments>
+                </body>
+            </mail-message>
+        </payload>
+    </message>
+</send>
+
+
+
+

That completes the basic mail client capabilities. But wait we have not talked about error scenarios where mail communication results in error. When running into mail error scenarios we have to handle the error respectively with exception handling. When the mail server responded with errors Citrus will raise mail exceptions automatically and your test case fails accordingly.

+
+
+

As a tester you can catch and assert these mail exceptions verifying your error scenario.

+
+
+
+
<assert exception="org.springframework.mail.MailSendException">
+    <when>
+        <send endpoint="simpleMailClient">
+            <message>
+                <payload>
+                    <mail-message xmlns="http://www.citrusframework.org/schema/mail/message">
+                        [...]
+                    </mail-message>
+                </payload>
+            </message>
+        </send>
+    </when>
+<assert/>
+
+
+
+

We assert the MailSendException from Spring to be thrown while sending the mail message to the SMTP server. With exception message validation you are able to expect very specific mail send errors on the client side. This is how you can handle some sort of error situation returned by the mail server. Speaking of mail servers we need to also talk about providing a mail server endpoint in Citrus for clients. This is part of our next section.

+
+
+
+

19.2. Mail server

+
+

Consuming mail messages is a more complicated task as we need to have some sort of server that clients can connect to. In your mail client software you typically point to some IMAP or POP inbox and receive mails from that endpoint. In Citrus we do not want to manage a whole personal mail inbox such as IMAP or POP would provide. We just need an SMTP server endpoint for clients to send mails to. The SMTP server accepts mail messages and forwards those to a running test case for further validation.

+
+
+ + + + + +
+ + +We have no user inbox where incoming mails are stored. The mail server just forwards incoming mails to the running test for validation. After the test the incoming mail message is gone. +
+
+
+

And this is exactly what the Citrus mail server is capable of. The server is a very lightweight SMTP server. All incoming mail client connections are accepted by default and the mail data is converted into a Citrus XML mail interface representation. The XML mail message is then passed to the running test for validation.

+
+
+

Let us have a look at the Citrus mail server component and how you can add it to the Spring application context.

+
+
+
+
<citrus-mail:server id="simpleMailServer"
+      port="25025"
+      auto-start="true"/>
+
+
+
+

The mail server component receives several properties such as port or auto-start . Citrus starts an in-memory SMTP server that clients can connect to.

+
+
+

In your test case you can then receive the incoming mail messages on the server in order to perform the well known XML validation mechanisms within Citrus. The message header and the payload contain all mail information so you can verify the content with expected templates as usual:

+
+
+
+
<receive endpoint="simpleMailServer">
+    <message>
+        <payload>
+            <mail-message xmlns="http://www.citrusframework.org/schema/mail/message">
+                <from>christoph@citrusframework.com</from>
+                <to>dev@citrusframework.com</to>
+                <cc></cc>
+                <bcc></bcc>
+                <subject>This is a test mail message</subject>
+                <body>
+                    <contentType>text/plain; charset=utf-8</contentType>
+                    <content>Hello Citrus mail server!</content>
+                </body>
+            </mail-message>
+        </payload>
+    </message>
+    <header>
+        <element name="citrus_mail_from" value="christoph@citrusframework.com"/>
+        <element name="citrus_mail_to" value="dev@citrusframework.com"/>
+        <element name="citrus_mail_subject" value="This is a test mail message"/>
+        <element name="citrus_mail_content_type" value="text/plain; charset=utf-8"/>
+    </header>
+</receive>
+
+
+
+

The general mail properties such as from, to, subject are available as elements in the mail payload and in the message header information. The message header names do start with a common Citrus mail prefix citrus_mail . Following from that you can verify these special mail message headers in your test as shown above. Citrus offers following mail headers:

+
+
+
    +
  • +

    citrus_mail_from

    +
  • +
  • +

    citrus_mail_to

    +
  • +
  • +

    citrus_mail_cc

    +
  • +
  • +

    citrus_mail_bcc

    +
  • +
  • +

    citrus_mail_subject

    +
  • +
  • +

    citrus_mail_replyTo

    +
  • +
  • +

    citrus_mail_date

    +
  • +
+
+
+

In addition to that Citrus converts the incoming mail data to a special XML mail representation which is passed as message payload to the test. The mail body parts are represented as body and optional attachment elements. As this is plain XML you can verify the mail message content as usual using Citrus variables, functions and validation matchers.

+
+
+

Regardless of how the mail message has passed the validation the Citrus SMTP mail server will automatically respond with success codes (SMTP 250 OK) to the calling client. This is the basic Citrus mail server behavior where all client connections are accepted an all mail messages are responded with SMTP 250 OK response codes.

+
+
+

Now in more advanced usage scenarios the tester may want to control the mail communication outcome. User can force some error scenarios where mail clients are not accepted or mail communication should fail with some SMTP error state for instance.

+
+
+

By using a more advanced mail server setup the tester gets more power to sending back mail server response codes to the mail client. Just use the advanced mail adapter implementation in your mail server component configuration:

+
+
+
+
<citrus-mail:server id="advancedMailServer"
+      auto-accept="false"
+      split-multipart="true"
+      port="25025"
+      auto-start="true"/>
+
+
+
+

We have disabled the auto-accept mode on the mail server. This means that we have to do some additional steps in your test case to accept the incoming mail message first. So we can decide in our test case whether to accept or decline the incoming mail message for a more powerful test. You accept/decline a mail message with a special XML accept request/response exchange in your test case:

+
+
+
+
<receive endpoint="advancedMailServer">
+    <message>
+        <payload>
+            <accept-request xmlns="http://www.citrusframework.org/schema/mail/message">
+                <from>christoph@citrusframework.com</from>
+                <to>dev@citrusframework.com</to>
+            </accept-request>
+        </payload>
+    </message>
+</receive>
+
+
+
+

So before receiving the actual mail message we receive this simple accept-request in our test. The accept request gives us the message from and to resources of the mail message. Now the test decides to also decline a mail client connection. You can simulate that the server does not accept the mail client connection by sending back a negative accept response.

+
+
+
+
<send endpoint="advancedMailServer">
+    <message>
+        <payload>
+            <accept-response xmlns="http://www.citrusframework.org/schema/mail/message">
+                <accept>true</accept>
+            </accept-response>
+        </payload>
+    </message>
+</send>
+
+
+
+

Depending on the accept outcome the mail client will receive an error response with proper error codes. If you accept the mail message with a positive accept response the next step in your test receives the actual mail message as we have seen it before in this chapter.

+
+
+

Now besides not accepting a mail message in the first place you can als simulate another error scenario with the mail server. In this scenario the mail server should respond with some sort of SMTP error code after accepting the message. This is done with a special mail response message like this:

+
+
+
+
<receive endpoint="advancedMailServer">
+    <message>
+        <payload>
+            <mail-message xmlns="http://www.citrusframework.org/schema/mail/message">
+                <from>christoph@citrusframework.com</from>
+                <to>dev@citrusframework.com</to>
+                <cc></cc>
+                <bcc></bcc>
+                <subject>This is a test mail message</subject>
+                <body>
+                    <contentType>text/plain; charset=utf-8</contentType>
+                    <content>Hello Citrus mail server!</content>
+                </body>
+            </mail-message>
+        </payload>
+    </message>
+</receive>
+
+<send endpoint="advancedMailServer">
+    <message>
+        <payload>
+            <mail-response xmlns="http://www.citrusframework.org/schema/mail/message">
+                <code>443</code>
+                <message>Failed!</message>
+            </mail-response>
+        </payload>
+    </message>
+</send>
+
+
+
+

As you can see from the example above we first accept the connection and receive the mail content as usual. Now the test returns a negative mail response with some error code reason set. The Citrus SMTP communication will then fail and the calling mail client receives the respective error.

+
+
+

If you skip the negative mail response the server will automatically respond with positive SMTP response codes to the calling client.

+
+
+
+
+
+

20. FTP support

+
+
+

With Citrus it is possible to start your own ftp server for accepting incoming client requests. You can also use Citrus as an FTP client to send FTP commands. The next sections deal with FTP connectivity.

+
+
+ + + + + +
+ + +The FTP components in Citrus are maintained in their own Maven module. So you should add the module as Maven dependency to your project accordingly. +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-ftp</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

As Citrus provides a customized FTP configuration schema for the Spring application context configuration files we have to add name to the top level beans element. Simply include the ftp-config namespace in the configuration XML files as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:citrus="http://www.citrusframework.org/schema/config"
+    xmlns:citrus-ftp="http://www.citrusframework.org/schema/ftp/config"
+    xsi:schemaLocation="
+    http://www.springframework.org/schema/beans
+    http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://www.citrusframework.org/schema/config
+    http://www.citrusframework.org/schema/config/citrus-config.xsd
+    http://www.citrusframework.org/schema/http/config
+    http://www.citrusframework.org/schema/ftp/config/citrus-ftp-config.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

Now we are ready to use the customized Citrus FTP configuration elements with the citrus-ftp namespace prefix.

+
+
+

20.1. FTP client

+
+

We want to use Citrus to connect to some FTP server as a client sending commands such as creating a directory or listing files. Citrus offers a client component doing exactly this FTP client connection.

+
+
+
Spring Bean
+
+
@Bean
+public FtpClient ftpClient() {
+    return CitrusEndpoints.ftp()
+            .client()
+            .port(2222)
+            .username("citrus")
+            .password("admin")
+            .timeout(10000L)
+            .build();
+}
+
+
+
+
Spring XML
+
+
<citrus-ftp:client id="ftpClient"
+      host="localhost"
+      port="2222"
+      username="admin"
+      password="admin"
+      timeout="10000"/>
+
+
+
+

The configuration above describes a Citrus ftp client connected to a ftp server with ftp://localhost:22222. For authentication username and password are defined as well as the global connection timeout. The client will automatically send username and password for proper authentication to the server when opening a new connection.

+
+
+

20.1.1. FTP client commands

+
+

In a test case you are now able to use the client to push commands to the server.

+
+
+
Java
+
+
@CitrusTest
+public void ftpMessageTest() {
+    $(send(ftpClient)
+        .message(FtpMessage.command(FTPCmd.MKD).arguments("test"))
+    );
+
+    CommandResult result = new CommandResult();
+    result.setSuccess(true);
+    result.setReplyCode(String.valueOf(257));
+    result.setReplyString("@contains(\"/test\" created)@");
+
+    $(receive(ftpClient)
+        .message(FtpMessage.result(result))
+    );
+}
+
+
+
+
XML
+
+
<test name="FtpMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="ftpClient">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>MKD</ftp:signal>
+                            <ftp:arguments>test</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </body>
+            </message>
+        </send>
+
+        <receive endpoint="ftpClient">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                            <ftp:reply-code>257</ftp:reply-code>
+                            <ftp:reply-string>257 "/test" created.</ftp:reply-string>
+                        </ftp:command-result>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: FtpMessageTest
+actions:
+  - send:
+      endpoint: "ftpClient"
+      message:
+        body: |
+          <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:signal>MKD</ftp:signal>
+            <ftp:arguments>test</ftp:arguments>
+          </ftp:command>
+  - receive:
+      endpoint: "ftpClient"
+      message:
+        body: |
+          <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:success>true</ftp:success>
+            <ftp:reply-code>257</ftp:reply-code>
+            <ftp:reply-string>257 "/test" created.</ftp:reply-string>
+          </ftp:command-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="FtpMessageTest">
+        <actions>
+            <send endpoint="ftpClient">
+                <message>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>MKD</ftp:signal>
+                            <ftp:arguments>test</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </message>
+            </send>
+
+            <receive endpoint="ftpClient">
+                <message>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                            <ftp:reply-code>257</ftp:reply-code>
+                            <ftp:reply-string>257 "/test" created.</ftp:reply-string>
+                        </ftp:command-result>
+                    </payload>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

As you can see most of the ftp communication parameters are specified in a ftp command message. Citrus automatically converts those information to proper FTP commands and response messages.

+
+
+
+

20.1.2. Store files

+
+

The client is able to store files on the server using file transfer.

+
+
+
Java
+
+
@CitrusTest
+public void ftpMessageTest() {
+    $(send(ftpClient)
+        .message(FtpMessage.put("test/hello.txt", DataType.ASCII).arguments(""))
+    );
+
+    PutCommandResult result = new PutCommandResult();
+    result.setSuccess(true);
+    result.setReplyCode(String.valueOf(226));
+    result.setReplyString("@contains(Transfer complete)@");
+
+    $(receive(ftpClient)
+        .message(FtpMessage.result(result))
+    );
+}
+
+
+
+
XML
+
+
<test name="FtpMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="ftpClient">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:put-command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:file path="test/hello.txt" type="ASCII"/>
+                            <ftp:target path="/test/hello.txt"/>
+                        </ftp:put-command>
+                    </payload>
+                </body>
+            </message>
+        </send>
+
+        <receive endpoint="ftpClient">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:put-command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                            <ftp:reply-code>226</ftp:reply-code>
+                            <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+                        </ftp:put-command-result>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: FtpMessageTest
+actions:
+  - send:
+      endpoint: "ftpClient"
+      message:
+        body: |
+          <ftp:put-command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:file path="test/hello.txt" type="ASCII"/>
+            <ftp:target path="/test/hello.txt"/>
+          </ftp:put-command>
+  - receive:
+      endpoint: "ftpClient"
+      message:
+        body: |
+          <ftp:put-command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:success>true</ftp:success>
+            <ftp:reply-code>226</ftp:reply-code>
+            <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+          </ftp:put-command-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="FtpMessageTest">
+        <actions>
+            <send endpoint="ftpClient">
+                <message>
+                    <payload>
+                        <ftp:put-command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:file path="test/hello.txt" type="ASCII"/>
+                            <ftp:target path="/test/hello.txt"/>
+                        </ftp:put-command>
+                    </payload>
+                </message>
+            </send>
+
+            <receive endpoint="ftpClient">
+                <message>
+                    <payload>
+                        <ftp:put-command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                            <ftp:reply-code>226</ftp:reply-code>
+                            <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+                        </ftp:put-command-result>
+                    </payload>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The file store operation uses the put command as message payload when sending the file request. The file content is loaded from external file resource. You can choose the transfer type ASCII and BINARY. +When the file is stored on server side we receive a success result message with respective reply code and string for validation.

+
+
+
+

20.1.3. Retrieve files

+
+

We are able to retrieve files from an FTP server. We need to specify the target file path that we want to get on the server user home directory.

+
+
+
Java
+
+
@CitrusTest
+public void ftpMessageTest() {
+    $(send(ftpClient)
+        .message(FtpMessage.get("test/hello.txt", "target/test/hello.txt", DataType.ASCII))
+    );
+
+    $(receive(ftpClient)
+        .message(FtpMessage.result(getRetrieveFileCommandResult("target/test/hello.txt", new ClassPathResource("test/hello.txt"))))
+    );
+}
+
+private GetCommandResult getRetrieveFileCommandResult(String path, Resource content) throws IOException {
+    GetCommandResult result = new GetCommandResult();
+    result.setSuccess(true);
+    result.setReplyCode(String.valueOf(226));
+    result.setReplyString("@contains('Transfer complete')@");
+
+    GetCommandResult.File entryResult = new GetCommandResult.File();
+    entryResult.setPath(path);
+    entryResult.setData(FileUtils.readToString(content));
+    result.setFile(entryResult);
+
+    return result;
+}
+
+
+
+
XML
+
+
<test name="FtpMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="ftpClient">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:get-command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:file path="test/hello.txt" type="ASCII"/>
+                            <ftp:target path="target/test/hello.txt"/>
+                        </ftp:get-command>
+                    </payload>
+                </body>
+            </message>
+        </send>
+
+        <receive endpoint="ftpClient">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:get-command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                            <ftp:reply-code>226</ftp:reply-code>
+                            <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+                            <ftp:file path="target/test/hello.txt">
+                              <ftp:data>citrus:readFile('classpath:test/hello.txt')</ftp:data>
+                            </ftp:file>
+                        </ftp:get-command-result>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: FtpMessageTest
+actions:
+  - send:
+      endpoint: "ftpClient"
+      message:
+        body: |
+          <ftp:get-command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:file path="test/hello.txt" type="ASCII"/>
+            <ftp:target path="target/test/hello.txt"/>
+          </ftp:get-command>
+  - receive:
+      endpoint: "ftpClient"
+      message:
+        body: |
+          <ftp:get-command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:success>true</ftp:success>
+            <ftp:reply-code>226</ftp:reply-code>
+            <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+            <ftp:file path="target/test/hello.txt">
+              <ftp:data>citrus:readFile('classpath:test/hello.txt')</ftp:data>
+            </ftp:file>
+          </ftp:get-command-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="FtpMessageTest">
+        <actions>
+            <send endpoint="ftpClient">
+                <message>
+                    <payload>
+                        <ftp:get-command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:file path="test/hello.txt" type="ASCII"/>
+                            <ftp:target path="target/test/hello.txt"/>
+                        </ftp:get-command>
+                    </payload>
+                </message>
+            </send>
+
+            <receive endpoint="ftpClient">
+                <message>
+                    <payload>
+                        <ftp:get-command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                            <ftp:reply-code>226</ftp:reply-code>
+                            <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+                            <ftp:file path="target/test/hello.txt">
+                              <ftp:data>citrus:readFile('classpath:test/hello.txt')</ftp:data>
+                            </ftp:file>
+                        </ftp:get-command-result>
+                    </payload>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

When file transfer is complete we are able to verify the file content in a command result. The file content is provided as data string.

+
+
+
+

20.1.4. List files

+
+

Listing files on the server is possible with the list command.

+
+
+
Java
+
+
@CitrusTest
+public void ftpMessageTest() {
+    $(send(ftpClient)
+        .message(FtpMessage.list("test"))
+    );
+
+    $(receive(ftpClient)
+        .message(FtpMessage.result(getListCommandResult("hello.txt")))
+    );
+}
+
+private ListCommandResult getListCommandResult(String ... fileNames) {
+    ListCommandResult result = new ListCommandResult();
+    result.setSuccess(true);
+    result.setReplyCode(String.valueOf(226));
+    result.setReplyString("@contains('Closing data connection')@");
+
+    ListCommandResult.Files expectedFiles = new ListCommandResult.Files();
+
+    for (String fileName : fileNames) {
+        ListCommandResult.Files.File entry = new ListCommandResult.Files.File();
+        entry.setPath(fileName);
+        expectedFiles.getFiles().add(entry);
+    }
+
+    result.setFiles(expectedFiles);
+
+    return result;
+}
+
+
+
+
XML
+
+
<test name="FtpMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="ftpClient">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:list-command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:target path="test" />
+                        </ftp:list-command>
+                    </payload>
+                </body>
+            </message>
+        </send>
+
+        <receive endpoint="ftpClient">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:list-command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                            <ftp:reply-code>226</ftp:reply-code>
+                            <ftp:reply-string>@contains('Closing data connection')@</ftp:reply-string>
+                            <ftp:files>
+                              <ftp:file path="hello.txt"/>
+                            </ftp:files>
+                        </ftp:list-command-result>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: FtpMessageTest
+actions:
+  - send:
+      endpoint: "ftpClient"
+      message:
+        body: |
+          <ftp:list-command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:target path="test" />
+          </ftp:list-command>
+  - receive:
+      endpoint: "ftpClient"
+      message:
+        body: |
+          <ftp:list-command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:success>true</ftp:success>
+            <ftp:reply-code>226</ftp:reply-code>
+            <ftp:reply-string>@contains('Closing data connection')@</ftp:reply-string>
+            <ftp:files>
+              <ftp:file path="hello.txt"/>
+            </ftp:files>
+          </ftp:list-command-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="FtpMessageTest">
+        <actions>
+            <send endpoint="ftpClient">
+                <message>
+                    <payload>
+                        <ftp:list-command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:target path="test" />
+                        </ftp:list-command>
+                    </payload>
+                </message>
+            </send>
+
+            <receive endpoint="ftpClient">
+                <message>
+                    <payload>
+                        <ftp:list-command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                            <ftp:reply-code>226</ftp:reply-code>
+                            <ftp:reply-string>@contains('Closing data connection')@</ftp:reply-string>
+                            <ftp:files>
+                              <ftp:file path="hello.txt"/>
+                            </ftp:files>
+                        </ftp:list-command-result>
+                    </payload>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Listing files results in a command result that gives us the list of files on the server directory. We are able to verify that list with respective file paths.

+
+
+
+
+

20.2. FTP server

+
+

Now that we are able to access FTP as a client we might also want to simulate the server side. Therefore Citrus offers a server component that is listening on a port for incoming FTP connections. The server has a default home directory on the local file system specified. But you can also define home directories per user. For now let us have a look at the server configuration component:

+
+
+
XML
+
+
<citrus-ftp:server id="ftpServer">
+      port="2222"
+      auto-start="true"
+      auto-handle-commands="MKD,PORT,TYPE"
+      user-manager-properties="classpath:ftp.server.properties"/>
+
+
+
+
Java
+
+
@Bean
+public FtpServer ftpListServer() {
+    return CitrusEndpoints.ftp()
+            .server()
+            .port(2222)
+            .autoLogin(true)
+            .autoStart(true)
+            .autoHandleCommands(Stream.of(FTPCmd.MKD.getCommand(),
+                                          FTPCmd.PORT.getCommand(),
+                                          FTPCmd.TYPE.getCommand()).collect(Collectors.joining(",")))
+            .userManagerProperties(new ClassPathResource("citrus.ftp.user.properties"))
+            .build();
+
+
+
+

The ftp server configuration is quite simple. The server starts automatically and binds to a port. With autoLogin and autoHandleCommands we can specify the behavior of the server. +When autoLogin is enabled the server will automatically accept user login requests. With autoHandleCommands we can set a list of commands that should also be handled automatically so we do not +have to verify those commands in a test case. The server will automatically respond with a positive command result then.

+
+
+

The user configuration is read from a user-manager-property file. Let us have a look at the content of this user management file:

+
+
+
+
# Password is "admin"
+ftpserver.user.admin.userpassword=21232F297A57A5A743894A0E4A801FC3
+ftpserver.user.admin.homedirectory=target/ftp/user/admin
+ftpserver.user.admin.enableflag=true
+ftpserver.user.admin.writepermission=true
+ftpserver.user.admin.maxloginnumber=0
+ftpserver.user.admin.maxloginperip=0
+ftpserver.user.admin.idletime=0
+ftpserver.user.admin.uploadrate=0
+ftpserver.user.admin.downloadrate=0
+
+ftpserver.user.anonymous.userpassword=
+ftpserver.user.anonymous.homedirectory=target/ftp/user/anonymous
+ftpserver.user.anonymous.enableflag=true
+ftpserver.user.anonymous.writepermission=false
+ftpserver.user.anonymous.maxloginnumber=20
+ftpserver.user.anonymous.maxloginperip=2
+ftpserver.user.anonymous.idletime=300
+ftpserver.user.anonymous.uploadrate=4800
+ftpserver.user.anonymous.downloadrate=4800
+
+
+
+

The FTP server defines two accounts citrus and anonymous. Clients may authenticate to the server using these credentials. Based on the user account +we can set a user workspace home directory. The server will save incoming stored files to this directory and the server will read retrieved files from that +home directory.

+
+
+

In case you want to setup some files in that directory in order to provide it to clients, please copy those files to that home directory prior to the test.

+
+
+

The ftp-client connects to the server using the user credentials and is then able to store and retrieve files in a test.

+
+
+

You are able to define as many user for the ftp server as you like. In addition to that you have plenty of configuration possibilities per user. Citrus uses the Apache ftp server implementation. +So for more details on configuration capabilities please consult the official Apache ftp server documentation.

+
+
+

The following listings show how to handle incoming commands representing different file operation such as store and retrieve. In the test we indicate the server response that we would link the server to respond with. Positive command results accept the client command and execute the command. As we have a fully qualified ftp server running the client can store, retrieve files and create and change directories. +All incoming commands result in a file system change in the user home directory. So stored files are stored in that working directory and retrieved files are read form that directory. In the test case we only receive the commands for validation purpose and to indicate server +success or failure response.

+
+
+

20.2.1. FTP server commands

+
+

Now we would like to use the server in a test case. Each operation that arrives on the server is automatically forwarded to the test case for validation. This means that we can +verify any command on the server by using a normal receive action in our test.

+
+
+
Java
+
+
@CitrusTest
+public void ftpMessageTest() {
+    $(receive(ftpServer)
+        .message(FtpMessage.command(FTPCmd.MKD).arguments("test"))
+    );
+
+    $(send(ftpServer)
+        .message(FtpMessage.success())
+    );
+}
+
+
+
+
XML
+
+
<test name="FtpMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="ftpServer">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>MKD</ftp:signal>
+                            <ftp:arguments>/test</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+
+        <send endpoint="ftpServer">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                        </ftp:command-result>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: FtpMessageTest
+actions:
+  - receive:
+      endpoint: "ftpServer"
+      message:
+        body: |
+          <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:signal>MKD</ftp:signal>
+            <ftp:arguments>/test</ftp:arguments>
+          </ftp:command>
+  - send:
+      endpoint: "ftpServer"
+      message:
+        body: |
+          <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:success>true</ftp:success>
+          </ftp:command-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="FtpMessageTest">
+        <actions>
+            <receive endpoint="ftpServer">
+                <message>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>MKD</ftp:signal>
+                            <ftp:arguments>/test</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </message>
+            </receive>
+
+            <send endpoint="ftpServer">
+                <message>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                        </ftp:command-result>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The receive action uses the command signal and argument for validation. In the sample above we receive a MKD signal with argument /test which implies a create directory command. The server respectively the +test case is now able to simulate the response for this command. We respond with a success command result. Following from that the Citrus FTP server implementation will create that directory in the user home directory +and respond to the client with a proper success message.

+
+
+

Of course you can also simulate error scenarios here. Just respond in the test with a negative command result.

+
+
+
+

20.2.2. Store files

+
+

Clients are able to store files on the server component. Each file store operation is executed in the user home directory when the command result is successful. In a test you can verify the STOR signal coming from the client.

+
+
+
Java
+
+
@CitrusTest
+public void ftpMessageTest() {
+    $(receive(ftpServer)
+        .message(FtpMessage.command(FTPCmd.STOR).arguments("/test/hello.txt"))
+    );
+
+    $(send(ftpServer)
+        .message(FtpMessage.success())
+    );
+}
+
+
+
+
XML
+
+
<test name="FtpMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="ftpServer">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>STOR</ftp:signal>
+                            <ftp:arguments>/test/hello.txt</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+
+        <send endpoint="ftpServer">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                        </ftp:command-result>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: FtpMessageTest
+actions:
+  - receive:
+      endpoint: "ftpServer"
+      message:
+        body: |
+          <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:signal>STOR</ftp:signal>
+            <ftp:arguments>/test/hello.txt</ftp:arguments>
+          </ftp:command>
+  - send:
+      endpoint: "ftpServer"
+      message:
+        body: |
+          <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:success>true</ftp:success>
+          </ftp:command-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="FtpMessageTest">
+        <actions>
+            <receive endpoint="ftpServer">
+                <message>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>STOR</ftp:signal>
+                            <ftp:arguments>/test/hello.txt</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </message>
+            </receive>
+
+            <send endpoint="ftpServer">
+                <message>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                        </ftp:command-result>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

After that you should find a new file in the user home directory with the given file path. The file transfer is automatically handled by the Citrus FTP server component.

+
+
+
+

20.2.3. Retrieve files

+
+

Clients should be able to get files from the server by using get/retrieve commands. In the request the client needs to give the target file path based on the user home directory.

+
+
+
Java
+
+
@CitrusTest
+public void ftpMessageTest() {
+    $(receive(ftpServer)
+        .message(FtpMessage.command(FTPCmd.RETR).arguments("/test/hello.txt"))
+    );
+
+    $(send(ftpServer)
+        .message(FtpMessage.success())
+    );
+}
+
+
+
+
XML
+
+
<test name="FtpMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="ftpServer">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>RETR</ftp:signal>
+                            <ftp:arguments>/test/hello.txt</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+
+        <send endpoint="ftpServer">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                        </ftp:command-result>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: FtpMessageTest
+actions:
+  - receive:
+      endpoint: "ftpServer"
+      message:
+        body: |
+          <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:signal>RETR</ftp:signal>
+            <ftp:arguments>/test/hello.txt</ftp:arguments>
+          </ftp:command>
+  - send:
+      endpoint: "ftpServer"
+      message:
+        body: |
+          <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:success>true</ftp:success>
+          </ftp:command-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="FtpMessageTest">
+        <actions>
+            <receive endpoint="ftpServer">
+                <message>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>RETR</ftp:signal>
+                            <ftp:arguments>/test/hello.txt</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </message>
+            </receive>
+
+            <send endpoint="ftpServer">
+                <message>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                        </ftp:command-result>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The file request is verified with proper signal and arguments. When the server command result is positive the Citrus FTP server will transfer the file content to the calling client.

+
+
+
+

20.2.4. List files

+
+

When clients request for listing files on the server we get a list command on the server.

+
+
+
Java
+
+
@CitrusTest
+public void ftpMessageTest() {
+    $(receive(ftpServer)
+        .message(FtpMessage.command(FTPCmd.LIST).arguments("test"))
+    );
+
+    $(send(ftpServer)
+        .message(FtpMessage.success())
+    );
+}
+
+
+
+
XML
+
+
<test name="FtpMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="ftpServer">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>LIST</ftp:signal>
+                            <ftp:arguments>test</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+
+        <send endpoint="ftpServer">
+            <message>
+                <body>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                        </ftp:command-result>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: FtpMessageTest
+actions:
+  - receive:
+      endpoint: "ftpServer"
+      message:
+        body: |
+          <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:signal>LIST</ftp:signal>
+            <ftp:arguments>test</ftp:arguments>
+          </ftp:command>
+  - send:
+      endpoint: "ftpServer"
+      message:
+        body: |
+          <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+            <ftp:success>true</ftp:success>
+          </ftp:command-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="FtpMessageTest">
+        <actions>
+            <receive endpoint="ftpServer">
+                <message>
+                    <payload>
+                        <ftp:command xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:signal>LIST</ftp:signal>
+                            <ftp:arguments>test</ftp:arguments>
+                        </ftp:command>
+                    </payload>
+                </message>
+            </receive>
+
+            <send endpoint="ftpServer">
+                <message>
+                    <payload>
+                        <ftp:command-result xmlns:ftp="http://www.citrusframework.org/schema/ftp/message">
+                            <ftp:success>true</ftp:success>
+                        </ftp:command-result>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

As you can see the list command is verified with proper signal and arguments that specifies the target folder to list the files for. When the command result is positive the +FTP server implementation will send back a proper list command result for that given directory in the user home directory.

+
+
+
+
+
+
+

21. SFTP/SCP support

+
+
+

With Citrus it is possible to start your own sftp server for accepting incoming client requests. You can also use Citrus as a SFTP client to send FTP commands. The next sections deal with SFTP connectivity.

+
+
+ + + + + +
+ + +The SFTP components in Citrus are maintained in their own Maven module. So you should add the module as Maven dependency to your project accordingly. +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-ftp</artifactId>
+  <version>2.7.6</version>
+</dependency>
+
+
+
+

As Citrus provides a customized SFTP configuration schema for the Spring application context configuration files we have to add name to the top level beans element. Simply include the sftp-config namespace in the configuration XML files as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:citrus="http://www.citrusframework.org/schema/config"
+    xmlns:citrus-sftp="http://www.citrusframework.org/schema/sftp/config"
+    xsi:schemaLocation="
+    http://www.springframework.org/schema/beans
+    http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://www.citrusframework.org/schema/config
+    http://www.citrusframework.org/schema/config/citrus-config.xsd
+    http://www.citrusframework.org/schema/http/config
+    http://www.citrusframework.org/schema/sftp/config/citrus-sftp-config.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

Now we are ready to use the customized Citrus SFTP configuration elements with the citrus-sftp namespace prefix.

+
+
+

21.1. SFTP client

+
+

We want to use Citrus to connect to some FTP server using secure file transfer and authentication. Citrus offers a client component doing exactly this SFTP client connection.

+
+
+
XML
+
+
<citrus-sftp:client id="sftpClient"
+           strict-host-checking="false"
+           port="2222"
+           username="citrus"
+           private-key-path="classpath:ssh/citrus.priv"
+           timeout="10000"/>
+
+
+
+
Java
+
+
@Bean
+public SftpClient sftpClient() {
+    return CitrusEndpoints.sftp()
+            .client()
+            .strictHostChecking(false)
+            .port(2222)
+            .username("citrus")
+            .privateKeyPath("classpath:ssh/citrus.priv")
+            .build();
+}
+
+
+
+

The configuration above describes a Citrus sftp client. The sftp-client connects to the server using the user credentials +and/or the private key authentication. The client will automatically authenticate to the server when opening a new connection. +As the Citrus stfp client supports various authentication methods, the following order is default: publickey,password,keyboard-interactive. +You’re able to configure the default order with the preferred-authentications attribute in XML or the +preferredAuthentications method in Java.

+
+
+
XML
+
+
<citrus-sftp:client id="sftpClient"
+           strict-host-checking="false"
+           port="2222"
+           username="citrus"
+           private-key-path="classpath:ssh/citrus.priv",
+           preferred-authentications="publickey,password,gssapi-with-mic,keyboard-interactive"
+           timeout="10000"/>
+
+
+
+
Java
+
+
@Bean
+public SftpClient sftpClient() {
+    return CitrusEndpoints.sftp()
+            .client()
+            .strictHostChecking(false)
+            .port(2222)
+            .username("citrus")
+            .privateKeyPath("classpath:ssh/citrus.priv")
+            .preferredAuthentications("publickey,password,gssapi-with-mic,keyboard-interactive")
+            .build();
+}
+
+
+
+

21.1.1. SFTP client commands

+
+

In a test case you are now able to use the client to push commands to the server.

+
+
+
XML DSL
+
+
<send endpoint="sftpClient">
+  <message>
+    <payload>
+      <ftp:command>
+        <ftp:signal>MKD</ftp:signal>
+        <ftp:arguments>test</ftp:arguments>
+      </ftp:command>
+    </payload>
+  </message>
+</send>
+
+<receive endpoint="sftpClient">
+  <message>
+    <payload>
+      <ftp:command-result>
+        <ftp:success>true</ftp:success>
+        <ftp:reply-code>257</ftp:reply-code>
+        <ftp:reply-string>257 Pathname created</ftp:reply-string>
+      </ftp:command-result>
+    </payload>
+  </message>
+</receive>
+
+
+
+
Java DSL
+
+
send(sftpClient)
+    .message(FtpMessage.command(FTPCmd.MKD).arguments("test"));
+
+CommandResult result = new CommandResult();
+result.setSuccess(true);
+result.setReplyCode(String.valueOf(257));
+result.setReplyString("257 Pathname created");
+
+receive(sftpClient)
+    .message(FtpMessage.result(result));
+
+
+
+

As you can see most of the sftp communication parameters are specified in a ftp command message. Citrus automatically converts those information to proper FTP commands and response messages.

+
+
+
+

21.1.2. Store files

+
+

The client is able to store files on the server using file transfer.

+
+
+
XML DSL
+
+
<send endpoint="sftpClient">
+  <message>
+    <payload>
+      <ftp:put-command>
+        <ftp:file path="test/hello.txt" type="ASCII"/>
+        <ftp:target path="/test/hello.txt"/>
+      </ftp:put-command>
+    </payload>
+  </message>
+</send>
+
+<receive endpoint="sftpClient">
+  <message>
+    <payload>
+      <ftp:put-command-result>
+        <ftp:success>true</ftp:success>
+        <ftp:reply-code>226</ftp:reply-code>
+        <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+      </ftp:put-command-result>
+    </payload>
+  </message>
+</receive>
+
+
+
+
Java DSL
+
+
send(sftpClient)
+        .message(FtpMessage.put("test/hello.txt", DataType.ASCII).arguments(""));
+
+PutCommandResult result = new PutCommandResult();
+        result.setSuccess(true);
+        result.setReplyCode(String.valueOf(226));
+        result.setReplyString("@contains(Transfer complete)@");
+
+receive(sftpClient)
+        .message(FtpMessage.result(result));
+
+
+
+

The file store operation uses the put command as message payload when sending the file request. The file content is loaded from external file resource. You can choose the transfer type ASCII and BINARY. +When the file is stored on server side we receive a success result message with respective reply code and string for validation.

+
+
+
+

21.1.3. Retrieve files

+
+

We are able to retrieve files from a SFTP server. We need to specify the target file path that we want to get on the server user home directory.

+
+
+
XML DSL
+
+
<send endpoint="sftpClient">
+  <message>
+    <payload>
+      <ftp:get-command>
+        <ftp:file path="test/hello.txt" type="ASCII"/>
+        <ftp:target path="target/test/hello.txt"/>
+      </ftp:get-command>
+    </payload>
+  </message>
+</send>
+
+<receive endpoint="sftpClient">
+  <message>
+    <payload>
+      <ftp:get-command-result>
+        <ftp:success>true</ftp:success>
+        <ftp:reply-code>226</ftp:reply-code>
+        <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+        <ftp:file path="target/test/hello.txt">
+          <ftp:data>citrus:readFile('classpath:test/hello.txt')</ftp:data>
+        </ftp:file>
+      </ftp:get-command-result>
+    </payload>
+  </message>
+</receive>
+
+
+
+
Java DSL
+
+
send(sftpClient)
+        .message(FtpMessage.get("test/hello.txt", "target/test/hello.txt", DataType.ASCII));
+
+receive(sftpClient)
+        .message(FtpMessage.result(getRetrieveFileCommandResult("target/test/hello.txt", new ClassPathResource("test/hello.txt"))));
+
+
+
+
+
private GetCommandResult getRetrieveFileCommandResult(String path, Resource content) throws IOException {
+    GetCommandResult result = new GetCommandResult();
+    result.setSuccess(true);
+    result.setReplyCode(String.valueOf(226));
+    result.setReplyString("@contains('Transfer complete')@");
+
+    GetCommandResult.File entryResult = new GetCommandResult.File();
+    entryResult.setPath(path);
+    entryResult.setData(FileUtils.readToString(content));
+    result.setFile(entryResult);
+
+    return result;
+}
+
+
+
+

When file transfer is complete we are able to verify the file content in a command result. The file content is provided as data string.

+
+
+
+

21.1.4. List files

+
+

Listing files on the server is possible with the list command.

+
+
+
XML
+
+
<send endpoint="sftpClient">
+  <message>
+    <payload>
+      <ftp:list-command>
+        <ftp:target path="test" />
+      </ftp:list-command>
+    </payload>
+  </message>
+</send>
+
+<receive endpoint="sftpClient">
+  <message>
+    <payload>
+      <ftp:list-command-result>
+        <ftp:success>true</ftp:success>
+        <ftp:reply-code>150</ftp:reply-code>
+        <ftp:reply-string>List files complete</ftp:reply-string>
+        <ftp:files>
+          <ftp:file path="."/>
+          <ftp:file path=".."/>
+          <ftp:file path="hello.txt"/>
+        </ftp:files>
+      </ftp:list-command-result>
+    </payload>
+  </message>
+</receive>
+
+
+
+
Java
+
+
send(sftpClient)
+        .message(FtpMessage.list("test"));
+
+receive(sftpClient)
+        .message(FtpMessage.result(getListCommandResult("hello.txt")));
+
+
+
+
+
private ListCommandResult getListCommandResult(String ... fileNames) {
+    ListCommandResult result = new ListCommandResult();
+    result.setSuccess(true);
+    result.setReplyCode(String.valueOf(226));
+    result.setReplyString("@contains('Closing data connection')@");
+
+    ListCommandResult.Files.File currentDir = new ListCommandResult.Files.File();
+    currentDir.setPath(".");
+    expectedFiles.getFiles().add(currentDir);
+
+    ListCommandResult.Files.File parentDir = new ListCommandResult.Files.File();
+    parentDir.setPath("..");
+    expectedFiles.getFiles().add(parentDir);
+
+    ListCommandResult.Files expectedFiles = new ListCommandResult.Files();
+
+    for (String fileName : fileNames) {
+        ListCommandResult.Files.File entry = new ListCommandResult.Files.File();
+        entry.setPath(fileName);
+        expectedFiles.getFiles().add(entry);
+    }
+
+    result.setFiles(expectedFiles);
+
+    return result;
+}
+
+
+
+

Listing files results in a command result that gives us the list of files on the server directory. We are able to verify that list with respective file paths.

+
+
+
+
+

21.2. SFTP server

+
+

Now that we are able to access SFTP as a client we might also want to simulate the server side. Therefore Citrus offers a server component that is listening on a port for incoming SFTP connections. The server has a default home directory on the local file system specified. But you can also define home directories per user. For now let us have a look at the server configuration component:

+
+
+
XML
+
+
<citrus-sftp:server id="sftpServer"
+                   port="2222"
+                   auto-start="true"
+                   user="citrus"
+                   password="admin"
+                   allowed-key-path="classpath:ssh/citrus_pub.pem"/>
+
+
+
+
Java
+
+
@Bean
+public SftpServer sftpServer() {
+    return CitrusEndpoints.sftp()
+            .server()
+            .port(2222)
+            .autoStart(true)
+            .user("citrus")
+            .password("admin")
+            .allowedKeyPath("classpath:ssh/citrus_pub.pem")
+            .build();
+}
+
+
+
+

The sftpServer is a small but fully qualified SFTP server implementation in Citrus. The server receives a user that defines the user account and its home directory. All commands +will be performed in this user home directory. You can set the user home directory using the userHomePath attribute on the server. By default this is a directory located in ${user.dir}/target/{serverName}/home/{user}.

+
+
+

In case you want to setup some files in that directory in order to provide it to clients, please copy those files to that home directory prior to the test. The server adds the public key to the list of allowed keys.

+
+
+

The following listings show how to handle incoming commands representing different file operation such as store and retrieve. In the test we indicate the server response that we would link the server to respond with. Positive command results accept the client command and execute the command. As we have a fully qualified sftp server running the client can store, retrieve files and create and change directories. +All incoming commands result in a file system change in the user home directory. So stored files are stored in that working directory and retrieved files are read form that directory. In the test case we only receive the commands for validation purpose and to indicate server +success or failure response.

+
+
+

21.2.1. SFTP server commands

+
+

Now we would like to use the server in a test case. Each operation that arrives on the server is automatically forwarded to the test case for validation. This means that we can +verify any command on the server by using a normal receive action in our test.

+
+
+
XML DSL
+
+
<receive endpoint="sftpServer">
+  <message>
+    <payload>
+      <ftp:command>
+        <ftp:signal>MKD</ftp:signal>
+        <ftp:arguments>/test</ftp:arguments>
+      </ftp:command>
+    </payload>
+  </message>
+</receive>
+
+<send endpoint="sftpServer">
+  <message>
+    <payload>
+      <ftp:command-result>
+        <ftp:success>true</ftp:success>
+      </ftp:command-result>
+    </payload>
+  </message>
+</send>
+
+
+
+
Java DSL
+
+
receive(sftpServer)
+    .message(FtpMessage.command(FTPCmd.MKD).arguments("test"));
+
+send(sftpServer)
+    .message(FtpMessage.success());
+
+
+
+

The receive action uses the command signal and argument for validation. In the sample above we receive a MKD signal with argument /test which implies a create directory command. The server respectively the +test case is now able to simulate the response for this command. We respond with a success command result. Following from that the Citrus SFTP server implementation will create that directory in the user home directory +and respond to the client with a proper success message.

+
+
+

Of course you can also simulate error scenarios here. Just respond in the test with a negative command result.

+
+
+
+

21.2.2. Store files

+
+

Clients are able to store files on the server component. Each file store operation is executed in the user home directory when the command result is successful. In a test you can verify the STOR signal coming from the client.

+
+
+
XML DSL
+
+
<echo>
+  <message>Store file on server</message>
+</echo>
+
+<receive endpoint="sftpServer">
+  <message>
+    <payload>
+      <ftp:put-command>
+        <ftp:signal>STOR</ftp:signal>
+        <ftp:file path="@ignore@" type="ASCII"/>
+        <ftp:target path="/test/hello.txt"/>
+      </ftp:put-command>
+    </payload>
+  </message>
+</receive>
+
+<send endpoint="sftpServer">
+  <message>
+    <payload>
+      <ftp:command-result>
+        <ftp:success>true</ftp:success>
+      </ftp:command-result>
+    </payload>
+  </message>
+</send>
+
+
+
+
Java DSL
+
+
receive(sftpServer)
+        .message(put("@ignore@","/test/hello.txt", DataType.ASCII));
+
+send(sftpServer)
+        .message(FtpMessage.success());
+
+
+
+

After that you should find a new file in the user home directory with the given file path. The file transfer is automatically handled by the Citrus SFTP server component.

+
+
+
+

21.2.3. Retrieve files

+
+

Clients should be able to get files from the server by using get/retrieve commands. In the request the client needs to give the target file path based on the user home directory.

+
+
+
XML DSL
+
+
<echo>
+  <message>Retrieve file from server</message>
+</echo>
+
+<receive endpoint="sftpServer">
+  <message>
+    <payload>
+      <ftp:get-command>
+        <ftp:signal>RETR</ftp:signal>
+        <ftp:file path="/test/hello.txt" type="ASCII"/>
+        <ftp:target path="@ignore@"/>
+      </ftp:get-command>
+    </payload>
+  </message>
+</receive>
+
+<send endpoint="sftpServer">
+  <message>
+    <payload>
+      <ftp:command-result>
+        <ftp:success>true</ftp:success>
+      </ftp:command-result>
+    </payload>
+  </message>
+</send>
+
+
+
+
Java DSL
+
+
receive(sftpServer)
+        .message(FtpMessage.get("/test/hello.txt", "@ignore@", DataType.ASCII));
+
+send(sftpServer)
+        .message(FtpMessage.success());
+
+
+
+

The file request is verified with proper signal and arguments. When the server command result is positive the Citrus SFTP server will transfer the file content to the calling client.

+
+
+
+

21.2.4. List files

+
+

When clients request for listing files on the server we get a list command on the server.

+
+
+
XML DSL
+
+
<receive endpoint="sftpServer">
+  <message>
+    <payload>
+      <ftp:command>
+        <ftp:signal>LIST</ftp:signal>
+        <ftp:arguments>test</ftp:arguments>
+      </ftp:command>
+    </payload>
+  </message>
+</receive>
+
+<send endpoint="sftpServer">
+  <message>
+    <payload>
+      <ftp:command-result>
+        <ftp:success>true</ftp:success>
+      </ftp:command-result>
+    </payload>
+  </message>
+</send>
+
+
+
+
Java DSL
+
+
receive(sftpServer)
+        .message(FtpMessage.command(FTPCmd.LIST).arguments("test"));
+
+send(sftpServer)
+        .message(FtpMessage.success());
+
+
+
+

As you can see the list command is verified with proper signal and arguments that specifies the target folder to list the files for. When the command result is positive the +SFTP server implementation will send back a proper list command result for that given directory in the user home directory.

+
+
+
+
+

21.3. SCP client

+
+

As Citrus provides a customized SCP configuration schema for the Spring application context configuration files we have to add name to the top level beans element. Simply include the scp-config namespace in the configuration XML files as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:citrus="http://www.citrusframework.org/schema/config"
+    xmlns:citrus-scp="http://www.citrusframework.org/schema/scp/config"
+    xsi:schemaLocation="
+    http://www.springframework.org/schema/beans
+    http://www.springframework.org/schema/beans/spring-beans.xsd
+    http://www.citrusframework.org/schema/config
+    http://www.citrusframework.org/schema/config/citrus-config.xsd
+    http://www.citrusframework.org/schema/http/config
+    http://www.citrusframework.org/schema/scp/config/citrus-scp-config.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

Now we are ready to use the customized Citrus SCP configuration elements with the citrus-scp namespace prefix.

+
+
+

We want to use Citrus to connect to some FTP server using secure file copy with SCP. Citrus offers a client component doing exactly this SCP client connection.

+
+
+
XML
+
+
<citrus-scp:client id="scpClient"
+               port="2222"
+               username="citrus"
+               password="admin"
+               private-key-path="classpath:ssh/citrus.priv"/>
+
+
+
+
Java
+
+
@Bean
+public ScpClient scpClient() {
+    return CitrusEndpoints.scp()
+            .client()
+            .port(2222)
+            .username("citrus")
+            .password("admin")
+            .privateKeyPath("classpath:ssh/citrus.priv")
+            .build();
+}
+
+
+
+

The configuration above describes a Citrus scp client. The scp-client connects to the server using the user credentials and/or the private key authentication. The client will automatically authenticate to the server when opening a new connection.

+
+
+

21.3.1. Store files

+
+

The client is able to store files on the server using file transfer.

+
+
+
XML DSL
+
+
<send endpoint="scpClient">
+  <message>
+    <payload>
+      <ftp:put-command>
+        <ftp:file path="test/hello.txt" type="ASCII"/>
+        <ftp:target path="/test/hello.txt"/>
+      </ftp:put-command>
+    </payload>
+  </message>
+</send>
+
+<receive endpoint="scpClient">
+  <message>
+    <payload>
+      <ftp:put-command-result>
+        <ftp:success>true</ftp:success>
+        <ftp:reply-code>226</ftp:reply-code>
+        <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+      </ftp:put-command-result>
+    </payload>
+  </message>
+</receive>
+
+
+
+
Java DSL
+
+
send(scpClient)
+        .message(FtpMessage.put("test/hello.txt", DataType.ASCII).arguments(""));
+
+PutCommandResult result = new PutCommandResult();
+        result.setSuccess(true);
+        result.setReplyCode(String.valueOf(226));
+        result.setReplyString("@contains(Transfer complete)@");
+
+receive(scpClient)
+        .message(FtpMessage.result(result));
+
+
+
+

The file store operation uses the put command as message payload when sending the file request. The file content is loaded from external file resource. You can choose the transfer type ASCII and BINARY. +When the file is stored on server side we receive a success result message with respective reply code and string for validation.

+
+
+
+

21.3.2. Retrieve files

+
+

We are able to retrieve files from a SFTP server. We need to specify the target file path that we want to get on the server user home directory.

+
+
+
XML DSL
+
+
<send endpoint="scpClient">
+  <message>
+    <payload>
+      <ftp:get-command>
+        <ftp:file path="test/hello.txt" type="ASCII"/>
+        <ftp:target path="target/test/hello.txt"/>
+      </ftp:get-command>
+    </payload>
+  </message>
+</send>
+
+<receive endpoint="scpClient">
+  <message>
+    <payload>
+      <ftp:get-command-result>
+        <ftp:success>true</ftp:success>
+        <ftp:reply-code>226</ftp:reply-code>
+        <ftp:reply-string>@contains('Transfer complete')@</ftp:reply-string>
+        <ftp:file path="target/test/hello.txt">
+          <ftp:data>citrus:readFile('classpath:test/hello.txt')</ftp:data>
+        </ftp:file>
+      </ftp:get-command-result>
+    </payload>
+  </message>
+</receive>
+
+
+
+
Java DSL
+
+
send(scpClient)
+        .message(FtpMessage.get("test/hello.txt", "target/test/hello.txt", DataType.ASCII));
+
+receive(scpClient)
+        .message(FtpMessage.result(getRetrieveFileCommandResult("target/test/hello.txt", new ClassPathResource("test/hello.txt"))));
+
+
+
+
+
private GetCommandResult getRetrieveFileCommandResult(String path, Resource content) throws IOException {
+    GetCommandResult result = new GetCommandResult();
+    result.setSuccess(true);
+    result.setReplyCode(String.valueOf(226));
+    result.setReplyString("@contains('Transfer complete')@");
+
+    GetCommandResult.File entryResult = new GetCommandResult.File();
+    entryResult.setPath(path);
+    entryResult.setData(FileUtils.readToString(content));
+    result.setFile(entryResult);
+
+    return result;
+}
+
+
+
+

When file transfer is complete we are able to verify the file content in a command result. The file content is provided as data string.

+
+
+
+
+
+
+

22. File support

+
+
+

In chapter message-channels we have discussed the native Spring Integration channel support which enables Citrus to interact with all Spring Integration messaging adapter implementations. This is a fantastic way to extend Citrus for additional transports. This interaction now comes handy when writing and reading files from the file system in Citrus.

+
+
+

22.1. Write files

+
+

We want to use the Spring Integration file adapter for both reading and writing files with a local directory. Citrus can easily connect to this file adapter implementation with its message channel support. Citrus message sender and receiver speak to message channels that are connected to the Spring Integration file adapters.

+
+
+
+
<citrus-si:channel-endpoint id="fileEndpoint" channel="fileChannel"/>
+
+<file:outbound-channel-adapter id="fileOutboundAdapter"
+      channel="fileChannel"
+      directory="file:${some.directory.property}"/>
+
+<si:channel id="fileChannel"/>
+
+
+
+

The configuration above describes a Citrus message channel endpoint connected to a Spring Integration outbound file adapter that writes messages to a storage directory. With this combination you are able to write files to a directory in your Citrus test case. The test case uses the channel endpoint in its send action and the endpoint interacts with the Spring Integration file adapter so sending out the file.

+
+
+ + + + + +
+ + +The Spring Integration file adapter configuration components add a new namespace to our Spring application context. See this template which holds all necessary namespaces and schema locations: +
+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+        <beans xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:citrus="http://www.citrusframework.org/schema/config"
+        xmlns:si="http://www.springframework.org/schema/integration"
+        xmlns:file="http://www.springframework.org/schema/integration/file"
+        xsi:schemaLocation="http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/config
+        http://www.citrusframework.org/schema/config/citrus-config.xsd
+        http://www.springframework.org/schema/integration
+        http://www.springframework.org/schema/integration/spring-integration.xsd
+        http://www.springframework.org/schema/integration/file
+        http://www.springframework.org/schema/integration/file/spring-integration-file.xsd">
+        </beans>
+
+
+
+
+

22.2. Read files

+
+

The next program listing shows a possible inbound file communication. So the Spring Integration file inbound adapter will read files from a storage directory and publish the file contents to a message channel. Citrus can then receive those files as messages in a test case via the channel endpoint and validate the file contents for instance.

+
+
+
+
<file:inbound-channel-adapter  id="fileInboundAdapter"
+        channel="fileChannel"
+        directory="file:${some.directory.property}">
+    <si:poller fixed-rate="100"/>
+</file:inbound-channel-adapter>
+
+<si:channel id="fileChannel">
+    <si:queue capacity="25"/>
+    <si:interceptors>
+        <bean class="org.springframework.integration.transformer.MessageTransformingChannelInterceptor">
+            <constructor-arg>
+                <bean class="org.springframework.integration.file.transformer.FileToStringTransformer"/>
+            </constructor-arg>
+        </bean>
+    </si:interceptors>
+</si:channel>
+
+<citrus-si:channel-endpoint id="fileEndpoint" channel="fileChannel"/>
+
+
+
+ + + + + +
+ + +The file inbound adapter constructs Java file objects as the message payload by default. Citrus can only work on String message payloads. So we need a file transformer that converts the file objects to String payloads representing the file’s content. +
+
+
+

This file adapter example shows how easy Citrus can work hand in hand with Spring Integration adapter implementations. The message channel support is a fantastic way to extend the transport and protocol support in Citrus by connecting with the very good Spring Integration adapter implementations. Have a closer look at the Spring Integration project for more details and other adapter implementations that you can use with Citrus integration testing.

+
+
+
+
+
+

23. Selenium support

+
+
+

Selenium is a very popular tool for testing user interfaces with browser automation. Citrus is able to integrate with the Selenium Java API in order to execute Selenium commands.

+
+
+ + + + + +
+ + +The Selenium test components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-selenium</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

Citrus provides a "citrus-selenium" configuration namespace and schema definition for Selenium related components and actions. Include this namespace into your Spring configuration in order to use the Citrus Selenium configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:citrus-selenium="http://www.citrusframework.org/schema/selenium/config"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans
+       http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.citrusframework.org/schema/selenium/config
+       http://www.citrusframework.org/schema/selenium/config/citrus-selenium-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

After that you are able to use customized Citrus XML elements in order to define the Spring beans.

+
+
+

23.1. Selenium browser

+
+

Selenium uses browser automation in order to simulate the user interact with web applications. You can configure the Selenium browser and web driver as Spring bean.

+
+
+
+
<citrus-selenium:browser id="seleniumBrowser"
+                type="firefox"
+                start-page="http://citrusframework.org"/>
+
+
+
+

The Selenium browser component supports different browser types for the commonly used browsers out in the wild.

+
+
+
    +
  • +

    htmlunit

    +
  • +
  • +

    firefox

    +
  • +
  • +

    safari

    +
  • +
  • +

    chrome

    +
  • +
  • +

    googlechrome

    +
  • +
  • +

    internet explorer

    +
  • +
  • +

    edge

    +
  • +
  • +

    custom

    +
  • +
+
+
+

Html unit is the default browser type and represents a headless browser that executed without displaying the graphical user interface. In case you need a totally different browser or +you need to customize the Selenium web driver you can use the type="custom" in combination with a web driver reference:

+
+
+
+
<citrus-selenium:browser id="mySeleniumBrowser"
+                type="custom"
+                web-driver="operaWebDriver"/>
+
+<bean id="operaWebDriver" class="org.openqa.selenium.opera.OperaDriver"/>
+
+
+
+

Now Citrus is using the customized Selenium web driver implementation.

+
+
+ + + + + +
+ + +When using Firefox as browser you may also want to set the optional properties firefox-profile and version. +
+
+
+
+
<citrus-selenium:browser id="mySeleniumBrowser"
+                type="firefox"
+                firefox-profile="firefoxProfile"
+                version="FIREFOX_38"
+                start-page="http://citrusframework.org"/>
+
+<bean id="firefoxProfile" class="org.openqa.selenium.firefox.FirefoxProfile"/>
+
+
+
+

Now Citrus is able to execute Selenium operations as a user.

+
+
+
+

23.2. Selenium actions

+
+

We have several Citrus test actions each representing a Selenium command. These actions can be part of a Citrus test case. As a prerequisite we have to enable the Selenium specific test actions in our XML test as follows:

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:selenium="http://www.citrusframework.org/schema/selenium/testcase"
+        xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/selenium/testcase
+        http://www.citrusframework.org/schema/selenium/testcase/citrus-selenium-testcase.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

We added a special selenium namespace with prefix selenium: so now we can start to add Selenium test actions to the test case:

+
+
+
XML DSL
+
+
<testcase name="SeleniumCommandIT">
+    <actions>
+      <selenium:start browser="webBrowser"/>
+
+      <selenium:navigate page="http://localhost:8080"/>
+
+      <selenium:find>
+        <selenium:element tag-name="h1" text="Welcome!">
+          <selenium:styles>
+            <selenium:style name="font-size" value="40px"/>
+          </selenium:styles>
+        </selenium:element>
+      </selenium:find>
+
+      <selenium:click>
+        <selenium:element id="ok-button"/>
+      </selenium:click>
+    </actions>
+</testcase>
+
+
+
+

In this very simple example we first start the Selenium browser instance. After that we can continue to use Selenium commands without browser attribute explicitly set. Citrus +knows which browser instance is currently active and will automatically use this opened browser instance. Next in this example we find some element on the displayed page by its +tag-name and text. We also validate the element style font-size to meet the expected value 40px in this step.

+
+
+

In addition to that the example performs a click operation on the element with the id ok-button. Selenium supports element find operations on different properties:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+id + +

finds element based on the id attribute

+
+name + +

finds element based on the name attribute

+
+tag-name + +

finds element based on the tag name

+
+class-name + +

finds element based on the css class name

+
+link-text + +

finds link element based on the link-text

+
+xpath + +

finds element based on XPath evaluation in the DOM

+
+
+
+

Based on that we can execute several Selenium commands in a test case and validate the results such as web elements. Citrus supports the following Selenium commands with respective test actions:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+selenium:start + +

Start the browser instance

+
+selenium:find + +

Finds element on current page and validates element properties

+
+selenium:click + +

Performs click operation on element

+
+selenium:hover + +

Performs hover operation on element

+
+selenium:navigate + +

Navigates to new page url (including history back, forward and refresh)

+
+selenium:set-input + +

Finds input element and sets value

+
+selenium:check-input + +

Finds checkbox element and sets/unsets value

+
+selenium:dropdown-select + +

Finds dropdown element and selects single or multiple value/s

+
+selenium:fill-form + +

Fills form with given values and optionally submits form afterwards. Supports setting multiple fields at the same time.

+
+selenium:page + +

Instantiate page object with dependency injection and execute page action with verification

+
+selenium:open + +

Open new window

+
+selenium:close + +

Close window by given name

+
+selenium:switch + +

Switch focus to window with given name

+
+selenium:wait-until + +

Wait for element to be hidden or visible

+
+selenium:alert + +

Access current alert dialog (with action access or dismiss)

+
+selenium:screenshot + +

Makes screenshot of current page

+
+selenium:store-file + +

Store file to temporary browser directory

+
+selenium:get-stored-file + +

Gets stored file from temporary browser directory

+
+selenium:javascript + +

Execute Javascript code in browser

+
+selenium:clear-cache + +

Clear browser cache and all cookies

+
+selenium:stop + +

Stops the browser instance

+
+
+
+

Up to now we have only used the Citrus XML DSL. Of course all Selenium commands are also available in Java DSL as the next example shows.

+
+
+
Java DSL
+
+
@Autowired
+private SeleniumBrowser seleniumBrowser;
+
+@CitrusTest
+public void seleniumTest() {
+    selenium().start(seleniumBrowser);
+
+    selenium().navigate("http://localhost:8080");
+
+    selenium().find().element(By.id("header"));
+                .tagName("h1")
+                .enabled(true)
+                .displayed(true)
+                .text("Welcome!")
+                .style("font-size", "40px");
+
+    selenium().click().element(By.linkText("Click Me!"));
+}
+
+
+
+

Now let’s have a closer look at the different Selenium test actions supported in Citrus.

+
+
+
+

23.3. Start/stop browser

+
+

You can start and stop the browser instance with a test action. This instantiates a new browser window and prepares everything for interacting with the web +interface.

+
+
+
XML DSL
+
+
<selenium:start browser="seleniumBrowser"/>
+
+<!-- Do something in browser -->
+
+<selenium:stop browser="seleniumBrowser"/>
+
+
+
+
Java DSL
+
+
selenium().start(seleniumBrowser);
+
+// do something in browser
+
+selenium().stop(seleniumBrowser);
+
+
+
+

After starting a browser instance Citrus will automatically use this very same browser instance in all further Selenium actions. This mechanism is based on a test variable (selenium_browser) that +is automatically set. All other test actions are able to load the current browser instance by reading this test variable before execution. In case you need to explicitly use +a different browser instance than the active instance you can add the browser attribute to all Selenium test actions.

+
+
+ + + + + +
+ + +It is a good idea to start and stop the browser instance before each test case. This makes sure that tests are also executable in single run and it always sets up a new browser instance so tests +will not influence each other. +
+
+
+
+

23.4. Find

+
+

The find element test action searches for an element on the current page. The element is specified by one of the following settings:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+id + +

finds element based on the id attribute

+
+name + +

finds element based on the name attribute

+
+tag-name + +

finds element based on the tag name

+
+class-name + +

finds element based on the css class name

+
+link-text + +

finds link element based on the link-text

+
+xpath + +

finds element based on XPath evaluation in the DOM

+
+
+
+

The find element action will automatically fail in case there is no such element on the current page. In case the element is found you can add additional attributes and properties +for further element validation:

+
+
+
XML DSL
+
+
<selenium:find>
+  <selenium:element tag-name="h1" text="Welcome!">
+    <selenium:styles>
+      <selenium:style name="font-size" value="40px"/>
+    </selenium:styles>
+  </selenium:element>
+</selenium:find>
+
+<selenium:find>
+  <selenium:element id="ok-button" text="Ok" enabled="true" displayed="true">
+    <selenium:attributes>
+      <selenium:attribute name="type" value="submit"/>
+    </selenium:attributes>
+  </selenium:element>
+</selenium:find>
+
+
+
+
Java DSL
+
+
selenium().find().element(By.tagName("h1"))
+        .text("Welcome!")
+        .style("font-size", "40px");
+
+selenium().find().element(By.id("ok-button"))
+        .tagName("button")
+        .enabled(true)
+        .displayed(true)
+        .text("Ok")
+        .style("color", "red")
+        .attribute("type", "submit");
+
+
+
+

The example above finds the h1 element by its tag name and validates the text and css style attributes. Secondly the ok-button is validated with expected +enabled, displayed, text, style and attribute values. The elements must be present on the current page and all expected element properties have to match. Otherwise the test action and the test case +is failing with validation errors.

+
+
+
+

23.5. Click

+
+

The action performs a click operation on the element.

+
+
+
XML DSL
+
+
<selenium:click>
+  <selenium:element link-text="Click Me!"/>
+</selenium:click>
+
+
+
+
Java DSL
+
+
selenium().click().element(By.linkText("Click Me!"));
+
+
+
+
+

23.6. Hover

+
+

The action performs a hover operation on the element.

+
+
+
XML DSL
+
+
<selenium:hover>
+  <selenium:element link-text="Find Me!"/>
+</selenium:hover>
+
+
+
+
Java DSL
+
+
selenium().hover().element(By.linkText("Find Me!"));
+
+
+
+
+

23.7. Form input actions

+
+

The following actions are used to access form input elements such as text fields, checkboxes and dropdown lists.

+
+
+
XML DSL
+
+
<selenium:set-input value="Citrus">
+  <selenium:element name="username"/>
+</selenium:set-input>
+
+<selenium:check-input checked="true">
+  <selenium:element xpath="//input[@type='checkbox']"/>
+</selenium:check-input>
+
+<selenium:dropdown-select option="happy">
+  <selenium:element id="user-mood"/>
+</selenium:dropdown-select>
+
+
+
+
Java DSL
+
+
selenium().setInput("Citrus").element(By.name("username"));
+selenium().checkInput(true).element(By.xpath("//input[@type='checkbox']"));
+
+selenium().select("happy").element(By.id("user-mood"));
+
+
+
+

The actions above select dropdown options and set user input on text fields and checkboxes. As usual the form elements are selected by some properties such as +ids, names or xpath expressions.

+
+
+
+

23.8. Fill form

+
+

The fill form action sets multiple form fields with given values and optionally submits the form afterwards.

+
+
+
XML DSL
+
+
<selenium:fill-form submit="save">
+  <selenium:fields>
+    <selenium:field id="username" value="foo_user"/>
+    <selenium:field id="password" value="${secret}"/>
+  </selenium:fields>
+</selenium:fill-form>
+
+
+
+
Java DSL
+
+
selenium().fillForm()
+        .field("username", "foo_user")
+        .field("password", "${secret}")
+        .submit("save");
+
+
+
+

The actions above set the form fields identified by its id and sets the given values. The actions supports input fields, checkboxes and drop-down select controls. Optionally the form gets submitted by clicking on the given submit button once all fields are set.

+
+
+

The user also has the opportunity to set the form fields via Json object where each property in the Json object represents a form field.

+
+
+
XML DSL
+
+
<selenium:fill-form submit="save">
+    <selenium:json>
+      {
+        "username": "foo_user",
+        "password": "secret"
+      }
+    </selenium:json>
+</selenium:fill-form>
+
+
+
+
Java DSL
+
+
selenium().fillForm()
+        .fromJson("""
+            {
+              "username": "foo_user",
+              "password": "secret"
+            }
+        """)
+        .submit(By.id("save");
+
+
+
+

This will set the form fields username and password with the given values before submitting the form.

+
+
+
+

23.9. Page actions

+
+

Page objects are a well known pattern when using Selenium. The page objects define elements that the page is working with. In addition to that the +page objects define actions that can be executed from outside. This object-oriented approach for accessing pages and their elements is a very good idea. +Let’s have a look at a sample page object.

+
+
+
+
public class UserFormPage implements WebPage {
+
+    @FindBy(id = "userForm")
+    private WebElement form;
+
+    @FindBy(id = "username")
+    private WebElement userName;
+
+    /**
+     * Sets the user name.
+     */
+    public void setUserName(String value, TestContext context) {
+        userName.clear();
+        userName.sendKeys(value);
+    }
+
+    /**
+     * Submits the form.
+     * @param context
+     */
+    public void submit(TestContext context) {
+        form.submit();
+    }
+}
+
+
+
+

As you can see the page object is a Java POJO that implements the WebPage interface. The page defines WebElement members. These are automatically +injected by Citrus and Selenium based on the FindBy annotation. Now the test case is able to load that page object and execute some action methods on the page such as +setUserName or submit.

+
+
+
XML DSL
+
+
<selenium:page type="org.citrusframework.selenium.pages.UserFormPage"
+               action="setUserName">
+  <selenium:arguments>
+    <selenium:argument>Citrus</selenium:argument>
+  </selenium:arguments>
+</selenium:page>
+
+<selenium:page type="org.citrusframework.selenium.pages.UserFormPage"
+               action="submit"/>
+
+
+
+
Java DSL
+
+
selenium().page(UserFormPage.class).argument("Citrus").execute("setUserName");
+
+selenium().page(UserFormPage.class).execute("submit");
+
+
+
+

The page object class is automatically loaded and instantiated with dependency injection for all FindBy annotated web elements. After that the action method is executed. +The action methods can also have method parameters as seen in setUserName. The value parameter is automatically set when calling the method.

+
+
+

Methods can also use the optional parameter TestContext. With this context you can access the current test context with all test variables for instance. This method parameter +should always be the last parameter.

+
+
+
+

23.10. Page validation

+
+

We can also use page object for validation purpose. The page object is loaded and instantiated as described in previous section. Then the page validator +is called. The validator performs assertions and validation operations with the page object. Let’s see a sample page validator:

+
+
+
+
public class UserFormValidator implements PageValidator<UserFormPage> {
+
+    @Override
+    public void validate(UserFormPage webPage, SeleniumBrowser browser, TestContext context) {
+        Assert.isTrue(webPage.getUserName() != null);
+        Assert.isTrue(StringUtils.hasText(webPage.getUserName().getAttribute("value")));
+    }
+}
+
+
+
+

The page validator is called with the web page instance, the browser and the test context. The validator should assert page objects and web elements for +validation purpose. In a test case we can call the validator to validate the page.

+
+
+
XML DSL
+
+
<bean id ="userFormValidator" class="org.citrusframework.selenium.pages.UserFormValidator"/>
+
+<selenium:page type="org.citrusframework.selenium.pages.UserFormPage"
+               action="validate"
+               validator="userFormValidator"/>
+
+
+
+
Java DSL
+
+
@Autowired
+private UserFormValidator userFormValidator;
+
+selenium().page(UserFormPage.class).execute("validate").validator(userFormValidator);
+
+
+
+

Instead of using a separate validator class you can also put the validation method to the page object itself. Then page object and validation is +done within the same class:

+
+
+
+
public class UserFormPage implements WebPage, PageValidator<UserFormPage> {
+
+    @FindBy(id = "userForm")
+    private WebElement form;
+
+    @FindBy(id = "username")
+    private WebElement userName;
+
+    /**
+     * Sets the user name.
+     */
+    public void setUserName(String value, TestContext context) {
+        userName.clear();
+        userName.sendKeys(value);
+    }
+
+    /**
+     * Submits the form.
+     * @param context
+     */
+    public void submit(TestContext context) {
+        form.submit();
+    }
+
+    @Override
+    public void validate(UserFormPage webPage, SeleniumBrowser browser, TestContext context) {
+        Assert.isTrue(userName != null);
+        Assert.isTrue(StringUtils.hasText(userName.getAttribute("value")));
+        Assert.isTrue(form != null);
+    }
+}
+
+
+
+
XML DSL
+
+
<selenium:page type="org.citrusframework.selenium.pages.UserFormPage"
+               action="validate"/>
+
+
+
+
Java DSL
+
+
selenium().page(UserFormPage.class).execute("validate");
+
+
+
+
+

23.11. Wait

+
+

Sometimes it is required to wait for an element to appear or disappear on the current page. The wait action will wait a given time for the element status +to be visible or hidden.

+
+
+
XML DSL
+
+
<selenium:wait until="hidden">
+    <selenium:element id="info-dialog"/>
+</selenium:wait>
+
+
+
+
Java DSL
+
+
selenium().waitUntil().hidden().element(By.id("info-dialog"));
+
+
+
+

The example waits for the element info-dialog to disappear. The time to wait is 5000 milliseconds by default. You can set the timeout on the action. Due +to Selenium limitations the minimum wait time is 1000 milliseconds.

+
+
+
+ +
+

The action navigates to a new page either by using a new relative path or a complete new Http URL.

+
+
+
XML DSL
+
+
<selenium:navigate page="http://localhost:8080"/>
+
+<selenium:navigate page="help"/>
+
+
+
+
Java DSL
+
+
selenium().navigate("http://localhost:8080");
+
+selenium().navigate("help");
+
+
+
+

The sample above describes a new page with new Http URL. The browser will navigate to this new page. All further Selenium actions are performed on this new +page. The second navigation action opens the relative page help so the new page URL is http://localhost:8080/help.

+
+
+

Navigation is always done on the active browser window. You can manage the opened windows as described in next section.

+
+
+
+

23.13. Window actions

+
+

Selenium is able to manage multiple windows. So you can open, close and switch active windows in a Citrus test.

+
+
+
XML DSL
+
+
<selenium:open-window name="my_window"/>
+<selenium:switch-window name="my_window"/>
+<selenium:close-window name="my_window"/>
+
+
+
+
Java DSL
+
+
selenium().open().window("my_window");
+selenium().focus().window("my_window");
+selenium().close().window("my_window");
+
+
+
+

When a new window is opened Selenium creates a window handle for us. This window handle is saved as test variable using a given window name. So after opening the window you can access the +window by its name in further actions. All upcoming Selenium actions will take place in this new active window. Of course the test actions will fail as soon as the window with that given +name is missing. Citrus uses default window names that are automatically used as test variables:

+
+
+ + + + + + + + + +
+selenium_active_window + +

the active window handle

+
+selenium_last_window + +

the last window handle when switched to other window

+
+
+
+
+

23.14. Alert

+
+

We are able to access the alert dialog on the current page. Citrus will validate the displayed dialog text and accept or dismiss of the dialog.

+
+
+
XML DSL
+
+
<selenium:alert accept="true">
+  <selenium:alert-text>Hello!</selenium:alert-text>
+</selenium:alert>
+
+
+
+
Java DSL
+
+
selenium().alert().text("Hello!").accept();
+
+
+
+

The alert dialog text is validated when expected text is given on the test action. The user can decide to accept or dismiss the dialog. After that the dialog should be closed. +In case the test action fails to find an open alert dialog the test action raises runtime errors and the test will fail.

+
+
+
+

23.15. Make screenshot

+
+

You can execute this action in case you want to take a screenshot of the current page. This action only works with browsers that actually display the user interface. The action will not have any effect +when executed with Html unit web driver in headless mode.

+
+
+
XML DSL
+
+
<selenium:screenshot/>
+
+<selenium:screenshot output-dir="target"/>
+
+
+
+
Java DSL
+
+
selenium().screenhsot();
+
+selenium().screenhsot("target");
+
+
+
+

The test action has an optional parameter output-dir which represents the output directory where the screenshot is saved to.

+
+
+

[[temporary-storage-(firefox)]] +== Temporary storage (Firefox)

+
+
+

Important This action only works with Firefox web driver! Other browsers are not working with the temporary download storage.

+
+
+

The browser uses a temporary storage for downloaded files. We can access this temporary storage during a test case.

+
+
+
XML DSL
+
+
<selenium:store-file file-path="classpath:download/file.txt"/>
+<selenium:get-stored-file file-name="file.txt"/>
+
+
+
+
Java DSL
+
+
selenium().store("classpath:download/file.txt");
+selenium().getStored("file.txt");
+
+
+
+

As you can see the test case is able to store new files to the temporary browser storage. We have to give the file path as classpath +or file system path. When reading the temporary file storage we need to specify the file name that we want to access in the temporary storage. The +temporary storage is not capable of subdirectories all files are stored directly to the storage in one single directory.

+
+
+

In case the stored file is not found by that name the test action fails with respective errors. On the other hand when the file is found in temporary storage +Citrus will automatically create a new test variable selenium_download_file which contains the file name as value.

+
+
+
+

23.16. Clear browser cache

+
+

When clearing the browser cache all cookies and temporary files will be deleted.

+
+
+
XML DSL
+
+
<selenium:clear-cache/>
+
+
+
+
Java DSL
+
+
selenium().clearCache();
+
+
+
+
+
+
+

24. Vert.x event bus support

+
+
+

Vert.x is an application platform for the JVM that provides a network event bus for lightweight scalable messaging solutions. The Citrus Vert.x +components do participate on that event bus messaging as producer or consumer. With these components you can access Vert.x instances +available in your network in order to test those Vert.x applications in some integration test scenario.

+
+
+ + + + + +
+ + +The Vert.x components in Citrus are kept in a separate Maven module. So you should add the module as Maven dependency to your project accordingly. +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-vertx</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

Citrus provides a special Vert.x configuration schema that is used in our Spring configuration files. You have to include the citrus-vertx +namespace in your Spring configuration XML files as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns:citrus="http://www.citrusframework.org/schema/config"
+      xmlns:citrus-vertx="http://www.citrusframework.org/schema/vertx/config"
+      xsi:schemaLocation="
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans.xsd
+      http://www.citrusframework.org/schema/config
+      http://www.citrusframework.org/schema/config/citrus-config.xsd
+      http://www.citrusframework.org/schema/vertx/config
+      http://www.citrusframework.org/schema/vertx/config/citrus-vertx-config.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

Now you are ready to use the Citrus Vert.x configuration elements using the citrus-vertx namespace prefix.

+
+
+

The next sections discuss sending and receiving operations on the Vert.x event bus with Citrus.

+
+
+

24.1. Vert.x endpoint

+
+

As usual Citrus uses an endpoint component in order to specify some message destination to send and receive messages to and from. +The Vert.x endpoint component is defined as follows in your Citrus Spring configuration.

+
+
+
+
<citrus-vertx:endpoint id="simpleVertxEndpoint"
+      host="localhost"
+      port="5001"
+      pubSubDomain="false"
+      address="news-feed"/>
+
+<bean id="vertxInstanceFactory" class="org.citrusframework.vertx.factory.CachingVertxInstanceFactory"/>
+
+
+
+

The endpoint holds some general information how to access the Vert.x event bus. Host and port values define the Vert.x Hazelcast +cluster hostname and port. Citrus starts a new Vert.x instance using this cluster. So all other Vert.x instances connected to this +cluster host will receive the event bus messages from Citrus during the test. In your test case you can use this endpoint component +referenced by its id or name in order to send and receive messages on the event bus address news-feed . In Vert.x the event bus +address defines the destination for event consumers to listen on. As already mentioned cluster hostname and port are optional, so +Citrus will use localhost and a new random port on the cluster host if nothing is specified.

+
+
+

The Vert.x event bus supports publish-subscribe and point-to-point message communication patterns. By default the pubSubDomain in +Citrus is false so the event bus sender will initiate a point-to-point communication on the event bus address. This means that only +one single consumer on the event bus address will receive the message. If there are more consumers on the address the first to come +wins and receives the message. In contrary to that the publish-subscribe scenario would deliver the message to all available consumers +on the event bus address simultaneously. You can enable the pubSubDomain on the Vert.x endpoint component for this communication pattern.

+
+
+

The Vert.x endpoint needs an instance factory implementation in order to create the embedded Vert.x instance. By default the bean name +vertxInstanceFactory is recognized by all Vert.x endpoint components. We will talk about Vert.x instance factories in more detail +later on in this chapter.

+
+
+

As message content you can send and receive JSON objects or simple character sequences to the event bus. Let us have a look at a +simple sample sending action that uses the new Vert.x endpoint component:

+
+
+
+
<send endpoint="simpleVertxEndpoint">
+  <message type="plaintext">
+    <payload>Hello from Citrus!</payload>
+  </message>
+</send>
+
+
+
+

As the Vert.x Citrus endpoint is bidirectional you can also receive messages from the event bus.

+
+
+
+
<receive endpoint="simpleVertxEndpoint">
+  <message type="plaintext">
+    <payload>Hello from Vert.x!</payload>
+  </message>
+  <header>
+    <element name="citrus_vertx_address" value="news-feed"/>
+  </header>
+</receive>
+
+
+
+

Citrus automatically adds some special message headers to the message, so you can validate the Vert.x event bus address. This completes +the simple send and receive operations on a Vert.x event bus. Now let’s move on to synchronous endpoints where Citrus waits for a reply on the event bus.

+
+
+
+

24.2. Synchronous Vert.x endpoint

+
+

The synchronous Vert.x event bus producer sends a message and waits synchronously for the response to arrive on some reply address destination. +The reply address name is generated automatically and set in the request message header attributes so the receiving counterpart in this +communication can send its reply to that event bus address. The basic configuration for a synchronous Vert.x endpoint component looks like follows:

+
+
+
+
<citrus-vertx:sync-endpoint id="vertxSyncEndpoint"
+      address="hello"
+      timeout="1000"
+      polling-interval="300"/>
+
+
+
+

Synchronous endpoints poll for synchronous reply messages to arrive on the event bus reply address. The poll interval is an optional +setting in order to manage the amount of reply message handshake attempts. Once the endpoint was able to receive the reply message +synchronously the test case can receive the reply. In case all message handshake attempts do fail because the reply message is not +available in time we raise some timeout error and the test will fail.

+
+
+ + + + + +
+ + +The Vert.x endpoint uses temporary reply address destinations. The temporary reply address in generated and is only used once +for a single communication handshake. After that the reply address is dismissed again. +
+
+
+

When sending a message to the synchronous Vert.x endpoint the producer will wait synchronously for the response message to arrive +on the reply address. You can receive the reply message in your test case using the same endpoint component. So we have two actions +on the same endpoint, first send then receive.

+
+
+
+
<send endpoint="vertxSyncEndpoint">
+  <message type="plaintext">
+    <payload>Hello from Citrus!</payload>
+  </message>
+</send>
+
+<receive endpoint="vertxSyncEndpoint">
+  <message type="plaintext">
+    <payload>This is the reply from Vert.x!</payload>
+  </message>
+</receive>
+
+
+
+

In the last section we saw that synchronous communication is based on reply messages on temporary reply event bus address. We saw that +Citrus is able to send messages to event bus address and wait for reply messages to arrive. This next section deals with the same synchronous +communication, but send and receive roles are switched. Now Citrus receives a message and has to send a reply message to a temporary reply address.

+
+
+

We handle this synchronous communication with the same synchronous Vert.x endpoint component. Only difference is that we initially +start the communication by receiving a message from the endpoint. Knowing this Citrus is able to send a synchronous response back. +Again just use the same endpoint reference in your test case. The handling of the temporary reply address is done automatically behind the scenes. +So we have again two actions in our test case, but this time first receive then send.

+
+
+
+
<receive endpoint="vertxSyncEndpoint">
+  <message type="plaintext">
+    <payload>Hello from Vert.x!</payload>
+  </message>
+</receive>
+
+<send endpoint="vertxSyncEndpoint">
+  <message type="plaintext">
+    <payload>This is the reply from Citrus!</payload>
+  </message>
+</send>
+
+
+
+

The synchronous message endpoint for Vert.x event bus communication will handle all reply address destinations and provide those behind the scenes.

+
+
+
+

24.3. Vert.x instance factory

+
+

Citrus starts an embedded Vert.x instance at runtime in order to participate in the Vert.x cluster. Within this cluster multiple Vert.x +instances are connected via the event bus. For starting the Vert.x event bus Citrus uses a cluster hostname and port definition. You can +customize this cluster host in order to connect to a very special cluster in your network.

+
+
+

Now Citrus needs to manage the Vert.x instances created during the test run. By default Citrus will look for an instance factory bean +named vertxInstanceFactory . You can choose the factory implementation to use in your project. By default you can use the caching factory +implementation that caches the Vert.x instances so we do not connect more than one Vert.x instance to the same cluster host. +Citrus offers following instance factory implementations:

+
+
+
+
org.citrusframework.vertx.factory.CachingVertxInstanceFactory
+
+

default implementation that reuses the Vert.x instance based on given +cluster host and port. With this implementation we ensure to connect a single Citrus Vert.x instance to a cluster host.

+
+
org.citrusframework.vertx.factory.SingleVertxInstanceFactory
+
+

creates a single Vert.x instance and reuses this instance for all endpoints. +You can also set your very custom Vert.x instance via configuration for custom Vert.x instantiation.

+
+
+
+
+

The instance factory implementations do implement the VertxInstanceFactory interface. So you can also provide your very special implementation. +By default Citrus looks for a bean named vertxInstanceFactory but you can also define your very special factory implementation onm an endpoint component. +The Vert.x instance factory is set on the Vert.x endpoint as follows:

+
+
+
+
<citrus-vertx:endpoint id="vertxHelloEndpoint"
+      address="hello"
+      vertx-factory="singleVertxInstanceFactory"/>
+
+<bean id="singleVertxInstanceFactory"
+      class="org.citrusframework.vertx.factory.SingleVertxInstanceFactory"/>
+
+
+
+
+
+
+

25. JDBC support

+
+
+

Database communication is an essential part of many applications, when persistent data storage is required. +May it be orders, customer data, product recommendations or product information, if persistent storage is in place, +the data contains a certain business value. Therefore it’s important that your software handles your persistent storage +the right way. To ensure that, Citrus offers a JDBC server endpoint that allows you to verify the communication between +your application and a real database server which is accessible via the Citrus-JDBC-Driver.

+
+
+

To enable the JDBC support for your test project, you’ll have to add the following dependency.

+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-jdbc</artifactId>
+  <version>${citrus.version}</version>
+  <scope>test</scope>
+</dependency>
+
+
+
+

25.1. The Citrus-JDBC-Driver

+
+

The Citrus-JDBC-Driver is a JDBC conform driver that realizes the communication with the Citrus-JDBC-Server. To be able +to use Citrus-JDBC within a CI/CD setup, we recommend to ensure that your software is able to exchange the JDBC driver +by configuration. The Citrus-JDBC-Driver is available on maven central under +org.citrusframework.citrus-db-driver. After the driver has been downloaded and configured to be used by your +application, please make sure that the driver configuration matches the Citrus-JDBC-Server configuration in your +tests.

+
+
+
Example jdbc driver configuration
+
+
<systemProperties>
+    <systemProperty>
+      <name>todo.persistence.type</name>
+      <value>jdbc</value>
+    </systemProperty>
+    <systemProperty>
+      <name>todo.jdbc.driverClassName</name>
+      <value>org.citrusframework.db.driver.JdbcDriver</value>
+    </systemProperty>
+    <systemProperty>
+      <name>todo.jdbc.url</name>
+      <value>jdbc:citrus:http://localhost:3306/testdb</value>
+    </systemProperty>
+</systemProperties>
+
+
+
+
Citrus-JDBC-Server matching the driver config
+
+
@Bean
+public JdbcServer jdbcServer() {
+    return CitrusEndpoints.jdbc()
+        .server()
+        .host("localhost")
+        .databaseName("testdb")
+        .port(3306)
+        .build();
+}
+
+
+
+
+

25.2. The Citrus-JDBC-Server

+
+

To setup a JDBC endpoint within your tests, just configure it as any other endpoint via e.g. XML, Spring Bean or by +Citrus Annotations.

+
+
+
Spring Bean
+
+
@Bean
+public JdbcServer jdbcServer() {
+    return CitrusEndpoints.jdbc()
+        .server()
+        .host("localhost")
+        .databaseName("testdb")
+        .port(4567)
+        .timeout(10000L)
+        .autoStart(true)
+        .autoTransactionHandling(false)
+        .build();
+}
+
+
+
+
Spring XML
+
+
<citrus-jdbc:server id="testServer"
+                      host="citrus-jdbc-test-server"
+                      port="4567"
+                      database-name="test-db"
+                      max-connections="50"
+                      auto-start="true"/>
+
+
+
+
Citrus Annotations
+
+
@CitrusEndpoint
+@JdbcServerConfig(
+            databaseName = "testdb",
+            autoStart = true,
+            port = 4567)
+private JdbcServer jdbcServer;
+
+
+
+

After that configuration has been done, you’ll be able to use the Server within your tests to receive and send messages +from or to your system under test.

+
+
+
+
@Test
+@CitrusTest
+public void testAddTodoEntry() {
+    variable("todoName", "citrus:concat('todo_', citrus:randomNumber(4))");
+    variable("todoDescription", "Description: ${todoName}");
+
+    http()
+        .client(todoClient)
+        .send()
+        .post("/todolist")
+        .fork(true)
+        .contentType("application/x-www-form-urlencoded")
+        .payload("title=${todoName}&description=${todoDescription}");
+
+    receive(jdbcServer)
+        .messageType(MessageType.JSON)
+        .message(JdbcMessage.execute(
+            "@startsWith('INSERT INTO todo_entries (id, title, description, done) VALUES (?, ?, ?, ?)')@"));(1)
+
+    send(jdbcServer)
+        .message(JdbcMessage.result().rowsUpdated(1));(2)
+
+    http()
+        .client(todoClient)
+        .receive()
+        .response(HttpStatus.FOUND);
+
+    http()
+        .client(todoClient)
+        .send()
+        .get("/todolist")
+        .fork(true)
+        .accept("text/html");
+
+    receive(jdbcServer)
+            .message(JdbcMessage.execute("SELECT id, title, description FROM todo_entries"));(3)
+
+    send(jdbcServer)
+        .messageType(MessageType.JSON)
+        .message(JdbcMessage.result().dataSet("[ {" +
+                    "\"id\": \"" + UUID.randomUUID().toString() + "\"," +
+                    "\"title\": \"${todoName}\"," +
+                    "\"description\": \"${todoDescription}\"," +
+                    "\"done\": \"false\"" +
+                "} ]"));(4)
+
+    http()
+        .client(todoClient)
+        .receive()
+        .response(HttpStatus.OK)
+        .messageType(MessageType.XHTML)
+        .xpath("(//xh:li[@class='list-group-item']/xh:span)[last()]", "${todoName}");
+}
+
+
+
+ + + + + + + + + + + + + + + + + +
1Expects a INSERT statement matching the given expression.
2Responds with a result set stating, that one row has been updated/created.
3Expects a SELECT statement matching the given statement.
4Responds with the DataSet specified as JSON string.
+
+
+

25.2.1. Transactions

+
+

When it comes to complex modifications of your database, transactions are commonly used. +Citrus is able to verify the behavior of your system under test concerning start, commit and rollback +actions of transactions. The verification of transactions has to be enabled in the server Citrus-JDBC-Server +configuration. For more information, please have a look at the Configuration section.

+
+
+
Verifiying transaction commit
+
+
receive(jdbcServer)
+    .message(JdbcMessage.startTransaction());(1)
+
+receive(jdbcServer)
+    .message(JdbcMessage.execute("@startsWith('INSERT INTO todo_entries (id, title, description, done) VALUES (?, ?, ?, ?)')@"));
+
+send(jdbcServer)
+    .message(JdbcMessage.result().rowsUpdated(1));
+
+receive(jdbcServer)
+    .message(JdbcMessage.commitTransaction());(2)
+
+
+
+ + + + + + + + + +
1Verify, that the transaction has been started.
2Verify, that the modification of the database has been committed.
+
+
+

It is also possible to simulate an erroneous modification including the verification of a rollback.

+
+
+
Verifiying transaction rollback
+
+
receive(jdbcServer)
+    .message(JdbcMessage.startTransaction());(1)
+
+receive(jdbcServer)
+    .message(JdbcMessage.execute("@startsWith('INSERT INTO todo_entries (id, title, description, done) VALUES (?, ?, ?, ?)')@"));
+
+send(jdbcServer)
+    .message(JdbcMessage.result().exception("Could not execute something"));
+
+receive(jdbcServer)
+    .message(JdbcMessage.rollbackTransaction());(2)
+
+
+
+ + + + + + + + + +
1Verify, that the transaction has been started.
2Verify, that a rollback occurred after the database exception has been send.
+
+
+
+

25.2.2. Prepared statements

+
+

Because prepared statements work slightly different than simple database queries, the validation of those is also +slightly different. Currently, Citrus offers you the possibility to verify that your application has created the +correct prepared statement, that it was executed with the correct parameters and that it has been closed.

+
+
+
Verifying prepared statement
+
+
receive(jdbcServer)
+    .message(JdbcMessage.createPreparedStatement("INSERT INTO todo_entries (id, title, description, done) VALUES (?, ?, ?, ?)"));(1)
+
+receive(jdbcServer)
+    .message(JdbcMessage.execute(
+        "INSERT INTO todo_entries (id, title, description, done) VALUES (?, ?, ?, ?) - (1,sample,A sample todo,false)"));(2)
+
+receive(jdbcServer)
+    .message(JdbcMessage.closeStatement());(3)
+
+
+
+ + + + + + + + + + + + + +
1Verify that the given prepared statement has been created.
2Verify that the statement has been executed with the parameters 1,sample,A sample todo,false.
3Verify that the statement has been closed.
+
+
+

Please notice, that the verification of createPreparedStatement and closeStatement messages has to be activated +via configuration. For more information, please have a look at the Configuration section.

+
+
+
+

25.2.3. Callable statements / stored procedures

+
+

As well as prepared statements, callable statements are different from simple queries. Callable statements are used +on jdbc level to access stored procedures, functions, etc. on the database server.

+
+
+
Verifying callable statement
+
+
receive(jdbcServer)
+    .message(JdbcMessage.createCallableStatement("{CALL limitedToDoList(?)}"));(1)
+
+receive(jdbcServer)
+    .message(JdbcMessage.execute("{CALL limitedToDoList(?)} - (1)"));(2)
+
+send(jdbcServer)
+    .messageType(MessageType.XML)
+    .message(JdbcMessage.result().dataSet("" +
+            "<dataset>" +
+                "<row>" +
+                    "<id>1</id>"+
+                    "<title>sample</title>"+
+                    "<description>A sample todo</description>" +
+                    "<done>false</done>" +
+                 "</row>" +
+                "</dataset>"));
+
+receive(jdbcServer)
+    .message(JdbcMessage.closeStatement());(3)
+
+
+
+ + + + + + + + + + + + + +
1Verify that the given callable statement has been created.
2Verify that the statement has been executed with the parameter 1.
3Verify that the statement has been closed.
+
+
+

As you might have noticed, callable statements and prepared statements have nearly the same workflow in Citrus. The only +difference is the creation of the statement itself. It is also the case that the verification of +createCallableStatement and closeStatement messages has to be activated via configuration. For more information, +please have a look at the Configuration section.

+
+
+
+

25.2.4. Configuration

+
+

As already mentioned, you’re able to configure the JDBC endpoint in different ways (XML, Spring Bean, etc. ). +The following properties are available to configure the server for your test scenario.

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
PropertyMandatoryDefaultDescription

id

Yes

+

Only required for XML configuration.

+

auto connect

No

true

+

Determines whether the server should automatically accept connection related messages or validate them. +This includes openConnection and closeConnection.

+

auto create statement

No

true

+

Determines whether the server should automatically accept statement related messages or validate them. +This includes createStatement, createPreparedStatement, createCallableStatement and closeStatement.

+

auto transaction handling

No

true

+

Determines whether the server should automatically accept transaction related messages or validate them. +This includes startTransaction, commitTransaction and rollbackTransaction.

+

auto handle queries

No

Collection of system queries for different databases

+

Determines whether the server should automatically respond with a positive answer for matching queries, e.g. SELECT USER FROM DUAL. You can override the currently defined validation queries when setting citrus.jdbc.auto.handle.query system property within the citrus-application.properties. The property value is expected to be a semicolon separated list of regex patterns. Every query can be specified as a regular expression, e.g. SELECT.*FROM DUAL;SELECT \\w;.

+

host

Yes

+

The hostname of the server. There has to be a valid route between the test suite, the system under test and the +database server.

+

port

No

4567

+

The port the server listens to.

+

database name

Yes

+

The database name to work on

+

max connections

No

20

+

The maximum amount of open connections to be accepted by the server.

+

polling interval

No

500

+

Polling interval when waiting for synchronous reply message to arrive.

+

timeout

No

5000

+

Send/receive timeout setting

+

debug logging

No

false

+

Determines whether the inbound channel debug logging should be enabled.

+
+
+

In addition, there are advanced configuration possibilities to customize the behavior of the JDBC server.

+
+ ++++++ + + + + + + + + + + + + + + + + + + + + + + +
PropertyMandatoryDefaultDescription

correlator

No

DefaultMessageCorrelator

+

A MessageCorrelator implementation to identify messages.

+

endpoint adapter

No

JdbcEndpointAdapterController

+

An Endpoint adapter implementation creating the messages for validation.

+
+
+
+
+

25.3. JdbcMessage

+
+

The JdbcMessage class is the central location to specifying your expected inbound and outbound communication for the +JDBC endpoint.

+
+ +++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Messagereceive/sendDescription

JdbcMessage.openConnection(Properties properties)

receive

+

States that a connection has been opened with the given properties. The evaluation of connections has to be enabled +via the endpoint configuration.

+

JdbcMessage.closeConnection()

receive

+

States that the connection has been closed. The evaluation of connections has to be enabled +via the endpoint configuration.

+

JdbcMessage.createStatement()

receive

+

States that a statement has been created. The evaluation of statement handling has to be enabled via the endpoint +configuration.

+

JdbcMessage.createPreparedStatement(String sql)

receive

+

States that a SQL statement matching the given expression has been created. The evaluation of statement handling +has to be enabled via the endpoint configuration.

+

JdbcMessage.createCallableStatement(String sql)

receive

+

States that a callable statement referencing a function or procedure that is matching the given expression has been +created. The evaluation of statement handling has to be enabled via the endpoint configuration.

+

JdbcMessage.closeStatement()

receive

+

States that a statement has been closed. The evaluation of statement handling has to be enabled via the endpoint +configuration.

+

JdbcMessage.execute(String sql)

receive

+

States that a SQL statement matching the given expression has been executed.

+

JdbcMessage.startTransaction()

receive

+

States that a transaction start has been received. The evaluation of transaction handling has to be enabled via +the endpoint configuration.

+

JdbcMessage.commitTransaction()

receive

+

States that a commit for a transaction has been received. The evaluation of transaction handling has to be enabled via +the endpoint configuration.

+

JdbcMessage.rollbackTransaction()

receive

+

States that a rollback of the transaction has been received. The evaluation of transaction handling has to be enabled +via the endpoint configuration.

+

JdbcMessage.result()

send

+

Sends a positive empty result to the system under test.

+

JdbcMessage.result(boolean success)

send

+

Sends empty result to the system under test which is a success or a failure based on the given boolean value.

+

JdbcMessage.exception(String exceptionText)

send

+

Sends an exception to the system under test. Regarding the driver documentation, the error will be an SQLException.

+

JdbcMessage.rowsUpdated(int number)

send

+

Sends a positive result to the system under test where the payload is the number of updated rows.

+

JdbcMessage.dataSet(DataSet dataSet)

send

+

Sends a positive result to the system under test where the payload is the specified DataSet.

+

JdbcMessage.dataSet(String dataSet)

send

+

Sends a positive result to the system under test where the payload is the specified DataSet. To use this, you have +to specify the format of the dataSet String. Please refer to the section DataSet parsing.

+

JdbcMessage.dataSet(Resource dataSet)

send

+

Sends a positive result to the system under test where the payload is the content of the specified resource. +To use this, you have to specify the format of the dataSet String. Please refer to the section +DataSet parsing.

+

JdbcMessage.success()

send

+

Sends a positive empty result to the system under test.

+

JdbcMessage.error()

send

+

Sends an empty error result to the system under test.

+
+
+

25.3.1. DataSet parsing

+
+

Citrus provides different ways to prepare the response DataSets for your system under test. You can specify your +DataSets as Java Objects, as XML or JSON Strings or as resource file containing your XML or JSON DataSet as text.

+
+
+
Java dataset creation example
+
+
Row sheldon = new Row();
+sheldon.getValues().put("id", "1");
+sheldon.getValues().put("name", "Sheldon");
+sheldon.getValues().put("profession", "physicist");
+
+Row leonard = new Row();
+leonard.getValues().put("id", "2");
+leonard.getValues().put("name", "Leonard");
+leonard.getValues().put("profession", "physicist");
+leonard.getValues().put("email", "leo@bigbangtheory.org");
+
+Row penny = new Row();
+penny.getValues().put("id", "3");
+penny.getValues().put("name", "Penny");
+penny.getValues().put("profession", "this_and_that");
+
+Table table = new Table("user");
+table.getRows().add(sheldon);
+table.getRows().add(leonard);
+table.getRows().add(penny);
+
+DataSet userDataSet = new TableDataSetProducer(table).produce();
+
+send(jdbcServer).message(JdbcMessage.result().dataSet(userDataSet));
+
+
+
+

If you use the XML or JSON notation as string or within a resource, you’ll have to specify that in your test setup.

+
+
+
Java json dataset creation example
+
+
receive(jdbcServer)
+                .message(JdbcMessage.execute("SELECT id, title, description FROM todo_entries"));
+
+send(jdbcServer)
+        .messageType(MessageType.JSON)(1)
+        .message(JdbcMessage.result().dataSet("[ {" +
+                    "\"id\": \"" + UUID.randomUUID().toString() + "\"," +
+                    "\"title\": \"${todoName}\"," +
+                    "\"description\": \"${todoDescription}\"," +
+                    "\"done\": \"false\"" +
+                "} ]"));
+
+
+
+ + + + + +
1Tells Citrus that the response has to be interpreted as JSON.
+
+
+
Java xml dataset creation example
+
+
receive(jdbcServer)
+        .message(JdbcMessage.execute("SELECT id, title, description FROM todo_entries"));
+send(jdbcServer)
+        .messageType(MessageType.XML)(1)
+        .message(JdbcMessage.result().dataSet("" +
+                "<dataset>" +
+                    "<row>" +
+                        "<id>${todoId}</id>"+
+                        "<title>${todoName}</title>"+
+                        "<description>${todoDescription}</description>" +
+                        "<done>false</done>" +
+                     "</row>" +
+                "</dataset>"));
+
+
+
+ + + + + +
1Tells Citrus that the response has to be interpreted as XML.
+
+
+ + + + + +
+ + +Technically it is not required to specify the messages as MessageType.XML, because the default message type +in citrus currently is XML. Nevertheless we highly recommend to specify the message type. This will ensure that your +tests sustain future changes. +
+
+
+
+
+
+
+

26. Docker support

+
+
+

Citrus provides configuration components and test actions for interaction with a Docker daemon. The Citrus docker client component will execute Docker commands for container management such as start, stop, build, inspect and so on. The Docker client by default uses the Docker remote REST API. As a user you can execute Docker commands as part of a Citrus test and validate possible command results.

+
+
+ + + + + +
+ + +The Docker test components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-docker</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

Citrus provides a "citrus-docker" configuration namespace and schema definition for Docker related components and actions. Include this namespace into your Spring configuration in order to use the Citrus Docker configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:citrus-docker="http://www.citrusframework.org/schema/docker/config"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans
+       http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.citrusframework.org/schema/docker/config
+       http://www.citrusframework.org/schema/docker/config/citrus-docker-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

After that you are able to use customized Citrus XML elements in order to define the Spring beans.

+
+
+

26.1. Docker client

+
+

Citrus operates with the Docker remote REST API in order to interact with the Docker daemon. The Docker client is defined as Spring bean component in the configuration as follows:

+
+
+
+
<citrus-docker:client id="dockerClient"/>
+
+
+
+

The Docker client component above is using all default configuration values. By default Citrus is searching the system properties as well as environment variables for default Docker settings such as:

+
+
+ + + + + + + + + + + + + + + + + +
+DOCKER_HOST + +

tcp://localhost:2376

+
+DOCKER_CERT_PATH + +

~/.docker/machine/machines/default

+
+DOCKER_TLS_VERIFY + +

1

+
+DOCKER_MACHINE_NAME + +

default

+
+
+
+

In case these settings are not settable in your environment you can also use explicit settings in the Docker client component:

+
+
+
+
<citrus-docker:client id="dockerClient"
+            url="tcp://localhost:2376"
+            version="1.20"
+            username="user"
+            password="s!cr!t"
+            email="user@foo.bar"
+            registry="https://index.docker.io/v1/"
+            cert-path="/path/to/some/cert/directory"
+            config-path="/path/to/some/config/directory"/>
+
+
+
+

Now Citrus is able to access the Docker remote API for executing commands such as start, stop, build, inspect and so on.

+
+
+
+

26.2. Docker commands

+
+

We have several Citrus test actions each representing a Docker command. These actions can be part of a test case where you can manage Docker containers inside the test. As a prerequisite we have to enable the Docker specific test actions in our XML test as follows:

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:docker="http://www.citrusframework.org/schema/docker/testcase"
+        xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/docker/testcase
+        http://www.citrusframework.org/schema/docker/testcase/citrus-docker-testcase.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

We added a special docker namespace with prefix docker: so now we can start to add Docker test actions to the test case:

+
+
+
XML DSL
+
+
<testcase name="DockerCommandIT">
+    <actions>
+          <docker:ping></docker:ping>
+
+          <docker:version>
+            <docker:expect>
+              <docker:result>
+                <![CDATA[
+                  {
+                    "Version":"1.8.3",
+                    "ApiVersion":"1.21",
+                    "GitCommit":"@ignore@",
+                    "GoVersion":"go1.4.2",
+                    "Os":"darwin",
+                    "Arch":"amd64",
+                    "KernelVersion":"@ignore@"
+                  }
+                ]]>
+              </docker:result>
+            </docker:expect>
+          </docker:version>
+    </actions>
+</testcase>
+
+
+
+

In this very simple example we first ping the Docker daemon to make sure we have connectivity up and running. After that we get the Docker version information. The second action shows an important concept when executing Docker commands in Citrus. As a tester we might be interested in validating the command result. So we can specify an optional docker:result which is usually in JSON data format. As usual we can use test variables here and ignore some values explicitly such as the GitCommit value.

+
+
+

Based on that we can execute several Docker commands in a test case:

+
+
+
XML DSL
+
+
<testcase name="DockerCommandIT">
+    <variables>
+      <variable name="imageId" value="busybox"></variable>
+      <variable name="containerName" value="citrus_box"></variable>
+    </variables>
+
+    <actions>
+        <docker:pull image="${imageId}"
+                        tag="latest"/>
+
+        <docker:create image="${imageId}"
+                          name="${containerName}"
+                          cmd="top">
+            <docker:expect>
+                <docker:result>
+                    <![CDATA[
+                      {"Id":"@variable(containerId)@","Warnings":null}
+                    ]]>
+                </docker:result>
+            </docker:expect>
+        </docker:create>
+
+        <docker:start container="${containerName}"/>
+    </actions>
+</testcase>
+
+
+
+

In this example we pull a Docker image, build a new container out of this image and start the container. As you can see each Docker command action offers attributes such as container, image or tag . These are command settings that are available on the Docker command specification. Read more about the Docker commands and the specific settings in official Docker API reference guide.

+
+
+

Citrus supports the following Docker commands with respective test actions:

+
+
+
    +
  • +

    docker:pull

    +
  • +
  • +

    docker:build

    +
  • +
  • +

    docker:create

    +
  • +
  • +

    docker:start

    +
  • +
  • +

    docker:stop

    +
  • +
  • +

    docker:wait

    +
  • +
  • +

    docker:ping

    +
  • +
  • +

    docker:version

    +
  • +
  • +

    docker:inspect

    +
  • +
  • +

    docker:remove

    +
  • +
  • +

    docker:info

    +
  • +
+
+
+

Some of the Docker commands can be executed both on container and image targets such as docker:inspect or docker:remove . The command action then offers both container and image attributes so the user can choose the target of the command operation to be a container or an image.

+
+
+

Up to now we have only used the Citrus XML DSL. Of course all Docker commands are also available in Java DSL as the next example shows.

+
+
+
Java DSL
+
+
@CitrusTest
+public void dockerTest() {
+    docker().version()
+        .validateCommandResult(new CommandResultCallback<Version>() {
+            @Override
+            public void doWithCommandResult(Version version, TestContext context) {
+                Assert.assertEquals(version.getApiVersion(), "1.20");
+            }
+    });
+
+    docker().ping();
+
+    docker().start("my_container");
+}
+
+
+
+

The Java DSL Docker commands provide an optional CommandResultCallback that is called with the unmarshalled command result object. In the example above the Version model object is passed as argument to the callback. So the tester can access the command result and validate its properties with assertions.

+
+
+

By default Citrus tries to find a Docker client component within the Citrus Spring application context. If not present Citrus will instantiate a default docker client with all default settings. You can also explicitly set the docker client instance when using the Java DSL Docker command actions:

+
+
+
Java DSL
+
+
@Autowired
+private DockerClient dockerClient;
+
+@CitrusTest
+public void dockerTest() {
+    docker().client(dockerClient).version()
+        .validateCommandResult(new CommandResultCallback<Version>() {
+            @Override
+            public void doWithCommandResult(Version version, TestContext context) {
+                Assert.assertEquals(version.getApiVersion(), "1.20");
+            }
+    });
+
+    docker().client(dockerClient).ping();
+
+    docker().client(dockerClient).start("my_container");
+}
+
+
+
+
+
+
+

27. SSH support

+
+
+

In the spirit of other Citrus mock services, there is support for simulating an external SSH server as well as for connecting to SSH servers as a client during the test execution. Citrus translates SSH requests and responses to simple XML documents for better validation with the common Citrus mechanisms.

+
+
+

This means that the Citrus test case does not deal with pure SSH protocol commands. Instead of this we use the powerful XML validation capabilities in Citrus when dealing with the simple XML documents that represent the SSH request/response data.

+
+
+

Let us clarify this with a little example. Once the real SSH server daemon is fired up within Citrus we accept an SSH EXEC request for instance. The request is translated into an XML message of the following format:

+
+
+
+
<ssh-request xmlns="http://www.citrusframework.org/schema/ssh/message">
+  <command>cat - | sed -e 's/Hello/Hello SSH/'</command>
+  <stdin>Hello World</stdin>
+</ssh-request>
+
+
+
+

This message can be validated with the usual Citrus mechanism in a receive test action. If you do not know how to do this, please read one of the sections about XML message validation in this reference guide first. Now after having received this request message the respective SSH response should be provided as appropriate answer. This is done with a message sending action on a reply handler as it is known from synchronous http message communication in Citrus for instance. The SSH XML representation of a response message looks like this:

+
+
+
+
<ssh-response xmlns="http://www.citrusframework.org/schema/ssh/message">
+  <stdout>Hello SSH World</stdout>
+  <stderr></stderr>
+  <exit>0</exit>
+</ssh-response>
+
+
+
+

Besides simulating a full-featured SSH server, Citrus also provides SSH client functionality. This client uses the same request message pattern, which is translated into a real SSH call to an SSH server. The SSH response received is also translated into an XML message as shown above so we can validate it with known validation mechanisms in Citrus.

+
+
+

Similar to the other Citrus modules (http, soap), a Citrus SSH server and client is configured in Citrus Spring application context. There is a dedicated ssh namespace available for all ssh Citrus components. The namespace declaration goes into the context top-level element as usual:

+
+
+
+
<beans
+    [...]
+    xmlns:citrus-ssh="http://www.citrusframework.org/schema/ssh/config"
+    [...]
+    xsi:schemaLocation="
+        [...]
+        http://www.citrusframework.org/schema/ssh/config
+        http://www.citrusframework.org/schema/ssh/config/citrus-ssh-config.xsd
+        [...] ">
+   [...]
+</beans>
+
+
+
+

Both, SSH server and client along with their configuration options are described in the following two sections.

+
+
+

27.1. SSH Client

+
+

A Citrus SSH client is useful for testing against a real SSH server. So Citrus is able to invoke SSH commands on the external server and validate the SSH response accordingly. The test case does not deal with the pure SSH protocol within this communication. The Citrus SSH client component expects a customized XML representation and automatically translates these request messages into a real SSH call to a specific host. Once the synchronous SSH response was received the result gets translated back to the XML response message representation. On this translated response we can easily apply the validation steps by the usual Citrus means.

+
+
+

The SSH client components receive its configuration in the Spring application context as usual. We can use the special SSH module namespace for easy configuration:

+
+
+
+
<citrus-ssh:client id="sshClient"
+           port="9072"
+           user="roland"
+           private-key-path="classpath:org/citrusframework/ssh/test_user.priv"
+           strict-host-checking="false"
+           host="localhost"/>
+
+
+
+

The SSH client receives several attributes, these are:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+id + +

Id identifying the bean and used as reference from with test descriptions. (e.g. id="sshClient")

+
+host + +

Host to connect to for sending an SSH Exec request. Default is 'localhost' (e.g. host="localhost") +port: Port to use. Default is 2222 (e.g. port="9072")

+
+private-key-path + +

Path to a private key, which can be either a plain file path or a class resource if prefixed with 'classpath' (e.g. private-key-path="classpath:test_user.priv")

+
+private-key-password + +

Optional password for the private key (e.g. password="s!cr!t")

+
+user + +

User used for connecting to the SSH server (e.g. user="roland")

+
+password + +

Password used for password based authentication. Might be combined with "private-key-path" in which case both authentication mechanism are tried (e.g. password="ps!st)

+
+strict-host-checking + +

Whether the host key should be verified by looking it up in a 'known_hosts' file. Default is false (e.g. strict-host-checking="true")

+
+known-hosts-path + +

Path to a known hosts file. If prefixed with 'classpath:' this file is looked up as a resource in the classpath (e.g. known-hosts-path="/etc/ssh/known_hosts")

+
+command-timeout + +

Timeout in milliseconds for how long to wait for the SSH command to complete. Default is 5 minutes (e.g. command-timeout="300000")

+
+connection-timeout + +

Timeout in milliseconds for how long to for a connectiuon to connect. Default is 1 minute (e.g. connection-timeout="60000")

+
+actor + +

Actor used for switching groups of actions (e.g. actor="ssh-mock")

+
+
+
+

Once defines as client component in the Spring application context test cases can reference the client in every send test action.

+
+
+
+
<send endpoint="sshClient">
+  <message>
+    <payload>
+        <ssh-request xmlns="http://www.citrusframework.org/schema/ssh/message">
+          <command>shutdown</command>
+          <stdin>input</stdin>
+        </ssh-request>
+    </payload>
+  </message>
+</send>
+
+<receive endpoint="sshClient">
+  <message>
+    <payload>
+        <ssh-response xmlns="http://www.citrusframework.org/schema/ssh/message">
+            <stdout>Hello Citrus</stdout>
+            <stderr/>
+            <exit>0</exit>
+        </ssh-response>
+    </payload>
+  </message>
+</receive>
+
+
+
+

As you can see we use usual send and receive test actions. The XML SSH representation helps us to specify the request and response data for validation. This way you can call SSH commands against an external SSH server and validate the response data.

+
+
+
+

27.2. SSH Server

+
+

Now that we have used Citrus on the client side we can also use Citrus SSH server module in order to provide a full stacked SSH server daemon. We can accept SSH client connections and provide proper response messages as an answer.

+
+
+

Given the above SSH module namespace declaration, adding a new SSH server is quite simple:

+
+
+
+
<citrus-ssh:server id="sshServer"
+             allowed-key-path="classpath:org/citrusframework/ssh/test_user_pub.pem"
+             user="roland"
+             port="9072"
+             auto-start="true"
+             endpoint-adapter="sshEndpointAdapter"/>
+
+
+
+

The endpoint-adapter is the handler which receives the SSH request as messages (in the request format described above). Endpoint adapter implementations are fully described in http-serverAll adapters described there are supported in SSH server module, too.

+
+
+

The <citrus-ssh:server> supports the following attributes:

+
+
+
SSH Server Attributes:
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+id + +

Name of the SSH server which identifies it unique within the Citrus Spring context (e.g. id="sshServer")

+
+host-key-path + +

Path to PEM encoded key pair (public and private key) which is used as host key. By default, a standard, pre-generate, fixed keypair is used. The path can be specified either as a file path, or, if prefixed with classpath: is looked up from within the classpath. The path the is relative from to the top-level package, so no leading slash should be used (e.g. hist-key-path="/etc/citrus_ssh_server.pem)

+
+user-home-path + +

Path to user home directory. If not set ${user.dir}/target/{serverName}/home/{user} is used by default.

+
+user + +

User which is allowed to connect (e.g. user="roland")

+
+allowed-key-path + +

Path to an SSH public key stored in PEM format. These are the keys, which are allowed to connect to the SSH server when publickey authentication is used. It seves the same purpose as authorized_keys for standard SSH installations. The path can be specified either as a file path, or, if prefixed with classpath: is looked up from within the classpath. The path the is relative from to the top-level package, so no leading slash should be used (e.g. allowed-key-path="classpath:test_user_pub.pem)

+
+password + +

Password which should be used when password authentication is used. Both publickey authentication and password based authentication can be used together in which case both methods are tried in turn (e.g. password="s!cr!t")

+
+host + +

Host address (e.g. localhost)

+
+port + +

Port on which to listen. The SSH server will bind on localhost to this port (e.g. port="9072")

+
+auto-start + +

Whether to start this SSH server automatically. Default is true . If set to false, a test action is responsible for starting/stopping the server (e.g. auto-start="true")

+
+endpoint-adapter + +

Bean reference to an endpoint adapter which processes the incoming SSH request. The message format for the request and response are described above (e.g. endpoint-adapter="sshEndpointAdapter")

+
+
+
+

Once the SSH server component is added to the Spring application context with a proper endpoint adapter like the MessageChannel forwarding adapter we can receive incoming requests in a test case and provide a respone message for the client.

+
+
+
+
<receive endpoint="sshServer">
+  <message>
+    <payload>
+        <ssh-request xmlns="http://www.citrusframework.org/schema/ssh/message">
+           <command>shutdown</command>
+           <stdin>input</stdin>
+        </ssh-request>
+    </payload>
+  </message>
+</receive>
+
+<send endpoint="sshServer">
+  <message>
+    <payload>
+        <ssh-response xmlns="http://www.citrusframework.org/schema/ssh/message">
+            <stdout>Hello Citrus</stdout>
+            <exit>0</exit>
+        </ssh-response>
+    </payload>
+  </message>
+</send>
+
+
+
+
+
+
+

28. RMI support

+
+
+

RMI stands for Remote Method Invocation and is a standard way of calling Java method interfaces where caller and callee (client and server) are not located within the same JVM. So the object passed to the method as argument as well as the method return value are transmitted over the wire.

+
+
+

As a client Citrus is able to connect to some RMI registry that exposes some remote interfaces. As a server Citrus implements such an RMI registry and handles incoming method calls with providing the respective return value.

+
+
+ + + + + +
+ + +The RMI components in Citrus are kept in a separate Maven module. So you should check that the module is available as Maven dependency in your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-rmi</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

As usual Citrus provides a customized rmi configuration schema that is used in Spring configuration files. Simply include the citrus-rmi namespace in the configuration XML files as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns:citrus="http://www.citrusframework.org/schema/config"
+      xmlns:citrus-rmi="http://www.citrusframework.org/schema/rmi/config"
+      xsi:schemaLocation="
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans.xsd
+      http://www.citrusframework.org/schema/config
+      http://www.citrusframework.org/schema/config/citrus-config.xsd
+      http://www.citrusframework.org/schema/rmi/config
+      http://www.citrusframework.org/schema/rmi/config/citrus-rmi-config.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

Now you are ready to use the customized Http configuration elements with the citrus-rmi namespace prefix.

+
+
+

Read the next section in order to find out more about the RMI message support in Citrus.

+
+
+

28.1. RMI client

+
+

On the client side we want to call e remote interface. We need to specify the method to call as well as all method arguments. The respective method return value is receivable within the test case for validation. Citrus provides a client component for RMI that sends out service invocation calls.

+
+
+
+
<citrus-rmi:client id="rmiClient1"
+      host="localhost"
+      port="1099"
+      binding="newsService"/>
+
+      <citrus-rmi:client id="rmiClient2"
+        server-url="rmi://localhost:1099/newsService"/>
+
+
+
+

The client component in the Spring application context receives host and port configuration of a valid RMI service registry. Either by specifying a proper server url or by giving host, port and binding properties. The service binding is the name of the service that we would like to address in the registry. Now we are ready to use this client referenced by its id or name in a test case for a message sending action.

+
+
+
Java
+
+
@CitrusTest
+public void rmiMessageTest() {
+    $(send(rmiClient)
+        .message(RmiMessage.invocation(NewsService.class, "getNews"))
+    );
+}
+
+
+
+
XML
+
+
<test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="rmiClient">
+            <message>
+                <body>
+                    <payload>
+                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
+                          <method>getNews</method>
+                        </service-invocation>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RmiMessageTest
+actions:
+  - send:
+      endpoint: "rmiClient"
+      message:
+        body: |
+          <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+              <remote>org.citrusframework.rmi.remote.NewsService</remote>
+              <method>getNews</method>
+          </service-invocation>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RmiMessageTest">
+        <actions>
+            <send endpoint="rmiClient">
+                <message>
+                    <payload>
+                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
+                          <method>getNews</method>
+                        </service-invocation>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

We are using the usual Citrus send message action referencing the rmiClient as endpoint. The message payload is a special Citrus message that defines the service invocation. We define the remote interface as well as the method to call. Citrus RMI client component will be able to interpret this message content and call the service method.

+
+
+

The method return value is receivable for validation using the very same client endpoint.

+
+
+
Java
+
+
@CitrusTest
+public void rmiMessageTest() {
+    $(receive(rmiClient)
+        .message(RmiMessage.result("This is news from RMI!"))
+    );
+}
+
+
+
+
XML
+
+
<test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="rmiClient">
+            <message>
+                <body>
+                    <payload>
+                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
+                          <object type="java.lang.String" value="This is news from RMI!"/>
+                        </service-result>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RmiMessageTest
+actions:
+  - receive:
+      endpoint: "rmiClient"
+      message:
+        body: |
+          <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
+              <object type="java.lang.String" value="This is news from RMI!"/>
+          </service-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RmiMessageTest">
+        <actions>
+            <receive endpoint="rmiClient">
+                <message>
+                    <payload>
+                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
+                          <object type="java.lang.String" value="This is news from RMI!"/>
+                        </service-result>
+                    </payload>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In the sample above we receive the service result and expect a java.lang.String object return value. The return value content is also validated within the service result payload.

+
+
+

Of course we can also deal with method arguments.

+
+
+
Java
+
+
@CitrusTest
+public void rmiMessageTest() {
+    $(send(rmiClient)
+        .message(RmiMessage.invocation(NewsService.class, "setNews")
+              .argument("This is breaking news!"))
+    );
+}
+
+
+
+
XML
+
+
<test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="rmiClient">
+            <message>
+                <body>
+                    <payload>
+                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                            <remote>org.citrusframework.rmi.remote.NewsService</remote>
+                            <method>setNews</method>
+                            <args>
+                              <arg value="This is breaking news!"/>
+                            </args>
+                        </service-invocation>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RmiMessageTest
+actions:
+  - send:
+      endpoint: "rmiClient"
+      message:
+        body: |
+          <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                <remote>org.citrusframework.rmi.remote.NewsService</remote>
+                <method>setNews</method>
+                <args>
+                  <arg value="This is breaking news!"/>
+                </args>
+          </service-invocation>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RmiMessageTest">
+        <actions>
+            <send endpoint="rmiClient">
+                <message>
+                    <payload>
+                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                            <remote>org.citrusframework.rmi.remote.NewsService</remote>
+                            <method>setNews</method>
+                            <args>
+                              <arg value="This is breaking news!"/>
+                            </args>
+                        </service-invocation>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

This completes the basic remote service call. Citrus invokes the remote interface method and validates the method return value. As a tester you might also face errors and exceptions when calling the remote interface method. You can catch and assert these remote exceptions verifying your error scenario.

+
+
+
Java
+
+
@CitrusTest
+public void rmiMessageTest() {
+    $(assertException()
+        .exception(java.rmi.RemoteException.class)
+        .when(
+            send(rmiClient)
+                .message(RmiMessage.invocation(NewsService.class, "setNews")
+                        .argument("This is breaking news!"))
+        )
+    );
+}
+
+
+
+
XML
+
+
<test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <assert exception="java.rmi.RemoteException">
+            <when>
+                <send endpoint="rmiClient">
+                    <message>
+                        <body>
+                            <payload>
+                                <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                                    <remote>org.citrusframework.rmi.remote.NewsService</remote>
+                                    <method>setNews</method>
+                                    <args>
+                                      <arg value="This is breaking news!"/>
+                                    </args>
+                                </service-invocation>
+                            </payload>
+                        </body>
+                    </message>
+                </send>
+            </when>
+        </assert>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RmiMessageTest
+actions:
+  - assert:
+      exception: "java.rmi.RemoteException"
+      when:
+        - send:
+            endpoint: "rmiClient"
+            message:
+              body: |
+                <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                      <!-- ... -->
+                </service-invocation>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RmiMessageTest">
+        <actions>
+            <assert exception="java.rmi.RemoteException">
+                <when>
+                    <send endpoint="rmiClient">
+                        <message>
+                            <payload>
+                                <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                                    <!-- ... -->
+                                </service-invocation>
+                            </payload>
+                        </message>
+                    </send>
+                </when>
+            </assert>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

We assert the RemoteException to be thrown while calling the remote service method. This is how you can handle some sort of error situation while calling remote services. In the next section we will handle RMI communication where Citrus provides the remote interfaces.

+
+
+
+

28.2. RMI server

+
+

On the server side Citrus needs to provide remote interfaces with methods callable for clients. This means that Citrus needs to support all your remote interfaces with method arguments and return values. The Citrus RMI server is able to bind your remote interfaces to a service registry. All incoming RMI client method calls are automatically accepted and the method arguments are converted into a Citrus XML service invocation representation. The RMI method call is then passed to the running test for validation.

+
+
+

Let us have a look at the Citrus RMI server component and how you can add it to the Spring application context.

+
+
+
+
<citrus-rmi:server id="rmiServer"
+      host="localhost"
+      port="1099"
+      interface="org.citrusframework.rmi.remote.NewsService"
+      binding="newService"
+      create-registry="true"
+      auto-start="true"/>
+
+
+
+

The RMI server component uses properties such as host and port to define the service registry. By default Citrus will connect to this service registry and bind its remote interfaces to it. With the attribute create-registry Citrus can also create the registry for you.

+
+
+

You have to give Citrus the fully qualified remote interface name so Citrus can bind it to the service registry and handle incoming method calls properly. In your test case you can then receive the incoming method calls on the server in order to perform validation steps.

+
+
+
Java
+
+
@CitrusTest
+public void rmiMessageTest() {
+    $(receive(rmiServer)
+        .message(RmiMessage.invocation(NewsService.class, "getNews"))
+    );
+}
+
+
+
+
XML
+
+
<test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="rmiServer">
+            <message>
+                <body>
+                    <payload>
+                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
+                          <method>getNews</method>
+                        </service-invocation>
+                    </payload>
+                </body>
+                <headers>
+                    <header name="citrus_rmi_interface" value="org.citrusframework.rmi.remote.NewsService"/>
+                    <header name="citrus_rmi_method" value="getNews"/>
+                </headers>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RmiMessageTest
+actions:
+  - receive:
+      endpoint: "rmiServer"
+      message:
+        body: |
+          <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+              <remote>org.citrusframework.rmi.remote.NewsService</remote>
+              <method>getNews</method>
+          </service-invocation>
+        headers:
+          - name: citrus_rmi_interface
+            value: "org.citrusframework.rmi.remote.NewsService"
+          - name: citrus_rmi_method
+            value: "getNews"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RmiMessageTest">
+        <actions>
+            <receive endpoint="rmiServer">
+                <message>
+                    <payload>
+                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
+                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
+                          <method>getNews</method>
+                        </service-invocation>
+                    </payload>
+                </message>
+                <header>
+                    <element name="citrus_rmi_interface" value="org.citrusframework.rmi.remote.NewsService"/>
+                    <element name="citrus_rmi_method" value="getNews"/>
+                </header>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

As you can see Citrus converts the incoming service invocation to a special XML representation which is passed as message payload to the test. As this is plain XML you can verify the RMI message content as usual using Citrus variables, functions and validation matchers.

+
+
+

Since we have received the method call we need to provide some return value for the client. As usual we can specify the method return value with some XML representation.

+
+
+
Java
+
+
@CitrusTest
+public void rmiMessageTest() {
+    $(send(rmiServer)
+        .message(RmiMessage.result("This is news from RMI!"))
+    );
+}
+
+
+
+
XML
+
+
<test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="rmiServer">
+            <message>
+                <body>
+                    <payload>
+                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
+                            <object type="java.lang.String" value="This is news from RMI!"/>
+                        </service-result>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RmiMessageTest
+actions:
+  - send:
+      endpoint: "rmiServer"
+      message:
+        body: |
+          <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
+            <object type="java.lang.String" value="This is news from RMI!"/>
+          </service-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RmiMessageTest">
+        <actions>
+            <send endpoint="rmiServer">
+                <message>
+                    <payload>
+                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
+                            <object type="java.lang.String" value="This is news from RMI!"/>
+                        </service-result>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The service result is defined as object with a type and value . The Citrus RMI remote interface method will return this value to the calling client. This would complete the successful remote service invocation. At this point we also have to think of choosing to raise some remote exception as service outcome.

+
+
+
Java
+
+
@CitrusTest
+public void rmiMessageTest() {
+    $(send(rmiServer)
+        .message(RmiMessage.exception("Something went wrong"))
+    );
+}
+
+
+
+
XML
+
+
<test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="rmiServer">
+            <message>
+                <body>
+                    <payload>
+                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
+                            <exception>Something went wrong</exception>
+                        </service-result>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: RmiMessageTest
+actions:
+  - send:
+      endpoint: "rmiServer"
+      message:
+        body: |
+          <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
+            <exception>Something went wrong</exception>
+          </service-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="RmiMessageTest">
+        <actions>
+            <send endpoint="rmiServer">
+                <message>
+                    <payload>
+                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
+                            <exception>Something went wrong</exception>
+                        </service-result>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In the example above Citrus will not return some object as service result but raise a java.rmi.RemoteException with respective error message as specified in the test case. The calling client will receive the exception accordingly.

+
+
+
+
+
+

29. JMX support

+
+
+

JMX is a standard Java API for making beans accessible to others in terms of management and remote configuration. JMX is the short term for Java Management Extensions and is often used in JEE application servers to manage bean attributes and operations from outside (e.g. another JVM). A managed bean server hosts multiple managed beans for JMX access. Remote connections to JMX can be realized with RMI (Remote method invocation) capabilities.

+
+
+

Citrus is able to connect to JMX managed beans as client and server. As a client Citrus can invoke managed bean operations and read write managed bean attributes. As a server Citrus is able to expose managed beans as mbean server. Clients can access those Citrus managed beans and get proper response objects as result. Doing so you can use the JVM platform managed bean server or some RMI registry for providing remote access.

+
+
+ + + + + +
+ + +The JMX components in Citrus are kept in a separate Maven module. So you should check that the module is available as Maven dependency in your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-jmx</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

As usual Citrus provides a customized jmx configuration schema that is used in Spring configuration files. Simply include the citrus-jmx namespace in the configuration XML files as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns:citrus="http://www.citrusframework.org/schema/config"
+      xmlns:citrus-jmx="http://www.citrusframework.org/schema/jmx/config"
+      xsi:schemaLocation="
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans.xsd
+      http://www.citrusframework.org/schema/config
+      http://www.citrusframework.org/schema/config/citrus-config.xsd
+      http://www.citrusframework.org/schema/jmx/config
+      http://www.citrusframework.org/schema/jmx/config/citrus-jmx-config.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

Now you are ready to use the customized Http configuration elements with the citrus-jmx namespace prefix.

+
+
+

Next sections describe the JMX message support in Citrus in more detail.

+
+
+

29.1. JMX client

+
+

On the client side we want to call some managed bean by either accessing managed attributes with read/write or by invoking a managed bean operation. For proper mbean server connectivity we should specify a client component for JMX that sends out mbean invocation calls.

+
+
+
+
<citrus-jmx:client id="jmxClient"
+      server-url="platform"/>
+
+
+
+

The client component specifies the target managed bean server that we want to connect to. In this example we are using the JVM platform mbean server. This means we are able to access all JVM managed beans such as Memory, Threading and Logging. In addition to that we can access all custom managed beans that were exposed to the platform mbean server.

+
+
+

In most cases you may want to access managed beans on a different JVM or application server. So we need some remote connection to the foreign mbean server.

+
+
+
+
<citrus-jmx:client id="jmxClient"
+      server-url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"
+      username="user"
+      password="s!cr!t"
+      auto-reconnect="true"
+      delay-on-reconnect="5000"/>
+
+
+
+

In this example above we connect to a remote mbean server via RMI using the default RMI registry localhost:1099 and the service name jmxrmi . Citrus is able to handle different remote transport protocols. Just define those in the server-url .

+
+
+

Now that we have setup the client component we can use it in a test case to access a managed bean.

+
+
+
Java
+
+
@CitrusTest
+public void jmxMessageTest() {
+    $(send(jmxClient)
+        .message(JmxMessage.invocation("java.lang:type=Memory")
+            .attribute("Verbose"))
+    );
+}
+
+
+
+
XML
+
+
<test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="jmxClient">
+            <message>
+                <body>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>java.lang:type=Memory</mbean>
+                          <attribute name="Verbose"/>
+                        </mbean-invocation>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JmxMessageTest
+actions:
+  - send:
+      endpoint: "jmxClient"
+      message:
+        body: |
+          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+              <mbean>java.lang:type=Memory</mbean>
+              <attribute name="Verbose"/>
+          </mbean-invocation>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JmxMessageTest">
+        <actions>
+            <send endpoint="jmxClient">
+                <message>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>java.lang:type=Memory</mbean>
+                          <attribute name="Verbose"/>
+                        </mbean-invocation>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

As you can see we just used a normal send action referencing the jmx client component that we have just added. The message payload is an XML representation of the managed bean access. This is a special Citrus XML representation. Citrus will convert this XML payload to the actuel managed bean access. In the example above we try to access a managed bean with object name java.lang:type=Memory . The object name is defined in JMX specification and consists of a key java.lang:type and a value Memory . So we identify the managed bean on the server by its type.

+
+
+

Now that we have access to the managed bean we can read its managed attributes such as Verbose . This is a boolean type attribute so the mbean invocation result will be a respective Boolean object. We can validate the managed bean attribute access in a receive action.

+
+
+
Java
+
+
@CitrusTest
+public void jmxMessageTest() {
+    $(receive(jmxClient)
+        .message(JmxMessage.result(false))
+    );
+}
+
+
+
+
XML
+
+
<test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="jmxClient">
+            <message>
+                <body>
+                    <payload>
+                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <object type="java.lang.Boolean" value="false"/>
+                        </mbean-result>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JmxMessageTest
+actions:
+  - receive:
+      endpoint: "jmxClient"
+      message:
+        body: |
+          <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
+              <object type="java.lang.Boolean" value="false"/>
+          </mbean-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JmxMessageTest">
+        <actions>
+            <receive endpoint="jmxClient">
+                <message>
+                    <payload>
+                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <object type="java.lang.Boolean" value="false"/>
+                        </mbean-result>
+                    </payload>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In the sample above we receive the mbean result and expect a java.lang.Boolean object return value. The return value content is also validated within the mbean result payload.

+
+
+

Some managed bean attributes might also be settable for us. So we can define the attribute access as write operation by specifying a value in the send action payload.

+
+
+
Java
+
+
@CitrusTest
+public void jmxMessageTest() {
+    $(send(jmxClient)
+        .message(JmxMessage.invocation("java.lang:type=Memory")
+            .attribute("Verbose", true))
+    );
+}
+
+
+
+
XML
+
+
<test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="jmxClient">
+            <message>
+                <body>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>java.lang:type=Memory</mbean>
+                          <attribute name="Verbose" value="true" type="java.lang.Boolean"/>
+                        </mbean-invocation>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JmxMessageTest
+actions:
+  - send:
+      endpoint: "jmxClient"
+      message:
+        body: |
+          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+              <mbean>java.lang:type=Memory</mbean>
+              <attribute name="Verbose" value="true" type="java.lang.Boolean"/>
+          </mbean-invocation>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JmxMessageTest">
+        <actions>
+            <send endpoint="jmxClient">
+                <message>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>java.lang:type=Memory</mbean>
+                          <attribute name="Verbose" value="true" type="java.lang.Boolean"/>
+                        </mbean-invocation>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Now we have write access to the managed attribute Verbose . We do specify the value and its type java.lang.Boolean . This is how we can set attribute values on managed beans.

+
+
+

Last not least we are able to access managed bean operations.

+
+
+
Java
+
+
@CitrusTest
+public void jmxMessageTest() {
+    $(send(jmxClient)
+        .message(JmxMessage.invocation("org.citrusframework.jmx.mbean:type=HelloBean")
+            .operation("sayHello")
+            .parameter("Hello JMX!"))
+    );
+}
+
+
+
+
XML
+
+
<test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="jmxClient">
+            <message>
+                <body>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
+                          <operation name="sayHello">
+                            >parameter>
+                              >param type="java.lang.String" value="Hello JMX!"/>
+                            >/parameter>
+                          >/operation>
+                        </mbean-invocation>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JmxMessageTest
+actions:
+  - send:
+      endpoint: "jmxClient"
+      message:
+        body: |
+          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+              <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
+              <operation name="sayHello">
+                >parameter>
+                  >param type="java.lang.String" value="Hello JMX!"/>
+                >/parameter>
+              >/operation>
+          </mbean-invocation>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JmxMessageTest">
+        <actions>
+            <send endpoint="jmxClient">
+                <message>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
+                          <operation name="sayHello">
+                            >parameter>
+                              >param type="java.lang.String" value="Hello JMX!"/>
+                            >/parameter>
+                          >/operation>
+                        </mbean-invocation>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In the example above we access a custom managed bean and invoke its operation sayHello . We are also using operation parameters for the invocation. This should call the managed bean operation and return its result if any as usual.

+
+
+

This completes the basic JMX managed bean access as client. Now we also want to discuss the server side were Citrus is able to provide managed beans for others

+
+
+
+

29.2. JMX server

+
+

The server side is always a little bit more tricky because we need to simulate custom managed bean access as a server. First of all Citrus provides a server component that specifies the connection properties for clients such as transport protocols, ports and mbean object names. Let’s create a new server that accepts incoming requests via RMI on a remote registry localhost:1099 .

+
+
+
+
<citrus-jmx:server id="jmxServer"
+      server-url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi">
+    <citrus-jmx:mbeans>
+        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.HelloBean"/>
+        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.NewsBean" objectDomain="org.citrusframework.news" objectName="name=News"/>
+    </citrus-jmx:mbeans>
+</citrus-jmx:server>
+
+
+
+

As usual we define a server-url that controls the JMX connector access to the mbean server. In this example above we open a JMX RMI connector for clients using the registry localhost:1099 and the service name jmxrmi By default Citrus will not attempt to create this registry automatically so the registry has to be present before the server start up. With the optional server property create-registry set to true you can auto create the registry when the server starts up. These properties do only apply when using a remote JMX connector server.

+
+
+

Besides using the whole server-url as property we can also construct the connection by host, port, protocol and binding properties.

+
+
+
+
<citrus-jmx:server id="jmxServer"
+      host="localhost"
+      port="1099"
+      protocol="rmi"
+      binding="jmxrmi">
+    <citrus-jmx:mbeans>
+        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.HelloBean"/>
+        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.NewsBean" objectDomain="org.citrusframework.news" objectName="name=News"/>
+    </citrus-jmx:mbeans>
+</citrus-jmx:server>
+
+
+
+

On last thing to mention is that we could have also used platform as server-url in order to use the JVM platform mbean server instead.

+
+
+

Now that we clarified the connectivity we need to talk about how to define the managed beans that are available on our JMX mbean server. This is done as nested mbean configuration elements. Here the managed bean definitions describe the managed bean with its objectDomain, objectName, operations and attributes. The most convenient way of defining such managed bean definitions is to give a bean type which is the fully qualified class name of the managed bean. Citrus will use the package name and class name for proper objectDomain and objectName construction.

+
+
+

Let’s have a closer look at the first mbean definition in the example above. So the first managed bean is defined by its class name org.citrusframework.jmx.mbean.HelloBean and therefore is accessible using the objectName org.citrusframework.jmx.mbean:type=HelloBean . In addition to that Citrus will read the class information such as available methods, getters and setters for constructing a proper MBeanInfo. In the second managed bean definition in our example we have used additional custom objectDomain and objectName values. So the NewsBean will be accessible with org.citrusframework.news:name=News on the managed bean server.

+
+
+

This is how we can define the bindings of managed beans and what clients need to search for when finding and accessing the managed beans on the server. When clients try to find the managed beans they have to use proper objectNames accordingly. ObjectNames that are not defined on the server will be rejected with managed bean not found error.

+
+
+

Right now we have to use the qualified class name of the managed bean in the definition. What happens if we do not have access to that mbean class or if there is not managed bean interface available at all? Citrus provides a generic managed bean that is able to handle any managed bean interaction. The generic bean implementation needs to know the managed operations and attributes though. So let’s define a new generic managed bean on our server:

+
+
+
+
<citrus-jmx:server id="jmxServer"
+server-url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi">
+    <citrus-jmx:mbeans>
+        <citrus-jmx:mbean name="fooBean" objectDomain="foo.object.domain" objectName="type=FooBean">
+            <citrus-jmx:operations>
+                <citrus-jmx:operation name="fooOperation">
+                    <citrus-jmx:parameter>
+                        <citrus-jmx:param type="java.lang.String"/>
+                        <citrus-jmx:param type="java.lang.Integer"/>
+                    </citrus-jmx:parameter>
+                </citrus-jmx:operation>
+                <citrus-jmx:operation name="barOperation"/>
+            </citrus-jmx:operations>
+            <citrus-jmx:attributes>
+                <citrus-jmx:attribute name="fooAttribute" type="java.lang.String"/>
+                <citrus-jmx:attribute name="barAttribute" type="java.lang.Boolean"/>
+            </citrus-jmx:attributes>
+        </citrus-jmx:mbean>
+    </citrus-jmx:mbeans>
+</citrus-jmx:server>
+
+
+
+

The generic bean definition needs to define all operations and attributes that are available for access. Up to now we are restricted to using Java base types when defining operation parameter and attribute return types. There is actually no way to define more complex return types. Nevertheless Citrus is now able to expose the managed bean for client access without having to know the actual managed bean implementation.

+
+
+

Now we can use the server component in a test case to receive some incoming managed bean access.

+
+
+
Java
+
+
@CitrusTest
+public void jmxMessageTest() {
+    $(receive(jmxServer)
+        .message(JmxMessage.invocation("org.citrusframework.jmx.mbean:type=HelloBean")
+            .operation("sayHello")
+            .parameter("Hello JMX!"))
+    );
+}
+
+
+
+
XML
+
+
<test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="jmxServer">
+            <message>
+                <body>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
+                          <operation name="sayHello">
+                            >parameter>
+                              >param type="java.lang.String" value="Hello JMX!"/>
+                            >/parameter>
+                          </operation>
+                        </mbean-invocation>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JmxMessageTest
+actions:
+  - receive:
+      endpoint: "jmxServer"
+      message:
+        body: |
+          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+              <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
+              <operation name="sayHello">
+                >parameter>
+                  >param type="java.lang.String" value="Hello JMX!"/>
+                >/parameter>
+              </operation>
+          </mbean-invocation>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JmxMessageTest">
+        <actions>
+            <receive endpoint="jmxServer">
+                <message>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
+                          <operation name="sayHello">
+                            >parameter>
+                              >param type="java.lang.String" value="Hello JMX!"/>
+                            >/parameter>
+                          </operation>
+                        </mbean-invocation>
+                    </payload>
+                </message>
+            </receive>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

In this very first example we expect a managed bean access to the bean org.citrusframework.jmx.mbean:type=HelloBean . We further expect the operation sayHello to be called with respective parameter values. Now we have to define the operation result that will be returned to the calling client as operation result.

+
+
+
Java
+
+
@CitrusTest
+public void jmxMessageTest() {
+    $(send(jmxServer)
+        .message(JmxMessage.result("Hello from JMX!"))
+    );
+}
+
+
+
+
XML
+
+
<test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="jmxServer">
+            <message>
+                <body>
+                    <payload>
+                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
+                            <object type="java.lang.String" value="Hello from JMX!"/>
+                        </mbean-result>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JmxMessageTest
+actions:
+  - send:
+      endpoint: "jmxServer"
+      message:
+        body: |
+          <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
+            <object type="java.lang.String" value="Hello from JMX!"/>
+          </mbean-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JmxMessageTest">
+        <actions>
+            <send endpoint="jmxServer">
+                <message>
+                    <payload>
+                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
+                            <object type="java.lang.String" value="Hello from JMX!"/>
+                        </mbean-result>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The operation returns a String Hello from JMX! . This is how we can expect operation calls on managed beans. Now we already have seen that managed beans also expose attributes. The next example is handling incoming attribute read access.

+
+
+
Java
+
+
@CitrusTest
+public void jmxMessageTest() {
+    $(receive(jmxServer)
+        .message(JmxMessage.invocation("org.citrusframework.news:name=News")
+            .attribute("newsCount"))
+    );
+
+    $(send(jmxServer)
+        .message(JmxMessage.result(100))
+    );
+}
+
+
+
+
XML
+
+
<test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <receive endpoint="jmxServer">
+            <message>
+                <body>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>org.citrusframework.news:name=News</mbean>
+                            >attribute name="newsCount"/>
+                        </mbean-invocation>
+                    </payload>
+                </body>
+            </message>
+        </receive>
+        <send endpoint="jmxServer">
+            <message>
+                <body>
+                    <payload>
+                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
+                            <object type="java.lang.Integer" value="100"/>
+                        </mbean-result>
+                    </payload>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JmxMessageTest
+actions:
+  - receive:
+      endpoint: "jmxServer"
+      message:
+        body: |
+          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+              <mbean>org.citrusframework.news:name=News</mbean>
+                >attribute name="newsCount"/>
+          </mbean-invocation>
+  - send:
+      endpoint: "jmxServer"
+      message:
+        body: |
+          <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
+            <object type="java.lang.Integer" value="100"/>
+          </mbean-result>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="JmxMessageTest">
+        <actions>
+            <receive endpoint="jmxServer">
+                <message>
+                    <payload>
+                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
+                          <mbean>org.citrusframework.news:name=News</mbean>
+                            >attribute name="newsCount"/>
+                        </mbean-invocation>
+                    </payload>
+                </message>
+            </receive>
+
+            <send endpoint="jmxServer">
+                <message>
+                    <payload>
+                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
+                            <object type="java.lang.Integer" value="100"/>
+                        </mbean-result>
+                    </payload>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The receive action expects read access to the NewsBean attribute newsCount and returns a result object of type java.lang.Integer . This way we can expect all attribute access to our managed beans. Write operations will have an attribute value specified.

+
+
+

This completes the JMX server capabilities with managed bean access on operations and attributes.

+
+
+
+
+
+

30. Zookeeper support

+
+
+

Citrus provides configuration components and test actions for interacting with Zookeeper. The Citrus Zookeeper client component executes commands like create-node, check node-exists, delete-node, get node-data or set node-data. As a user you can execute Zookeeper commands as part of a Citrus test and validate possible command results.

+
+
+ + + + + +
+ + +The Zookeeper test components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +
+
+
+
+
<dependency>
+      <groupId>org.citrusframework</groupId>
+      <artifactId>citrus-zookeeper</artifactId>
+      <version>${citrus.version}</version>
+      </dependency>
+
+
+
+

Citrus provides a "citrus-zookeeper" configuration namespace and schema definition for Zookeeper related components and actions. Include this namespace into your Spring configuration in order to use the Citrus zookeeper configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns:citrus-zookeeper="http://www.citrusframework.org/schema/zookeeper/config"
+      xsi:schemaLocation="
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans.xsd
+      http://www.citrusframework.org/schema/zookeeper/config
+      http://www.citrusframework.org/schema/zookeeper/config/citrus-zookeeper-config.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

After that you are able to use customized Citrus XML elements in order to define the Spring beans.

+
+
+

30.1. Zookeeper client

+
+

Before you can interact with a Zookeeper server you have to configure the Zookeeper client. A sample configuration is provided below describing the configuration options available:

+
+
+
+
<citrus-zookeeper:client id="zookeeperClient"
+                               url="http://localhost:21118"
+                               timeout="2000"/>
+
+
+
+

This is a typical client configuration for connecting to a Zookeeper server. Now you are able to execute several commands. These commands will be sent to the Zookeeper server for execution.

+
+
+
+

30.2. Zookeeper commands

+
+

See below all available Zookeeper commands that a Citrus client is able to execute.

+
+
+
+
info: Retrieves the current state of the client connection
+create: Creates a znode in a specified path of the ZooKeeper namespace
+delete: Deletes a znode from a specified path of the ZooKeeper namespace
+exists: Checks if a znode exists in the path
+children: Gets a list of children of a znode
+get: Gets the data associated with a znode
+set: Sets/writes data into the data field of a znode
+
+
+
+

Before we see some of these commands in action we have to add a new test namespace to our test case when using the XML DSL.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+      xmlns:zookeeper="http://www.citrusframework.org/schema/zookeeper/testcase"
+      xsi:schemaLocation="
+      http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans.xsd
+      http://www.citrusframework.org/schema/zookeeper/testcase
+      http://www.citrusframework.org/schema/zookeeper/testcase/citrus-zookeeper-testcase.xsd">
+
+      [...]
+
+      </beans>
+
+
+
+

We added the Zookeeper namespace with prefix zookeeper: so now we can start to add special test actions to the test case:

+
+
+
XML DSL
+
+
<zookeeper:create zookeeper-client="zookeeperClient" path="/${randomString}" acl="OPEN_ACL_UNSAFE" mode="PERSISTENT">
+  <zookeeper:data>foo</zookeeper:data>
+  <zookeeper:expect>
+    <zookeeper:result>
+      <![CDATA[
+        {
+          "responseData":{
+              "path":"/${randomString}"
+          }
+        }
+      ]]>
+    </zookeeper:result>
+  </zookeeper:expect>
+</zookeeper:create>
+
+<zookeeper:get zookeeper-client="zookeeperClient" path="/${randomString}">
+  <zookeeper:expect>
+    <zookeeper:result>
+      <![CDATA[
+      {
+        "responseData":{
+          "data":"foo"
+        }
+      }
+      ]]>
+    </zookeeper:result>
+  </zookeeper:expect>
+</zookeeper:getData>
+
+<zookeeper:set zookeeper-client="zookeeperClient" path="/${randomString}">
+  <zookeeper:data>bar</zookeeper:data>
+</zookeeper:setData>
+
+
+
+

When using the Java DSL we can directly configure the commands with a fluent API.

+
+
+
Java DSL
+
+
@CitrusTest
+public void testZookeeper() {
+    variable("randomString", "citrus:randomString(10)");
+
+    zookeeper()
+        .create("/${randomString}", "foo")
+        .acl("OPEN_ACL_UNSAFE")
+        .mode("PERSISTENT")
+        .validateCommandResult(new CommandResultCallback<ZooResponse>() {
+            @Override
+            public void doWithCommandResult(ZooResponse result, TestContext context) {
+                Assert.assertEquals(result.getResponseData().get("path"), context.replaceDynamicContentInString("/${randomString}"));
+            }
+        });
+
+    zookeeper()
+        .get("/${randomString}")
+        .validateCommandResult(new CommandResultCallback<ZooResponse>() {
+            @Override
+            public void doWithCommandResult(ZooResponse result, TestContext context) {
+                Assert.assertEquals(result.getResponseData().get("version"), 0);
+            }
+        });
+
+    zookeeper()
+        .set("/${randomString}", "bar");
+}
+
+
+
+

The examples above create a new znode in Zookeeper using a randomString as path. We can get and set the data with expecting and validating the result of the Zookeeper server. This is basically the idea of integrating Zookepper operations to a Citrus test. This opens the gate to manage Zookeeper related entities within a Citrus test. We can manipulate and validate the znodes on the Zookeeper instance.

+
+
+

Zookeeper keeps its nodes in a hierarchical storage. This means a znode can have children and we can add and remove those. In Citrus you can get all children of a znode and manage those within the test:

+
+
+
XML DSL
+
+
<zookeeper:create zookeeper-client="zookeeperClient" path="/${randomString}/child1" acl="OPEN_ACL_UNSAFE" mode="EPHEMERAL">
+  <zookeeper:data></zookeeper:data>
+  <zookeeper:expect>
+    <zookeeper:result>
+      <![CDATA[
+        {
+          "responseData":{
+              "path":"/${randomString}/child1"
+          }
+        }
+      ]]>
+    </zookeeper:result>
+  </zookeeper:expect>
+</zookeeper:create>
+
+<zookeeper:create zookeeper-client="zookeeperClient" path="/${randomString}/child2" acl="OPEN_ACL_UNSAFE" mode="EPHEMERAL">
+  <zookeeper:data></zookeeper:data>
+  <zookeeper:expect>
+    <zookeeper:result>
+      <![CDATA[
+        {
+          "responseData":{
+              "path":"/${randomString}/child2"
+          }
+        }
+      ]]>
+    </zookeeper:result>
+  </zookeeper:expect>
+</zookeeper:create>
+
+<zookeeper:children zookeeper-client="zookeeperClient" path="/${randomString}">
+  <zookeeper:expect>
+    <zookeeper:result>
+      <![CDATA[
+        {
+          "responseData":{
+              "children":["child1","child2"]
+          }
+        }
+      ]]>
+    </zookeeper:result>
+  </zookeeper:expect>
+</zookeeper:children>
+
+
+
+
Java DSL
+
+
zookeeper()
+    .create("/${randomString}/child1", "")
+    .acl("OPEN_ACL_UNSAFE")
+    .mode("PERSISTENT")
+    .validateCommandResult(new CommandResultCallback<ZooResponse>() {
+        @Override
+        public void doWithCommandResult(ZooResponse result, TestContext context) {
+            Assert.assertEquals(result.getResponseData().get("path"), context.replaceDynamicContentInString("/${randomString}/child1"));
+        }
+    });
+
+zookeeper()
+    .create("/${randomString}/child2", "")
+    .acl("OPEN_ACL_UNSAFE")
+    .mode("PERSISTENT")
+    .validateCommandResult(new CommandResultCallback<ZooResponse>() {
+        @Override
+        public void doWithCommandResult(ZooResponse result, TestContext context) {
+            Assert.assertEquals(result.getResponseData().get("path"), context.replaceDynamicContentInString("/${randomString}/child2"));
+        }
+    });
+
+zookeeper()
+    .children("/${randomString}")
+    .validateCommandResult(new CommandResultCallback<ZooResponse>() {
+        @Override
+        public void doWithCommandResult(ZooResponse result, TestContext context) {
+            Assert.assertEquals(result.getResponseData().get("children").toString(), "[child1, child2]");
+        }
+    });
+
+
+
+
+
+
+

31. Spring Restdocs support

+
+
+

Spring Restdocs project helps to easily generate API documentation for RESTful services. While messages are exchanged the Restdocs library generates request/response snippets and API documentation. You can add the Spring Restdocs documentation to the Citrus client components for Http and SOAP endpoints.

+
+
+ + + + + +
+ + +The Spring Restdocs support components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-restdocs</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

For easy configuration Citrus has created a separate namespace and schema definition for Spring Restdocs related documentation. Include this namespace into your Spring configuration in order to use the Citrus Restdocs configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows.

+
+
+
+
<spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
+     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+     xmlns="http://www.citrusframework.org/schema/cucumber/testcase"
+     xsi:schemaLocation="
+     http://www.springframework.org/schema/beans
+     http://www.springframework.org/schema/beans/spring-beans.xsd
+     http://www.citrusframework.org/schema/restdocs/config
+     http://www.citrusframework.org/schema/restdocs/config/citrus-restdocs-config.xsd">
+
+    [...]
+
+</spring:beans>
+
+
+
+

After that you are able to use customized Citrus XML elements in order to define the Spring beans.

+
+
+

31.1. Spring Restdocs using Http

+
+

First of all we concentrate on adding the Spring Restdocs feature to Http client communication. The next sample configuration uses the new Spring Restdocs components in Citrus:

+
+
+
+
<citrus-restdocs:documentation id="restDocumentation"
+                                              output-directory="target/citrus-docs/generated-snippets"
+                                              identifier="rest-docs/{method-name}"/>
+
+
+
+

The above component adds a new documentation configuration. Behind the scenes the component creates a new restdocs configurer and a client interceptor. We can reference the new restdocs component in citrus-http client components like this:

+
+
+
+
<citrus-http:client id="httpClient"
+          request-url="http://localhost:8080/test"
+          request-method="POST"
+          interceptors="restDocumentation"/>
+
+
+
+

The Spring Restdocs documentation component acts as a client interceptor. Every time the client component is used to send and receive a message the restdocs interceptor will automatically create its API documentation. The configuration identifier attribute describes the output format rest-docs/{method-name} which results in a folder layout like this:

+
+
+
+
target/citrus-docs
+  |- rest-docs
+    |- test-a
+      |- curl-request.adoc
+      |- http-request.adoc
+      |- http-response.adoc
+    |- test-b
+      |- curl-request.adoc
+      |- http-request.adoc
+      |- http-response.adoc
+    |- test-c
+      |- curl-request.adoc
+      |- http-request.adoc
+      |- http-response.adoc
+
+
+
+

The example above is the result of three test cases each of them performing a client Http request/response communication. Each test message exchange is documented with separate files:

+
+
+
curl-request.adoc
+
+
$ curl 'http://localhost:8080/test' -i -X POST -H 'Accept: application/xml' -H 'CustomHeaderId: 123456789' -H 'Content-Type: application/xml;charset=UTF-8' -H 'Accept-Charset: utf-8' -d '<testRequestMessage>
+    <text>Hello HttpServer>/text>
+</testRequestMessage>'
+
+
+
+

The curl file represents the client request as curl command and can be seen as a sample to reproduce the request.

+
+
+
http-request.adoc
+
+
POST /test HTTP/1.1
+Accept: application/xml
+CustomHeaderId: 123456789
+Content-Type: application/xml;charset=UTF-8
+Content-Length: 118
+Accept-Charset: utf-8
+Host: localhost
+
+<testRequestMessage>
+    <text>Hello HttpServer>/text>
+</testRequestMessage>
+
+
+
+

The http-request.adoc file represents the sent message data for the client request. The respective http-response.adoc represents the response that was sent to the client.

+
+
+
http-response.adoc
+
+
HTTP/1.1 200 OK
+Date: Tue, 07 Jun 2016 12:10:46 GMT
+Content-Type: application/xml;charset=UTF-8
+Accept-Charset: utf-8
+Content-Length: 122
+Server: Jetty(9.2.15.v20160210)
+
+<testResponseMessage>
+    <text>Hello Citrus!>/text>
+</testResponseMessage>
+
+
+
+

Nice work! We have automatically created snippets for the RESTful API by just adding the interceptor to the Citrus client component. Spring Restdocs components can be combined manually. See the next configuration that uses this approach.

+
+
+
+
<citrus-restdocs:configurer id="restDocConfigurer" output-directory="target/citrus-docs/generated-snippets"/>
+<citrus-restdocs:client-interceptor id="restDocClientInterceptor" identifier="rest-docs/{method-name}"/>
+
+<util:list id="restDocInterceptors">
+    <ref bean="restDocConfigurer"/>
+    <ref bean="restDocClientInterceptor"/>
+</util:list>
+
+
+
+
+
<citrus-http:client id="httpClient"
+          request-url="http://localhost:8080/test"
+          request-method="POST"
+          interceptors="restDocInterceptors"/>
+
+
+
+

What exactly is the difference to the citrus-restdocs:documentation that we have used before? In general there is no difference. Both configurations are identical in its outcome. Why should someone use the second approach then? It is more verbose as we need to also define a list of interceptors. The answer is easy. If you want to combine the restdocs interceptors with other client interceptors in a list then you should use the manual combination approach. We can add basic authentication interceptors for instance to the list of interceptors then. The more comfortable citrus-restdocs:documentation component only supports exclusive restdocs interceptors.

+
+
+
+

31.2. Spring Restdocs using SOAP

+
+

You can use the Spring Restdocs features also for SOAP clients in Citrus. This is a controversy idea as SOAP endpoints are different to RESTful concepts. But at the end SOAP Http communication is Http communication with request and response messages. Why should we miss out the fantastic documentation feature here just because of ideology reasons.

+
+
+

The concept of adding the Spring Restdocs documentation as interceptor to the client is still the same.

+
+
+
+
<citrus-restdocs:documentation id="soapDocumentation"
+                                              type="soap"
+                                              output-directory="target/citrus-docs/generated-snippets"
+                                              identifier="soap-docs/{method-name}"/>
+
+
+
+

We have added a type setting with value soap . And that is basically all we need to do. Now Citrus knows that we would like to add documentation for a SOAP client:

+
+
+
+
<citrus-ws:client id="soapClient"
+      request-url="http://localhost:8080/test"
+      interceptors="soapDocumentation"/>
+
+
+
+

Following from that the soapClient is enabled to generate Spring Restdocs documentation for each request/response. The generated snippets then do represent the SOAP request and response messages.

+
+
+
http-request.adoc
+
+
POST /test HTTP/1.1
+SOAPAction: "test"
+Accept: application/xml
+CustomHeaderId: 123456789
+Content-Type: application/xml;charset=UTF-8
+Content-Length: 529
+Accept-Charset: utf-8
+Host: localhost
+
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+  <SOAP-ENV:Header>
+    <Operation xmlns="http://citrusframework.org/test">sayHello>/Operation>
+  </SOAP-ENV:Header>
+  <SOAP-ENV:Body>
+    <testRequestMessage>
+      <text>Hello HttpServer>/text>
+    </testRequestMessage>
+  </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+
+
+
http-response.adoc
+
+
HTTP/1.1 200 OK
+Date: Tue, 07 Jun 2016 12:10:46 GMT
+Content-Type: application/xml;charset=UTF-8
+Accept-Charset: utf-8
+Content-Length: 612
+Server: Jetty(9.2.15.v20160210)
+
+<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+  <SOAP-ENV:Header>
+    >Operation xmlns="http://citrusframework.org/test">sayHello>/Operation>
+  </SOAP-ENV:Header>
+  <SOAP-ENV:Body>
+    <testResponseMessage>
+      <text>Hello Citrus!>/text>
+    </testResponseMessage>
+  </SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+
+
+

The file names are still using http-request and http-response but the content is clearly the SOAP request/response message data.

+
+
+
+

31.3. Spring Restdocs in Java DSL

+
+

How can we use Spring Restdocs in Java DSL? Of course we have special support in Citrus Java DSL for the Spring Restdocs configuration, too.

+
+
+
Java DSL
+
+
public class RestDocConfigurationIT extends TestNGCitrusTestDesigner {
+
+    @Autowired
+    private TestListeners testListeners;
+
+    private HttpClient httpClient;
+
+    @BeforeClass
+    public void setup() {
+        CitrusRestDocConfigurer restDocConfigurer = CitrusRestDocsSupport.restDocsConfigurer(new ManualRestDocumentation("target/generated-snippets"));
+        RestDocClientInterceptor restDocInterceptor = CitrusRestDocsSupport.restDocsInterceptor("rest-docs/{method-name}");
+
+        httpClient = CitrusEndpoints.http()
+            .client()
+            .requestUrl("http://localhost:8073/test")
+            .requestMethod(HttpMethod.POST)
+            .contentType("text/xml")
+            .interceptors(Arrays.asList(restDocConfigurer, restDocInterceptor))
+            .build();
+
+        testListeners.addTestListener(restDocConfigurer);
+    }
+
+    @Test
+    @CitrusTest
+    public void testRestDocs() {
+        http().client(httpClient)
+            .send()
+            .post()
+            .payload("<testRequestMessage>" +
+                      "<text>Hello HttpServer</text>" +
+                  "</testRequestMessage>");
+
+        http().client(httpClient)
+            .receive()
+            .response(HttpStatus.OK)
+            .payload("<testResponseMessage>" +
+                      "<text>Hello TestFramework</text>" +
+                  "</testResponseMessage>");
+    }
+}
+
+
+
+

The mechanism is quite similar to the XML configuration. We add the Restdocs configurer and interceptor to the list of interceptors for the Http client. If we do this all client communication is automatically documented. The Citrus Java DSL provides some convenient configuration methods in class CitrusRestDocsSupport for creating the configurer and interceptor objects.

+
+
+ + + + + +
+ + +The configurer must be added to the list of test listeners. This is a mandatory step in order to enable the configurer for documentation preparations before each test. Otherwise we would not be able to generate proper documentation. If you are using the XML configuration this is done automatically for you. +
+
+
+
+
+
+

32. Dynamic endpoint components

+
+
+

Endpoints represent the central components in Citrus to send or receive a message on some destination. Usually endpoints get defined in the basic Citrus Spring application context configuration as Spring bean components. In some cases this might be over engineering as the tester just wants to send or receive a message. In particular this is done when doing sanity checks in server endpoints while debugging a certain scenario.

+
+
+

With endpoint components you are able to create the Citrus endpoint for sending and receiving a message at test runtime. There is no additional configuration or Spring bean component needed. You just use the endpoint uri in a special naming convention and Citrus will create the endpoint for you. Let us see a first example of this scenario:

+
+
+
+
<testcase name="DynamicEndpointTest">
+    <actions>
+        <send endpoint="jms:Hello.Queue?timeout=10000">
+            <message>
+                <payload>
+                [...]
+                </payload>
+            </message>
+        </send>
+
+        <receive endpoint="jms:Hello.Response.Queue?timeout=5000">
+            <message>
+                <payload>
+                [...]
+                </payload>
+            </message>
+        </receive>
+    </actions>
+</testcase>
+
+
+
+

As you can see the endpoint uri just goes into the test case action in substitution to the usual endpoint reference name. Instead of referencing a bean id that points to the previously configured Citrus endpoint we use the endpoint uri directly. The endpoint uri should give all information to create the endpoint at runtime. In the example above we use a keyword jms: which tells Citrus that we need to create a JMS message endpoint. Secondly we give the JMS destination name Hello.Queue which is a mandatory part of the endpoint uri when using the JMS component. The optional timeout parameter completed the uri. Citrus is able to create the JMS endpoint at runtime sending the message to the defined destination via JMS.

+
+
+

Of course this mechanism is not limited to JMS endpoints. We can use all default Citrus message transports in the endpoint uri. Just pick the right keyword that defines the message transport to use. Here is a list of supported keywords:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+jms + +

Creates a JMS endpoint for sending and receiving message to a queue or topic

+
+channel + +

Creates a channel endpoint for sending and receiving messages using an in memory Spring Integration message channel

+
+http + +

Creates an HTTP client for sending a request to some server URL synchronously waiting for the response message

+
+ws + +

Creates a Web Socket client for sending messages to or receiving messages from a Web Socket server

+
+soap + +

Creates a SOAP WebService client that send a proper SOAP message to the server URL and waits for the synchronous response to arrive

+
+ssh + +

Creates a new ssh client for publishing a command to the server

+
+mail + +

or smtp: Creates a new mail client for sending a mail mime message to an SMTP server

+
+camel + +

Creates a new Apache Camel endpoint for sending and receiving Camel exchanges both to and from Camel routes.

+
+vertx + +

or eventbus: Creates a new Vert.x instance sending and receiving messages with the network event bus

+
+rmi + +

Creates a new RMI client instance sending and receiving messages for method invocation on remote interfaces

+
+jmx + +

Creates a new JMX client instance sending and receiving messages to and from a managed bean server.

+
+
+
+

Depending on the message transport we have to add mandatory parameters to the endpoint uri. In the JMS example we had to specify the destination name. The mandatory parameters are always part of the endpoint uri. Optional parameters can be added as key value pairs to the endpoint uri. The available parameters depend on the endpoint keyword that you have chosen. See these example endpoint uri expressions:

+
+
+
+
    jms:queuename?connectionFactory=specialConnectionFactory&timeout=10000
+    jms:topic:topicname?connectionFactory=topicConnectionFactory
+    jms:sync:queuename?connectionFactory=specialConnectionFactory&pollingInterval=100&replyDestination=myReplyDestination
+
+    channel:channelName
+    channel:sync:channelName
+    channel:channelName?timeout=10000&channelResolver=myChannelResolver
+
+    http:localhost:8088/test
+    http://localhost:8088/test
+    http:localhost:8088?requestMethod=GET&timeout=10000&errorHandlingStrategy=throwsException&requestFactory=myRequestFactory
+    http://localhost:8088/test?requestMethod=DELETE&customParam=foo
+
+    websocket:localhost:8088/test
+    websocket://localhost:8088/test
+    ws:localhost:8088/test
+    ws://localhost:8088/test
+
+    soap:localhost:8088/test
+    soap:localhost:8088?timeout=10000&errorHandlingStrategy=propagateError&messageFactory=myMessageFactory
+
+    mail:localhost:25000
+    smtp://localhost:25000
+    smtp://localhost?timeout=10000&username=foo&password=1234&mailMessageMapper=myMapper
+
+    ssh:localhost:2200
+    ssh://localhost:2200?timeout=10000&strictHostChecking=true&user=foo&password=12345678
+
+    rmi://localhost:1099/someService
+    rmi:localhost/someService&timeout=10000
+
+    jmx:rmi:///jndi/rmi://localhost:1099/someService
+    jmx:platform&timeout=10000
+
+    camel:direct:address
+    camel:seda:address
+    camel:jms:queue:someQueue?connectionFactory=myConnectionFactory
+    camel:activemq:queue:someQueue?concurrentConsumers=5&destination.consumer.prefetchSize=50
+    camel:controlbus:route?routeId=myRoute&action=status
+
+    vertx:addressName
+    vertx:addressName?port=10105&timeout=10000&pubSubDomain=true
+    vertx:addressName?vertxInstanceFactory=vertxFactory
+
+
+
+

The optional parameters get directly set as endpoint configuration. You can use primitive values as well as Spring bean id references. Citrus will automatically detect the target parameter type and resolve the value to a Spring bean in the application context if necessary. If you use some unknown parameter Citrus will raise an exception at runtime as the endpoint could not be created properly.

+
+
+

In synchronous communication we have to reuse endpoint components in order to receive synchronous messages on reply destinations. This is a problem when using dynamic endpoints as the endpoints get created at runtime. Citrus uses a caching of endpoints that get created at runtime. Following from that we have to use the exact same endpoint uri in your test case in order to get the cached endpoint instance. With this little trick synchronous communication will work just as it is done with static endpoint components. Have a look at this sample test:

+
+
+
+
<testcase name="DynamicEndpointTest">
+    <actions>
+        <send endpoint="jms:sync:Hello.Sync.Queue">
+            <message>
+                <payload>
+                [...]
+                </payload>
+            </message>
+        </send>
+
+        <receive endpoint="jms:sync:Hello.Sync.Queue">
+            <message>
+                <payload>
+                [...]
+                </payload>
+            </message>
+        </receive>
+    </actions>
+</testcase>
+
+
+
+

As you can see we used the exact dynamic endpoint uri in both send and receive actions. Citrus is then able to reuse the same dynamic endpoint and the synchronous reply will be received as expected. However the reuse of exactly the same endpoint uri might get annoying as we also have to copy endpoint uri parameters and so on.

+
+
+
+
<testcase name="DynamicEndpointTest">
+    <actions>
+        <send endpoint="http://localhost:8080/HelloService?user=1234567">
+            <message>
+                <payload>
+                [...]
+                </payload>
+            </message>
+        </send>
+
+        <receive endpoint="http://localhost:8080/HelloService?user=1234567">
+            <message>
+                <payload>
+                [...]
+                </payload>
+            </message>
+        </receive>
+    </actions>
+</testcase>
+
+
+
+

We have to use the exact same endpoint uri when receiving the synchronous service response. This is not very straight forward. This is why Citrus also supports dynamic endpoint names. With a special endpoint uri parameter called endpointName you can name the dynamic endpoint. In a corresponding receive action you just use the endpoint name as reference which makes life easier:

+
+
+
+
<testcase name="DynamicEndpointTest">
+    <actions>
+        <send endpoint="http://localhost:8080/HelloService?endpointName=myHttpClient">
+            <message>
+                <payload>
+                [...]
+                </payload>
+            </message>
+        </send>
+
+        <receive endpoint="http://localhost?endpointName=myHttpClient">
+            <message>
+                <payload>
+                [...]
+                </payload>
+            </message>
+        </receive>
+    </actions>
+</testcase>
+
+
+
+

So we can reference the dynamic endpoint with the given name. The internal endpointName uri parameter is automatically removed before sending out messages. Once again the dynamic endpoint uri mechanism provides a fast way to write test cases in Citrus with less configuration. But you should consider to use the static endpoint components defined in the basic Spring bean application context for endpoints that are heavily reused in multiple test cases.

+
+
+
+
+

33. Endpoint adapter

+
+
+

Endpoint adapter help to customize the behavior of a Citrus server such as HTTP or SOAP web servers. As the servers get started with the Citrus context they are ready to receive incoming client requests. Now there are different ways to process these incoming requests and to provide a proper response message. By default the server will forward the incoming request to an in-memory message channel where a test can receive the message and provide a synchronous response. This message channel handling is done automatically behind the scenes so the tester does not care about these things. The tester just uses the server directly as endpoint reference in the test case. This is the default behaviour. In addition to that you can define custom endpoint adapters on the Citrus server in order to change this default behavior.

+
+
+

You set the custom endpoint adapter directly on the server configuration as follows:

+
+
+
+
<citrus-http:server id="helloHttpServer"
+    port="8080"
+    auto-start="true"
+    endpoint-adapter="emptyResponseEndpointAdapter"
+    resource-base="src/it/resources"/>
+
+    <citrus:empty-response-adapter id="emptyResponseEndpointAdapter"/>
+
+
+
+

Now let us have a closer look at the provided endpoint adapter implementations.

+
+
+

33.1. Empty response endpoint adapter

+
+

This is the simplest endpoint adapter you can think of. It simply provides an empty success response using the HTTP response code 200 . The adapter does not need any configurations or properties as it simply responds with an empty HTTP response.

+
+
+
+
<citrus:empty-response-adapter id="emptyResponseEndpointAdapter"/>
+
+
+
+
+

33.2. Static response endpoint adapter

+
+

The next more complex endpoint adapter will always return a static response message.

+
+
+
+
<citrus:static-response-adapter id="endpointAdapter">
+    <citrus:payload>
+        <![CDATA[
+          <HelloResponse
+            xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
+              <MessageId>123456789</MessageId>
+              <CorrelationId>Cx1x123456789</CorrelationId>
+              <Text>Hello User</Text>
+          </HelloResponse>
+        ]]>
+    </citrus:payload>
+    <citrus:header>
+        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:Operation"
+                  value="sayHello"/>
+        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:MessageId"
+                  value="123456789"/>
+    </citrus:header>
+ </citrus:static-response-adapter>
+
+
+
+

The endpoint adapter is configured with a static message payload and static response header values. The response to the client is therefore always the same. You can add dynamic +values by using Citrus functions such as randomString or randomNumber. Also we are able to use values of the actual request message that has triggered the +response adapter. The request is available via the local message store. In combination with Xpath or JsonPath functions we can map values from the actual request.

+
+
+
+
<citrus:static-response-adapter id="endpointAdapter">
+    <citrus:payload>
+        <![CDATA[
+          <HelloResponse
+            xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
+              <MessageId>citrus:randomNumber(10)</MessageId>
+              <CorrelationId>citrus:xpath(citrus:message(request.body()), '/hello:HelloRequest/hello:CorrelationId')</CorrelationId>
+              <Text>Hello User</Text>
+          </HelloResponse>
+        ]]>
+    </citrus:payload>
+    <citrus:header>
+        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:Operation"
+                  value="sayHello"/>
+        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:MessageId"
+                  value="citrus:randomNumber(10)"/>
+    </citrus:header>
+ </citrus:static-response-adapter>
+
+
+
+

The example above maps the CorrelationId of the HelloRequest message to the response with Xpath function. The local message store automatically has the message named +request stored so we can access the payload with this message name.

+
+
+ + + + + +
+ + +XML is namespace specific so we need to use the namespace prefix hello in the Xpath expression. The namespace prefix should evaluate to a global namespace entry in the global +Citrus xpath-namespace. +
+
+
+
+

33.3. Request dispatching endpoint adapter

+
+

The idea behind the request dispatching endpoint adapter is that the incoming requests are dispatched to several other endpoint adapters. The decision which endpoint adapter should handle the actual request is done depending on some adapter mapping. The mapping is done based on the payload or header data of the incoming request. A mapping strategy evaluates a mapping key using the incoming request. You can think of an XPath expression that evaluates to the mapping key for instance. The endpoint adapter that maps to the mapping key is then called to handle the request.

+
+
+

So the request dispatching endpoint adapter is able to dynamically call several other endpoint adapters based on the incoming request message at runtime. This is very powerful. The next example uses the request dispatching endpoint adapter with a XPath mapping key extractor.

+
+
+
+
<citrus:dispatching-endpoint-adapter id="dispatchingEndpointAdapter"
+         mapping-key-extractor="mappingKeyExtractor"
+         mapping-strategy="mappingStrategy"/>
+
+<bean id="mappingStrategy"
+  class="org.citrusframework.endpoint.adapter.mapping.SimpleMappingStrategy">
+    <property name="adapterMappings">
+      <map>
+          <entry key="sayHello" ref="helloEndpointAdapter"/>
+      </map>
+    </property>
+</bean>
+
+<bean id="mappingKeyExtractor"
+  class="org.citrusframework.endpoint.adapter.mapping.XPathPayloadMappingKeyExtractor">
+    <property name="xpathExpression" value="//TestMessage/Operation/*"/>
+</bean>
+
+<citrus:static-response-adapter id="helloEndpointAdapter">
+    <citrus:payload>
+        <![CDATA[
+            <HelloResponse
+                xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
+                <MessageId>123456789</MessageId>
+                <Text>Hello User</Text>
+            </HelloResponse>
+        ]]>
+    </citrus:payload>
+</citrus:static-response-adapter>
+
+
+
+

The XPath mapping key extractor expression decides for each request which mapping key to use in order to find a proper endpoint adapter through the mapping strategy. The endpoint adapters available in the application context are mapped via their bean id. For instance an incoming request with a matching element //TestMessage/Operation/sayHello would be handled by the endpoint adapter bean that is registered in the mapping strategy as "sayHello" key. The available endpoint adapters are configured in the same Spring application context.

+
+
+

Citrus provides several default mapping key extractor implementations.

+
+
+ + + + + + + + + + + + + +
+HeaderMappingKeyExtractor + +

Reads a special header entry and uses its value as mapping key

+
+SoapActionMappingKeyExtractor + +

Uses the soap action header entry as mapping key

+
+XPathPayloadMappingKeyExtractor + +

Evaluates a XPath expression on the request payload and uses the result as mapping key

+
+
+
+

In addition to that we need a mapping strategy. Citrus provides following default implementations.

+
+
+ + + + + + + + + + + + + +
+SimpleMappingStrategy + +

Simple key value map with endpoint adapter references

+
+BeanNameMappingStrategy + +

Loads the endpoint adapter Spring bean with the given id matching the mapping key

+
+ContextLoadingMappingStrategy + +

Same as BeanNameMappingStrategy but loads a separate application context defined by external file resource

+
+
+
+
+

33.4. Channel endpoint adapter

+
+

The channel connecting endpoint adapter is the default adapter used in all Citrus server components. Indeed this adapter also provides the most flexibility. This adapter forwards incoming requests to a channel destination. The adapter is waiting for a proper response on a reply destination synchronously. With the channel endpoint components you can read the requests on the channel and provide a proper response on the reply destination.

+
+
+
+
<citrus-si:channel-endpoint-adapter id="channelEndpointAdapter"
+              channel-name="inbound.channel"
+              timeout="2500"/>
+
+
+
+
+

33.5. JMS endpoint adapter

+
+

Another powerful endpoint adapter is the JMS connecting adapter implementation. This adapter forwards incoming requests to a JMS destination and waits for a proper response on a reply destination. A JMS endpoint can access the requests internally and provide a proper response on the reply destination. So this adapter is very flexible to provide proper response messages.

+
+
+

This special adapter comes with the citrus-jms module. So you have to add the module and the special XML namespace for this module to your configuration files. The Maven module for citrus-jms goes to the Maven POM file as normal project dependency. The citrus-jms namespace goes to the Spring bean XML configuration file as follows:

+
+
+ + + + + +
+ + +Citrus provides a "citrus-jms" configuration namespace and schema definition for JMS related components and features. Include this namespace into your Spring configuration in order to use the Citrus JMS configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows. +
+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:citrus-jms="http://www.citrusframework.org/schema/jms/config"
+        xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/jms/config
+        http://www.citrusframework.org/schema/jms/config/citrus-jms-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

After that you are able to use the adapter implementation in the Spring bean configuration.

+
+
+
+
<citrus-jms:endpoint-adapter id="jmsEndpointAdapter"
+              destination-name="JMS.Queue.Requests.In"
+              reply-destination-name="JMS.Queue.Response.Out"
+              connection-factory="jmsConnectionFactory"
+              timeout="2500"/>
+
+<bean id="jmsConnectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory">
+  <property name="brokerURL" value="tcp://localhost:61616"/>
+</bean>
+
+
+
+
+
+
+

34. Connectors

+
+
+

Connectors are quite similar to endpoints. +The modules connect Citrus to a certain technology or framework rather than implementing a message transport (client and server) like endpoints usually do.

+
+
+

Connectors typically provide a client side only implementation that enable Citrus to interact with a service or framework (e.g. Docker, Kubernetes, Knative, Selenium, OpenAPI specification).

+
+
+
+
+

35. OpenAPI support

+
+
+

OpenAPI is a popular specification language to describe HTTP APIs and its exposure to clients. +Citrus is able to leverage the specification to auto generate client and server request/response message data. +The generated message data follows the rules of a given operation in the specification. +In particular, the message body is generated from the given Json schema rules in that specification. +This way users may do contract-driven testing where the client and the server ensure the conformity with the contract to obey to the same specification rules.

+
+
+ + + + + +
+ + +The OpenAPI support in Citrus get enabled by adding a separate Maven module as dependency to your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-openapi</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

35.1. OpenAPI specification

+
+

The OpenAPI test actions in Citrus uses a specification which usually is a json or yaml document shared between the components.

+
+
+

Sometimes the specification gets exposed by a server application via HTTP endpoint. +You can directly load the specification from the HTTP URL. +Or you may just point the OpenAPI components to a local specification file.

+
+
+

Citrus supports OpenAPI on both client and server components so the next sections will describe the usage for each of those.

+
+
+
+

35.2. OpenAPI client

+
+

On the client side Citrus uses the OpenAPI specification to generate a proper HTTP request that is sent to the server. +The user just gives a valid operationId from the specification every thing else is automatically generated. +The Citrus client message will use the proper request path (e.g. /petstore/v3/pet) and Content-Type (e.g. applicaiton/json) according to the specification rules.

+
+
+

Of course, you can also validate the HTTP response message with auto generated validation. +The user just gives the expected HTTP status code that is also described in the specification (e.g. 200 OK). +The response data used as expected message content is then also generated from the specification.

+
+
+

As an example the following OpenAPI specification defines the operation getPetById.

+
+
+
petstore-v3.yaml
+
+
openapi: 3.0.2
+info:
+  title: Petstore
+  version: 1.0.1
+servers:
+  - url: 'http://localhost/petstore/v3/'
+paths:
+  '/pet/{petId}':
+    get:
+      operationId: getPetById
+      parameters:
+        - name: petId
+          description: ID of pet to return
+          schema:
+            format: int64
+            type: integer
+          in: path
+          required: true
+      responses:
+        '200':
+          content:
+            application/json:
+              schema:
+                $ref: '#/components/schemas/Pet'
+        '404':
+          description: Pet not found
+      summary: Find pet by ID
+      description: Returns a single pet
+# ...
+
+
+
+

The operation defines the HTTP GET request on /pet/{petId} and the response 200 OK that delivers the #/components/schemas/Pet Json object to the calling client as a response.

+
+
+

The Json schema for the pet defines all properties on the object.

+
+
+
Pet Json schema
+
+
Pet:
+  required:
+    - category
+    - name
+    - status
+  type: object
+  properties:
+    id:
+      format: int64
+      type: integer
+    category:
+      $ref: '#/components/schemas/Category'
+    name:
+      type: string
+      example: doggie
+    photoUrls:
+      type: array
+      items:
+        type: string
+    tags:
+      type: array
+      items:
+        $ref: '#/components/schemas/Tag'
+    status:
+      description: pet status in the store
+      enum:
+        - available
+        - pending
+        - sold
+      type: string
+# ...
+
+
+
+

In a testcase Citrus is able to leverage this information in order to send a proper request and validate the response based on the OpenAPI specification.

+
+
+
Java
+
+
private final HttpClient httpClient = new HttpClientBuilder()
+            .requestUrl("http://localhost:%d".formatted(port))
+            .build();
+
+private final OpenApiSpecification petstoreSpec = OpenApiSpecification.from(
+            Resources.create("classpath:org/citrusframework/openapi/petstore/petstore-v3.json"));
+
+@CitrusTest
+public void openApiClientTest() {
+    when(openapi(petstoreSpec)
+                .client(httpClient)
+                .send("getPetById"));
+
+    then(openapi(petstoreSpec)
+                .client(httpClient)
+                .receive("getPetById", HttpStatus.OK));
+}
+
+
+
+
XML
+
+
<test name="OpenApiClientTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="petstoreSpec" value="classpath:org/citrusframework/openapi/petstore/petstore-v3.json"/>
+    </variables>
+    <actions>
+        <openapi specification="${petstoreSpec}" client="httpClient">
+          <send-request operation="getPetById"/>
+        </openapi>
+
+        <openapi specification="${petstoreSpec}" client="httpClient">
+          <receive-response operation="getPetById" status="200"/>
+        </openapi>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: OpenApiClientTest
+variables:
+  - name: petstoreSpec
+    value: classpath:org/citrusframework/openapi/petstore/petstore-v3.yaml
+actions:
+  - openapi:
+      specification: ${petstoreSpec}
+      client: "httpClient"
+      sendRequest:
+        operation: getPetById
+  - openapi:
+      specification: ${petstoreSpec}
+      client: "httpClient"
+      receiveResponse:
+        operation: getPetById
+        status: 200
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

In this very first example The client uses the OpenAPI specification to generate a proper GET HTTP request for the getPetById operation. +The request is sent to the server using the request URL path /petstore/v3/pet/${petId} as declared in the OpenAPI specification.

+
+
+

The resulting HTTP response from the server is verified on the client by giving the operationId and the expected status 200. +The OpenAPI client generates the expected control message from the given Json schema in the OpenAPI specification.

+
+
+

The generated control message contains validation matchers and expressions as follows.

+
+
+
Generated control message body
+
+
{
+  "id": "@isNumber()@",
+  "name": "@notEmpty()@",
+  "category": {
+    "id": "@isNumber()@",
+    "name": "@notEmpty()@"
+  },
+  "photoUrls": "@notEmpty()@",
+  "tags":  "@ignore@",
+  "status": "@matches(sold|pending|available)@"
+}
+
+
+
+

This control message meets the rules defined by the OpenAPI Json schema specification for the pet object. +For instance the enum field status is validated with a matching expression. +In case the OpenAPI specification changes the generated control message will change accordingly.

+
+
+

This completes the client side OpenAPI support. +Now let’s have a closer look at the server side OpenAPI support in the next section.

+
+
+
+

35.3. OpenAPI server

+
+

On the server side Citrus is able to verify incoming requests based on the OpenAPI specification. +The expected request message content as well as the expected resource URL path and the Content-Type are automatically validated.

+
+
+
Java
+
+
private final HttpServer httpServer = new HttpServerBuilder()
+            .port(port)
+            .timeout(5000L)
+            .autoStart(true)
+            .defaultStatus(HttpStatus.NO_CONTENT)
+            .build();
+
+private final OpenApiSpecification petstoreSpec = OpenApiSpecification.from(
+            Resources.create("classpath:org/citrusframework/openapi/petstore/petstore-v3.json"));
+
+@CitrusTest
+public void openApiClientTest() {
+    when(openapi(petstoreSpec)
+                .server(httpServer)
+                .receive("addPet"));
+
+    then(openapi(petstoreSpec)
+                .server(httpServer)
+                .send("addPet", HttpStatus.CREATED));
+}
+
+
+
+
XML
+
+
<test name="OpenApiClientTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <variables>
+        <variable name="petstoreSpec" value="classpath:org/citrusframework/openapi/petstore/petstore-v3.json"/>
+    </variables>
+    <actions>
+        <openapi specification="${petstoreSpec}" server="httpServer">
+          <receive-request operation="addPet"/>
+        </openapi>
+
+        <openapi specification="${petstoreSpec}" server="httpServer">
+          <send-response operation="addPet" status="200"/>
+        </openapi>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: OpenApiClientTest
+variables:
+  - name: petstoreSpec
+    value: classpath:org/citrusframework/openapi/petstore/petstore-v3.yaml
+actions:
+  - openapi:
+      specification: ${petstoreSpec}
+      server: "httpServer"
+      receiveRequest:
+        operation: addPet
+  - openapi:
+      specification: ${petstoreSpec}
+      server: "httpServer"
+      sendResponse:
+        operation: addPet
+        status: 200
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

The example above uses the addPet operation defined in the OpenAPI specification. +The operation expects a HTTP POST request with a pet object as message payload. +The OpenAPI server generates an expected Json message body according to the specification. +This ensures that the incoming client request meets the Json schema rules for the pet object. +Also, the server will verify the HTTP request method, the Content-Type header as well as the used resource path /petstore/v3/pet.

+
+
+

The given HTTP status code defines the response that should be sent by the server. +The server will generate a proper response according to the OpenAPI specification. +This also includes a potential response message body (e.g. pet object).

+
+
+
+
+
+

36. JBang support

+
+
+

With JBang you can run your .java files directly in your shell - instantly without tedious setup.

+
+
+ + + + + +
+ + +The JBang support in Citrus gets enabled by adding a separate Maven module as a dependency to your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-jbang-connector</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+ + + + + +
+ + +You may wonder why is there another module named citrus-jbang! What is the difference compared to the citrus-jbang-connector module? The citrus-jbang module represents the Citrus JBang app that you can use in JBang to run Citrus tests without any prior setup. The citrus-jbang-connector module provides the JBang support to use JBang as part of a test case, for instance in the form of a test action that runs JBang scripts. +
+
+
+

36.1. JBang action

+
+

The JBang test action runs a script or JBang application with a spawned process. +You can call any JBang CLI command and run your JBang app. +JBang is called with the Java process API so the JBang CLI binary is executed and the command output is saved for later reference. +You can verify the command output with an expected output and you can also verify the exit code of the spawned process.

+
+
+
Java
+
+
@CitrusTest
+public void jBangScriptTest() {
+    when(jbang()
+            .app("myApp")
+            .command("getUsers")
+            .arg("--username", "FooUser"));
+}
+
+
+
+
XML
+
+
<test name="JBangScriptTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <jbang app="myApp" command="getUsers">
+          <args>
+            <arg name="--username" value="FooUser"/>
+          </args>
+        </jbang>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: JBangScriptTest
+actions:
+  - jbang:
+      app: "myApp"
+      command: "getUsers"
+      args:
+        - name: "--username"
+          value: "FooUser"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

The test above calls the JBang app myApp with the getUsers command. +The call is similar to a command line statement like this:

+
+
+
+
$ jbang myApp getUsers --username=FooUser
+
+
+
+

The app myApp represents a JBang application that has been installed previously in JBang (for instance from a GitHub repository that holds a jbang-catalog.json):

+
+
+
+
$ jbang app install myApp@github-user/repository
+
+
+
+
+
+
+

37. Kubernetes support

+
+
+

Kubernetes is one of the hottest management platforms for containerized applications these days. +Kubernetes lets you deploy, scale and manage your Docker containers on the platform. +You get features like auto-scaling, self-healing, service discovery and load balancing.

+
+
+

Citrus provides interaction with the Kubernetes REST API to access the Kubernetes cluster and its resources within a Citrus test case.

+
+
+ + + + + +
+ + +The Kubernetes test components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-kubernetes</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

37.1. Kubernetes client

+
+

Citrus operates with the Kubernetes remote REST API in order to interact with the Kubernetes platform. +The Kubernetes client component holds the configuration to connect to a Kubernetes cluster:

+
+
+
Citrus Bean
+
+
@BindToRegistry
+public KubernetesClient k8sClient() {
+    return new KubernetesClientBuilder()
+                .build();
+}
+
+
+
+
Spring Bean
+
+
@Bean
+public KubernetesClient k8sClient() {
+    return new KubernetesClientBuilder()
+                .build();
+}
+
+
+
+
Spring XML
+
+
<citrus-k8s:client id="k8sClient"/>
+
+
+
+

The Kubernetes client is based on the Fabric8 Java Kubernetes client implementation. +Following from that the component can be configured in various ways. +By default, the client reads the system properties as well as environment variables for default Kubernetes settings such as:

+
+
+
    +
  • +

    kubernetes.master / KUBERNETES_MASTER

    +
  • +
  • +

    kubernetes.api.version / KUBERNETES_API_VERSION

    +
  • +
  • +

    kubernetes.trust.certificates / KUBERNETES_TRUST_CERTIFICATES

    +
  • +
+
+
+

If you set these properties in your environment the client component will automatically pick up the configuration settings. +Also, when using kubectl command line locally the client may automatically use the stored user authentication settings from there.

+
+
+

For a complete list of settings and explanation of those please refer to the Fabric8 client documentation.

+
+
+

In case you need to set the client configuration explicitly on your environment you can also use explicit settings on the Kubernetes client component:

+
+
+
Citrus Bean
+
+
@BindToRegistry
+public KubernetesClient k8sClient() {
+    return new KubernetesClientBuilder()
+                .client(fabric8Client)
+                .url("http://localhost:8843")
+                .version("v1")
+                .username("user")
+                .password("s!cr!t")
+                .namespace("user_namespace")
+                .messageConverter(messageConverter)
+                .objectMapper("objectMapper")
+                .build();
+}
+
+
+
+
Spring Bean
+
+
@Bean
+public KubernetesClient k8sClient() {
+    return new KubernetesClientBuilder()
+                .client(fabric8Client)
+                .url("http://localhost:8843")
+                .version("v1")
+                .username("user")
+                .password("s!cr!t")
+                .namespace("user_namespace")
+                .messageConverter(messageConverter)
+                .objectMapper("objectMapper")
+                .build();
+}
+
+
+
+
Spring XML
+
+
<citrus-k8s:client id="k8sClient"
+              client="fabric8Client"
+              url="http://localhost:8843"
+              version="v1"
+              username="user"
+              password="s!cr!t"
+              namespace="user_namespace"
+              message-converter="messageConverter"
+              object-mapper="objectMapper"/>
+
+
+
+ + + + + +
+ + +You have the option to set an oauthToken for the client instead of using username and password. +
+
+
+

Now Citrus is able to access the Kubernetes remote API for executing commands such as list-pods, watch-services and so on. +Citrus provides a set of actions that perform a Kubernetes command via REST. +The results usually get validated in the Citrus test as usual.

+
+
+
+

37.2. Kubernetes actions

+
+

Citrus provides a set of test actions specifically designed to manage resources on the Kubernetes cluster. +Each test action requires a reference to the Kubernetes client. +Usually this client is created once in the bean registry and used by many test actions.

+
+
+ + + + + +
+ + +All resources created on the Kubernetes cluster will be automatically removed by Citrus after the test. +You can disable this default behavior via system property setting or environment variables (citrus.kubernetes.auto.remove.resources=false or CITRUS_KUBERNETES_AUTO_REMOVE_RESOURCES=false) +
+
+
+
+

37.3. Create Labels

+
+

Resources in Kubernetes are able to expose labels as part of the resource metadata. +You can set labels on existing Kubernetes resources with this test action:

+
+
+
Java
+
+
@CitrusTest
+public void createLabelsTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .pods()
+            .addLabel("my-pod")
+            .label("test", "citrus")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateLabelsTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <create-labels type="POD" resource="my-pod">
+          <labels>
+            <label name="test" value="citrus"/>
+          </labels>
+        </create-labels>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateLabelsTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createLabels:
+        type: "POD"
+        resource: "my-pod"
+        labels:
+          - name: "test"
+            value: "citrus"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+
+

37.4. Create Annotations

+
+

Resources in Kubernetes are able to expose annotations as part of the resource metadata. +You can set annotations on existing Kubernetes resources with this test action:

+
+
+
Java
+
+
@CitrusTest
+public void createAnnotationsTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .pods()
+            .addAnnotation("my-pod")
+            .annotation("test", "citrus")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateAnnotationsTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <create-annotations type="POD" resource="my-pod">
+          <annotations>
+            <annotation name="test" value="citrus"/>
+          </annotations>
+        </create-annotations>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateAnnotationsTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createAnnotations:
+        type: "POD"
+        resource: "my-pod"
+        labels:
+          - name: "test"
+            value: "citrus"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+
+

37.5. Create Service

+
+

You can create a Kubernetes service resource with this test action:

+
+
+
Java
+
+
@CitrusTest
+public void createServiceTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .services()
+            .create("my-service")
+            .portMapping(80, 8080)
+            .withPodSelector(Collections.singletonMap("test", "citrus"))
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateServiceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <create-service name="my-service">
+          <ports>
+            <port-mapping port="80" target-port="8080"/>
+          </ports>
+          <selector>
+            <label name="test" value="citrus"/>
+          </selector>
+        </create-service>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateServiceTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createService:
+        name: "my-service"
+        ports:
+          - port: "80"
+            targetPort: "8080"
+        selector:
+          labels:
+            - name: "test"
+              value: "citrus"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

The service is able to define port mappings as well as pod selectors based on labels. +This exposes the service as a Kubernetes resource on the connected cluster in the given namespace.

+
+
+ + + + + +
+ + +The Kubernetes service test action will automatically bind this service to a local HttpServer instance on the given port mapping. +As a result the HttpServer instance is created and started as part of the test action. +The HttpServer instance is added to the bean registry for further reference. +The default HttpServer bean name is citrus-k8s-service or the service name chosen for the Kubernetes service. +You can reference the HttpServer in following test actions to receive requests from the Kubernetes service. +
+
+
+ + + + + +
+ + +The behavior to auto create the HttpServer instance can be disabled via system property or environment variable setting (citrus.kubernetes.auto.create.server.binding=false or CITRUS_KUBERNETES_AUTO_CREATE_SERVER_BINDING=false ) +You can also customize the HttpServer instance by referencing a previously created server from the bean registry. +In this case the auto creation is skipped for this test action and the custom server reference is used. +
+
+
+
+

37.6. Create ConfigMap

+
+

You can create a Kubernetes config map with this test action:

+
+
+
Java
+
+
@CitrusTest
+public void createConfigMapTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .configMaps()
+            .create("my-config-map")
+            .properties(Collections.singletonMap("username", "foo"))
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateConfigMapTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <create-config-map name="my-config-map">
+          <properties>
+            <property name="username" value="foo"/>
+          </properties>
+        </create-config-map>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateConfigMapTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createConfigMap:
+        name: "my-config-map"
+        properties:
+          - name: username
+            value: foo
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

It is also possible to load the properties from a file resource:

+
+
+
Java
+
+
@CitrusTest
+public void createConfigMapTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .configMaps()
+            .create("my-config-map")
+            .fromFile(Resources.create("application.properties"))
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateConfigMapTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <create-config-map name="my-config-map" file="application.properties"/>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateConfigMapTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createConfigMap:
+        name: "my-config-map"
+        file: "application.properties"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+
+

37.7. Create Secret

+
+

You can create a Kubernetes secret with this test action:

+
+
+
Java
+
+
@CitrusTest
+public void createSecretTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .secrets()
+            .create("my-secret")
+            .properties(Collections.singletonMap("password", "top_secret"))
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateSecretTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <create-secret name="my-secret">
+          <properties>
+            <property name="password" value="top_secret"/>
+          </properties>
+        </create-secret>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateSecretTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createSecret:
+        name: "my-secret"
+        properties:
+          - name: password
+            value: top_secret
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

It is also possible to load the properties from a file resource:

+
+
+
Java
+
+
@CitrusTest
+public void createSecretTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .secrets()
+            .create("my-secret")
+            .fromFile(Resources.create("credentials.properties"))
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateSecretTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <create-secret name="my-secret" file="credentials.properties"/>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateSecretTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createSecret:
+        name: "my-secret"
+        file: "credentials.properties"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+
+

37.8. Create Resources

+
+

You can create standards Kubernetes resources such as Pods as part of the test. +The easiest way to define the resource specification is to give a YAML file that represents the resource.

+
+
+

Of course, you can use Citrus test variables in the resource specification.

+
+
+
pod.yaml
+
+
apiVersion: v1
+kind: Pod
+metadata:
+  name: my-pod
+  labels:
+    name: my-pod
+spec:
+  containers:
+    - name: nginx
+      image: nginx
+      ports:
+        - containerPort: 80
+
+
+
+
Java
+
+
@CitrusTest
+public void createPodResourceTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .resources()
+            .create()
+            .resource(Resources.create("pod.yaml"))
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreatePodResourceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <create-resource file="pod.yaml"/>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreatePodResourceTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createResource:
+        file: "pod.yaml"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+
+

37.9. Delete Resources

+
+

You can delete any resource on the Kubernetes cluster. +Of course your client connection needs to have sufficient permissions to perform the delete operation. +The Kubernetes resource that should be deleted is identified by its name and an optional namespace.

+
+
+

The next example deletes a service resource identified by its name.

+
+
+
Java
+
+
@CitrusTest
+public void deleteServiceTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .services()
+            .delete("my-service")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="DeleteServiceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <delete-service name="my-service"/>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: DeleteServiceTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      deleteService:
+        name: "my-service"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

As an alternative to that you can also use a resource specification to delete the resource.

+
+
+
Java
+
+
@CitrusTest
+public void deletePodResourceTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .resources()
+            .delete()
+            .resource(Resources.create("pod.yaml"))
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="DeletePodResourceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <delete-resource file="pod.yaml"/>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: DeletePodResourceTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      deleteResource:
+        file: "pod.yaml"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+
+

37.10. Create Custom Resource

+
+

Given the following Kubernetes custom resource:

+
+
+
foo.yaml
+
+
apiVersion: citrus.dev/v1
+kind: Foo
+metadata:
+  name: my-foo
+  labels:
+    test: citrus
+spec:
+  message: Hello
+
+
+
+

You can create the Kubernetes custom resource with this test action:

+
+
+
Java
+
+
@CitrusTest
+public void createCustomResourceTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .customResources()
+            .create()
+            .kind("Foo")
+            .apiVersion("citrus.dev/v1")
+            .file("foo.yaml")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateCustomResourceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <create-custom-resource kind="Foo" api-version="citrus.dev/v1" file="foo.yaml" />
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateCustomResourceTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createCustomResource:
+        kind: "Foo"
+        apiVersion: "citrus.dev/v1"
+        file: "foo.yaml"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+ + + + + +
+ + +When you have access to a Fabric8 Java model that represents the custom resource you can use the Java type to specify the Kind and ApiVersion while creating the resource. +Also, you can use a Java object instance directly to create the resource with the Fabric8 Kubernetes client. +
+
+
+
+

37.11. Delete Custom Resource

+
+

When you want to delete a Kubernetes custom resource you need to specify the Kind as well as the ApiVersion in combination with the resource name on the cluster.

+
+
+
Java
+
+
@CitrusTest
+public void createCustomResourceTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .customResources()
+            .delete()
+            .kind("Foo")
+            .apiVersion("citrus.dev/v1")
+            .name("foo")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="DeleteCustomResourceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <delete-custom-resource kind="Foo" api-version="citrus.dev/v1" name="foo" />
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: DeleteCustomResourceTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      deleteCustomResource:
+        kind: "Foo"
+        apiVersion: "citrus.dev/v1"
+        name: "foo"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+ + + + + +
+ + +When you have access to a Fabric8 Java model that represents the custom resource you can use the Java type to specify the Kind and ApiVersion while deleting the resource. +
+
+
+
+

37.12. Verify Custom Resource

+
+

You can verify the ready condition status for a Kubernetes custom resource. +Usually the custom resource exposes a Status sub-resource with that expose a ready condition. +You can verify this condition as part of a test like this:

+
+
+
Java
+
+
@CitrusTest
+public void verifyCustomResourceTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .customResources()
+            .verify("foo")
+            .kind("Foo")
+            .apiVersion("citrus.dev/v1")
+            .isReady()
+            .maxAttempts(2)
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="VerifyCustomResourceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <verify-custom-resource kind="Foo" api-version="citrus.dev/v1" name="foo" condition="Ready" />
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: VerifyCustomResourceTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      verifyCustomResource:
+        kind: "Foo"
+        apiVersion: "citrus.dev/v1"
+        name: "foo"
+        condition: "Ready"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+ + + + + +
+ + +Instead of specifying the resource name you can also use a label expression (name=value) to identify the custom resource on the cluster namespace. +Citrus tries to find the resource with the matching label. +
+
+
+
+

37.13. Verify Pod Status

+
+

Each Pod in Kubernetes exposes its Ready state condition as well as the phase (Running, Error, Initializing, Terminating, …​). +You can verify this Pod status in your test case:

+
+
+
Java
+
+
@CitrusTest
+public void verifyPodTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .pods()
+            .verify("my-pod")
+            .isRunning()
+            .maxAttempts(2)
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="VerifyPodTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <verify-pod name="my-pod" phase="Running" />
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: VerifyPodTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      verifyPod:
+        name: "my-pod"
+        phase: "Running"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+ + + + + +
+ + +When asserting the Running phase the verification also checks for all containers in the Pod to expose the condition Ready. +
+
+
+
+

37.14. Verify Pod Logs

+
+

You can read and verify the Pod logs as part of the test.

+
+
+
Java
+
+
@CitrusTest
+public void verifyPodTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .pods()
+            .verify("my-pod")
+            .isRunning()
+            .waitForLogMessage("Something interesting")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="VerifyPodTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <kubernetes client="k8sClient" namespace="my-namespace">
+        <verify-pod name="my-pod" phase="Running" log-message="Something interesting"/>
+      </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: VerifyPodTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      verifyPod:
+        name: "my-pod"
+        phase: "Running"
+        logMessage: "Something interesting"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

This action scans the Pod logs for a message Something interesting. +As soon as the log message has been located in the Pod logs the test action finishes with success. +The action waits for the log message to appear in the Pod logs for given amount of time with a specified polling attempt configuration.

+
+
+
+

37.15. Spring bean config

+
+

Citrus provides a "citrus-kubernetes" configuration namespace and schema definition for Kubernetes related components and actions. +Include this namespace into your Spring configuration in order to use the Citrus Kubernetes configuration elements.

+
+
+

37.15.1. Spring XML config namespace

+
+

The namespace URI and schema location are added to the Spring configuration XML file as follows.

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:citrus-k8s="http://www.citrusframework.org/schema/kubernetes/config"
+       xsi:schemaLocation="
+       http://www.springframework.org/schema/beans
+       http://www.springframework.org/schema/beans/spring-beans.xsd
+       http://www.citrusframework.org/schema/kubernetes/config
+       http://www.citrusframework.org/schema/kubernetes/config/citrus-kubernetes-config.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

After that you are able to use customized Citrus XML elements in order to define the Spring beans.

+
+
+
+

37.15.2. Spring XML testcase namespace

+
+

We have several Citrus test actions each representing a Kubernetes command. +These actions can be part of a test case where you can manage Kubernetes pods inside the test. +As a prerequisite we have to enable the Kubernetes specific test actions in our XML test as follows:

+
+
+
+
<beans xmlns="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:k8s="http://www.citrusframework.org/schema/kubernetes/testcase"
+        xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/kubernetes/testcase
+        http://www.citrusframework.org/schema/kubernetes/testcase/citrus-kubernetes-testcase.xsd">
+
+    [...]
+
+</beans>
+
+
+
+

We added a special kubernetes namespace with prefix k8s: so now we can start to add Kubernetes test actions to the test case:

+
+
+
Spring XML
+
+
<testcase name="KubernetesCommandIT">
+    <actions>
+      <k8s:info client="myK8sClient">
+        <k8s:validate>
+          <k8s:result>{
+            "result": {
+              "clientVersion": "1.4.27",
+              "apiVersion": "v1",
+              "kind":"Info",
+              "masterUrl": "${masterUrl}",
+              "namespace": "test"
+            }
+          }</k8s:result>
+        </k8s:validate>
+      </k8s:info>
+    </actions>
+</testcase>
+
+
+
+

In this very simple example we first ping the Kubernetes REST API to make sure we have connectivity up and running. +The info command connects the REST API and returns a list of status information of the Kubernetes client.

+
+
+

Based on that we can execute several Kubernetes commands in a test case and validate the Json results.

+
+
+

Citrus supports the following Kubernetes API commands with respective test actions:

+
+
+
    +
  • +

    k8s:info

    +
  • +
  • +

    k8s:list-pods

    +
  • +
  • +

    k8s:get-pod

    +
  • +
  • +

    k8s:delete-pod

    +
  • +
  • +

    k8s:list-services

    +
  • +
  • +

    k8s:get-service

    +
  • +
  • +

    k8s:delete-service

    +
  • +
  • +

    k8s:list-namespaces

    +
  • +
  • +

    k8s:list-events

    +
  • +
  • +

    k8s:list-endpoints

    +
  • +
  • +

    k8s:list-nodes

    +
  • +
  • +

    k8s:list-replication-controllers

    +
  • +
  • +

    k8s:watch-pods

    +
  • +
  • +

    k8s:watch-services

    +
  • +
  • +

    k8s:watch-namespaces

    +
  • +
  • +

    k8s:watch-nodes

    +
  • +
  • +

    k8s:watch-replication-controllers

    +
  • +
+
+
+

We will discuss these commands in detail in the following sections.

+
+
+
+
+

37.16. Kubernetes commands

+
+

The Citrus test may use Kubernetes commands that get run as test actions.

+
+
+
Java
+
+
@CitrusTest
+public void kubernetesTest() {
+    kubernetes().info()
+        .validate(new CommandResultCallback<InfoResult>() {
+            @Override
+            public void doWithCommandResult(InfoResult info, TestContext context) {
+                Assert.assertEquals(info.getApiVersion(), "v1");
+            }
+    });
+
+    kubernetes().pods()
+                .list()
+                .withoutLabel("running")
+                .label("app", "myApp");
+}
+
+
+
+
Spring XML
+
+
<testcase name="KubernetesCommandIT">
+    <actions>
+      <k8s:info>
+        <k8s:validate>
+          <k8s:result>{
+            "result": {
+              "clientVersion": "1.4.27",
+              "apiVersion": "v1",
+              "kind":"Info",
+              "masterUrl": "${masterUrl}",
+              "namespace": "test"
+            }
+          }</k8s:result>
+        </k8s:validate>
+      </k8s:info>
+
+      <k8s:list-pods>
+        <k8s:validate>
+          <k8s:result>{
+            "result": {
+              "apiVersion":"v1",
+              "kind":"PodList",
+              "metadata":"@ignore@",
+              "items":[]
+            }
+          }</k8s:result>
+          <k8s:element path="$.result.items.size()" value="0"/>
+        </k8s:validate>
+      </k8s:list-pods>
+    </actions>
+</testcase>
+
+
+
+

In this very simple example we first ping the Kubernetes REST API to make sure we have connectivity up and running. +The info command connects the REST API and returns a list of status information of the Kubernetes client. +After that we get the list of available Kubernetes pods.

+
+
+

As a tester we might be interested in validating the command results. +So we can specify an optional k8s:result which is usually in Json format. +With that we can apply the full Citrus Json validation power to the Kubernetes results. +As usual, we can use test variables here and ignore some values explicitly such as the metadata value. +Also, JsonPath expression validation and Json test message validation features in Citrus come in here to validate the results.

+
+
+

The Java DSL Kubernetes commands provide an optional CommandResultCallback that is automatically called with the unmarshalled command result object. +In the example above the InfoResult model object is passed as argument to the callback. +So the tester can access the command result and validate its properties with assertions.

+
+
+

The option of Lamdba expressions allows us to use some syntactical sugar in Java when using the CommandResultCallback.

+
+
+
Java
+
+
@CitrusTest
+public void kubernetesTest() {
+    kubernetes().info()
+                .validate((info, context) -> Assert.assertEquals(info.getApiVersion(), "v1"));
+}
+
+
+
+ + + + + +
+ + +By default, Citrus tries to find a Kubernetes client component within the Citrus Spring application context. +If not present Citrus will instantiate a default kubernetes client with all default settings. +You can also explicitly set the kubernetes client instance when using the Java DSL Kubernetes command actions: +
+
+
+
Java
+
+
@Autowired
+private KubernetesClient k8sClient;
+
+@CitrusTest
+public void kubernetesTest() {
+    kubernetes().client(k8sClient)
+                .info()
+                .validate((info, context) -> Assert.assertEquals(info.getApiVersion(), "v1"));
+}
+
+
+
+
Spring XML
+
+
<testcase name="KubernetesCommandIT">
+    <actions>
+      <k8s:info client="k8sClient">
+        <k8s:validate>
+          <k8s:result>{
+            "result": {
+              "clientVersion": "1.4.27",
+              "apiVersion": "v1",
+              "kind":"Info",
+              "masterUrl": "${masterUrl}",
+              "namespace": "test"
+            }
+          }</k8s:result>
+        </k8s:validate>
+      </k8s:info>
+    </actions>
+</testcase>
+
+
+
+

37.16.1. Info command

+
+

The info command just gets the client connection settings and provides them as a Json result to the action.

+
+
+
Java
+
+
@CitrusTest
+public void infoTest() {
+    kubernetes().info()
+                .validate((info, context) -> Assert.assertEquals(info.getApiVersion(), "v1"));
+}
+
+
+
+
Spring XML
+
+
<k8s:info client="myK8sClient">
+  <k8s:validate>
+    <k8s:result>{
+      "result": {
+        "clientVersion": "1.4.27",
+        "apiVersion": "v1",
+        "kind":"Info",
+        "masterUrl": "${masterUrl}",
+        "namespace": "test"
+      }
+    }</k8s:result>
+  </k8s:validate>
+</k8s:info>
+
+
+
+
+

37.16.2. List resources

+
+

We can list Kubernetes resources such as pods, services, endpoints and replication controllers. +The list can be filtered by several properties such as

+
+
+
    +
  • +

    label

    +
  • +
  • +

    namespace

    +
  • +
+
+
+

The test action is able to define respective filters to the list, so we get only pods the match the given attributes:

+
+
+
Java
+
+
@CitrusTest
+public void listPodsTest() {
+    kubernetes()
+        .client(k8sClient)
+        .pods()
+        .list()
+        .label("app=todo")
+        .validate("$..status.phase", "Running")
+        .validate((pods, context) -> {
+            Assert.assertFalse(CollectionUtils.isEmpty(pods.getResult().getItems()));
+        });
+}
+
+
+
+
Spring XML
+
+
<k8s:list-pods label="app=todo">
+    <k8s:validate>
+      <k8s:result>{
+        "result": {
+          "apiVersion":"${apiVersion}",
+          "kind":"PodList",
+          "metadata":"@ignore@",
+          "items":"@ignore@"
+        }
+      }</k8s:result>
+      <k8s:element path="$.result.items.size()" value="1"/>
+      <k8s:element path="$..status.phase" value="Running"/>
+    </k8s:validate>
+</k8s:list-pods>
+
+
+
+

As you can see we are able to give the pod label that is searched for in list of all pods. +The list returned is validated either by giving an expected Json message or by adding JsonPath expressions with expected values to check.

+
+
+

In Java DSL we can add a validation result callback that is provided with the unmarshalled result object for validation. Besides label filtering we can also specify the namespace +and the pod name to search for.

+
+
+

You can also define multiple labels as comma delimited list:

+
+
+
Java
+
+
@CitrusTest
+public void listServicesTest() {
+    kubernetes()
+        .client(k8sClient)
+        .services()
+        .list()
+        .label("stage!=test,provider=fabric8")
+        .namespace("default");
+}
+
+
+
+
Spring XML
+
+
<k8s:list-services label="stage!=test,provider=fabric8" namespace="default"/>
+
+
+
+

As you can see we have combined to label filters stage!=test and provider=fabric8 on pods in namespace default. +The first label filter is negated so the label stage should not be test here.

+
+
+
+

37.16.3. List nodes and namespaces

+
+

Nodes and namespaces are special resources that are not filtered by their namespace as they are more global resources. The rest is pretty similar to listing pods or services. We can +add filters such as name and label.

+
+
+
Java
+
+
@CitrusTest
+public void listPodsTest() {
+    kubernetes()
+        .client(k8sClient)
+        .namespaces()
+        .list()
+        .label("provider=citrus")
+        .validate((pods, context) -> {
+            Assert.assertFalse(CollectionUtils.isEmpty(pods.getResult().getItems()));
+        });
+}
+
+
+
+
Spring XML
+
+
<k8s:list-namespaces label="provider=citrus">
+    <k8s:validate>
+      <k8s:element path="$.result.items.size()" value="1"/>
+    </k8s:validate>
+</k8s:list-namespaces>
+
+
+
+
+

37.16.4. Get resources

+
+

We can get a very special Kubernetes resource such as a pod or service for detailed validation of that resource. +We need to specify a resource name in order to select the resource from list of available resources in Kubernetes.

+
+
+
Java
+
+
@CitrusTest
+public void getPodsTest() {
+    kubernetes()
+        .client(k8sClient)
+        .pods()
+        .get("citrus_pod")
+        .validate("$..status.phase", "Running")
+        .validate((pod, context) -> {
+            Assert.assertEquals(pods.getResult().getStatus().getPhase(), "Running");
+        });
+}
+
+
+
+
Spring XML
+
+
<k8s:get-pod name="citrus_pod">
+    <k8s:validate>
+      <k8s:result>{
+      "result": {
+        "apiVersion":"${apiVersion}",
+        "kind":"Pod",
+        "metadata": {
+            "annotations":"@ignore@",
+            "creationTimestamp":"@ignore@",
+            "finalizers":[],
+            "generateName":"@startsWith('hello-minikube-')@",
+            "labels":{
+              "pod-template-hash":"@ignore@",
+              "run":"hello-minikube"
+            },
+            "name":"${podName}",
+            "namespace":"default",
+            "ownerReferences":"@ignore@",
+            "resourceVersion":"@ignore@",
+            "selfLink":"/api/${apiVersion}/namespaces/default/pods/${podName}",
+            "uid":"@ignore@"
+        },
+        "spec": {
+          "containers": [{
+            "args":[],
+            "command":[],
+            "env":[],
+            "image":"gcr.io/google_containers/echoserver:1.4",
+            "imagePullPolicy":"IfNotPresent",
+            "name":"hello-minikube",
+            "ports":[{
+              "containerPort":8080,
+              "protocol":"TCP"
+            }],
+            "resources":{},
+            "terminationMessagePath":"/dev/termination-log",
+            "volumeMounts":"@ignore@"
+          }],
+          "dnsPolicy":"ClusterFirst",
+          "imagePullSecrets":"@ignore@",
+          "nodeName":"minikube",
+          "restartPolicy":"Always",
+          "securityContext":"@ignore@",
+          "serviceAccount":"default",
+          "serviceAccountName":"default",
+          "terminationGracePeriodSeconds":30,
+          "volumes":"@ignore@"
+        },
+        "status": "@ignore@"
+      }
+      }</k8s:result>
+      <k8s:element path="$..status.phase" value="Running"/>
+    </k8s:validate>
+</k8s:get-pod>
+
+
+
+

As you can see we are able to get the complete pod information from Kubernetes. +The result is validated with Json message validator in Citrus. +This means we can use @ignore@ as well as test variables and JsonPath expressions.

+
+
+
+

37.16.5. Create resources

+
+

We can create new Kubernetes resources within a Citrus test. +This is very important in case we need to set up new pods or services for the test run. +You can create new resources by giving a .yaml file holding all information how to create the new resource. +See the following sample YAML for a new pod and service:

+
+
+
pod.yaml
+
+
kind: Pod
+apiVersion: v1
+metadata:
+  name: hello-netty-${randomId}
+  namespace: default
+  labels:
+    server: hello-netty
+spec:
+  containers:
+    - name: hello-netty
+      image: netty
+      imagePullPolicy: IfNotPresent
+      ports:
+        - containerPort: 8080
+          protocol: TCP
+  restartPolicy: Always
+  terminationGracePeriodSeconds: 30
+  dnsPolicy: ClusterFirst
+  serviceAccountName: default
+  serviceAccount: default
+  nodeName: minikube
+
+
+
+

This YAML file specifies a new resource of kind Pod. +We define the metadata as well as all containers that are part of this pod. +The container is build from jetty:9.3 Docker image that should be pulled automatically from Docker Hub registry. +We also expose port 8080 as containerPort so the upcoming service configuration can provide this port to clients as Kubernetes service.

+
+
+
service.yaml
+
+
kind: Service
+apiVersion: v1
+metadata:
+  name: hello-netty
+  namespace: default
+  labels:
+    service: hello-netty
+spec:
+  ports:
+    - protocol: TCP
+      port: 8080
+      targetPort: 8080
+      nodePort: 31123
+  selector:
+    server: hello-netty
+  type: NodePort
+  sessionAffinity: None
+
+
+
+

The service resource maps the port 8080 and selects all pods with label server=hello-netty. +This makes the jetty container available to clients. +The service type is NodePort which means that clients outside of Kubernetes are also able to access the service by using the port nodePort=31123. +We can use Citrus functions such as randomNumber in the YAML files.

+
+
+

In the test case we can use these YAML files to create the resources in Kubernetes:

+
+
+
Java
+
+
@CitrusTest
+public void createPodsTest() {
+    kubernetes()
+        .pods()
+        .create(new ClassPathResource("templates/hello-netty-pod.yml"))
+        .namespace("default");
+
+    kubernetes()
+        .services()
+        .create(new ClassPathResource("templates/hello-service.yml"))
+        .namespace("default");
+}
+
+
+
+
Spring XML
+
+
<testcase name="KubernetesIT">
+  <actions>
+    <k8s:create-pod namespace="default">
+      <k8s:template file="classpath:templates/hello-netty-pod.yml"/>
+    </k8s:create-pod>
+
+    <k8s:create-service namespace="default">
+      <k8s:template file="classpath:templates/hello-service.yml"/>
+    </k8s:create-service>
+  </actions>
+</testcase>
+
+
+
+

Creating new resources may take some time to finish. +Kubernetes will have to pull images, build containers and start up everything. +The create action is not waiting synchronously for all that to have happened. +Therefore, we might add a list-pods action that waits for the new resources to appear.

+
+
+
Spring XML
+
+
<repeat-onerror-until-true condition="@assertThat(greaterThan(9))@" auto-sleep="1000">
+  <k8s:list-pods label="server=hello-netty">
+    <k8s:validate>
+      <k8s:element path="$.result.items.size()" value="1"/>
+      <k8s:element path="$..status.phase" value="Running"/>
+    </k8s:validate>
+  </k8s:list-pods>
+</repeat-onerror-until-true>
+
+
+
+

With this repeat on error action we wait for the new server=hello-netty labeled pod to be in state Running.

+
+
+
+

37.16.6. Delete resources

+
+

With that command we are able to delete a resource in Kubernetes. +Up to now deletion of pods and services is supported. +We have to give a name of the resource that we want to delete.

+
+
+
Java
+
+
@CitrusTest
+public void deletePodsTest() {
+    kubernetes()
+        .pods()
+        .delete("citrus_pod")
+        .validate((result, context) -> Assert.assertTrue(result.getResult().getSuccess()));
+}
+
+
+
+
Spring XML
+
+
<k8s:delete-pod name="citrus_pod">
+    <k8s:validate>
+      <k8s:element path="$.result.success" value="true"/>
+    </k8s:validate>
+</k8s:delete-pod>
+
+
+
+
+

37.16.7. Watch resources

+
+ + + + + +
+ + +The watch operation is still in experimental state and may face severe adjustments and improvements in near future. +
+
+
+

When using a watch command we add a subscription to change events on a Kubernetes resources. +So we can watch resources such as pods, services for future changes. +Each change on that resource triggers a new watch event result that we can expect and validate.

+
+
+
Java
+
+
@CitrusTest
+public void listPodsTest() {
+    kubernetes()
+        .pods()
+        .watch()
+        .label("provider=citrus")
+        .validate((watchEvent, context) -> {
+            Assert.assertFalse(watchEvent.hasError());
+            Assert.assertEquals(((WatchEventResult) watchEvent).getAction(), Watcher.Action.DELETED);
+        });
+}
+
+
+
+
Spring XML
+
+
<k8s:watch-pods label="provider=citrus">
+    <k8s:validate>
+      <k8s:element path="$.action" value="DELETED"/>
+    </k8s:validate>
+</k8s:watch-pods>
+
+
+
+ + + + + +
+ + +The watch command may be triggered several times for multiple changes on the respective Kubernetes resource. +The watch action will always handle one single event result. +The first event trigger is forwarded to the action validation. +All further watch events on that same resource are ignored. +This means that you may need multiple watch actions in your test case in case you expect multiple watch events to be triggered. +
+
+
+
+
+

37.17. Kubernetes command bus

+
+

We have seen how to access the Kubernetes remote REST API by using special Citrus test actions in a test. +As an alternative to that we can also use more generic send/receive actions in Citrus for accessing the Kubernetes API.

+
+
+

The next example shows this in action:

+
+
+
Java
+
+
@CitrusTest
+public void kubernetesSendReceiveTest() {
+    send(k8sClient)
+        .message()
+        .body("""
+        { "command": "info" }
+        """);
+
+    receive(k8sClient)
+        .message()
+        .body("""
+        {
+          "command": "info",
+          "result": {
+            "clientVersion": "1.4.27",
+            "apiVersion": "v1",
+            "kind":"Info",
+            "masterUrl": "${masterUrl}",
+            "namespace": "test"
+          }
+        }
+        """);
+
+    send(k8sClient)
+        .message()
+        .body("""
+        { "command": "list-pods" }
+        """);
+
+    receive(k8sClient)
+        .message()
+        .body("""
+        {
+          "command": "list-pods",
+          "result": {
+            "apiVersion":"v1",
+            "kind":"PodList",
+            "metadata":"@ignore@",
+            "items":[]
+          }
+        }
+        """)
+        .validate(json().expression("$.result.items.size()", 0));
+}
+
+
+
+
Spring XML
+
+
<testcase name="KubernetesSendReceiveIT">
+    <actions>
+      <send endpoint="k8sClient">
+        <message>
+          <data>
+            { "command": "info" }
+          </data>
+        </message>
+      </send>
+
+      <receive endpoint="k8sClient">
+        <message type="json">
+          <data>
+          {
+            "command": "info",
+            "result": {
+                "clientVersion": "1.4.27",
+                "apiVersion": "v1",
+                "kind":"Info",
+                "masterUrl": "${masterUrl}",
+                "namespace": "test"
+            }
+          }
+          </data>
+        </message>
+      </receive>
+
+      <echo>
+        <message>List all pods</message>
+      </echo>
+
+      <send endpoint="k8sClient">
+        <message>
+          <data>
+            { "command": "list-pods" }
+          </data>
+        </message>
+      </send>
+
+      <receive endpoint="k8sClient">
+        <message type="json">
+          <data>
+          {
+            "command": "list-pods",
+            "result": {
+                  "apiVersion":"v1",
+                  "kind":"PodList",
+                  "metadata":"@ignore@",
+                  "items":[]
+            }
+          }
+          </data>
+          <validate path="$.result.items.size()" value="0"/>
+        </message>
+      </receive>
+    </actions>
+</testcase>
+
+
+
+

As you can see we can use the send/receive actions to call Kubernetes API commands and receive the respective results in Json format, too. +This gives us the well known Json validation mechanism in Citrus in order to validate the results from Kubernetes. +This way you can load Kubernetes resources verifying its state and properties. +Of course JsonPath expressions also come in here in order to validate Json elements explicitly.

+
+
+
+
+
+

38. Knative support

+
+
+

Knative lets you build Serverless and Event Driven applications on the cloud. The project knows the two main components Knative Serving and Knative Eventing.

+
+
+

Citrus as a test framework is able to interact with Knative to manage and leverage Serving and Eventing resources on a Kubernetes cluster.

+
+
+ + + + + +
+ + +The Knative support in Citrus is enabled by adding a separate Maven module as a dependency to your project +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-knative</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

38.1. Knative client

+
+

Citrus interacts with Knative resources on the Kubernetes cluster. +This means we need to connect as a client to a Kubernetes cluster as part of the test. +Citrus uses the Fabric8 Knative client implementation for this connection. +You can create and configure the client once and reuse the client instance in multiple test cases.

+
+
+
Citrus Bean
+
+
@BindToRegistry
+public KubernetesClient kubernetesClient() {
+    return new KubernetesClientBuilder().build();
+}
+
+@BindToRegistry
+public KnativeClient knativeClient() {
+    return kubernetesClient().adapt(KnativeClient.class);
+}
+
+
+
+
Spring Bean
+
+
@Bean
+public KubernetesClient kubernetesClient() {
+    return new KubernetesClientBuilder().build();
+}
+
+@Bean
+public KnativeClient knativeClient() {
+    return kubernetesClient().adapt(KnativeClient.class);
+}
+
+
+
+

The Fabric8 Knative client is based on the Kubernetes client implementation. +You can bind the client instances as beans to the Citrus bean registry. +You may then reference and inject the client to your tests using the @CitrusResource annotation. +Spring beans may be autowired to the test case as usual with @Autowired.

+
+
+
+

38.2. Knative broker

+
+

Citrus is able to create Knative Eventing broker resources as part of the test.

+
+
+
Java
+
+
@CitrusTest
+public void knativeBrokerTest() {
+    given(knative()
+            .client(knativeClient)
+            .brokers()
+            .create("my-broker")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="KnativeBrokerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <knative client="knativeClient" namespace="test">
+          <create-broker name="my-broker"/>
+        </knative>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: KnativeBrokerTest
+actions:
+  - knative:
+      client: "knativeClient"
+      namespace: "test"
+      createBroker:
+        name: "my-broker"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

The test above creates a new Knative broker resource in the given namespace. +In the following you can connect to the broker to produce and consume events.

+
+
+ + + + + +
+ + +Citrus automatically removes the created Knative resources after the test. This is the default behavior that makes Citrus delete resources such as the Knative broker even when the test has finished in failure state. However, you can disable the auto removal by setting this system property or environment variable: citrus.knative.auto.remove.resources=false or CITRUS_KNATIVE_AUTO_REMOVE_RESOURCES=false +
+
+
+

You can also disable the auto removal of the Knative broker on the test action, too:

+
+
+
Java
+
+
@CitrusTest
+public void knativeBrokerTest() {
+    given(knative()
+            .client(knativeClient)
+            .brokers()
+            .create("my-broker")
+            .autoRemoveResources(false)
+            .inNamespace("my-namespace"));
+}
+
+
+
+
+

38.3. Verify broker status

+
+

The test may also verify that a broker is running and ready on a given Kubernetes namespace.

+
+
+
Java
+
+
@CitrusTest
+public void knativeBrokerTest() {
+    given(knative()
+            .client(knativeClient)
+            .brokers()
+            .verify("my-broker")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="KnativeBrokerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <knative client="knativeClient" namespace="test">
+          <verify-broker name="my-broker"/>
+        </knative>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: KnativeBrokerTest
+actions:
+  - knative:
+      client: "knativeClient"
+      namespace: "test"
+      verifyBroker:
+        name: "my-broker"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+
+

38.4. Send events

+
+

Once a Knative broker is available we can start to produce some events with a Citrus test. +Knative uses the CloudEvent data format out of the box. +The test is able to set the CloudEvent attributes as well as the event data when pushing the event to the broker.

+
+
+
Java
+
+
@CitrusTest
+public void produceEventTest() {
+    when(knative()
+            .event()
+            .send()
+            .brokerUrl("http://my-cluster.svc.cluster.local/my-namespace/my-broker")
+            .eventData("""
+            { "message": "Hello Knative event!" }
+            """));
+}
+
+
+
+
XML
+
+
<test name="ProduceEventTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <knative namespace="test">
+          <send-event broker="http://my-cluster.svc.cluster.local/my-namespace/my-broker">
+            <event>
+              <data>{ "message": "Hello Knative event!" }</data>
+            </event>
+          </send-event>
+        </knative>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ProduceEventTest
+actions:
+    - knative:
+      namespace: "test"
+      sendEvent:
+        broker: "my-broker"
+        event:
+          data: |
+            { "message": "Hello Knative event!" }
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

This action produces a new Knative event with some CloudEvent attributes default values set. +The Http request to the Knative broker looks like this:

+
+
+
+
POST http://my-cluster.svc.cluster.local/my-namespace/my-broker
+Accept:text/plain, application/json, application/*+json, */*
+Host:broker-ingress.knative-eventing.svc.cluster.local
+Content-Type:application/json
+Ce-Id:2818d613-bc75-4b25-b570-b825bbe33378
+Ce-Type:org.citrusframework.event.test
+Ce-Specversion:1.0
+Ce-Source:citrus-test
+Content-Length:54
+
+{ "message": "Hello Knative event!" }
+
+
+
+

You can see the CloudEvent attributes set with Ce-* headers. +You can customize these attributes on the send event test action.

+
+
+
Java
+
+
@CitrusTest
+public void produceEventTest() {
+    when(knative()
+            .event()
+            .send()
+            .brokerUrl("http://my-cluster.svc.cluster.local/my-namespace/my-broker")
+            .attribute("ce-type", "org.citrusframework.knative.event")
+            .eventData("""
+            { "message": "Hello Knative event!" }
+            """));
+}
+
+
+
+
XML
+
+
<test name="ProduceEventTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <knative namespace="test">
+          <send-event broker="http://my-cluster.svc.cluster.local/my-namespace/my-broker">
+            <event>
+              <ce-attributes>
+                <ce-attribute name="ce-type" value="org.citrusframework.knative.event"/>
+              </ce-attributes>
+              <data>{ "message": "Hello Knative event!" }</data>
+            </event>
+          </send-event>
+        </knative>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ProduceEventTest
+actions:
+    - knative:
+      namespace: "test"
+      sendEvent:
+        broker: "my-broker"
+        event:
+          data: |
+            { "message": "Hello Knative event!" }
+          attributes:
+            - name: ce-type
+              value: "org.citrusframework.knative.event"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+
+

38.5. Receive events

+
+

The Knative broker dispatches events by invoking services. +Usually this service is an arbitrary Kubernetes Service resource or any addressable resource on the Kubernetes cluster. +The events that should be consumed by a service gets specified in a Knative Trigger resource.

+
+
+

This means we need to consume Knative events with a Kubernetes service resource. +Citrus provides special Kubernetes support that enables you to create a Kubernetes service resource on the cluster. +Read more about it in chapter Kubernetes support.

+
+
+

You can create the Kubernetes service as follows:

+
+
+
Java
+
+
@CitrusTest
+public void createServiceTest() {
+    given(kubernetes()
+            .client(k8sClient)
+            .service()
+            .create("my-service")
+            .portMapping(80, 8080)
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateServiceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <kubernetes client="k8sClient" namespace="my-namespace">
+          <create-service name="my-service">
+            <ports>
+              <port-mapping port="80" target-port="8080"/>
+            </ports>
+          </create-service>
+        </kubernetes>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateServiceTest
+actions:
+  - kubernetes:
+      client: "k8sClient"
+      namespace: "my-namespace"
+      createService:
+        name: "my-service"
+        ports:
+          - port: "80"
+            targetPort: "8080"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

This creates the Kubernetes service named my-service in the namespace my-namespace.

+
+
+ + + + + +
+ + +The test requires a local HttServer instance to actually receive the requests on the given port mapping. +Citrus automatically creates this local HttpServer instance. +Please make sure to choose a free port on your host machine when defining the port mapping. +
+
+
+ + + + + +
+ + +Before creating the HttpServer instance as part of the Kubernetes test action Citrus tries to resolve the HttpServer instance from the Citrus bean registry. This means you can also predefine the HttpServer instance as a usual bean in the registry. +Just give the server name as an additional attribute to the Kubernetes service create test action so Citrus knows which server instance should be resolved via the bean registry. +
+
+
+

This creates a proper Kubernetes service and binds it to the local port where the local HttpServer instance is listening for incoming requests. +Before we can start to actually consume events we need to create a Knative Trigger resource. +You can create the Trigger resource as part of the test, too:

+
+
+
Java
+
+
@CitrusTest
+public void createTriggerTest() {
+    given(knative()
+            .client(knativeClient)
+            .trigger()
+            .create("my-trigger")
+            .broker("my-broker")
+            .service("my-service")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateTriggerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <knative client="knativeClient" namespace="my-namespace">
+        <create-trigger name="my-trigger" broker="my-broker" service="my-service"/>
+      </knative>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateTriggerTest
+actions:
+  - knative:
+      client: "knativeClient"
+      namespace: "my-namespace"
+      createTrigger:
+        name: "my-trigger"
+        broker: "my-broker"
+        service: "my-service"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

The Trigger resource receives the broker name that should be used as a source of events and the service name as a subject to being invoked when an event gets dispatched. +The trigger name and the namespace defines where the Trigger resource is created on the Kubernetes cluster.

+
+
+

You add a filter to the Trigger resource to filter events on CloudEvent attributes.

+
+
+
Java
+
+
@CitrusTest
+public void createTriggerTest() {
+    given(knative()
+            .client(knativeClient)
+            .trigger()
+            .create("my-trigger")
+            .broker("my-broker")
+            .service("my-service")
+            .filter("type", "my.very.specific.event.type")
+            .inNamespace("my-namespace"));
+}
+
+
+
+
XML
+
+
<test name="CreateTriggerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+      <knative client="knativeClient" namespace="my-namespace">
+        <create-trigger name="my-trigger" broker="my-broker" service="my-service">
+          <filter>
+            <attribute name="type" value="my.very.specific.event.type"/>
+          </filter>
+        </create-trigger>
+      </knative>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: CreateTriggerTest
+actions:
+  - knative:
+      client: "knativeClient"
+      namespace: "my-namespace"
+      createTrigger:
+        name: "my-trigger"
+        broker: "my-broker"
+        service: "my-service"
+        filter:
+          attributes:
+            - name: type
+              value: "my.very.specific.event.type"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

The filter is set on the CloudeEvent type attribute so the trigger will only dispatch events with this specific type. +The created Trigger resource looks like follows:

+
+
+
Knative Trigger
+
+
apiVersion: eventing.knative.dev/v1
+kind: Trigger
+metadata:
+  name: my-trigger
+spec:
+  broker: default
+  filter:
+    attributes:
+      type: my.very.specific.event.type
+  subscriber:
+    ref:
+      apiVersion: v1
+      kind: Service
+      name: my-service
+
+
+
+

This completes all resources that we need to consume events from the Knative eventing broker. +The following test action receives and verifies a Knative event with an expected CloudEvent message holding expected attributes and event data.

+
+
+
Java
+
+
@CitrusTest
+public void consumeEventTest() {
+    when(knative()
+            .event()
+            .receive()
+            .serviceName("my-service")
+            .attribute("ce-type", "org.citrusframework.knative.event")
+            .eventData("""
+            {
+                "message": "Hello Knative event!"
+            }
+            """));
+}
+
+
+
+
XML
+
+
<test name="ConsumeEventTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <knative namespace="my-namespace">
+          <receive-event service="my-service">
+            <event>
+              <ce-attributes>
+                <ce-attribute name="ce-type" value="org.citrusframework.knative.event"/>
+              </ce-attributes>
+              <data>{ "message": "Hello Knative event!" }</data>
+            </event>
+          </receive-event>
+        </knative>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: ConsumeEventTest
+actions:
+    - knative:
+      namespace: "my-namespace"
+      receiveEvent:
+        service: "my-service"
+        event:
+          data: |
+            { "message": "Hello Knative event!" }
+          attributes:
+            - name: ce-type
+              value: "org.citrusframework.knative.event"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+ + +
+
+
+

39. Testcontainers support

+
+
+

Testcontainers leverage Docker containers in your tests to provide lightweight infrastructure instances such +as databases, message brokers and web browsers. Anything that you can run in a Docker container is subject to be managed by Testcontainers in your test. Citrus as a framework is able to start/stop your Testcontainers instances as part of the test.

+
+
+ + + + + +
+ + +The Testcontainers support is enabled by adding a separate Maven module as a project dependency +
+
+
+
+
<dependency>
+  <groupId>org.citrusframework</groupId>
+  <artifactId>citrus-testcontainers</artifactId>
+  <version>${citrus.version}</version>
+</dependency>
+
+
+
+

39.1. Start and stop Testcontainers

+
+

The Testcontainers test action runs a container and exposes its connection settings as test variables. +You can start any Docker container image as a Testcontainers instance. +The Testcontainers project provides many modules that represent different test infrastructure technologies.

+
+
+

Each of those modules can be started in Citrus with a special test action:

+
+
+
Java
+
+
@CitrusTest
+public void testcontainersTest() {
+    given(testcontainers()
+            .start()
+            .image("busybox:latest")
+            .containerName("busybox-container")
+            .withCommand("echo", "Hello", "World")
+            .withLabel("app", "citrus"));
+}
+
+
+
+
XML
+
+
<test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <testcontainers>
+          <start>
+            <container name="busybox-container" image="busybox:latest" command="echo Hello World">
+              <labels>
+                <label name="app" value="citrus"/>
+              </labels>
+            </container>
+          </start>
+        </testcontainers>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TestcontainersTest
+actions:
+  - testcontainers:
+      start:
+        container:
+          name: "busybox-container"
+          image: "busybox:latest"
+          command: "echo Hello World"
+          labels:
+            - name: app
+              value: citrus
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

In the test example uses the Docker image name busybox:latest to start the Testcontainer instance. +You can set labels, annotations as well as the command that is run as entry point when starting the container.

+
+
+

You can also leverage the Testcontainers API to specify the container details:

+
+
+
Java
+
+
@CitrusTest
+public void testcontainersTest() {
+    GenericContainer<?> busyBox = new GenericContainer("busybox:latest")
+                .withCommand("echo", "Hello World");
+
+    given(testcontainers()
+            .start()
+            .container("my-container", busyBox));
+}
+
+
+
+ + + + + +
+ + +The Citrus test automatically exposes connection details of the running Testcontainers instance. +The connection settings get exposed in the form of test variables. +
+
+
+

These are the test variables that get exposed representing connection settings for the Testcontainers instance.

+
+ +++ + + + + + + + + + + + + + + + + + + + + + + +
Variable

CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_HOST

CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_PORT

CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_CONTAINER_IP

CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_CONTAINER_ID

CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_CONTAINER_NAME

+
+

You can use these test variables in the test to access the details of the running Testcontainers instance. +Special containers may expose additional connection settings such as user credentials, endpoint URLs, managed ports and so on. +Read about this in the individual supported Testcontainers module sections that follow in this guide.

+
+
+ + + + + +
+ + +Each Testcontainers instance that is started from Citrus is automatically removed after the test. This is the default behavior. However, you can disable the auto removal by setting this system property or environment variable: citrus.testcontainers.auto.remove.resources=false or CITRUS_TESTCONTAINERS_AUTO_REMOVE_RESOURCES=false +
+
+
+

You can also disable the auto removal of the started Testcontainers started by Citrus:

+
+
+
Java
+
+
@CitrusTest
+public void testcontainersTest() {
+    GenericContainer<?> busyBox = new GenericContainer("busybox:latest")
+                .withCommand("echo", "Hello World");
+
+    given(testcontainers()
+            .start()
+            .autoRemove(false)
+            .container("my-container", busyBox));
+}
+
+
+
+

This keeps the started Testcontainers instance running even after the test has finished. +When the whole test suite is finished the Testcontainers library may automatically stop and remove the container.

+
+
+

You can explicitly stop a running Testcontainers instance by its name with this test action:

+
+
+
Java
+
+
@CitrusTest
+public void testcontainersTest() {
+    given(testcontainers()
+            .stop()
+            .containerName("busybox-container"));
+}
+
+
+
+
XML
+
+
<test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <testcontainers>
+          <stop name="busybox-container"/>
+        </testcontainers>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TestcontainersTest
+actions:
+  - testcontainers:
+      stop:
+        name: "busybox-container"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

This is how you can manage any Docker image as a Testcontainers instance. +Citrus also provides special support for test infrastructure Testcontainers modules such as:

+
+
+
    +
  • +

    PostgreSQL

    +
  • +
  • +

    MongoDB

    +
  • +
  • +

    LocalStack

    +
  • +
  • +

    Kafka

    +
  • +
  • +

    Redpanda

    +
  • +
+
+
+

The following sections deal with these special Testcontainers modules.

+
+
+
+

39.2. PostgreSQL

+
+

You can start a PostgreSQL instance with the following test action.

+
+
+
Java
+
+
@CitrusTest
+public void testcontainersTest() {
+    given(testcontainers()
+            .postgreSQL()
+            .start()
+            .initScript(Resources.create("db.init.sql")));
+}
+
+
+
+
XML
+
+
<test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <testcontainers>
+          <start>
+            <postgresql>
+              <init-script file="classpath:db.init.sql"/>
+            </postgresql>
+          </start>
+        </testcontainers>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TestcontainersTest
+actions:
+  - testcontainers:
+      start:
+        postgresql:
+          initScript:
+            file: "db.init.sql"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

In the test example the PostgreSQL Testcontainers module is started. +The given init script is used to initialize the database on startup.

+
+
+

Citrus exposes special test variables that represent connection settings for the PostgreSQL container:

+
+ +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Variable

CITRUS_TESTCONTAINERS_POSTGRESQL_HOST

CITRUS_TESTCONTAINERS_POSTGRESQL_CONTAINER_IP

CITRUS_TESTCONTAINERS_POSTGRESQL_CONTAINER_ID

CITRUS_TESTCONTAINERS_POSTGRESQL_CONTAINER_NAME

CITRUS_TESTCONTAINERS_POSTGRESQL_SERVICE_PORT

CITRUS_TESTCONTAINERS_POSTGRESQL_PORT

CITRUS_TESTCONTAINERS_POSTGRESQL_LOCAL_URL

CITRUS_TESTCONTAINERS_POSTGRESQL_SERVICE_LOCAL_URL

CITRUS_TESTCONTAINERS_POSTGRESQL_SERVICE_NAME

CITRUS_TESTCONTAINERS_POSTGRESQL_SERVICE_URL

CITRUS_TESTCONTAINERS_POSTGRESQL_URL

CITRUS_TESTCONTAINERS_POSTGRESQL_DRIVER

CITRUS_TESTCONTAINERS_POSTGRESQL_DB_NAME

CITRUS_TESTCONTAINERS_POSTGRESQL_USERNAME

CITRUS_TESTCONTAINERS_POSTGRESQL_PASSWORD

+
+

In addition to that the Citrus test action exposes a DataSource that connects to the PostgreSQL database and binds it as abean to the Citrus registry. +This means that you can resolve the data source bean via the test context reference resolver.

+
+
+ + + + + +
+ + +You can set the name of the exposed data source bean on each Citrus Testcontainers test action for PostgreSQL. +By default, Citrus exposed the data source bean with the name postgreSQL. +
+
+
+
+

39.3. MongoDB

+
+

You can start a MongoDB instance with the following test action.

+
+
+
Java
+
+
@CitrusTest
+public void testcontainersTest() {
+    given(testcontainers()
+            .mongodb()
+            .start());
+}
+
+
+
+
XML
+
+
<test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <testcontainers>
+          <start>
+            <mongodb/>
+          </start>
+        </testcontainers>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TestcontainersTest
+actions:
+  - testcontainers:
+      start:
+        mongodb: {}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

In the test example the MongoDB Testcontainers module is started. +Citrus exposes special test variables that represent connection settings for the MongoDB container:

+
+ +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Variable

CITRUS_TESTCONTAINERS_MONGODB_HOST

CITRUS_TESTCONTAINERS_MONGODB_CONTAINER_IP

CITRUS_TESTCONTAINERS_MONGODB_CONTAINER_ID

CITRUS_TESTCONTAINERS_MONGODB_CONTAINER_NAME

CITRUS_TESTCONTAINERS_MONGODB_LOCAL_URL

CITRUS_TESTCONTAINERS_MONGODB_SERVICE_PORT

CITRUS_TESTCONTAINERS_MONGODB_PORT

CITRUS_TESTCONTAINERS_MONGODB_SERVICE_LOCAL_URL

CITRUS_TESTCONTAINERS_MONGODB_SERVICE_NAME

CITRUS_TESTCONTAINERS_MONGODB_SERVICE_URL

CITRUS_TESTCONTAINERS_MONGODB_URL

CITRUS_TESTCONTAINERS_MONGODB_CONNECTION_STRING

+
+

You can use these test variables to connect to the MongoDB Testcontainers instance.

+
+
+
+

39.4. LocalStack

+
+

The LocalStack Testcontainers module allows you to start lightweight Amazon WebServices such as AWS S3, AWS SQS, AWS SNS or AWS Kinesis. +You can start a LocslStack instance with the following test action.

+
+
+
Java
+
+
@CitrusTest
+public void testcontainersTest() {
+    given(testcontainers()
+            .localstack()
+            .start()
+            .withService(LocalStackContainer.Service.S3));
+}
+
+
+
+
XML
+
+
<test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <testcontainers>
+          <start>
+            <localstack services="S3"/>
+          </start>
+        </testcontainers>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TestcontainersTest
+actions:
+  - testcontainers:
+      start:
+        localstack:
+          services:
+            - "S3"
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

Each LocalStack instance receives a list of enables services. +In the example above the AWS S3 service is enabled.

+
+
+

Citrus exposes special test variables that represent connection settings for the LocalStack container:

+
+ +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Variable

CITRUS_TESTCONTAINERS_LOCALSTACK_HOST

CITRUS_TESTCONTAINERS_LOCALSTACK_CONTAINER_IP

CITRUS_TESTCONTAINERS_LOCALSTACK_CONTAINER_ID

CITRUS_TESTCONTAINERS_LOCALSTACK_CONTAINER_NAME

CITRUS_TESTCONTAINERS_LOCALSTACK_REGION

CITRUS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY

CITRUS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY

CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_PORT

CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_LOCAL_URL

CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_NAME

CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL

+
+

For each enabled service on the LocalStack instance these variables are exposed:

+
+ +++ + + + + + + + + + + + + + + + + +
Variable

CITRUS_TESTCONTAINERS_LOCALSTACK_<SERVICE_NAME>_URL

CITRUS_TESTCONTAINERS_LOCALSTACK_<SERVICE_NAME>_LOCAL_URL

CITRUS_TESTCONTAINERS_LOCALSTACK_<SERVICE_NAME>_PORT

+
+

You can use these test variables to connect to the LocalStack Testcontainers instance. +As an example this S3 client connects to the LocalStack Testcontainers instance and creates a test bucket:

+
+
+
Java
+
+
private S3Client createS3Client(TestContext context) {
+    S3Client s3 = S3Client
+            .builder()
+            .endpointOverride(URI.create(context.getVariable("${CITRUS_TESTCONTAINERS_LOCALSTACK_S3_URL}")))
+            .credentialsProvider(StaticCredentialsProvider.create(
+                    AwsBasicCredentials.create(
+                            context.getVariable("${CITRUS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}"),
+                            context.getVariable("${CITRUS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}"))
+            ))
+            .forcePathStyle(true)
+            .region(Region.of(context.getVariable("${CITRUS_TESTCONTAINERS_LOCALSTACK_REGION}")))
+            .build();
+
+    s3.createBucket(b -> b.bucket(context.getVariable("${aws.s3.bucketNameOrArn}")));
+
+    return s3;
+}
+
+
+
+ + + + + +
+ + +You can access the Citrus TesContext via @CitrusResource injection in your test class or method. +
+
+
+
+

39.5. Kafka

+
+

You can start a Kafka instance with the following test action.

+
+
+
Java
+
+
@CitrusTest
+public void testcontainersTest() {
+    given(testcontainers()
+            .kafka()
+            .start());
+}
+
+
+
+
XML
+
+
<test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <testcontainers>
+          <start>
+            <kafka/>
+          </start>
+        </testcontainers>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TestcontainersTest
+actions:
+  - testcontainers:
+      start:
+        kafka: {}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

In the test example the Kafka Testcontainers module is started. +Citrus exposes special test variables that represent connection settings for the Kafka container:

+
+ +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Variable

CITRUS_TESTCONTAINERS_KAFKA_HOST

CITRUS_TESTCONTAINERS_KAFKA_CONTAINER_IP

CITRUS_TESTCONTAINERS_KAFKA_CONTAINER_ID

CITRUS_TESTCONTAINERS_KAFKA_CONTAINER_NAME

CITRUS_TESTCONTAINERS_KAFKA_LOCAL_BOOTSTRAP_SERVERS

CITRUS_TESTCONTAINERS_KAFKA_SERVICE_PORT

CITRUS_TESTCONTAINERS_KAFKA_PORT

CITRUS_TESTCONTAINERS_KAFKA_SERVICE_LOCAL_BOOTSTRAP_SERVERS

CITRUS_TESTCONTAINERS_KAFKA_SERVICE_NAME

CITRUS_TESTCONTAINERS_KAFKA_SERVICE_BOOTSTRAP_SERVERS

CITRUS_TESTCONTAINERS_KAFKA_BOOTSTRAP_SERVERS

+
+

You can use these test variables to connect to the Kafka Testcontainers instance.

+
+
+
+

39.6. Redpanda

+
+

You can start a Redpanda instance with the following test action.

+
+
+
Java
+
+
@CitrusTest
+public void testcontainersTest() {
+    given(testcontainers()
+            .redpanda()
+            .start());
+}
+
+
+
+
XML
+
+
<test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <testcontainers>
+          <start>
+            <redpanda/>
+          </start>
+        </testcontainers>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: TestcontainersTest
+actions:
+  - testcontainers:
+      start:
+        redpanda: {}
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <!-- NOT SUPPORTED -->
+</spring:beans>
+
+
+
+

In the test example the Redpanda Testcontainers module is started. +Citrus exposes special test variables that represent connection settings for the Redpanda container:

+
+ +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Variable

CITRUS_TESTCONTAINERS_REDPANDA_HOST

CITRUS_TESTCONTAINERS_REDPANDA_CONTAINER_IP

CITRUS_TESTCONTAINERS_REDPANDA_CONTAINER_ID

CITRUS_TESTCONTAINERS_REDPANDA_CONTAINER_NAME

CITRUS_TESTCONTAINERS_REDPANDA_LOCAL_BOOTSTRAP_SERVERS

CITRUS_TESTCONTAINERS_REDPANDA_SERVICE_PORT

CITRUS_TESTCONTAINERS_REDPANDA_PORT

CITRUS_TESTCONTAINERS_REDPANDA_SERVICE_LOCAL_BOOTSTRAP_SERVERS

CITRUS_TESTCONTAINERS_REDPANDA_SERVICE_NAME

CITRUS_TESTCONTAINERS_REDPANDA_SERVICE_BOOTSTRAP_SERVERS

CITRUS_TESTCONTAINERS_REDPANDA_BOOTSTRAP_SERVERS

+
+

You can use these test variables to connect to the Redpanda Testcontainers instance.

+
+
+
+
+
+

40. Functions

+
+
+

The test framework will offer several functions that are useful throughout the test execution. The functions will always return a string value that is ready for use as variable value or directly inside a text message.

+
+
+

A set of functions is usually combined to a function library. The library has a prefix that will identify the functions inside the test case. The default test framework function library uses a default prefix (citrus). You can write your own function library using your own prefix in order to extend the test framework functionality whenever you want.

+
+
+

The library is built in the Spring configuration and contains a set of functions that are of public use.

+
+
+
+
<citrus:function-library id="testLibrary" prefix="foo:">
+          <citrus:function name="randomNumber" class="org.citrusframework.functions.RandomNumberFunction"/>
+          <citrus:function name="randomString" class="org.citrusframework.functions.RandomStringFunction"/>
+          <citrus:function name="customFunction" ref="customFunctionBean"/>
+          ...
+</citrus:function-library>
+
+
+
+

As you can see the library defines one-to-many functions either referenced as normal Spring bean or by its implementing Java class name. Citrus constructs the library and you are able to use the functions in your test case with the leading library prefix just like this:

+
+
+
+
foo:randomNumber()
+foo:randomString()
+foo:customFunction()
+
+
+
+ + + + + +
+ + +You can add custom function implementations and custom function libraries. Just use a custom prefix for your library. The default Citrus function library uses the citrus: prefix.In the next chapters the default functions offered by the framework will be described in detail. +
+
+
+

40.1. concat()

+
+

The function will combine several string tokens to a single string value. This means that you can combine a static text value with a variable value for instance. A first example should clarify the usage:

+
+
+
+
<testcase name="concatFunctionTest">
+    <variables>
+        <variable name="date" value="citrus:currentDate(yyyy-MM-dd)" />
+        <variable name="text" value="Hello Test Framework!" />
+    </variables>
+    <actions>
+        <echo>
+            <message>
+                citrus:concat('Today is: ', ${date}, ' right!?')
+            </message>
+        </echo>
+        <echo>
+            <message>
+                citrus:concat('Text is: ', ${text})
+            </message>
+        </echo>
+    </actions>
+</testcase>
+
+
+
+

Please do not forget to mark static text with single quote signs. There is no limitation for string tokens to be combined.

+
+
+
+
citrus:concat('Text1', 'Text2', 'Text3', ${text}, 'Text5', …, 'TextN')
+
+
+
+

The function can be used wherever variables can be used. For instance when validating XML elements in the receive action.

+
+
+
+
<message>
+    <validate path="//element/element" value="citrus:concat('Cx1x', ${generatedId})"/>
+</message>
+
+
+
+
+

40.2. substring()

+
+

The function will have three parameters.

+
+
+
    +
  1. +

    String to work on

    +
  2. +
  3. +

    Starting index

    +
  4. +
  5. +

    End index (optional)

    +
  6. +
+
+
+

Let us have a look at a simple example for this function:

+
+
+
+
<echo>
+    <message>
+        citrus:substring('Hello Test Framework', 6)
+    </message>
+</echo>
+<echo>
+    <message>
+        citrus:substring('Hello Test Framework', 0, 5)
+    </message>
+</echo>
+
+
+
+

Function output:

+
+
+
+
Test Framework
+Hello
+
+
+
+
+

40.3. stringLength()

+
+

The function will calculate the number of characters in a string representation and return the number.

+
+
+
+
<echo>
+    <message>citrus:stringLength('Hello Test Framework')</message>
+</echo>
+
+
+
+

Function output:

+
+
+

20

+
+
+
+

40.4. translate()

+
+

This function will replace regular expression matching values inside a string representation with a specified replacement string.

+
+
+
+
<echo>
+    <message>
+        citrus:translate('H.llo Test Fr.mework', '\.', 'a')
+    </message>
+</echo>
+
+
+
+

Note that the second parameter will be a regular expression. The third parameter will be a simple replacement string value.

+
+
+

Function output:

+
+
+

Hello Test Framework

+
+
+
+

40.5. substringBefore()

+
+

The function will search for the first occurrence of a specified string and will return the substring before that occurrence. Let us have a closer look in a simple example:

+
+
+
+
<echo>
+    <message>
+        citrus:substringBefore('Test/Framework', '/')
+    </message>
+</echo>
+
+
+
+

In the specific example the function will search for the ‘/’ character and return the string before that index.

+
+
+

Function output:

+
+
+

Test

+
+
+
+

40.6. substringAfter()

+
+

The function will search for the first occurrence of a specified string and will return the substring after that occurrence. Let us clarify this with a simple example:

+
+
+
+
<echo>
+    <message>
+        citrus:substringAfter('Test/Framework', '/')
+    </message>
+</echo>
+
+
+
+

Similar to the substringBefore function the ‘/’ character is found in the string. But now the remaining string is returned by the function meaning the substring after this character index.

+
+
+

Function output:

+
+
+

Framework

+
+
+
+

40.7. round()

+
+

This is a simple mathematical function that will round decimal numbers representations to their nearest non-decimal number.

+
+
+
+
<echo>
+    <message>citrus:round('3.14')</message>
+</echo>
+
+
+
+

Function output:

+
+
+

3

+
+
+
+

40.8. floor()

+
+

This function will round down decimal number values.

+
+
+
+
<echo>
+    <message>citrus:floor('3.14')</message>
+</echo>
+
+
+
+

Function output:

+
+
+

3.0

+
+
+
+

40.9. ceiling()

+
+

Similar to floor function, but now the function will round up the decimal number values.

+
+
+
+
<echo>
+    <message>citrus:ceiling('3.14')</message>
+</echo>
+
+
+
+

Function output:

+
+
+

4.0

+
+
+
+

40.10. randomNumber()

+
+

The random number function will provide you the opportunity to generate random number strings containing positive number letters. There is a singular Boolean parameter for that function describing whether the generated number should have exactly the amount of digits. Default value for this padding flag will be true.

+
+
+

Next example will show the function usage:

+
+
+
+
<variables>
+    <variable name="rndNumber1" value="citrus:randomNumber(10)"/>
+    <variable name="rndNumber2" value="citrus:randomNumber(10, true)"/>
+    <variable name="rndNumber2" value="citrus:randomNumber(10, false)"/>
+    <variable name="rndNumber3" value="citrus:randomNumber(3, false)"/>
+</variables>
+
+
+
+

Function output:

+
+
+
+
8954638765
+5003485980
+6387650
+65
+
+
+
+
+

40.11. randomString()

+
+

This function will generate a random string representation with a defined length. A second parameter for this function will define the case of the generated letters (UPPERCASE, LOWERCASE, MIXED). The last parameter allows also digit characters in the generated string. By default digit characters are not allowed.

+
+
+
+
<variables>
+    <variable name="rndString0" value="${citrus:randomString(10)}"/>
+    <variable name="rndString1" value="citrus:randomString(10)"/>
+    <variable name="rndString2" value="citrus:randomString(10, UPPERCASE)"/>
+    <variable name="rndString3" value="citrus:randomString(10, LOWERCASE)"/>
+    <variable name="rndString4" value="citrus:randomString(10, MIXED)"/>
+    <variable name="rndString4" value="citrus:randomString(10, MIXED, true)"/>
+</variables>
+
+
+
+

Function output:

+
+
+
+
HrGHOdfAer
+AgSSwedetG
+JSDFUTTRKU
+dtkhirtsuz
+Vt567JkA32
+
+
+
+
+

40.12. randomEnumValue()

+
+

This function returns one of its supplied arguments. Furthermore you can specify a custom function with a configured list of values (the enumeration). The function will randomly return an entry when called without arguments. This promotes code reuse and facilitates refactoring.

+
+
+

In the next sample the function is used to set a httpStatusCode variable to one of the given HTTP status codes (200, 401, 500)

+
+
+
+
<variable name="httpStatusCode" value="citrus:randomEnumValue('200', '401', '500')" />
+
+
+
+

As mentioned before you can define a custom function for your very specific needs in order to easily manage a list of predefined values like this:

+
+
+
+
<citrus:function-library id="myCustomFunctionLibrary" prefix="custom:">
+    <citrus-function name="randomHttpStatusCode" ref="randomHttpStatusCodeFunction"/>
+</citrus:function-library>
+
+<bean id="randomHttpStatusCodeFunction" class="org.citrusframework.functions.core.RandomEnumValueFunction">
+  <property name="values">
+    <list>
+      <value>200</value>
+      <value>500</value>
+      <value>401</value>
+    </list>
+  </property>
+</bean>
+
+
+
+

We have added a custom function library with a custom function definition. The custom function "randomHttpStatusCode" randomly chooses an HTTP status code each time it is called. Inside the test you can use the function like this:

+
+
+
+
<variable name="httpStatusCode" value="custom:randomHttpStatusCode()" />
+
+
+
+
+

40.13. currentDate()

+
+

This function will definitely help you when accessing the current date. Some examples will show the usage in detail:

+
+
+
+
<echo><message>citrus:currentDate()</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd')</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd HH:mm:ss')</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd'T'hh:mm:ss')</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd HH:mm:ss', '+1y')</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd HH:mm:ss', '+1M')</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd HH:mm:ss', '+1d')</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd HH:mm:ss', '+1h')</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd HH:mm:ss', '+1m')</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd HH:mm:ss', '+1s')</message></echo>
+<echo><message>citrus:currentDate('yyyy-MM-dd HH:mm:ss', '-1y')</message></echo>
+
+
+
+

Note that the currentDate function provides two parameters. First parameter describes the date format string. The second will define a date offset string containing year, month, days, hours, minutes or seconds that will be added or subtracted to or from the actual date value.

+
+
+

Function output:

+
+
+
+
01.09.2009
+2009-09-01
+2009-09-01 12:00:00
+2009-09-01T12:00:00
+
+
+
+
+

40.14. upperCase()

+
+

This function converts any string to upper case letters.

+
+
+
+
<echo>
+    <message>citrus:upperCase('Hello Test Framework')</message>
+</echo>
+
+
+
+

Function output:

+
+
+

HELLO TEST FRAMEWORK

+
+
+
+

40.15. lowerCase()

+
+

This function converts any string to lower case letters.

+
+
+
+
<echo>
+    <message>citrus:lowerCase('Hello Test Framework')</message>
+</echo>
+
+
+
+

Function output:

+
+
+

hello test framework

+
+
+
+

40.16. average()

+
+

The function will sum up all specified number values and divide the result through the number of values.

+
+
+
+
<variable name="avg" value="citrus:average('3', '4', '5')"/>
+
+
+
+

avg = 4.0

+
+
+
+

40.17. minimum()

+
+

This function returns the minimum value in a set of number values.

+
+
+
+
<variable name="min" value="citrus:minimum('3', '4', '5')"/>
+
+
+
+

min = 3.0

+
+
+
+

40.18. maximum()

+
+

This function returns the maximum value in a set of number values.

+
+
+
+
<variable name="max" value="citrus:maximum('3', '4', '5')"/>
+
+
+
+

max = 5.0

+
+
+
+

40.19. sum()

+
+

The function will sum up all number values. The number values can also be negative.

+
+
+
+
<variable name="sum" value="citrus:sum('3', '4', '5')"/>
+
+
+
+

sum = 12.0

+
+
+
+

40.20. absolute()

+
+

The function will return the absolute number value.

+
+
+
+
<variable name="abs" value="citrus:absolute('-3')"/>
+
+
+
+

abs = 3.0

+
+
+
+

40.21. mapValue()

+
+

This function implementation maps string keys to string values. This is very helpful when the used key is randomly chosen at runtime and the corresponding value is not defined during the design time.

+
+
+

The following function library defines a custom function for mapping HTTP status codes to the corresponding messages:

+
+
+
+
<citrus:function-library id="myCustomFunctionLibrary" prefix="custom:">
+      <citrus-function name="getHttpStatusMessage" ref="getHttpStatusMessageFunction"/>
+</citrus:function-library>
+
+<bean id="getHttpStatusMessageFunction" class="org.citrusframework.functions.core.MapValueFunction">
+  <property name="values">
+    <map>
+      <entry key="200" value="OK" />
+      <entry key="401" value="Unauthorized" />
+      <entry key="500" value="Internal Server Error" />
+    </map>
+  </property>
+</bean>
+
+
+
+

In this example the function sets the variable httpStatusMessage to the 'Internal Server Error' string dynamically at runtime. The test only knows the HTTP status code and does not care about spelling and message locales.

+
+
+
+
<variable name="httpStatusCodeMessage" value="custom:getHttpStatusMessage('500')" />
+
+
+
+
+

40.22. randomUUID()

+
+

The function will generate a random Java UUID.

+
+
+
+
<variable name="uuid" value="citrus:randomUUID()"/>
+
+
+
+

uuid = 98fbd7b0-832e-4b85-b9d2-e0113ee88356

+
+
+
+

40.23. encodeBase64()

+
+

The function will encode a string to binary data using base64 hexadecimal encoding.

+
+
+
+
<variable name="encoded" value="citrus:encodeBase64('Hallo Testframework')"/>
+
+
+
+

encoded = VGVzdCBGcmFtZXdvcms=

+
+
+

It also has an optional charset parameter that is used for encoding the input string, with UTF-8 as its default value.

+
+
+
+
<variable name="encoded" value="citrus:encodeBase64('Hallo Testframework', 'UTF-8')"/>
+
+
+
+
+

40.24. decodeBase64()

+
+

The function will decode binary data to a character sequence using base64 hexadecimal decoding.

+
+
+
+
<variable name="decoded" value="citrus:decodeBase64('VGVzdCBGcmFtZXdvcms=')"/>
+
+
+
+

decoded = Hallo Testframework

+
+
+

It also has an optional charset parameter that is used for encoding the input string, with UTF-8 as its default value.

+
+
+
+
<variable name="decoded" value="citrus:decodeBase64('VGVzdCBGcmFtZXdvcms=', 'UTF-8')"/>
+
+
+
+
+

40.25. escapeXml()

+
+

If you want to deal with escaped XML in your test case you may want to use this function. It automatically escapes all XML special characters.

+
+
+
+
<echo>
+    <message>
+        <![CDATA[
+            citrus:escapeXml('<Message>Hallo Test Framework</Message>')
+        ]]>
+    </message>
+</echo>
+
+
+
+

<Message>Hallo Test Framework</Message>

+
+
+
+

40.26. cdataSection()

+
+

Usually we use CDATA sections to define message payload data inside a testcase. We might run into problems when the payload itself contains CDATA sections as nested CDATA sections are prohibited by XML nature. In this case the next function ships very usefull.

+
+
+
+
<variable name="cdata" value="citrus:cdataSection('payload')"/>
+
+
+
+

cdata = <![CDATA[payload]]>

+
+
+
+

40.27. digestAuthHeader()

+
+

Digest authentication is a commonly used security algorithm, especially in Http communication and SOAP WebServices. Citrus offers a function to generate a digest authentication principle used in the Http header section of a message.

+
+
+
+
<variable name="digest"
+  value="citrus:digestAuthHeader('username', 'password', 'authRealm', 'acegi',
+                            'POST', 'http://127.0.0.1:8080', 'citrus', 'md5')"/>
+
+
+
+

A possible digest authentication header value looks like this:

+
+
+
+
<Digest username=foo,realm=arealm,nonce=MTMzNT,
+uri=http://127.0.0.1:8080,response=51f98c,opaque=b29a30,algorithm=md5>
+
+
+
+

You can use these digest headers in messages sent by Citrus like this:

+
+
+
+
<header>
+  <element name="citrus_http_Authorization"
+    value="vflig:digestAuthHeader('${username}','${password}','${authRealm}',
+                            '${nonceKey}','POST','${uri}','${opaque}','${algorithm}')"/>
+</header>
+
+
+
+

This will set a Http Authorization header with the respective digest in the request message. So your test is ready for client digest authentication.

+
+
+
+

40.28. localHostAddress()

+
+

Test cases may use the local host address for some reason (e.g. used as authentication principle). As the tests may run on different machines at the same time we can not use static host addresses. The provided function localHostAddress() reads the local host name dynamically at runtime.

+
+
+
+
<variable name="address" value="citrus:localHostAddress()"/>
+
+
+
+

A possible value is either the host name as used in DNS entry or an IP address value:

+
+
+

address = <192.168.2.100>

+
+
+
+

40.29. changeDate()

+
+

This function works with date values and manipulates those at runtime by adding or removing a date value offset. You can manipulate several date fields such as: year, month, day, hour, minute or second.

+
+
+

Let us clarify this with a simple example for this function:

+
+
+
+
<echo>
+    <message>citrus:changeDate('01.01.2000', '+1y+1M+1d')</message>
+</echo>
+<echo>
+    <message>citrus:changeDate(citrus:currentDate(), '-1M')</message>
+</echo>
+
+
+
+

Function output:

+
+
+
+
02.02.2001
+13.04.2013
+
+
+
+

As you can see the change date function works on static date values or dynamic variable values or functions like citrus:currentDate() . By default the change date function requires a date format such as the current date function ('dd.MM.yyyy'). You can also define a custom date format:

+
+
+
+
<echo>
+    <message>citrus:changeDate('2000-01-10', '-1M-1d', 'yyyy-MM-dd')</message>
+</echo>
+
+
+
+

Function output:

+
+
+
+
1999-12-09
+
+
+
+

With this you are able to manipulate all date values of static or dynamic nature at test runtime.

+
+
+
+

40.30. readFile()

+
+

The readFile function reads a file resource from given file path and loads the complete file content as function result. The file path can be a system file path as well as a classpath file resource. The file path can have test variables as part of the path or file name. In addition to that the file content can also have test variable values and other functions.

+
+
+

Let’s see this function in action:

+
+
+
+
<echo>
+    <message>citrus:readFile('classpath:some/path/to/file.txt')</message>
+</echo>
+<echo>
+    <message>citrus:readFile(${filePath})</message>
+</echo>
+
+
+
+

The function reads the file content and places the content at the position where the function has been called. This means that you can also use this function as part of Strings and message payloads for instance. This is a very powerful way to extract large message parts to separate file resources. Just add the readFile function somewhere to the message content and Citrus will load the extra file content and place it right into the message payload for you.

+
+
+

This function has a second and a third optional parameter that can be used for the following:

+
+
+
    +
  • +

    2nd parameter: a boolean value to indicate that the returned value should be base64 encoded. Defaults to false.

    +
  • +
+
+
+
+
<message>citrus:readFile('classpath:some/path/to/file.txt', true)</message>
+
+
+
+
    +
  • +

    3rd parameter: a boolean value to indicate that a dynamic replacement (Citrus variables, functions, etc.) should be performed before the content is base64 encoded. Defaults to false.

    +
  • +
+
+
+
+
<message>citrus:readFile('classpath:some/path/to/file.txt', true, true)</message>
+
+
+
+
+

40.31. message()

+
+

When messages are exchanged in Citrus the content is automatically saved to an in memory storage for further access in the test case. That means that functions and test actions can access the messages +that have been sent or received within the test case. The message function loads a message content from that message store. The message is identified by its name. Receive and send actions usually define +the message name. Now we can load the message payload with that name.

+
+
+

Let’s see this function in action:

+
+
+
+
<echo>
+    <message>citrus:message(myRequest.body())</message>
+</echo>
+
+
+
+

The function above loads the message named myRequest from the local memory store. This requires a send or receive action to have handled the message before in the same test case.

+
+
+
XML DSL
+
+
<send endpoint="someEndpoint">
+  <message name="myRequest">
+    <payload>Some payload</payload>
+  </message>
+</send>
+
+
+
+
Java DSL
+
+
send("someEndpoint")
+    .message()
+    .name("myRequest")
+    .body("Some payload");
+
+
+
+

The name of the message is important. Otherwise the message can not be found in the local message store. Note: a message can either be received or sent with a name in order to be stored +in the local message store. The message function is then able to access the message by its name. In the first example the body() has been loaded. Of course we can also access header information.

+
+
+
+
<echo>
+    <message>citrus:message(myRequest.header('Operation'))</message>
+</echo>
+
+
+
+

The sample above loads the header Operation of the message.

+
+
+

In Java DSL the message store is also accessible over the TestContext.

+
+
+
+

40.32. xpath()

+
+

The xpath function evaluates a Xpath expressions on some XML source and returns the expression result as String.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:xpath('<message><id>1000</id></text>Some text content</text></message>', '/message/id')]]></message>
+</echo>
+
+
+
+

The XML source is given as first function parameter and can be loaded in different ways. In the example above a static XML source has been used. We could load the XML content from +external file or just use a test variable.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:xpath(citrus:readFile('some/path/to/file.xml'), '/message/id')]]></message>
+</echo>
+
+
+
+

Also accessing the local message store is valid here:

+
+
+
+
<echo>
+    <message><![CDATA[citrus:xpath(citrus:message(myRequest.body()), '/message/id')]]></message>
+</echo>
+
+
+
+

This combination is quite powerful as all previously exchanged messages in the test are automatically stored to the local message store. Reusing dynamic message values from other messages +becomes very easy then.

+
+
+
+

40.33. jsonPath()

+
+

The jsonPath function evaluates a JsonPath expressions on some JSON source and returns the expression result as String.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:jsonPath('{ "message": { "id": 1000, "text": "Some text content" } }', '$.message.id')]]></message>
+</echo>
+
+
+
+

The JSON source is given as first function parameter and can be loaded in different ways. In the example above a static JSON source has been used. We could load the JSON content from +external file or just use a test variable.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:jsonPath(${jsonSource}, '$.message.id')]]></message>
+</echo>
+
+
+
+

The JSON source may also be specified in multiple parameters, in which case the arguments except the last one are concatenated with commas, +and will be treated as the JSON source. The last parameter is always treated as the JSON path expression.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:jsonPath('{ "message": { "id": 1000', '"text": "Some text content" } }', '$.message.id')]]></message>
+</echo>
+
+
+
+

In the example above, the parts { "message": { "id": 1000 and "text": "Some text content" } } will form the JSON source +as { "message": { "id": 1000, "text": "Some text content" } }.

+
+
+

Also accessing the local message store is valid here:

+
+
+
+
<echo>
+    <message><![CDATA[citrus:jsonPath(citrus:message(myRequest.body()), '$.message.id')]]></message>
+</echo>
+
+
+
+

This combination is quite powerful as all previously exchanged messages in the test are automatically stored to the local message store. Reusing dynamic message values from other messages +becomes very easy then.

+
+
+
+

40.34. urlEncode()/urlDecode()

+
+

The urlEncode function takes a String and performs proper URL encoding. The result is a URL encoded String that is using proper character escaping for Http.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:urlEncode('foo@citrusframework', 'UTF-8')]]></message>
+</echo>
+
+
+
+

The above function takes the String foo@citrusframework.org and performs proper URL encoding resulting in foo%40citrusframework.

+
+
+

Same logic applies to the urlDecode() function that will read an encoded String replacing all escaped characters to the normal String representation.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:urlDecode('foo%40citrusframework', 'UTF-8')]]></message>
+</echo>
+
+
+
+

The UTF-8 charset is used during URL encoding operation and is optional as the default is UTF-8.

+
+
+
+

40.35. systemProperty()

+
+

The systemProperty function resolves a System property expression at test runtime. The resulting value is returned as function result. In case the System property is not available in the JVM an optional default value is used. +In case no default value is given the function will fail with errors.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:systemProperty('user.name', 'my-default')]]></message>
+</echo>
+
+
+
+
+

40.36. env()

+
+

The env function can be used to access an environment specific property at test runtime. The environment property can be a variable set on the underlying operating system. Also the env() function is able to access +the Spring environment settings (see org.springframework.core.env.Environment).

+
+
+

As the Spring environment is also able to resolve System properties you can use this function in this manner, too.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:env('USER_NAME', 'my-default')]]></message>
+</echo>
+
+
+
+

The default value is optional and provides an error fallback in case the environment setting is not available. In case no default value is provided the function will fail with errors.

+
+
+
+

40.37. unixTimestamp()

+
+

unixTimestamp is a parameterless function that simply returns the current epoch timestamp as seconds.

+
+
+
+
<echo>
+    <message><![CDATA[citrus:unixTimestamp()]]></message>
+</echo>
+
+
+
+
+
+
+

41. Validation Matchers

+
+
+

Message validation in Citrus is essential. The framework offers several validation mechanisms for different message types and formats. With test variables we are able to check for simple value equality. We ensure that message entries are equal to predefined expected values. Validation matcher add powerful assertion functionality on top of that. You just can use the predefined validation matcher functionalities in order to perform more complex assertions like contains or isNumber in your validation statements.

+
+
+

The following sections describe the Citrus default validation matcher implementations that are ready for usage. The matcher implementations should cover the basic assertions on character sequences and numbers. Of course you can add custom validation matcher implementations in order to meet your very specific validation assertions, too.

+
+
+

First of all let us have a look at a validation matcher statement in action so we understand how to use them in a test case.

+
+
+
+
<message>
+    <payload>
+        <RequestMessage>
+            <MessageBody>
+                <Customer>
+                    <Id>@greaterThan(0)@</Id>
+                    <Name>@equalsIgnoreCase('foo')@</Name>
+                </Customer>
+            </MessageBody>
+        </RequestMessage>
+    </payload>
+</message>
+
+
+
+

The listing above describes a normal message validation block inside a receive test action. We use some inline message payload template as CDATA. As you know Citrus will compare the actual message payload to this expected template in DOM tree comparison. In addition to that you can simply include validation matcher statements. The message element Id is automatically validated to be a number greater than zero and the Name character sequence is supposed to match 'foo' ignoring case spelling considerations.

+
+
+

Please note the special validation matcher syntax. The statements are surrounded with '@' markers and are identified by some unique name. The optional parameters passed to the matcher implementation state the expected values to match.

+
+
+ + + + + +
+ + +You can use validation matcher with all validation mechanisms - not only with XML validation. Plaintext, JSON, SQL result set validation are also supported. +
+
+
+

A set of validation matcher implementations is usually combined to a validation matcher library. The library has a prefix that will identify the validation matcher inside the test case. The default test framework validation matcher library uses a default prefix (citrus). You can write your own validation matcher library using your own prefix in order to extend the test framework functionality whenever you want.

+
+
+

The library is built in the Spring configuration and contains a set of validation matchers that are of public use.

+
+
+
+
<citrus:validation matcher-library id="testMatcherLibrary" prefix="foo:">
+      <citrus:matcher name="isNumber"> class="org.citrusframework.validation.matcher.core.IsNumberValidationMatcher"/>
+      <citrus:matcher name="contains"> class="org.citrusframework.validation.matcher.core.ContainsValidationMatcher"/>
+      <citrus:matcher name="customMatcher"> ref="customMatcherBean"/>
+      ...
+      </citrus:validation matcher-library>
+
+
+
+

As you can see the library defines one to many validation matcher members either referenced as normal Spring bean or by its implementing Java class name. Citrus constructs the library and you are able to use the validation matcher in your test case with the leading library prefix just like this:

+
+
+
+
@foo:isNumber()@
+@foo:contains()@
+@foo:customMatcher()@
+
+
+
+ + + + + +
+ + +You can add custom validation matcher implementations and custom validation matcher libraries. Just use a custom prefix for your library. The default Citrus validation matcher library uses no prefix. See now the following sections describing the default validation matcher in Citrus. +
+
+
+

41.1. ignore()

+
+

The ignore validation matcher is a special matcher that ignores the value and is always positive in its outcome. You should use the ignore validation matcher when +only validating the pure existence of an element. The value is ignored but the element has to be present in the message payload.

+
+
+
+
<message>
+    <payload>
+        <RequestMessage>
+            <MessageBody>
+                <Customer>
+                    <Id>@ignore()@</Id>
+                    <Name>@equalsIgnoreCase('foo')@</Name>
+                </Customer>
+            </MessageBody>
+        </RequestMessage>
+    </payload>
+</message>
+
+
+
+ + + + + +
+ + +The ignore validation matcher is the only validation matcher that is able to skip the function parameter body. So you can use both @ignore()@ and @ignore@. +
+
+
+
+

41.2. matchesXml()

+
+

The XML validation matcher implementation is the possibly most exciting one, as we can validate nested XML with full validation power (e.g. ignoring elements, variable support). The matcher checks a nested XML fragment to compare against expected XML. For instance we receive the following XML message payload for validation:

+
+
+
+
<GetCustomerMessage>
+      <CustomerDetails>
+          <Id>5</Id>
+          <Name>Christoph</Name>
+          <Configuration><![CDATA[
+            <config>
+                <premium>true</premium>
+                <last-login>2012-02-24T23:34:23</last-login>
+                <link>http://citrusframework.org/customer/5</link>
+            </config>
+          ]]></Configuration>
+      </CustomerDetails>
+</GetCustomerMessage>
+
+
+
+

As you can see the message payload contains some configuration as nested XML data in a CDATA section. We could validate this CDATA section as static character sequence comparison, true. But the <last-login> timestamp changes its value continuously. This breaks the static validation for CDATA elements in XML. Fortunately the new XML validation matcher provides a solution for us:

+
+
+
+
<message>
+    <payload>
+        <GetCustomerMessage>
+            <CustomerDetails>
+                <Id>5</Id>
+                <Name>Christoph</Name>
+                <Configuration>citrus:cdataSection('@matchesXml('<config>
+                    <premium>${isPremium}</premium>
+                    <last-login>@ignore@</last-login>
+                    <link>http://citrusframework.org/customer/5</link>
+                  </config>')@')</Configuration>
+            </CustomerDetails>
+        </GetCustomerMessage>
+    </payload>
+</message>
+
+
+
+

With the validation matcher you are able to validate the nested XML with full validation power. Ignoring elements is possible and we can also use variables in our control XML.

+
+
+ + + + + +
+ + +Nested CDATA elements within other CDATA sections are not allowed by XML standard. This is why we create the nested CDATA section on the fly with the function cdataSection(). +
+
+
+
+

41.3. equalsIgnoreCase()

+
+

This matcher implementation checks for equality without any case spelling considerations. The matcher expects a single parameter as the expected character sequence to check for.

+
+
+
+
<value>@equalsIgnoreCase('foo')@</value>
+
+
+
+
+

41.4. contains()

+
+

This matcher searches for a character sequence inside the actual value. If the character sequence is not found somewhere the matcher starts complaining.

+
+
+
+
<value>@contains('foo')@</value>
+
+
+
+

The validation matcher also exists in a case-insensitive variant.

+
+
+
+
<value>@containsIgnoreCase('foo')@</value>
+
+
+
+
+

41.5. startsWith()

+
+

The matcher implementation asserts that the given value starts with a character sequence otherwise the matcher will arise some error.

+
+
+
+
<value>@startsWith('foo')@</value>
+
+
+
+
+

41.6. endsWith()

+
+

Ends with matcher validates a value to end with a given character sequence.

+
+
+
+
<value>@endsWith('foo')@</value>
+
+
+
+
+

41.7. matches()

+
+

You can check a value to meet a regular expression with this validation matcher. This is for instance very useful for email address validation.

+
+
+
+
<value>@matches('[a-z0-9]')@</value>
+
+
+
+
+

41.8. matchesDatePattern()

+
+

Date values are always difficult to check for equality. Especially when you have millisecond timestamps to deal with. Therefore the date pattern validation matcher should have some improvement for you. You simply validate the date format pattern instead of checking for total equality.

+
+
+
+
<value>@matchesDatePattern('yyyy-MM-dd')@</value>
+
+
+
+

The example listing uses a date format pattern that is expected. The actual date value is parsed according to this pattern and may cause errors in case the value is not a valid date matching the desired format.

+
+
+
+

41.9. isNumber()

+
+

Checking on values to be of numeric nature is essential. The actual value must be a numeric number otherwise the matcher raises errors. The matcher implementation does not evaluate any parameters.

+
+
+
+
<value>@isNumber()@</value>
+
+
+
+
+

41.10. lowerThan()

+
+

This matcher checks a number to be lower than a given threshold value.

+
+
+
+
<value>@lowerThan(5)@</value>
+
+
+
+
+

41.11. greaterThan()

+
+

The matcher implementation will check on numeric values to be greater than a minimum value.

+
+
+
+
<value>@greaterThan(5)@</value>
+
+
+
+
+

41.12. isWeekday()

+
+

The matcher works on date values and checks that a given date evaluates to the expected day of the week. The user defines the expected day by its name in uppercase characters. The matcher fails in case the given date is another week day than expected.

+
+
+
+
<someDate>@isWeekday('MONDAY')@</someDate>
+
+
+
+

Possible values for the expected day of the week are: MONDAY, TUESDAY, WEDNESDAY, THURSDAY, FRIDAY, SATURDAY or SUNDAY.

+
+
+

The field value has to be a date value otherwise the matcher will fail to parse the date. The matcher requires a date format which is dd.MM.yyyy by default. You can change this date format as follows:

+
+
+
+
<someDate>@isWeekday(MONDAY('yyyy-MM-dd'))@</someDate>
+
+
+
+

Now the matcher uses the custom date format in order to parse the date value for evaluation. The validation matcher also works with date time values. In this case you have to give a valid date time format respectively (e.g. FRIDAY('yyyy-MM-dd’T’hh:mm:ss')).

+
+
+
+

41.13. variable()

+
+

This is a very special validation matcher. Instead of performing a validation logic you can save the actual value passed to the validation matcher as new test variable. This comes very handy as you can use the matcher wherever you want: JSON message payloads, XML message payloads, headers and so on.

+
+
+
+
<value>@variable('foo')@</value>
+
+
+
+

The validation matcher creates a new variable foo with the actual element value as variable value. When leaving out the control value the field name itself is used as variable name.

+
+
+
+
<date>@variable()@</date>
+
+
+
+

This creates a new variable date with the actual element value as variable value.

+
+
+
+

41.14. dateRange()

+
+

The matcher works on date values and checks that a given date is within the expected date range. The user defines the expected date range by specifying a from-date, a to-date and optionally a date format. The matcher fails when the given date lies outside the expected date range.

+
+
+
+
<someDate>@dateRange('01-12-2015', '31-12-2015', 'dd-MM-yyyy')@</someDate>
+
+
+
+

Possible valid values would be 'some date' >= '01-12-2015' and 'some date' <= '31-12-2015'

+
+
+

The date-format is optional and when omitted it is assumed that all dates match the default date format yyyy-MM-dd . When specifying a custom date format use Java’s date format as a reference for valid date formats. Only dates were used in the example above but we could just as easily used date and time as shown in the example below

+
+
+
+
<someDate>@dateRange('2015.12.01 07:00:00', '2015.12.01 19:00:00', 'yyyy.MM.dd HH:mm:ss')@</someDate>
+
+
+
+
+

41.15. assertThat()

+
+

Hamcrest is a very powerful matcher library with extraordinary matcher implementations. You can use Hamcrest matchers also as Citrus validation matchers.

+
+
+
+
<someValue>@assertThat(equalTo(foo))@</someValue>
+
+
+
+

In the listing above we are using the equalTo() matcher. All Hamcrest matchers are surrounded by an assertThat expression. You are able to combine several Hamcrest matchers then in order to construct very powerful validation logic. See the following examples on what is possible then:

+
+
+
+
<someValue>@assertThat(equalTo(value))@</someValue>
+<someValue>@assertThat(not(equalTo(other))@</someValue>
+<someValue>@assertThat(is(not(other)))@</someValue>
+<someValue>@assertThat(not(is(other)))@</someValue>
+<someValue>@assertThat(equalToIgnoringCase(VALUE))@</someValue>
+<someValue>@assertThat(containsString(lue))@</someValue>
+<someValue>@assertThat(not(containsString(other)))@</someValue>
+<someValue>@assertThat(startsWith(val))@</someValue>
+<someValue>@assertThat(endsWith(lue))@</someValue>
+<someValue>@assertThat(anyOf(startsWith(val), endsWith(lue)))@</someValue>
+<someValue>@assertThat(allOf(startsWith(val), endsWith(lue)))@</someValue>
+<someValue>@assertThat(isEmptyString())@</someValue>
+<someValue>@assertThat(not(isEmptyString()))@</someValue>
+<someValue>@assertThat(isEmptyOrNullString())@</someValue>
+<someValue>@assertThat(nullValue())@</someValue>
+<someValue>@assertThat(notNullValue())@</someValue>
+<someValue>@assertThat(empty())@</someValue>
+<someValue>@assertThat(not(empty())@</someValue>
+<someValue>@assertThat(greaterThan(4))@</someValue>
+<someValue>@assertThat(allOf(greaterThan(4), lessThan(6), not(lessThan(5)))@</someValue>
+<someValue>@assertThat(is(not(greaterThan(5))))@</someValue>
+<someValue>@assertThat(greaterThanOrEqualTo(5))@</someValue>
+<someValue>@assertThat(lessThan(5))@</someValue>
+<someValue>@assertThat(not(lessThan(1)))@</someValue>
+<someValue>@assertThat(lessThanOrEqualTo(4))@</someValue>
+<someValue>@assertThat(hasSize(5))@</someValue>
+<someValue>@assertThat(closeTo(9.0))@</someValue>
+<someValue>@assertThat(closeTo(9.0, 0.5))@</someValue>
+<someValue>@assertThat(isIn(foo, bar))@</someValue>
+<someValue>@assertThat(isOneOf(foo, bar))@</someValue>
+
+
+
+

Citrus will automatically perform validation matchers on the element value. Only if all matchers are satisfied the validation will pass.

+
+
+
+

41.16. ignoreNewLine()

+
+

This matcher implementation checks for equality with prior normalization of all new line characters. This includes new line types CR, LF and CRLF as well as multiple new lines in value and control value. So when using +this validation matcher all new line characters are removed prior to checking for equality.

+
+
+

Let’s assume that we have a value with new lines that we want to validate using the matcher implementation:

+
+
+
+
<value>This
+is
+a
+value with lots of
+new lines</value>
+
+
+
+

You can now skip all new line characters in your control value using the ignoreNewLine matcher.

+
+
+
+
<value>@ignoreNewLine('This is a value with lots of new lines')@</value>
+
+
+
+

As you can see the new line characters are not breaking the validation. The other whitespace characters remain untouched though.

+
+
+
+

41.17. trim()

+
+

This trim matcher will remove leading and trailing whitespaces before checking for equality.

+
+
+

Let’s assume that we have a value with leading and trailing whitespaces:

+
+
+
+
<value>
+This is a value   </value>
+
+
+
+

You can now skip all leading and trailing whitespaces in your control value.

+
+
+
+
<value>@trim('This is a value')@</value>
+
+
+
+
+

41.18. trimAllWhitespaces()

+
+

Sometimes it is necessary to check equality of some value without caring for whitespaces at all. The matcher implementation will remove all whitespaces before checking for equality.

+
+
+
+
<value>   some value   </value>
+
+
+
+

You can now skip all whitespaces in your control value.

+
+
+
+
<value>@trimAllWhitespaces('somevalue')@</value>
+
+
+
+
+

41.19. isUUIDv4()

+
+

This validation matcher checks if a valid UUID version 4 is present. +Given the <variable name="validUuid" value="653ce6fd-dca4-4672-bbc0-16e2b74b8b81"/>, usage is as following.

+
+
+
Example isUUIDv4() validation
+
+
<actions>
+    <send endpoint="helloEndpoint">
+        <message>
+            <data>Hello Citrus!</data>
+        </message>
+        <header>
+            <element name="message-id" value="${validUuid}"/>
+        </header>
+    </send>
+
+    <receive endpoint="helloEndpoint">
+        <message type="plaintext">
+            <data>Hello Citrus!</data>
+        </message>
+        <header>
+            <element name="message-id" value="@isUUIDv4()@"/>
+        </header>
+    </receive>
+</actions>
+
+
+
+
+
+
+

42. Data dictionaries

+
+
+

Data dictionaries in Citrus provide a new way to manipulate message payload data before a message is sent or received. The dictionary defines a set of keys and respective values. Just like every other dictionary it is used to translate things. In our case we translate message data elements.

+
+
+

You can translate common message elements that are used widely throughout your domain model. As Citrus deals with different types of message data (e.g. XML, JSON) we have different dictionary implementations that are described in the next sections.

+
+
+

42.1. XML data dictionaries

+
+

As you would expect XML data dictionaries can be used together with XML formatted message payloads. To do so a dictionary has to be added to the basic Citrus Spring application context which will make the dictionary visible to all test cases:

+
+
+
+
<citrus:xml-data-dictionary id="nodeMappingDataDictionary">
+  <citrus:mappings>
+    <citrus:mapping path="TestMessage.MessageId" value="${messageId}"/>
+    <citrus:mapping path="TestMessage.CorrelationId" value="${correlationId}"/>
+    <citrus:mapping path="TestMessage.User" value="Christoph"/>
+    <citrus:mapping path="TestMessage.TimeStamp" value="citrus:currentDate()"/>
+  </citrus:mappings>
+</citrus:xml-data-dictionary>
+
+
+
+

As you can see the dictionary is nothing but a normal Spring bean definition. The NodeMappingDataDictionary implementation receives a map of key value pairs where the key is a message element path expression. For XML payloads the message element tree is traversed so the path expression is built for an exact message element inside the payload. When matched the respective value is set according to the value stored within the dictionary.

+
+
+

Alternatively the key-value mappings can be defined in an external file and a reference to the file can be provided:

+
+
+
+
<citrus:xml-data-dictionary id="nodeMappingDataDictionary">
+  <citrus:mapping-file path="classpath:org/citrusframework/sample.dictionary"/>
+</citrus:xml-data-dictionary>
+
+
+
+

The mapping file content just looks like a normal property file in Java:

+
+
+
+
TestMessage.MessageId=${messageId}
+TestMessage.CorrelationId=${correlationId}
+TestMessage.User=Christoph
+TestMessage.TimeStamp=citrus:currentDate()
+
+
+
+

You can set any message element value inside the XML message payload. The path expression also supports XML attributes. Just use the attribute name as the last part of the path expression. Let us have a closer look at a sample XML message payload with attributes:

+
+
+
+
<TestMessage>
+  <User name="Christoph" age="18"/>
+</TestMessage>
+
+
+
+

Using this sample XML payload we can access the attributes in the data dictionary as follows:

+
+
+
+
<citrus:mapping path="TestMessage.User.name" value="${userName}"/>
+<citrus:mapping path="TestMessage.User.age" value="${userAge}"/>
+
+
+
+

The NodeMappingDataDictionary implementation is easy to use and can be used with most basic XML payloads.

+
+
+

For more complex XML payloads where more flexibility is required the XPath data dictionaries may be better suited:

+
+
+
+
<citrus:xpath-data-dictionary id="xpathMappingDataDictionary">
+  <citrus:mappings>
+    <citrus:mapping path="//TestMessage/MessageId" value="${messageId}"/>
+    <citrus:mapping path="//TestMessage/CorrelationId" value="${correlationId}"/>
+    <citrus:mapping path="//TestMessage/User" value="Christoph"/>
+    <citrus:mapping path="//TestMessage/User/@id" value="123"/>
+    <citrus:mapping path="//TestMessage/TimeStamp" value="citrus:currentDate()"/>
+  </citrus:mappings>
+</citrus:xpath-data-dictionary>
+
+
+
+

As expected XPath mapping expressions are more powerful and can better handle complex scenarios with XML namespaces, attributes and node lists. Just like the node mapping dictionary the XPath mapping dictionary also supports variables, functions and an external mapping file.

+
+
+

XPath works fine with namespaces. In general it is good practice to define a namespace context where you map namespace URI values with prefix values. So your XPath expression is more precise and evaluation is strict. In Citrus the NamespaceContextBuilder which is also added as a normal Spring bean to the application context manages namespaces used in your XPath expressions. See our XML and XPath chapters in this documentation for detailed description how to accomplish fail-safe XPath expressions with namespaces.

+
+
+

This completes the XML data dictionary usage in Citrus. Later on we will see some more advanced data dictionary scenarios where we will discuss the usage of dictionary scopes and mapping strategies. But before that let us have a look at other message formats like JSON messages.

+
+
+
+

42.2. JSON data dictionaries

+
+

JSON data dictionaries complement with XML data dictionaries. As usual we have to add the JSON data dictionary to the basic Spring application context first. Once this is done the data dictionary automatically applies for all JSON message payloads in Citrus. This means that all JSON messages sent and received get translated with the JSON data dictionary implementation.

+
+
+

Citrus uses message types in order to evaluate which data dictionary may fit to the message that is currently processed. As usual you can define the message type directly in your test case as attribute inside the sending and receiving message action.

+
+
+

Let us see a simple dictionary for JSON data:

+
+
+
+
<citrus:json-data-dictionary id="jsonMappingDataDictionary">
+  <citrus:mappings>
+    <citrus:mapping path="TestMessage.MessageId" value="${messageId}"/>
+    <citrus:mapping path="TestMessage.CorrelationId" value="${correlationId}"/>
+    <citrus:mapping path="TestMessage.User" value="Christoph"/>
+    <citrus:mapping path="TestMessage.TimeStamp" value="citrus:currentDate()"/>
+  </citrus:mappings>
+</citrus:json-data-dictionary>
+
+
+
+

The message path expressions do look very similar to those used in XML data dictionaries. Here the path expression keys do apply to the JSON object graph. See the following sample JSON data which perfectly applies to the dictionary expressions above.

+
+
+
+
{"TestMessage": {
+  "MessageId": "1122334455",
+  "CorrelationId": "100000001",
+  "User": "Christoph",
+  "TimeStamp": 1234567890 }
+}
+
+
+
+

The path expressions will match a very specific message element inside the JSON object graph. The dictionary will automatically set the message element values then. The path expressions are easy to use as you can traverse the JSON object graph very easy.

+
+
+

Of course the data dictionary does also support test variables, functions. Also very interesting is the usage of JSON arrays. A JSON array element is referenced in a data dictionary like this:

+
+
+
+
<citrus:mapping path="TestMessage.Users[0]" value="Christoph"/>
+<citrus:mapping path="TestMessage.Users[1]" value="Julia"/>
+
+
+
+

The Users element is a JSON array, so we can access the elements with index. Nesting JSON objects and arrays is also supported so you can also handle more complex JSON data.

+
+
+

The JsonMappingDataDictionary implementation is easy to use and fits the basic needs for JSON data dictionaries. The message element path expressions are very simple and do fit basic needs. +However when more complex JSON payloads apply for translation we might reach the boundaries here.

+
+
+

For more complex JSON message payloads JsonPath data dictionaries are very effective:

+
+
+
+
<citrus:json-path-data-dictionary id="jsonMappingDataDictionary">
+  <citrus:mappings>
+    <citrus:mapping path="$.TestMessage.MessageId" value="${messageId}"/>
+    <citrus:mapping path="$..CorrelationId" value="${correlationId}"/>
+    <citrus:mapping path="$..Users[0]" value="Christoph"/>
+    <citrus:mapping path="$.TestMessage.TimeStamp" value="citrus:currentDate()"/>
+  </citrus:mappings>
+</citrus:json-path-data-dictionary>
+
+
+
+

JsonPath mapping expressions are way more powerful and can also handle very complex scenarios. You can apply for all elements named CorrelationId in one single entry for instance.

+
+
+
+

42.3. Dictionary scopes

+
+

Now that we have learned how to add data dictionaries to Citrus we need to discuss some advanced topics. Data dictionary scopes do define the boundaries where the dictionary may apply. By default data dictionaries are global scope dictionaries. This means that the data dictionary applies to all messages sent and received with Citrus. Of course message types are considered so XML data dictionaries do only apply to XML message types. However global scope dictionaries will be activated throughout all test cases and actions.

+
+
+

You can overwrite the dictionary scope. For instance in order to use an explicit scope. When this is done the dictionary wil not apply automatically but the user has to explicitly set the data dictionary in sending or receiving test action. This way you can activate the dictionary to a very special set of test actions.

+
+
+
+
<citrus:xml-data-dictionary id="specialDataDictionary" global-scope="false">
+  <citrus:mapping-file path="classpath:org/citrusframework/sample.dictionary"/>
+</citrus:xml-data-dictionary>
+
+
+
+

We set the global scope property to false so the dictionary is handled in explicit scope. This means that you have to set the data dictionary explicitly in your test actions:

+
+
+
Java
+
+
@CitrusTest
+public void dictionaryTest() {
+    $(send(myEndpoint)
+        .message()
+        .body("<TestMessage>Hello Citrus</TestMessage>")
+        .dictionary("specialDataDictionary"));
+}
+
+
+
+
XML
+
+
<test name="DictionaryTest" xmlns="http://citrusframework.org/schema/xml/testcase">
+    <actions>
+        <send endpoint="myEndpoint">
+            <message data-dictionary="specialDataDictionary">
+                <body>
+                    <data>
+                    <![CDATA[
+                        <TestMessage>Hello Citrus</TestMessage>
+                    ]]>
+                    </data>
+                </body>
+            </message>
+        </send>
+    </actions>
+</test>
+
+
+
+
YAML
+
+
name: DictionaryTest
+actions:
+  - send:
+      endpoint: "myEndpoint"
+      message:
+        dataDictionary: specialDataDictionary
+        body: |
+          <TestMessage>Hello Citrus</TestMessage>
+
+
+
+
Spring XML
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans">
+    <testcase name="DictionaryTest">
+        <actions>
+            <send endpoint="myEndpoint">
+                <message data-dictionary="specialDataDictionary">
+                    <data>
+                    <![CDATA[
+                        <TestMessage>Hello Citrus</TestMessage>
+                    ]]>
+                    </data>
+                </message>
+            </send>
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The sample above is a sending test action with an explicit data dictionary reference set. Before sending the message the dictionary is asked for translation. So all matching message element values will be set by the dictionary accordingly. Other global data dictionaries do also apply for this message but the explicit dictionary will always overwrite the message element values.

+
+
+
+

42.4. Path mapping strategies

+
+

Another advanced topic about data dictionaries is the path mapping strategy. When using simple path expressions the default strategy is always EXACT . This means that the path expression has to evaluate exactly to a message element within the payload data. And only this exact message element is translated.

+
+
+

You can set your own path mapping strategy in order to change this behavior. For instance another mapping strategy would be STARS_WITH . All elements are translated that start with a certain path expression. Let us clarify this with an example:

+
+
+
+
<citrus:xml-data-dictionary id="nodeMappingDataDictionary" mapping-strategy="STARTS_WITH">
+  <citrus:mappings>
+    <citrus:mapping path="TestMessage.Property" value="citrus:randomString()"/>
+  </citrus:mappings>
+</citrus:xml-data-dictionary>
+
+
+
+

Now with the path mapping strategy set to STARS_WITH all message element path expressions starting with TestMessage.Property will find translation in this dictionary. Following sample message payload would be translated accordingly:

+
+
+
+
<TestMessage>
+    <Property>XXX</Property>
+    <PropertyName>XXX</PropertyName>
+    <PropertyValue>XXX</PropertyValue>
+</TestMessage>
+
+
+
+

All child elements of TestMessage starting with Property will be translated with this data dictionary. In the resulting message payload Citrus will use a random string as value for these elements as we used the citrus:randomString() function in the dictionary mapping.

+
+
+

The next mapping strategy would be ENDS_WITH . No surprises here - this mapping strategy looks for message elements that end with a certain path expression. Again a simple example will clarify this for you.

+
+
+
+
<citrus:xml-data-dictionary id="nodeMappingDataDictionary" mapping-strategy="ENDS_WITH">
+  <citrus:mappings>
+    <citrus:mapping path="Id" value="citrus:randomNumber()"/>
+  </citrus:mappings>
+</citrus:xml-data-dictionary>
+
+
+
+

Again let us see some sample message payload for this dictionary usage:

+
+
+
+
<TestMessage>
+  <RequestId>XXX</RequestId>
+  <Properties>
+    <Property>
+      <PropertyId>XXX</PropertyId>
+      <PropertyValue>XXX</PropertyValue>
+    </Property>
+    <Property>
+      <PropertyId>XXX</PropertyId>
+      <PropertyValue>XXX</PropertyValue>
+    </Property>
+  </Properties>
+</TestMessage>
+
+
+
+

In this sample all message elements ending with Id would be translated with a random number. No matter where in the message tree the elements are located. This is quite useful but also very powerful. So be careful to use this strategy in global data dictionaries as it may translate message elements that you would not expect in the first place.

+
+
+
+
+
+

43. Test actors

+
+
+

The concept of test actors came to our mind when reusing Citrus test cases in end-to-end test scenarios. Usually Citrus simulates all interface partners within a test case which is great for continuous integration testing. In end-to-end integration test scenarios some of our interface partners may be real and alive. Some other interface partners still require Citrus simulation logic.

+
+
+

It would be great if we could reuse the Citrus integration tests in this test setup as we have the complete test flow of messages available in the Citrus tests. We only have to remove the simulated send/receive actions for those real interface partner applications which are available in our end-to-end test setup.

+
+
+

With test actors we have the opportunity to link test actions, in particular send/receive message actions, to a test actor. The test actor can be disabled in configuration very easy and following from that all linked send/receive actions are disabled, too. One Citrus test case is runnable with different test setup scenarios where different partner applications on the one hand are available as real life applications and on the other hand require simulation.

+
+
+

43.1. Define test actors

+
+

First thing to do is to define one or more test actors in Citrus configuration. A test actor represents a participating party (e.g. interface partner, backend application). We write the test actors into the central Spring application context. We can use a special Citrus Spring XML schema so definitions are quite easy:

+
+
+
+
<citrus:actor id="travelagency" name="TRAVEL_AGENCY"/>
+<citrus:actor id="royalairline" name="ROYAL_AIRLINE"/>
+<citrus:actor id="smartariline" name="SMART_AIRLINE"/>
+
+
+
+

The listing above defines three test actors participating in our test scenario. A travel agency application which is simulated by Citrus as a calling client, the smart airline application and a royal airline application. Now we have the test actors defined we can link those to message sender/receiver instances and/or test actions within our test case.

+
+
+
+ +
+

We need to link the test actors to message send and receive actions in our test cases. We can do this in two different ways. First we can set a test actor reference on a message sender and message receiver.

+
+
+
+
<citrus-jms:sync-endpoint id="royalAirlineBookingEndpoint"
+        destination-name="${royal.airline.request.queue}"
+        actor="royalairline"/>
+
+
+
+

Now all test actions that are using these message receiver and message sender instances are linked to the test actor. In addition to that you can also explicitly link test actions to test actors in a test.

+
+
+
+
<receive endpoint="royalAirlineBookingEndpoint" actor="royalairline">
+    <message>
+        [...]
+    </message>
+</receive>
+
+<send endpoint="royalAirlineBookingEndpoint" actor="royalairline">
+    <message>
+        [...]
+    </message>
+</send>
+
+
+
+

This explicitly links test actors to test actions so you can decide which link should be set without having to rely on the message receiver and sender configuration.

+
+
+
+

43.3. Disable test actors

+
+

Usually both airline applications are simulated in our integration tests. But this time we want to change this by introducing a royal airline application which is online as a real application instance. So we need to skip all simulated message interactions for the royal airline application in our Citrus tests. This is easy as we have linked all send/receive actions to one of our test actors. So we can disable the royal airline test actor in our configuration:

+
+
+
+
<citrus:actor id="royalairline" name="ROYAL_AIRLINE" disabled="true"/>
+
+
+
+

Any test action linked to this test actor is now skipped. As we introduced a real royal airline application in our test scenario the requests get answered and the test should be successful within this end-to-end test scenario. The travel agency and the smart airline still get simulated by Citrus. This is a perfect way of reusing integration tests in different test scenarios where you enable and disable simulated participating parties in Citrus.

+
+
+ + + + + +
+ + +Server ports may be of special interest when dealing with different test scenarios. You may have to also disable a Citrus embedded Jetty server instance in order to avoid port binding conflicts and you may have to wire endpoint URIs accordingly before executing a test. The real life application may not use the same port and ip as the Citrus embedded servers for simulation. +
+
+
+
+
+
+

44. Test suite actions

+
+
+

A test framework should also provide the functionality to do some work before and after the test run. You could think of preparing/deleting the data in a database or starting/stopping a server in this section before/after a test run. These tasks fit best into the initialization and cleanup phases of Citrus.

+
+
+ + + + + +
+ + +It is important to notice that the Citrus configuration components that we are going to use in the next section belong to a separate XML namespace citrus-test . We have to add the namespace declaration to the XML root element of our XML configuration file accordingly. +
+
+
+
+
<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+        xmlns:spring="http://www.springframework.org/schema/beans"
+        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+        xmlns:citrus-test="http://www.citrusframework.org/schema/testcase"
+        xsi:schemaLocation="
+        http://www.springframework.org/schema/beans
+        http://www.springframework.org/schema/beans/spring-beans.xsd
+        http://www.citrusframework.org/schema/testcase
+        http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd">
+
+        [...]
+
+        </beans>
+
+
+
+

44.1. Before suite

+
+

You can influence the behavior of a test run in the initialization phase actually before the tests are executed. See the next code example to find out how it works with actions that take place before the first test is executed:

+
+
+
XML Config
+
+
<citrus:before-suite id="actionsBeforeSuite">
+    <citrus:actions>
+        <!-- list of actions before suite -->
+    </citrus:actions>
+</citrus:before-suite>
+
+
+
+

The Citrus configuration component holds a list of Citrus test actions that get executed before the test suite run. You can add all Citrus test actions here as you would do in a normal test case definition.

+
+
+
XML Config
+
+
<citrus:before-suite id="actionsBeforeSuite">
+    <citrus:actions>
+        <citrus-test:sql dataSource="testDataSource"/>
+            <citrus-test:statement>CREATE TABLE PERSON (ID integer, NAME char(250))</citrus-test:statement>
+        </citrus-test:sql>
+    </citrus:actions>
+</citrus:before-suite>
+
+
+
+

Note that we must use the Citrus test case namespace for the nested test action definitions. We access the database and create a table PERSON which is obviously needed in our test cases. You can think of several actions here to prepare the database for instance.

+
+
+ + + + + +
+ + +Citrus offers special startup and shutdown actions that may start and stop server implementations automatically. This might be helpful when dealing with Http servers or WebService containers like Jetty. You can also think of starting/stopping a JMS broker before a test run. +
+
+
+

So far we have used XML DSL actions in before suite configuration. Now if you exclusively want to use Java DSL you can do the same with adding a custom class that extends TestDesignerBeforeSuiteSupport or TestRunnerBeforeSuiteSupport .

+
+
+
Java DSL designer
+
+
public class MyBeforeSuite extends TestDesignerBeforeSuiteSupport {
+    @Override
+    public void beforeSuite(TestDesigner designer) {
+        designer.echo("This action should be executed before suite");
+    }
+}
+
+
+
+

The custom implementation extends TestDesignerBeforeSuiteSupport and therefore has to implement the method beforeSuite . This method add some Java DSL designer logic to the before suite. The designer instance is injected as method argument. You can use all Java DSL methods to this designer instance. Citrus will automatically find and execute the before suite logic. We only need to add this class to the Spring bean application context. You can do this explicitly:

+
+
+
+
<bean id="myBeforeSuite" class="my.company.citrus.MyBeforeSuite"/>
+
+
+
+

Of course you can also use other Spring bean mechanisms such as component-scans here too. The respective test runner implementation extends the TestRunnerBeforeSuiteSupport and gets a test runner instance as method argument injected.

+
+
+
Java DSL runner
+
+
public class MyBeforeSuite extends TestRunnerBeforeSuiteSupport {
+    @Override
+    public void beforeSuite(TestRunner runner) {
+        runner.echo("This action should be executed before suite");
+    }
+}
+
+
+
+

You can have many before-suite configuration components with different ids in a Citrus project. By default the containers are always executed. But you can restrict the after suite action container execution by defining a suite name, test group names, environment or system properties that should match accordingly:

+
+
+
XML Config
+
+
<citrus:before-suite id="actionsBeforeSuite" suites="databaseSuite" groups="e2e">
+    <citrus:actions>
+        <citrus-test:sql dataSource="testDataSource"/>
+            <citrus-test:statement>CREATE TABLE PERSON (ID integer, NAME char(250))</citrus-test:statement>
+        </citrus-test:sql>
+    </citrus:actions>
+</citrus:before-suite>
+
+
+
+

The above before suite container is only executed with the test suite called databaseSuite or when the test group e2e is defined. Test groups and suite names are only supported when using the TestNG unit test framework. Unfortunately JUnit does not allow to hook into suite execution as easily as TestNG does. +This is why after suite action containers are not restricted in execution when using Citrus with the JUnit test framework. You can define multiple suite names and test groups with comma delimited strings as attribute values.

+
+
+

When using the Java DSL before suite support you can set suite names and test group filters by simply calling the respective setter methods in your custom implementation.

+
+
+
+
<bean id="myBeforeSuite" class="my.company.citrus.MyBeforeSuite">
+  <property name="suiteNames">
+    <list>
+      <value>databaseSuite</value>
+    </list>
+  </property>
+  <property name="testGroups">
+    <list>
+      <value>e2e</value>
+    </list>
+  </property>
+</bean>
+
+
+
+

Environment or system properties are defined as list of key-value pairs. When specified the properties have to be present with respective value. In case the property value is left out in configuration the property must simply exists on the system +in order to enable the before suite sequence in that test run.

+
+
+
XML Config
+
+
<citrus:before-suite id="actionsBeforeSuite" suites="databaseSuite" groups="e2e">
+    <citrus:env>
+      <citrus:property name="USER"/>
+    </citrus:env>
+    <citrus:system>
+      <citrus:property name="test-stage" value="e2e"/>
+    </citrus:system>
+    <citrus:actions>
+        <citrus-test:sql dataSource="testDataSource"/>
+            <citrus-test:statement>CREATE TABLE PERSON (ID integer, NAME char(250))</citrus-test:statement>
+        </citrus-test:sql>
+    </citrus:actions>
+</citrus:before-suite>
+
+
+
+

In the example above the suite sequence will only apply on environments with USER property set and the system property test-stage must be set to e2e. Otherwise +the sequence execution is skipped.

+
+
+
+

44.2. After suite

+
+

A test run may require the test environment to be clean. Therefore it is a good idea to purge all JMS destinations or clean up the database after the test run in order to avoid errors in follow-up test runs. Just like we prepared some data in actions before suite we can clean up the test run in actions after the tests are finished. The Spring bean syntax here is not significantly different to those in before suite section:

+
+
+
XML Config
+
+
<citrus:after-suite id="actionsAfterSuite">
+    <citrus:actions>
+        <!-- list of actions after suite -->
+    </citrus:actions>
+</citrus:after-suite>
+
+
+
+

Again we give the after suite configuration component a unique id within the configuration and put one to many test actions as nested configuration elements to the list of actions executed after the test suite run.

+
+
+
XML Config
+
+
<citrus:after-suite id="actionsAfterSuite">
+    <citrus:actions>
+        <citrus-test:sql dataSource="testDataSource"/>
+            <citrus-test:statement>DELETE FROM TABLE PERSON</citrus-test:statement>
+        </citrus-test:sql>
+    </citrus:actions>
+</citrus:after-suite>
+
+
+
+

We have to use the Citrus test case XML namespace when defining nested test actions in after suite list. We just remove all data from the database so we do not influence follow-up tests. Quite simple isn’t it!?

+
+
+

Of course we can also define Java DSL after suite actions. You can do this by adding a custom class that extends TestDesignerAfterSuiteSupport or TestRunnerAfterSuiteSupport .

+
+
+
Java DSL designer
+
+
public class MyAfterSuite extends TestDesignerAfterSuiteSupport {
+    @Override
+    public void afterSuite(TestDesigner designer) {
+        designer.echo("This action should be executed after suite");
+    }
+}
+
+
+
+

The custom implementation extends TestDesignerAfterSuiteSupport and therefore has to implement the method afterSuite . This method add some Java DSL designer logic to the after suite. The designer instance is injected as method argument. You can use all Java DSL methods to this designer instance. Citrus will automatically find and execute the after suite logic. We only need to add this class to the Spring bean application context. You can do this explicitly:

+
+
+
+
<bean id="myAfterSuite" class="my.company.citrus.MyAfterSuite"/>
+
+
+
+

Of course you can also use other Spring bean mechanisms such as component-scans here too. The respective test runner implementation extends the TestRunnerAfterSuiteSupport and gets a test runner instance as method argument injected.

+
+
+
Java DSL runner
+
+
public class MyAfterSuite extends TestRunnerAfterSuiteSupport {
+    @Override
+    public void afterSuite(TestRunner runner) {
+        runner.echo("This action should be executed after suite");
+    }
+}
+
+
+
+

You can have many after-suite configuration components with different ids in a Citrus project. By default the containers are always executed. But you can restrict the after suite action container execution by defining a suite name, test group names, environment or system properties that should match accordingly:

+
+
+
XML Config
+
+
<citrus:after-suite id="actionsAfterSuite" suites="databaseSuite" groups="e2e">
+    <citrus:actions>
+        <citrus-test:sql dataSource="testDataSource"/>
+            <citrus-test:statement>DELETE FROM TABLE PERSON</citrus-test:statement>
+        </citrus-test:sql>
+    </citrus:actions>
+</citrus:after-suite>
+
+
+
+

The above after suite container is only executed with the test suite called databaseSuite or when the test group e2e is defined. Test groups and suite names are only supported when using the TestNG unit test framework. +Unfortunately JUnit does not allow to hook into suite execution as easily as TestNG does. This is why after suite action containers are not restricted in execution when using Citrus with the JUnit test framework.

+
+
+

You can define multiple suite names and test groups with comma delimited strings as attribute values.

+
+
+

When using the Java DSL before suite support you can set suite names and test group filters by simply calling the respective setter methods in your custom implementation.

+
+
+
+
<bean id="myAfterSuite" class="my.company.citrus.MyAfterSuite">
+  <property name="suiteNames">
+    <list>
+      <value>databaseSuite</value>
+    </list>
+  </property>
+  <property name="testGroups">
+    <list>
+      <value>e2e</value>
+    </list>
+  </property>
+</bean>
+
+
+
+

Environment or system properties are defined as list of key-value pairs. When specified the properties have to be present with respective value. In case the property value is left out in configuration the property must simply exist on the system +in order to enable the before suite sequence in that test run.

+
+
+
XML Config
+
+
<citrus:after-suite id="actionsBeforeSuite" suites="databaseSuite" groups="e2e">
+    <citrus:env>
+      <citrus:property name="USER"/>
+    </citrus:env>
+    <citrus:system>
+      <citrus:property name="test-stage" value="e2e"/>
+    </citrus:system>
+    <citrus:actions>
+        <citrus-test:sql dataSource="testDataSource"/>
+            <citrus-test:statement>DELETE FROM TABLE PERSON</citrus-test:statement>
+        </citrus-test:sql>
+    </citrus:actions>
+</citrus:after-suite>
+
+
+
+

In the example above the suite sequence will only apply on environments with USER property set and the system property test-stage must be set to e2e. Otherwise +the sequence execution is skipped.

+
+
+
+

44.3. Before test

+
+

Before each test is executed it also might sound reasonable to purge all JMS queues for instance. In case a previous test fails some messages might be left in the JMS queues. Also the database might be in dirty state. The follow-up test then will be confronted with these invalid messages and data. Purging all JMS destinations before a test is therefore a good idea. Just like we prepared some data in actions before suite we can clean up the data before a test starts to execute.

+
+
+
XML Config
+
+
<citrus:before-test id="defaultBeforeTest">
+    <citrus:actions>
+        <!-- list of actions before test -->
+    </citrus:actions>
+</citrus:before-test>
+
+
+
+

The before test configuration component receives a unique id and a list of test actions that get executed before a test case is started. The component receives usual test action definitions just like you would write them in a normal test case definition. See the example below how to add test actions.

+
+
+
XML Config
+
+
<citrus:before-test id="defaultBeforeTest">
+    <citrus:actions>
+            <citrus-test:echo>
+              <citrus-test:message>This is executed before each test!</citrus-test:message>
+            </citrus-test:echo>
+    </citrus:actions>
+</citrus:before-test>
+
+
+
+

Note that we must use the Citrus test case XML namespace for the nested test action definitions. You have to declare the XML namespaces accordingly in your configuration root element. The echo test action is now executed before each test in our test suite run. Also notice that we can restrict the before test container execution. We can restrict execution based on the test name, package, test groups and environment or system properties. See following example how this works:

+
+
+
XML Config
+
+
<citrus:before-test id="defaultBeforeTest" test="*_Ok_Test" package="org.citrusframework.longrunning.*">
+    <citrus:actions>
+        <citrus-test:echo>
+          <citrus-test:message>This is executed before each test!</citrus-test:message>
+        </citrus-test:echo>
+    </citrus:actions>
+</citrus:before-test>
+
+
+
+

The above before test component is only executed for test cases that match the name pattern \*_Ok_Test and that match the package org.citrusframework.longrunning.*. Also we could just use the test name pattern or the package name pattern exclusively. And the execution can be restricted based on the included test groups in our test suite run. This enables us to specify before test actions in various ways. Of course you can have multiple before test configuration components at the same time. Citrus will pick the right containers and put it to execution when necessary.

+
+
+

Environment or system properties are defined as list of key-value pairs. When specified the properties have to be present with respective value. In case the property value is left out in configuration the property must simply exists on the system +in order to enable the before suite sequence in that test run.

+
+
+
XML Config
+
+
<citrus:before-test id="specialBeforeTest">
+    <citrus:env>
+      <citrus:property name="USER"/>
+    </citrus:env>
+    <citrus:system>
+      <citrus:property name="test-stage" value="e2e"/>
+    </citrus:system>
+    <citrus:actions>
+        <citrus-test:echo>
+          <citrus-test:message>This is executed before each test!</citrus-test:message>
+        </citrus-test:echo>
+    </citrus:actions>
+</citrus:before-test>
+
+
+
+

In the example above the test sequence will only apply on environments with USER property set and the system property test-stage must be set to e2e. Otherwise +the sequence execution is skipped.

+
+
+

When using the Java DSL we need to implement the before test logic in a separate class that extends TestDesignerBeforeTestSupport or TestRunnerBeforeTestSupport

+
+
+
Java DSL designer
+
+
public class MyBeforeTest extends TestDesignerBeforeTestSupport {
+    @Override
+    public void beforeTest(TestDesigner designer) {
+        designer.echo("This action should be executed before each test");
+    }
+}
+
+
+
+

As you can see the class implements the method beforeTest that is provided with a test designer argument. You simply add the before test actions to the designer instance as usual by calling Java DSL methods on the designer object. Citrus will automatically execute these operations before each test is executed. The same logic applies to the test runner variation that extends TestRunnerBeforeTestSupport :

+
+
+
Java DSL runner
+
+
public class MyBeforeTest extends TestRunnerBeforeTestSupport {
+    @Override
+    public void beforeTest(TestRunner runner) {
+        runner.echo("This action should be executed before each test");
+    }
+}
+
+
+
+

The before test implementations are added to the Spring bean application context for general activation. You can do this either as explicit Spring bean definition or via package component-scan. Here is a sample for adding the bean implementation explicitly with some configuration

+
+
+
+
<bean id="myBeforeTest" class="my.company.citrus.MyBeforeTest">
+  <property name="packageNamePattern" value="org.citrusframework.e2e"></property>
+</bean>
+
+
+
+

We can add filter properties to the before test Java DSL actions so they applied to specific packages or test name patterns. The above example will only apply to tests in package org.citrusframework.e2e . Leave these properties empty for default actions that are executed before all tests.

+
+
+
+

44.4. After test

+
+

The same logic that applies to the before-test configuration component can be done after each test. The after-test configuration component defines test actions executed after each test. Just like we prepared some data in actions before a test we can clean up the data after a test has finished execution.

+
+
+
XML Config
+
+
<citrus:after-test id="defaultAfterTest">
+    <citrus:actions>
+        <!-- list of actions after test -->
+    </citrus:actions>
+</citrus:after-test>
+
+
+
+

The after test configuration component receives a unique id and a list of test actions that get executed after a test case is finished. Notice that the after test actions are executed no matter what result success or failure the previous test case came up to. The component receives usual test action definitions just like you would write them in a normal test case definition. See the example below how to add test actions.

+
+
+
XML Config
+
+
<citrus:after-test id="defaultAfterTest">
+    <citrus:actions>
+            <citrus-test:echo>
+              <citrus-test:message>This is executed after each test!</citrus-test:message>
+            </citrus-test:echo>
+    </citrus:actions>
+</citrus:after-test>
+
+
+
+

Please be aware of the fact that we must use the Citrus test case XML namespace for the nested test action definitions. You have to declare the XML namespaces accordingly in your configuration root element. The echo test action is now executed after each test in our test suite run. Of course we can restrict the after test container execution. Supported restrictions are based on the test name, package, test groups and environment or system properties. See following example how this works:

+
+
+
XML Config
+
+
<citrus:after-test id="defaultAfterTest" test="*_Error_Test" package="org.citrusframework.error.*">
+    <citrus:actions>
+        <citrus-test:echo>
+          <citrus-test:message>This is executed after each test!</citrus-test:message>
+        </citrus-test:echo>
+    </citrus:actions>
+</citrus:after-test>
+
+
+
+

The above after test component is obviously only executed for test cases that match the name pattern \*_Error_Test and that match the package org.citrusframework.error.*. Also we could just use the test name pattern or the package name pattern exclusively. And the execution can be restricted based on the included test groups in our test suite run. This enables us to specify after test actions in various ways. Of course you can have multiple after test configuration components at the same time. +Citrus will pick the right containers and put it to execution when necessary.

+
+
+

Environment or system properties are defined as list of key-value pairs. When specified the properties have to be present with respective value. In case the property value is left out in configuration the property must simply exists on the system +in order to enable the before suite sequence in that test run.

+
+
+
XML Config
+
+
<citrus:after-test id="specialAfterTest">
+    <citrus:env>
+      <citrus:property name="USER"/>
+    </citrus:env>
+    <citrus:system>
+      <citrus:property name="test-stage" value="e2e"/>
+    </citrus:system>
+    <citrus:actions>
+        <citrus-test:echo>
+          <citrus-test:message>This is executed after each test!</citrus-test:message>
+        </citrus-test:echo>
+    </citrus:actions>
+</citrus:after-test>
+
+
+
+

In the example above the test sequence will only apply on environments with USER property set and the system property test-stage must be set to e2e. Otherwise +the sequence execution is skipped.

+
+
+

When using the Java DSL we need to implement the after test logic in a separate class that extends TestDesignerAfterTestSupport or TestRunnerAfterTestSupport

+
+
+
Java DSL designer
+
+
public class MyAfterTest extends TestDesignerAfterTestSupport {
+    @Override
+    public void afterTest(TestDesigner designer) {
+        designer.echo("This action should be executed after each test");
+    }
+}
+
+
+
+

As you can see the class implements the method afterTest that is provided with a test designer argument. You simply add the after test actions to the designer instance as usual by calling Java DSL methods on the designer object. Citrus will automatically execute these operations after each test is executed. The same logic applies to the test runner variation that extends TestRunnerAfterTestSupport :

+
+
+
Java DSL runner
+
+
public class MyAfterTest extends TestRunnerAfterTestSupport {
+    @Override
+    public void afterTest(TestRunner runner) {
+        runner.echo("This action should be executed after each test");
+    }
+}
+
+
+
+

The after test implementations are added to the Spring bean application context for general activation. You can do this either as explicit Spring bean definition or via package component-scan. Here is a sample for adding the bean implementation explicitly with some configuration

+
+
+
+
<bean id="myAfterTest" class="my.company.citrus.MyAfterTest">
+  <property name="packageNamePattern" value="org.citrusframework.e2e"></property>
+</bean>
+
+
+
+

We can add filter properties to the after test Java DSL actions so they applied to specific packages or test name patterns. The above example will only apply to tests in package org.citrusframework.e2e . Leave these properties empty for default actions that are executed after all tests.

+
+
+
+
+
+

45. Customize meta information

+
+
+

Test cases in Citrus are usually provided with some meta information like the author’s name or the date of creation. In Citrus you are able to extend this test case meta information with your own very specific criteria.

+
+
+

By default a test case comes shipped with meta information that looks like this:

+
+
+
+
<testcase name="PwdChange_OK_1_Test">
+    <meta-info>
+        <author>Christoph</author>
+        <creationdate>2010-01-18</creationdate>
+        <status>FINAL</status>
+        <last-updated-by>Christoph</last-updated-by>
+        <last-updated-on>2010-01-18T15:00:00</last-updated-on>
+    </meta-info>
+
+    [...]
+</testcase>
+
+
+
+

You can quite easily add data to this section in order to meet your individual testing strategy. Let us have a simple example to show how it is done.

+
+
+

First of all we define a custom XSD schema describing the new elements:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<schema xmlns="http://www.w3.org/2001/XMLSchema"
+        xmlns:tns="http://www.citrusframework.org/samples/my-testcase-info"
+        targetNamespace="http://www.citrusframework.org/samples/my-testcase-info"
+        elementFormDefault="qualified">
+
+    <element name="requirement" type="string"/>
+    <element name="pre-condition" type="string"/>
+    <element name="result" type="string"/>
+    <element name="classification" type="string"/>
+</schema>
+
+
+
+

We have four simple elements (requirement, pre-condition, result and classification) all typed as string. These new elements later go into the test case meta information section.

+
+
+

After we added the new XML schema file to the classpath of our project we need to announce the schema to Spring. As you might know already a Citrus test case is nothing else but a simple Spring configuration file with customized XML schema support. If we add new elements to a test case Spring needs to know the XML schema for parsing the test case configuration file. See the spring.schemas file usually placed in the META-INF/spring.schemas in your project.

+
+
+

The file content for our example will look like follows:

+
+
+
+
http://www.citrusframework.org/samples/my-testcase-info/my-testcase-info.xsd=org/citrusframework/schemas/my-testcase-info.xsd
+
+
+
+

So now we are finally ready to use the new meta-info elements inside the test case:

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+    xmlns:spring="http://www.springframework.org/schema/beans"
+    xmlns:custom="http://www.citrusframework.org/samples/my-testcase-info"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans
+      http://www.springframework.org/schema/beans/spring-beans.xsd
+      http://www.citrusframework.org/schema/testcase
+      http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd
+      http://www.citrusframework.org/samples/my-testcase-info
+      http://www.citrusframework.org/samples/my-testcase-info/my-testcase-info.xsd">
+
+    <testcase name="PwdChange_OK_1_Test">
+        <meta-info>
+            <author>Christoph</author>
+            <creationdate>2010-01-18</creationdate>
+            <status>FINAL</status>
+            <last-updated-by>Christoph</last-updated-by>
+            <last-updated-on>2010-01-18T15:00:00</last-updated-on>
+            <custom:requirement>REQ10001</custom:requirement>
+            <custom:pre-condition>Existing user, sufficient rights</custom:pre-condition>
+            <custom:result>Password reset in database</custom:result>
+            <custom:classification>PasswordChange</custom:classification>
+        </meta-info>
+
+        [...]
+    </testcase>
+</spring:beans>
+
+
+
+ + + + + +
+ + +We use a separate namespace declaration with a custom namespace prefix “custom” in order to declare the new XML schema to our test case. Of course you can pick a namespace url and prefix that fits best for your project.As you see it is quite easy to add custom meta information to your Citrus test case. The customized elements may be precious for automatic reporting. XSL transformations for instance are able to read those meta information elements in order to generate automatic test reports and documentation. +
+
+
+

You can also declare our new XML schema in the Eclipse preferences section as user specific XML catalog entry. Then even the schema code completion in your Eclipse XML editor will be available for our customized meta-info elements.

+
+
+
+
+

46. Tracing incoming/outgoing messages

+
+
+

As we deal with message based interfaces Citrus will send and receive a lot of messages during a test run. Now we may want to see these messages in chronological order as they were processed by Citrus. We can enable message tracing in Citrus in order to save messages to the file system for further investigations.

+
+
+

Citrus offers an easy way to debug all received messages to the file system. You need to enable some specific loggers and interceptors in the Spring application context.

+
+
+
+
<bean class="org.citrusframework.report.MessageTracingTestListener"/>
+
+
+
+

Just add this bean to the Spring configuration and Citrus will listen for sent and received messages for saving those to the file system. You will find files like these in the default test output folder after the test run:

+
+
+

For example:

+
+
+
+
logs/trace/messages/MyTest.msgs
+logs/trace/messages/FooTest.msgs
+logs/trace/messages/SomeTest.msgs
+
+
+
+

Each Citrus test writes a .msgs file containing all messages that went over the wire during the test. By default the debug directory is set to logs/trace/messages/ relative to the project test output directory. But you can set your own output directory in the configuration

+
+
+
+
<bean class="org.citrusframework.report.MessageTracingTestListener">
+  <property name="outputDirectory" value="file:/path/to/folder"/>
+</bean>
+
+
+
+ + + + + +
+ + +As the file names do not change with each test run message tracing files may be overwritten. So you eventually need to save the generated message debug files before running another group of test cases. +
+
+
+

Let’s see some sample output for a test case with message communication over SOAP Http:

+
+
+
+
Sending SOAP request:
+<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+<SOAP-ENV:Header>
+<Operation xmlns="http://citrusframework.org/test">sayHello</Operation>
+</SOAP-ENV:Header>
+<SOAP-ENV:Body>
+<ns0:HelloRequest xmlns:ns0="http://citrusframework.org/schemas/samples/sayHello.xsd">
+    <ns0:MessageId>0857041782</ns0:MessageId>
+    <ns0:CorrelationId>6915071793</ns0:CorrelationId>
+    <ns0:User>Christoph</ns0:User>
+    <ns0:Text>Hello WebServer</ns0:Text>
+</ns0:HelloRequest>
+</SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+======================================================================
+
+Received SOAP response:
+<?xml version="1.0" encoding="UTF-8"?><SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
+<SOAP-ENV:Header/>
+<SOAP-ENV:Body>
+<ns0:HelloResponse xmlns:ns0="http://citrusframework.org/schemas/samples/sayHello.xsd">
+    <ns0:MessageId>0857041782</ns0:MessageId>
+    <ns0:CorrelationId>6915071793</ns0:CorrelationId>
+    <ns0:User>WebServer</ns0:User>
+    <ns0:Text>Hello Christoph</ns0:Text>
+</ns0:HelloResponse>
+</SOAP-ENV:Body>
+</SOAP-ENV:Envelope>
+
+
+
+

For this message tracing to work we need to add logging listeners to our sender and receiver components accordingly.

+
+
+
+
<citrus-ws:client id="webServiceClient"
+    request-url="http://localhost:8071"
+    message-factory="messageFactory"
+    interceptors="clientInterceptors"/>
+
+    <util:list id="clientInterceptors">
+        <bean class="org.citrusframework.ws.interceptor.LoggingClientInterceptor"/>
+    </util:list>
+
+
+
+ + + + + +
+ + +Be aware of adding the Spring util XML namespace to the application context when using the util:list construct. +
+
+
+
+
+

47. Reporting and Test Results

+
+
+

The framework generates different reports and results after a test run for you. +These report and result pages will help you to get an overview of the test cases that were executed and which one were failing. +They’re being generated into target/citrus-reports by default, but that can be changed by setting the citrus.report.directory property to the desired location. +E.g. it could be set to citrus.report.directory=build/citrus-reports for Gradle builds.

+
+
+

In the following chapters, we’ll provide an overview of the three standard loggers available in Citrus. It’s important to note that in Spring, you have the flexibility to replace these standard loggers with your own implementations. This can be achieved by registering custom implementations, as demonstrated in the following code snippet:

+
+
+
+
@Configuration
+public static class OverrideReporterConfiguration {
+
+    @Bean
+    public LoggingReporter citrusLoggingReporter() {
+        return new OverrideLoggingReporter();
+    }
+
+    @Bean
+    public JUnitReporter citrusJunitReporter() {
+        return new OverrideJUnitReporter();
+    }
+
+    @Bean
+    public HtmlReporter citrusHtmlReporter() {
+        return new OverrideHtmlReporter();
+    }
+}
+
+
+
+

Note that you need to allow spring bean overriding to load this configuration as such. It’s worth noting that bean overriding is not recommended by Spring. +Thus the following properties are provided to deactivate standard reporters as needed.

+
+
+
+
citrus.default.logging.reporter.enabled=false
+citrus.default.junit.reporter.enabled=false
+citrus.default.html.reporter.enabled=false
+
+
+
+

47.1. Console logging

+
+

During the test run the framework will provide a huge amount of information that is printed out to the console. This includes current test progress, validation results and error information. This enables the user to quickly supervise the test run progress. Failures in tests will be printed to the console just the time the error occurred. The detailed stack trace information and the detailed error messages are helpful to get the idea what went wrong.

+
+
+

As the console output might be limited to a defined buffer limit, the user may not be able to follow the output to the very beginning of the test run. Therefore the framework additionally prints all information to a log file according to the logging configuration.

+
+
+

The logging mechanism uses the SLF4J logging framework. SLF4J is independent of logging framework implementations on the market. So in case you use Log4J logging framework the specified log file path as well as logging levels can be freely configured in the respective log4j.xml file in your project. At the end of a test run the combined test results get printed to both console and log file. The overall test results look like following example:

+
+
+
+
CITRUS TEST RESULTS
+
+  [...]
+  HelloService_Ok_1             : SUCCESS
+  HelloService_Ok_2             : SUCCESS
+  EchoService_Ok_1              : SUCCESS
+  EchoService_Ok_2              : SUCCESS
+  EchoService_TempError_1       : SUCCESS
+  EchoService_AutomaticRetry_1 : SUCCESS
+  [...]
+
+  Found 175 test cases to execute
+  Skipped 0 test cases (0.0%)
+  Executed 175 test cases
+  Tests failed:         0 (0.0%)
+  Tests successfully: 175 (100.0%)
+
+
+
+

Failed tests will be marked as failed in the result list. The framework will give a short description of the error cause while the detailed stack trace information can be found in the log messages that were made during the test run.

+
+
+
+
HelloService_Ok_3 : failed - Exception is Action timed out
+
+
+
+
+

47.2. JUnit reports

+
+

As tests are executed as TestNG test cases, the framework will also generate JUnit compliant XML and HTML reports. JUnit test reports are very popular and find support in many build management and development tools. In general the Citrus test reports give you an overall picture of all tests and tell you which of them were failing.

+
+
+

Build management tools like Jenkins can easily import and display the generated JUnit XML results. Please have a look at the TestNG and JUnit documentation for more information about this topic as well as the build management tools (e.g. Jenkins) to find out how to integrate the tests results.

+
+
+
+

47.3. HTML reports

+
+

Citrus creates HTML reports after each test run. The report provides detailed information on the test run with a summary of all test results. You can find the report after a test run in the directory ${project.build.directory}/citrus-reports .

+
+
+

The report consists of two parts. The test summary on top shows the total number executed tests. The main part lists all test cases with detailed information. With this report you immediately identify all tests that were failing. Each test case is marked in color according to its result outcome.

+
+
+

The failed tests give detailed error information with error messages and Java StackTrace information. In addition to that the report tries to find the test action inside the XML test part that failed in execution. With the failing code snippet you can see where the test stopped.

+
+
+ + + + + +
+ + +JavaScript should be active in your web browser. This is to enable the detailed information which comes to you in form of tooltips like test author or description. If you want to access the tooltips JavaScript should be enabled in your browser. +
+
+
+

The HTML reports are customizable by system properties. Use following properties e.g. in your citrus.properties file:

+
+
+ + + + + + + + + + + + + + + + + + + + + + + + + +
+citrus.html.report.enabled + +

Enables/disables HTML report generation (default= true).

+
+citrus.html.report.directory + +

Output directory path (default= ${project.build.directory}/citrus-reports).

+
+citrus.html.report.file + +

File name for the report file (default= citrus-test-results.html).

+
+citrus.html.report.template + +

Template HTML file with placeholders for report results.

+
+citrus.html.report.detail.template + +

Template file for detailed test results.

+
+citrus.html.report.logo + +

File resource path pointing to an image that is added to top of HTML report.

+
+
+
+

The HTML report is based on a template file that is customizable to your special needs. The default templates can be found in report-templates sources.

+
+
+
+
+
+

48. XML tests

+
+
+

As an alternative to using the Citrus Java DSL users can use pure XML as a test definition file. The XML file holds all +test actions and tells Citrus what should happen in the test case. Citrus is able to load the XML test and run it as a normal +unit test using one of the provided runtimes (JUnit4, JUnit5 or TestNG).

+
+
+

The XML tests are for those of you that do not want to code a test in Java.

+
+
+

The XML test case definition in Citrus uses two files that are connected via naming conventions.

+
+
+
XML test case files
+
+
src/test/java/org/citrusframework/MyFirstCitrus_IT.java
+src/test/resources/org/citrusframework/MyFirstCitrus_IT.xml
+
+
+
+

The files above represent a test called MyFirstCitrus_IT. The .java file defines the runtime that should be used to execute +the test (e.g. JUnit or TestNG). This Java file does not have any test logic and is not likely to be changed. In fact, you can generate +the Java file from Citrus (e.g. Maven plugin).

+
+
+
Generate test files via Maven plugin
+
+
mvn citrus:create-test
+
+
+
+
Interactive test creation
+
+
Enter test name:: MyFirstCitrus_IT
+Enter test author: Unknown::
+Enter test description:: Sample XML test
+Enter test package: org.citrusframework::
+Choose unit test framework: (testng/junit4/junit5) testng::
+Choose target code base type: (java/xml) java:: xml
+Create test with XML schema? (y/n) n::
+Create test with WSDL? (y/n) n::
+Create test with Swagger API? (y/n) n::
+
+Confirm test creation:
+type: xml
+framework: testng
+name: MyFirstCitrus_IT
+author: Unknown
+description:
+package: org.citrusframework
+ (y/n) y:: y
+
+[INFO] Successfully created new test case org.citrusframework.MyFirstCitrus_IT
+
+
+
+

The command above creates the two test files (.java and .xml) using an interactive mode. The user provides the test case information +such as test name, package, runtime and so on.

+
+
+
MyFirstCitrus_IT.java
+
+
package org.citrusframework;
+
+import org.citrusframework.annotations.CitrusResource;
+import org.citrusframework.annotations.CitrusTestSource;
+import org.citrusframework.testng.TestNGCitrusSupport;
+import org.testng.annotations.Optional;
+import org.testng.annotations.Parameters;
+import org.testng.annotations.Test;
+
+public class MyFirstCitrus_IT extends TestNGCitrusSpringSupport {
+
+    @Test
+    @CitrusTestSource(type = "spring", name="MyFirstCitrus_IT")
+    public void myFirstCitrus_IT() {
+    }
+}
+
+
+
+

The generated Java class has an empty method body and is not likely to be changed. This is because the Java class is only +there for loading the XML part and executing the test case. This means you can just look at the XML test part and add custom +test logic to the generated XML file.

+
+
+
MyFirstCitrus_IT.xml
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+              xmlns:spring="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+              xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+                  http://www.citrusframework.org/schema/testcase http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd">
+
+  <testcase name="MyFirstCitrus_IT">
+    <meta-info>
+      <author>Unknown</author>
+      <creationdate>2021-02-05</creationdate>
+      <status>DRAFT</status>
+      <last-updated-by>Unknown</last-updated-by>
+      <last-updated-on>2021-02-05T11:00:39</last-updated-on>
+    </meta-info>
+
+    <description>Sample XML test</description>
+
+    <actions>
+      <echo>
+        <message>TODO: Code the test MyFirstCitrus_IT</message>
+      </echo>
+    </actions>
+  </testcase>
+</spring:beans>
+
+
+
+

The default naming convention requires the XML file with the test name in the same package as the generated Java class. This makes sure +that the Java class is able to find and load the XML file when running the test.

+
+
+

48.1. @CitrusTestSource annotation

+
+

Each XML test in Citrus defines the @CitrusTestSource annotation in the Java class. This annotation makes Citrus search for the +XML file that represents the Citrus test within your classpath.

+
+
+

In the basic example above this means that Citrus searches for an XML test file in org/citrusframework/MyFirstCitrus_IT.xml .

+
+
+

You can customize this path and tell Citrus to search for another XML file by using the @CitrusTestSource annotation properties.

+
+
+

Following annotation properties are available:

+
+
+ + + + + + + + + + + + + + + + + +
+type + +

Type of the test source to load (spring, groovy, xml, …​)

+
+name + +

List of test case names to execute. Names also define XML file names to look for (.xml file extension is not needed here).

+
+packageName + +

Custom package location for the XML files to load

+
+packageScan + +

List of packages that are automatically scanned for XML test files to execute. For each XML file found separate +test is executed. Note that this performs a Java Classpath package scan so all XML files in package are assumed to be valid Citrus +XML test cases. In order to minimize the amount of accidentally loaded XML files the scan will only load XML files with **/*Test.xml and **/*IT.xml +file name pattern.

+
+
+
+
Customize XML file name and package
+
+
public class Sample_IT extends TestNGCitrusSpringSupport {
+
+    @Test
+    @CitrusTestSource(type = "spring", name = "CustomName_IT", packageName = "com.other.test.package")
+    public void customXmlTest() {}
+}
+
+
+
+

The annotation above loads a different XML test file named CustomName_IT in package com.other.test.package.

+
+
+

You can also load multiple XML files and run each of them.

+
+
+
Load multiple XML files
+
+
public class Sample_IT extends TestNGCitrusSpringSupport {
+
+    @Test
+    @CitrusTestSource(type = "spring", name = { "Test_1", "Test_2" })
+    public void multipleTests() {}
+}
+
+
+
+

This tells Citrus to search for the files Test_1.xml and Test_2.xml. Citrus loads the files and runs each of them as +a separate test. You can also load all test in a package with a packageScan.

+
+
+
Load multiple XML files
+
+
public class Sample_IT extends TestNGCitrusSpringSupport {
+
+    @Test
+    @CitrusTestSource(type = "spring", packageScan =  { "com.some.test.package", "com.other.test.package" })
+    public void packageScanTest() {}
+}
+
+
+
+

This loads all XML files in the given packages and executes each of them as a separate test.

+
+
+

You can also mix the various @CitrusTestSource annotations in a single Java class. The class can have several methods with +different annotations. Each annotated method represents one or more Citrus XML test cases.

+
+
+
@CitrusTestSource annotations
+
+
public class SampleIT extends TestNGCitrusSpringSupport {
+
+    @Test
+    @CitrusTestSource(type = "spring", name = "SampleIT")
+    public void sampleTest() {}
+
+    @Test
+    @CitrusTestSource(type = "spring", name = { "Test_1", "Test_2" })
+    public void multipleTests() {}
+
+    @Test
+    @CitrusTestSource(type = "spring", name = "CustomName_IT", packageName = "com.other.test.package")
+    public void customXmlTest() {}
+
+    @Test
+    @CitrusTestSource(type = "spring", packageScan =  { "com.some.test.package", "com.other.test.package" })
+    public void packageScanTest() {}
+}
+
+
+
+

You are free to combine these test annotations as you like in your class. Each XML test loaded as part of the class will +be reported separately as a unit test. So the test reports will have the exact number of tests executed with proper success and +failed stats. You can use the reports as normal unit test reports, for instance in a continuous build.

+
+
+ + + + + +
+ + +When test execution takes place each test method annotation is evaluated in sequence. XML test cases that match several +times, for instance by explicit name reference and a package scan will be executed several times respectively. +
+
+
+ + + + + +
+ + +The best thing about using the @CitrusTestSource annotation is that you can continue to use the test framework capabilities +(e.g. test groups, invocation count, thread pools, data providers, and so on). +
+
+
+

All XML test definitions use a custom XML schema that aims to reach the convenience of a domain specific language (DSL). +The next sample shows the basic structure of an XML test definition.

+
+
+
XML DSL
+
+
<spring:beans
+    xmlns="http://www.citrusframework.org/schema/testcase"
+    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+    xmlns:spring="http://www.springframework.org/schema/beans"
+    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
+                        http://www.citrusframework.org/schema/testcase http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd">
+
+    <testcase name="MyFirstTest">
+      <description>
+          First example showing the basic test case definition elements!
+      </description>
+      <variables>
+        <variable name="text" value="Hello Test Framework"/>
+      </variables>
+      <actions>
+        <echo>
+          <message>${text}</message>
+        </echo>
+      </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

The definition uses the <spring:beans> root element that declares all XML namespaces used in the file. This is because +the XML file will be loaded as a Spring framework bean definition file. The root element defines a testcase element +which represents the actual Citrus test.

+
+
+

The test case itself gets a mandatory name that must be unique throughout all test cases in a project. You will receive +errors when using duplicate test names. The test name has to follow the common Java naming conventions and rules for Java +classes. This means names must not contain whitespace characters except '-', '.' and '_'.

+
+
+

For example, TestFeature_1 is valid but Test Feature 1 is not because of the space characters.

+
+
+
+

48.2. Test meta information

+
+

The user is able to provide some additional information about the test case. The meta-info section at the very beginning of the +test case holds information like author, status or creation date.

+
+
+
XML DSL
+
+
<testcase name="metaInfoTest">
+    <meta-info>
+        <author>Christoph Deppisch</author>
+        <creationdate>2008-01-11</creationdate>
+        <status>FINAL</status>
+        <last-updated-by>Christoph Deppisch</last-updated-by>
+        <last-updated-on>2008-01-11T10:00:00</last-updated-on>
+    </meta-info>
+    <description>
+        ...
+    </description>
+    <actions>
+        ...
+    </actions>
+</testcase>
+
+
+
+
Test meta information
+
+
@CitrusTest
+public void sampleTest() {
+    description("This is a Test");
+    author("Christoph");
+    status(Status.FINAL);
+
+    run(echo("Hello Citrus!"));
+}
+
+
+
+

The status allows the following values:

+
+
+
    +
  • +

    DRAFT

    +
  • +
  • +

    READY_FOR_REVIEW

    +
  • +
  • +

    DISABLED

    +
  • +
  • +

    FINAL

    +
  • +
+
+
+

This information gives the reader first impression about the test and is also used to generate test documentation. By default, +Citrus is able to generate test reports in HTML and Excel in order to list all tests with their metadata information and description.

+
+
+ + + + + +
+ + +Tests with the status DISABLED will not be executed during a test suite run. So someone can just start adding planned +test cases that are not finished yet in status DRAFT. In case a test is not runnable yet because it is not finished, someone +may disable a test temporarily to avoid causing failures during a test run. +
+
+
+

The test description should give a short introduction to the intended use case scenario that will be tested. The user should get +a short summary of what the test case is trying to verify. You can use free text in your test description no limit to +the number of characters. Please be aware of the XML validation rules of well-formed XML (e.g. special character escaping). +The usage of CDATA sections for large descriptions may be a good idea, too.

+
+
+
+

48.3. Finally block

+
+

Java developers might be familiar with the concept of try-catch-finally blocks. The finally section contains a list of +test actions that will be executed guaranteed at the very end of the test case even if errors did occur during the execution before.

+
+
+

This is the right place to tidy up things that were previously created by the test like cleaning up the database for instance.

+
+
+
Finally block
+
+
<finally>
+    <echo>
+        <message>Do finally - regardless of what has happened before</message>
+    </echo>
+</finally>
+
+
+
+

As an example imagine that you have prepared some data inside the database at the beginning of the test and you need to make +sure the data is cleaned up at the end of the test case.

+
+
+
Finally block example
+
+
<testcase name="finallyTest">
+    <variables>
+        <variable name="orderId" value="citrus:randomNumber(5)"/>
+        <variable name="date" value="citrus:currentDate('dd.MM.yyyy')"/>
+    </variables>
+    <actions>
+        <sql datasource="testDataSource">
+            <statement>
+                INSERT INTO ORDERS VALUES (${orderId}, 1, 1, '${date}')
+            </statement>
+        </sql>
+
+        <echo>
+            <message>
+                ORDER creation time: ${date}
+            </message>
+        </echo>
+    </actions>
+    <finally>
+        <sql datasource="testDataSource">
+            <statement>
+              DELETE FROM ORDERS WHERE ORDER_ID='${orderId}'
+            </statement>
+        </sql>
+    </finally>
+</testcase>
+
+
+
+

In the example the first action creates an entry in the database using an INSERT statement. To be sure that the entry +in the database is deleted after the test, the finally section contains the respective DELETE statement that is always +executed regardless the test case state (successful or failed).

+
+
+
+

48.4. Variables with CDATA sections

+
+

When using the XML test definition you must obey the XML rules for variable values. First of all you need to escape XML +reserved characters such as <, & or " with <, & or ". Other values such as XML snippets would +also interfere with the XML well-formed paradigm. You can use CDATA sections within the variable value element as a solution.

+
+
+
Variable CDATA sections
+
+
<variables>
+  <variable name="persons">
+    <value>
+      <data>
+        <![CDATA[
+          <persons>
+            <person>
+              <name>Theodor</name>
+              <age>10</age>
+            </person>
+            <person>
+              <name>Alvin</name>
+              <age>9</age>
+            </person>
+          </persons>
+        ]]>
+      </data>
+    </value>
+  </variable>
+</variables>
+
+
+
+

That is how you can use structured variable values in the XML DSL.

+
+
+
+

48.5. Variables with Groovy

+
+

You can also use a script to create variable values. This is extremely handy when you have very complex variable values. +Just code a small Groovy script for instance in order to define the variable value. A small sample should give you the +idea how that works:

+
+
+
Groovy variable script
+
+
<variables>
+  <variable name="avg">
+    <value>
+      <script type="groovy">
+        <![CDATA[
+          a = 4
+          b = 6
+          return (a + b) / 2
+        ]]>
+      </script>
+    </value>
+  </variable>
+  <variable name="sum">
+    <value>
+      <script type="groovy">
+        <![CDATA[
+          5 + 5
+        ]]>
+      </script>
+    </value>
+  </variable>
+</variables>
+
+
+
+

Just use the script code right inside the variable value definition. The value of the variable is the result of the last +operation performed within the script. For longer script code the use of <![CDATA[ ]]> sections is recommended.

+
+
+

Citrus uses the JavaScript engine mechanism to evaluate the script code. By default, Groovy is supported as a script +engine implementation. You can add additional engine implementations to your project and support other script types, too.

+
+
+
+

48.6. Templates

+
+

Templates group action sequences to a logical unit. You can think of templates as reusable components that are used in several +XML tests. The maintenance is much more efficient because you need to apply changes only on the templates and all referenced +use cases are updated automatically.

+
+
+

The template always has a unique name. Inside a test case we call the template by this unique name. Have a look at a first example:

+
+
+
XML templates
+
+
<template name="doCreateVariables">
+    <create-variables>
+        <variable name="var" value="123456789"/>
+    </create-variables>
+
+    <call-template name="doTraceVariables"/>
+</template>
+
+<template name="doTraceVariables">
+    <echo>
+        <message>Current time is: ${time}</message>
+    </echo>
+
+    <trace-variables/>
+</template>
+
+
+
+

The code example above describes two template definitions. Templates hold a sequence of test actions or call other templates +themselves as seen in the example above.

+
+
+ + + + + +
+ + +The <call-template> action calls other templates by their name. The called template not necessarily has to be located +in the same test case XML file. The template might be defined in a separate XML file other than the test case itself: +
+
+
+
Call XML templates
+
+
<testcase name="templateTest">
+    <variables>
+        <variable name="myTime" value="citrus:currentDate()"/>
+    </variables>
+    <actions>
+        <call-template name="doCreateVariables"/>
+
+        <call-template name="doTraceVariables">
+            <parameter name="time" value="${myTime}">
+        </call-template>
+    </actions>
+</testcase>
+
+
+
+

There is an open question when dealing with templates that are defined somewhere else outside the test case. How to handle +variables? A templates may use different variable names then the test and vice versa. No doubt the template will fail as +soon as special variables with respective values are not present. Unknown variables cause the template and the whole test +to fail with errors.

+
+
+

So a first approach would be to harmonize variable usage across templates and test cases, so that templates and test cases +do use the same variable naming. But this approach might lead to high calibration effort. Therefore templates support parameters +to solve this problem. When a template is called the calling actor is able to set some parameters. Let us discuss an example +for this issue.

+
+
+

The template "doDateConversion" in the next sample uses the variable ${date}. The calling test case can set this variable +as a parameter without actually declaring the variable in the test itself:

+
+
+
Template parameter
+
+
<call-template name="doDateConversion">
+    <parameter name="date" value="${sampleDate}">
+</call-template>
+
+
+
+

The variable sampleDate is already present in the test case and gets translated into the date parameter. Following from +that the template works fine although test and template do work on different variable namings.

+
+
+

With template parameters you are able to solve the calibration effort when working with templates and variables. It is +always a good idea to check the used variables/parameters inside a template when calling it. There might be a variable that +is not declared yet inside your test. So you need to define this value as a parameter.

+
+
+

Template parameters may contain more complex values like XML fragments. The call-template action offers following CDATA +variation for defining complex parameter values:

+
+
+
Complex parameter values
+
+
<call-template name="printXMLPayload">
+    <parameter name="payload">
+      <value>
+        <![CDATA[
+          <HelloRequest xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
+            <Text>Hello South ${var}</Text>
+          </HelloRequest>
+        ]]>
+      </value>
+    </parameter>
+</call-template>
+
+
+
+ + + + + +
+ + +When a template works on variable values and parameters changes to these variables will automatically affect the +variables in the whole test. So if you change a variable’s value inside a template and the variable is defined inside the +test case the changes will affect the variable in a global context. We have to be careful with this when executing a template +several times in a test, especially in combination with parallel containers (see containers-parallel). +
+
+
+
Global scope parameter
+
+
<parallel>
+    <call-template name="print">
+        <parameter name="param1" value="1"/>
+        <parameter name="param2" value="Hello Europe"/>
+    </call-template>
+    <call-template name="print">
+        <parameter name="param1" value="2"/>
+        <parameter name="param2" value="Hello Asia"/>
+    </call-template>
+    <call-template name="print">
+        <parameter name="param1" value="3"/>
+        <parameter name="param2" value="Hello Africa"/>
+    </call-template>
+</parallel>
+
+
+
+

In the listing above a template print is called several times in a parallel container. The parameter values will be handled +in a global context, so it is quite likely to happen that the template instances influence each other during execution. We +might get such print messages:

+
+
+
Output
+
+
2. Hello Europe
+2. Hello Africa
+3. Hello Africa
+
+
+
+

Index parameters do not fit and the message 'Hello Asia' is completely gone. This is because templates overwrite parameters +to each other as they are executed in parallel at the same time. To avoid this behavior we need to tell the template that +it should handle parameters as well as variables in a local context. This will enforce that each template instance is working +on a dedicated local context. See the global-context attribute that is set to false in this example:

+
+
+
Local scope parameter
+
+
<template name="print" global-context="false">
+    <echo>
+        <message>${param1}.${param2}</message>
+    </echo>
+</template>
+
+
+
+

After that template instances won’t influence each other anymore. But notice that variable changes inside the template then +do not affect the test case neither.

+
+
+
+
+
+

49. Configuration options

+
+
+

You have several options to customize your Citrus project. Citrus uses default settings that can be overwritten to some +extent. As a framework Citrus internally works with components organized in a central context (e.g. the Spring application +context). Citrus registers components in the context in order to share those with the test execution runtime. You can +customize the behavior of these components over environment variables and system properties.

+
+
+

49.1. Environment settings

+
+

Citrus as an application reads general settings from system properties and environment variables. The Citrus framework +settings initialize on the startup and evaluate environment settings in favor of using default values.

+
+
+

The environment settings are well suited for both usual Java runtime environment and containerized runtime environments +such as Docker or Kubernetes. The following settings do support this kind of environment configuration.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 2. System properties
System propertiesDescription

citrus.application.properties

File location for application property file that holds other settings. These properties get loaded as system properties on startup. (default="classpath:citrus-application.properties")

citrus.java.config

Class name for custom Java configuration (default=null)

citrus.file.encoding

Default file encoding used in Citrus when reading and writing file content (default=Charset.defaultCharset())

citrus.default.message.type

Default message type for validating payloads (default="XML")

citrus.test.name.variable

Default test name variable that is automatically created for each test (default="citrus.test.name")

citrus.test.package.variable

Default test package variable that is automatically created for each test (default="citrus.test.package")

citrus.default.src.directory

Default test source directory (default="src/test/")

citrus.xml.file.name.pattern

File name patterns used for XML test file package scan (default="/**/*Test.xml,/**/*IT.xml")

citrus.java.file.name.pattern

File name patterns used for Java test sources package scan (default="/**/*Test.java,/**/*IT.java")

+
+

Same properties are settable via environment variables.

+
+ + ++++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Table 3. Environment variables
Environment variableDescription

CITRUS_APPLICATION_PROPERTIES

File location for application property file that holds other settings. These properties get loaded as system properties on startup. (default="classpath:citrus-application.properties")

CITRUS_JAVA_CONFIG

Class name for custom Java configuration (default=null)

CITRUS_FILE_ENCODING

Default file encoding used in Citrus when reading and writing file content (default=Charset.defaultCharset())

CITRUS_DEFAULT_MESSAGE_TYPE

Default message type for validating payloads (default="XML")

CITRUS_TEST_NAME_VARIABLE

Default test name variable that is automatically created for each test (default="citrus.test.name")

CITRUS_TEST_PACKAGE_VARIABLE

Default test package variable that is automatically created for each test (default="citrus.test.package")

CITRUS_DEFAULT_SRC_DIRECTORY

Default test source directory (default="src/test/")

CITRUS_XML_FILE_NAME_PATTERN

File name patterns used for XML test file package scan (default="/**/*Test.xml,/**/*IT.xml")

CITRUS_JAVA_FILE_NAME_PATTERN

File name patterns used for Java test sources package scan (default="/**/*Test.java,/**/*IT.java")

+
+
+

49.2. Spring configuration settings

+
+

When spring framework is enabled in Citrus you can set specific settings regarding the Spring +application context.

+
+ + ++++ + + + + + + + + + + + + + + + + +
Table 4. System properties
System propertiesDescription

citrus.spring.application.context

File location for Spring XML configurations (default="classpath*:citrus-context.xml")

citrus.spring.java.config

Class name for Spring Java config (default=null)

+ + ++++ + + + + + + + + + + + + + + + + +
Table 5. Environment variables
Environment variableDescription

CITRUS_SPRING_APPLICATION_CONTEXT

File location for Spring XML configurations (default="classpath*:citrus-context.xml")

CITRUS_SPRING_JAVA_CONFIG

Class name for Spring Java config (default=null)

+
+
+

49.3. Property file settings

+
+

As mentioned in the previous section Citrus as a framework references some basic settings from system environment properties +or variables. You can overwrite these settings in a central property file which is loaded at the very beginning of the +Citrus runtime.

+
+
+

The properties in that file are automatically loaded as Java system properties. Just add a property file named +citrus-application.properties to your project classpath. This property file contains customized settings such as:

+
+
+
citrus-application.properties
+
+
citrus.spring.application.context=classpath*:citrus-custom-context.xml
+citrus.spring.java.config=org.citrusframework.config.MyCustomConfig
+citrus.file.encoding=UTF-8
+citrus.default.message.type=XML
+citrus.xml.file.name.pattern=/**/*Test.xml,/**/*IT.xml
+
+
+
+

Citrus automatically loads these application properties at the startup. All properties are also settable with Java system +properties directly. The location of the citrus-application.properties file is customizable with the system property +citrus.application.properties or environment variable `CITRUS_APPLICATION_PROPERTIES. + ` +.Custom property file location.

+
+
+
+
CITRUS_APPLICATION_PROPERTIES=file:/custom/path/to/citrus-application.properties
+
+
+
+ + + + + +
+ + +You can use classpath: and file: path prefix in order to give locate a classpath or file-system resource. +
+
+
+
+
+
+

50. Spring support

+
+
+

The Spring framework provides an awesome set of projects, libraries and tools and is a wide spread and well appreciated +framework for Java. The dependency injection and IoC concepts introduced with Spring are awesome.

+
+
+

Citrus is able to work with Spring in terms of loading central components as Spring beans as part of a Spring application +context. In the following you can use Spring autowiring and configuration in your tests.

+
+
+

Read the following chapters to know more about how to use Citrus together with Spring.

+
+
+

50.1. Spring XML application context

+
+

Citrus supports the Spring framework as IoC container in order to load all components as Spring beans in a central +application context. By default, Citrus loads basic components as Spring beans in a Spring Java config class.

+
+
+

With Spring in place it is very easy to change/add custom bean components in the Spring application context. Citrus +searches for custom Spring application context files in your project and adds these bean definitions to the Spring +application context.

+
+
+

By default, Citrus looks for custom XML Spring application context files in this location: classpath*:citrus-context.xml. +So you can just add this file named citrus-context.xml to your project classpath and Citrus will load all Spring beans +automatically.

+
+
+

The location of this file can be customized by setting a System property citrus.spring.application.context or the environment +variable CITRUS_SPRING_APPLICATION_CONTEXT.

+
+
+
Custom Spring XML bean definition context.
+
+
CITRUS_SPRING_APPLICATION_CONTEXT=file:/custom/path/to/custom-beans.xml
+
+
+
+
custom-beans.xml
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xmlns:citrus="http://www.citrusframework.org/schema/config"
+       xmlns:context="http://www.springframework.org/schema/context"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans
+            http://www.springframework.org/schema/beans/spring-beans.xsd
+            http://www.citrusframework.org/schema/config
+            http://www.citrusframework.org/schema/config/citrus-config.xsd
+            http://www.springframework.org/schema/context
+            http://www.springframework.org/schema/context/spring-context.xsd">
+
+  <!-- Add your bean definitions here -->
+
+</beans>
+
+
+
+

The file custom-beans.xml should provide a normal Spring bean XML configuration. You can add Spring beans as usual and +you can use the Citrus XML components provided by the schemas like xmlns:citrus="http://www.citrusframework.org/schema/config".

+
+
+

Citrus provides several schemas for custom Spring XML components. These are described in more detail in the respective +chapters and sections in this reference guide.

+
+
+ + + + + +
+ + +You can also use import statements in this Spring application context in order to load other configuration files. +So you are free to modularize your configuration in several files that get loaded by Citrus. +
+
+
+
+

50.2. Spring Java config

+
+

You can also use pure Java code to load Spring beans as a configuration. Citrus is able to load the Spring beans from a +configuration class. Please define the configuration class with the System property citrus.spring.java.config or with +the environment variable CITRUS_SPRING_JAVA_CONFIG.

+
+
+
Custom Spring Java configuration class.
+
+
CITRUS_SPRING_JAVA_CONFIG=custom.package.to.MyCustomConfig
+
+
+
+

Citrus loads the given Spring bean configuration class in MyCustomConfig.class and adds all defined Spring beans to the +application context. See the following example for custom Spring Java configuration:

+
+
+
MyCustomConfig.java
+
+
import org.citrusframework.TestCase;
+import org.citrusframework.report.*;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+import org.springframework.context.annotation.Bean;
+import org.springframework.context.annotation.Configuration;
+
+@Configuration
+public class MyCustomConfig {
+
+    @Bean(name = "plusMinusTestReporter")
+    public TestReporter plusMinusTestReporter() {
+        return new PlusMinusTestReporter();
+    }
+
+    /**
+     * Sample test reporter.
+     */
+    private static class PlusMinusTestReporter extends AbstractTestReporter {
+
+        @Override
+        public void generate(TestResults testResults) {
+            StringBuilder testReport = new StringBuilder();
+
+            testResults.doWithResults(result -> {
+                if (result.isSuccess()) {
+                    testReport.append("+");
+                } else if (result.isFailed()) {
+                    testReport.append("-");
+                } else {
+                    testReport.append("o");
+                }
+            });
+
+            LoggerFactory.getLogger(PlusMinusTestReporter.class).info(testReport.toString());
+        }
+    }
+}
+
+
+
+ + + + + +
+ + +You can mix XML and Java based Spring bean configuration. Citrus loads both sources and adds beans to the Spring bean +application context during start. +
+
+
+
+
+
+

51. Samples

+
+
+

This chapter gives some samples where you can see Citrus in action.

+
+
+

51.1. The FlightBooking sample

+
+

A simple project example should give you the idea how Citrus works. The system under test is a flight booking service that handles travel requests from a travel agency. A travel request consists of a complete travel route including several flights. The FlightBookingService application will split the complete travel booking into separate flight bookings that are sent to the respective airlines in charge. The booking and customer data is persisted in a database.

+
+
+

The airlines will confirm or deny the flight bookings. The FlightBookingService application consolidates all incoming flight confirmations and combines them to a complete travel confirmation or denial that is sent back to the travel agency. Next picture tries to put the architecture into graphics:

+
+
+

samples/flightbooking/architecture_overview.jpg

+
+
+

In our example two different airlines are connected to the FlightBookingService application: the SmartAriline over JMS and the RoyalAirline over Http.

+
+
+

51.1.1. The use case

+
+

The use case that we would like to test is quite simple. The test should handle a simple travel booking and expect a positive processing to the end. The test case neither simulates business errors nor technical problems. Next picture shows the use case as a sequence diagram.

+
+
+

samples/flightbooking/sequence_diagram.jpg

+
+
+

The travel agency puts a travel booking request towards the system. The travel booking contains two separate flights. The flight requests are published to the airlines (SmartAirline and RoyalAirline). Both airlines confirm the flight bookings with a positive answer. The consolidated travel booking response is then sent back to the travel agency.

+
+
+
+

51.1.2. Configure the simulated systems

+
+

Citrus simulates all surrounding applications in their behavior during the test. The simulated applications are: TravelAgency, SmartAirline and RoyalAirline. The simulated systems have to be configured in the Citrus configuration first. The configuration is done in Spring XML configuration files, as Citrus uses Spring to glue all its services together.

+
+
+

First of all we have a look at the TravelAgency configuration. The TravelAgency is using JMS to connect to our tested system, so we need to configure this JMS connection in Citrus.

+
+
+
+
<bean id="connectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory">
+  <property name="brokerURL" value="tcp://localhost:61616"/>
+</bean>
+
+<citrus-jms:endpoint id="travelAgencyBookingRequestEndpoint"
+                      destination-name="${travel.agency.request.queue}"/>
+
+<citrus-jms:endpoint id="travelAgencyBookingResponseEndpoint"
+                      destination-name="${travel.agency.response.queue}"/>
+
+
+
+

This is all Citrus needs to send and receive messages over JMS in order to simulate the TravelAgency. By default all JMS message senders and receivers need a connection factory. Therefore Citrus is searching for a bean named "connectionFactory". In the example we connect to a ActiveMQ message broker. A connection to other JMS brokers like TIBCO EMS or Apache ActiveMQ is possible too by simply changing the connection factory implementation.

+
+
+

The identifiers of the message senders and receivers are very important. We should think of suitable ids that give the reader a first hint what the sender/receiver is used for. As we want to simulate the TravelAgency in combination with sending booking requests our id is "travelAgencyBookingRequestEndpoint" for example.

+
+
+

The sender and receivers do also need a JMS destination. Here the destination names are provided by property expressions. The Spring IoC container resolves the properties for us. All we need to do is publish the property file to the Spring container like this.

+
+
+
+
<bean name="propertyLoader"
+   class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
+    <property name="locations">
+        <list>
+            <value>citrus.properties</value>
+        </list>
+    </property>
+    <property name="ignoreUnresolvablePlaceholders" value="true"/>
+</bean>
+
+
+
+

The citrus.properties file is located in our project’s resources folder and defines the actual queue names besides other properties of course:

+
+
+
+
#JMS queues
+travel.agency.request.queue=Travel.Agency.Request.Queue
+travel.agency.response.queue=Travel.Agency.Response.Queue
+smart.airline.request.queue=Smart.Airline.Request.Queue
+smart.airline.response.queue=Smart.Airline.Response.Queue
+royal.airline.request.queue=Royal.Airline.Request.Queue
+
+
+
+

What else do we need in our Spring configuration? There are some basic beans that are commonly defined in a Citrus application but I do not want to bore you with these details. So if you want to have a look at the Spring application context file in the resources folder and see how things are defined there.

+
+
+

We continue with the first airline to be configured the SmartAirline. The SmartAirline is also using JMS to communicate with the FlightBookingService. So there is nothing new for us, we simply define additional JMS message senders and receivers.

+
+
+
+
<citrus-jms:endpoint id="smartAirlineBookingRequestEndpoint"
+                      destination-name="${smart.airline.request.queue}"/>
+
+<citrus-jms:endpoint id="smartAirlineBookingResponseEndpoint"
+                      destination-name="${smart.airline.response.queue}"/>
+
+
+
+

We do not define a new JMS connection factory because TravelAgency and SmartAirline are using the same message broker instance. In case you need to handle multiple connection factories simply define the connection factory with the attribute "connection-factory".

+
+
+
+
<citrus-jms:endpoint id="smartAirlineBookingRequestEndpoint"
+                            destination-name="${smart.airline.request.queue}"
+                            connection-factory="smartAirlineConnectionFactory"/>
+
+<citrus-jms:endpoint id="smartAirlineBookingResponseEndpoint"
+                          destination-name="${smart.airline.response.queue}"
+                          connection-factory="smartAirlineConnectionFactory"/>
+
+
+
+
+

51.1.3. Configure the Http adapter

+
+

The RoyalAirline is connected to our system using Http request/response communication. This means we have to simulate a Http server in the test that accepts client requests and provides proper responses. Citrus offers a Http server implementation that will listen on a port for client requests. The adapter forwards incoming request to the test engine over JMS and receives a proper response that is forwarded as a Http response to the client. The next picture shows this mechanism in detail.

+
+
+

samples/flightbooking/http_adapter.jpg

+
+
+

The RoyalAirline adapter receives client requests over Http and sends them over JMS to a message receiver as we already know it. The test engine validates the received request and provides a proper response back to the adapter. The adapter will transform the response to Http again and publishes it to the calling client. Citrus offers these kind of adapters for Http and SOAP communication. By writing your own adapters like this you will be able to extend Citrus so it works with protocols that are not supported yet.

+
+
+

Let us define the Http adapter in the Spring configuration:

+
+
+
+
<citrus-http:server id="royalAirlineHttpServer"
+                       port="8091"
+                       uri="/flightbooking"
+                       endpoint-adapter="jmsEndpointAdapter"/>
+
+<citrus-jms:endpoint-adapter id="jmsEndpointAdapter
+      destination-name="${royal.airline.request.queue}"/>
+      connection-factory="connectionFactory" />
+      timeout="2000"/>
+
+<citrus-jms:sync-endpoint id="royalAirlineBookingEndpoint"
+                            destination-name="${royal.airline.request.queue}"/>
+
+
+
+

We need to configure a Http server instance with a port, a request URI and the endpoint adapter. We define the JMS endpoint adapter to handle request as described. In Addition to the endpoint adapter we also need synchronous JMS message sender and receiver instances. That’s it! We are able to receive Http request in order to simulate the RoyalAirline application. What is missing now? The test case definition itself.

+
+
+
+

51.1.4. The test case

+
+

The test case definition is also a Spring configuration file. Citrus offers a customized XML syntax to define a test case. This XML test defining language is supposed to be easy to understand and more specific to the domain we are dealing with. Next listing shows the whole test case definition. Keep in mind that a test case defines every step in the use case. So we define sending and receiving actions of the use case as described in the sequence diagram we saw earlier.

+
+
+
+
<?xml version="1.0" encoding="UTF-8"?>
+<spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
+             xmlns:spring="http://www.springframework.org/schema/beans"
+             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+             xsi:schemaLocation="http://www.springframework.org/schema/beans
+             http://www.springframework.org/schema/beans/spring-beans.xsd
+             http://www.citrusframework.org/schema/testcase
+             http://www.citrusframework.org/schema/testcase/citrus-testcase.xsd">
+    <testcase name="FlightBookingTest">
+        <meta-info>
+            <author>Christoph Deppisch</author>
+            <creationdate>2009-04-15</creationdate>
+            <status>FINAL</status>
+            <last-updated-by>Christoph Deppisch</last-updated-by>
+            <last-updated-on>2009-04-15T00:00:00</last-updated-on>
+        </meta-info>
+        <description>
+            Test flight booking service.
+        </description>
+        <variables>
+            <variable name="correlationId"
+                value="citrus:concat('Lx1x', 'citrus:randomNumber(10)')"/>
+            <variable name="customerId"
+                value="citrus:concat('Mx1x', citrus:randomNumber(10))"/>
+        </variables>
+        <actions>
+            <send endpoint="travelAgencyBookingRequestEndpoint">
+                <message>
+                    <data>
+                      <![CDATA[
+                        <TravelBookingRequestMessage
+                          xmlns="http://citrusframework.org/schemas/TravelAgency">
+                          <correlationId>${correlationId}</correlationId>
+                          <customer>
+                            <id>${customerId}</id>
+                            <firstname>John</firstname>
+                            <lastname>Doe</lastname>
+                          </customer>
+                          <flights>
+                            <flight>
+                              <flightId>SM 1269</flightId>
+                              <airline>SmartAirline</airline>
+                              <fromAirport>MUC</fromAirport>
+                              <toAirport>FRA</toAirport>
+                              <date>2009-04-15</date>
+                              <scheduledDeparture>11:55:00</scheduledDeparture>
+                              <scheduledArrival>13:00:00</scheduledArrival>
+                            </flight>
+                            <flight>
+                              <flightId>RA 1780</flightId>
+                              <airline>RoyalAirline</airline>
+                              <fromAirport>FRA</fromAirport>
+                              <toAirport>HAM</toAirport>
+                              <date>2009-04-15</date>
+                              <scheduledDeparture>16:00:00</scheduledDeparture>
+                              <scheduledArrival>17:10:00</scheduledArrival>
+                            </flight>
+                          </flights>
+                        </TravelBookingRequestMessage>
+                      ]]>
+                    </data>
+                </message>
+                <header>
+                    <element name="correlationId" value="${correlationId}"/>
+                </header>
+            </send>
+
+            <receive endpoint="smartAirlineBookingRequestEndpoint">
+                <message>
+                    <data>
+                      <![CDATA[
+                        <FlightBookingRequestMessage
+                          xmlns="http://citrusframework.org/schemas/AirlineSchema">
+                          <correlationId>${correlationId}</correlationId>
+                          <bookingId>???</bookingId>
+                          <customer>
+                            <id>${customerId}</id>
+                            <firstname>John</firstname>
+                            <lastname>Doe</lastname>
+                          </customer>
+                          <flight>
+                            <flightId>SM 1269</flightId>
+                            <airline>SmartAirline</airline>
+                            <fromAirport>MUC</fromAirport>
+                            <toAirport>FRA</toAirport>
+                            <date>2009-04-15</date>
+                            <scheduledDeparture>11:55:00</scheduledDeparture>
+                            <scheduledArrival>13:00:00</scheduledArrival>
+                          </flight>
+                        </FlightBookingRequestMessage>
+                      ]]>
+                    </data>
+                    <ignore path="//:FlightBookingRequestMessage/:bookingId"/>
+                </message>
+                <header>
+                    <element name="correlationId" value="${correlationId}"/>
+                </header>
+                <extract>
+                    <message path="//:FlightBookingRequestMessage/:bookingId"
+                                variable="${smartAirlineBookingId}"/>
+                </extract>
+            </receive>
+
+            <send endpoint="smartAirlineBookingResponseEndpoint">
+                <message>
+                    <data>
+                      <![CDATA[
+                        <FlightBookingConfirmationMessage
+                          xmlns="http://citrusframework.org/schemas/AirlineSchema">
+                          <correlationId>${correlationId}</correlationId>
+                          <bookingId>${smartAirlineBookingId}</bookingId>
+                          <success>true</success>
+                          <flight>
+                            <flightId>SM 1269</flightId>
+                            <airline>SmartAirline</airline>
+                            <fromAirport>MUC</fromAirport>
+                            <toAirport>FRA</toAirport>
+                            <date>2009-04-15</date>
+                            <scheduledDeparture>11:55:00</scheduledDeparture>
+                            <scheduledArrival>13:00:00</scheduledArrival>
+                          </flight>
+                        </FlightBookingConfirmationMessage>
+                      ]]>
+                    </data>
+                </message>
+                <header>
+                    <element name="correlationId" value="${correlationId}"/>
+                </header>
+            </send>
+
+            <receive endpoint="royalAirlineBookingEndpoint">
+                <message>
+                    <data>
+                      <![CDATA[
+                        <FlightBookingRequestMessage
+                          xmlns="http://citrusframework.org/schemas/FlightBooking/AirlineSchema">
+                          <correlationId>${correlationId}</correlationId>
+                          <bookingId>???</bookingId>
+                          <customer>
+                              <id>${customerId}</id>
+                              <firstname>John</firstname>
+                              <lastname>Doe</lastname>
+                          </customer>
+                          <flight>
+                            <flightId>RA 1780</flightId>
+                            <airline>RoyalAirline</airline>
+                            <fromAirport>FRA</fromAirport>
+                            <toAirport>HAM</toAirport>
+                            <date>2009-04-15</date>
+                            <scheduledDeparture>16:00:00</scheduledDeparture>
+                            <scheduledArrival>17:10:00</scheduledArrival>
+                          </flight>
+                        </FlightBookingRequestMessage>
+                      ]]>
+                    </data>
+                    <ignore path="//:FlightBookingRequestMessage/:bookingId"/>
+                </message>
+                <header>
+                    <element name="correlationId" value="${correlationId}"/>
+                </header>
+                <extract>
+                    <message path="//:FlightBookingRequestMessage/:bookingId"
+                                variable="${royalAirlineBookingId}"/>
+                </extract>
+            </receive>
+
+            <send endpoint="royalAirlineBookingEndpoint">
+                <message>
+                    <data>
+                      <![CDATA[
+                        <FlightBookingConfirmationMessage
+                          xmlns="http://citrusframework.org/schemas/AirlineSchema">
+                          <correlationId>${correlationId}</correlationId>
+                          <bookingId>${royalAirlineBookingId}</bookingId>
+                          <success>true</success>
+                          <flight>
+                            <flightId>RA 1780</flightId>
+                            <airline>RoyalAirline</airline>
+                            <fromAirport>FRA</fromAirport>
+                            <toAirport>HAM</toAirport>
+                            <date>2009-04-15</date>
+                            <scheduledDeparture>16:00:00</scheduledDeparture>
+                            <scheduledArrival>17:10:00</scheduledArrival>
+                          </flight>
+                        </FlightBookingConfirmationMessage>
+                      ]]>
+                    </data>
+                </message>
+                <header>
+                    <element name="correlationid" value="${correlationId}"/>
+                </header>
+            </send>
+
+            <receive endpoint="travelAgencyBookingResponseEndpoint">
+                <message>
+                    <data>
+                      <![CDATA[
+                        <TravelBookingResponseMessage
+                          xmlns="http://citrusframework.org/schemas/TravelAgency">
+                          <correlationId>${correlationId}</correlationId>
+                          <success>true</success>
+                          <flights>
+                            <flight>
+                              <flightId>SM 1269</flightId>
+                              <airline>SmartAirline</airline>
+                              <fromAirport>MUC</fromAirport>
+                              <toAirport>FRA</toAirport>
+                              <date>2009-04-15</date>
+                              <scheduledDeparture>11:55:00</scheduledDeparture>
+                              <scheduledArrival>13:00:00</scheduledArrival>
+                            </flight>
+                            <flight>
+                              <flightId>RA 1780</flightId>
+                              <airline>RoyalAirline</airline>
+                              <fromAirport>FRA</fromAirport>
+                              <toAirport>HAM</toAirport>
+                              <date>2009-04-15</date>
+                              <scheduledDeparture>16:00:00</scheduledDeparture>
+                              <scheduledArrival>17:10:00</scheduledArrival>
+                            </flight>
+                          </flights>
+                        </TravelBookingResponseMessage>
+                      ]]>
+                    </data>
+                </message>
+                <header>
+                    <element name="correlationId" value="${correlationId}"/>
+                </header>
+            </receive>
+
+        </actions>
+    </testcase>
+</spring:beans>
+
+
+
+

Similar to a sequence diagram the test case describes every step of the use case. At the very beginning the test case gets name and its meta information. Following with the variable values that are used all over the test. Here it is the correlationId and the customerId that are used as test variables. Inside message templates header values the variables are referenced several times in the test

+
+
+
+
<correlationId>${correlationId}</correlationId>
+<id>${customerId}</id>
+
+
+
+

The sending/receiving actions use a previously defined message sender/receiver. This is the link between test case and basic Spring configuration we have done before.

+
+
+

send endpoint="travelAgencyBookingRequestEndpoint"

+
+
+

The sending action chooses a message sender to actually send the message using a message transport (JMS, Http, SOAP, etc.). After sending this first "TravelBookingRequestMessage" request the test case expects the first "FlightBookingRequestMessage" message on the SmartAirline JMS destination. In case this message is not arriving in time the test will fail with errors. In positive case our FlightBookingService works well and the message arrives in time. The received message is validated against a defined expected message template. Only in case all content validation steps are successful the test continues with the action chain. And so the test case proceeds and works through the use case until every message is sent respectively received and validated. The use case is done automatically without human interaction. Citrus simulates all surrounding applications and provides detailed validation possibilities of messages.

+
+
+
+
+
+
+

52. Appendix

+
+
+

Maven archetype

+
+

If you start from scratch or in case you would like to have Citrus operating in a separate Maven module you can use the +Citrus Maven archetype to create a new Maven project. The archetype will setup a basic Citrus project structure with basic +settings and files.

+
+
+
+
mvn archetype:generate -Dfilter=org.citrusframework.mvn:citrus
+
+1: remote -> org.citrusframework.mvn:citrus-quickstart (Citrus quickstart project)
+2: remote -> org.citrusframework.mvn:citrus-quickstart-jms (Citrus quickstart project with JMS consumer and producer)
+3: remote -> org.citrusframework.mvn:citrus-quickstart-soap (Citrus quickstart project with SOAP client and producer)
+Choose a number: 1
+
+Define value for groupId: org.citrusframework.samples
+Define value for artifactId: citrus-sample
+Define value for version: 1.0-SNAPSHOT
+Define value for package: org.citrusframework.samples
+
+
+
+

In the sample above we used the Citrus archetype available in Maven central repository. +As the list of default archetypes available in Maven central is very long, it has been filtered for official Citrus archetypes.

+
+
+

After choosing the Citrus quickstart archetype you have to define several values for your project: the groupId, the artifactId, +the package and the project version. After that we are done! Maven created a Citrus project structure for us which is +ready for testing. You should see the following basic project folder structure.

+
+
+
+
citrus-sample
+  |   + src
+  |   |   + main
+  |   |    |   + java
+  |   |    |   + resources
+  |   |   + test
+  |   |    |   + java
+  |   |    |   + resources
+  pom.xml
+
+
+
+

The Citrus project is absolutely ready for testing. With Maven we can build, package, install and test our project right +away without any adjustments. Try to execute the following commands:

+
+
+
+
mvn clean verify
+mvn clean verify -Dit.test=MyFirstCitrusTest
+
+
+
+ + + + + +
+ + +If you need additional assistance in setting up a Citrus Maven project please visit our Maven setup tutorial on +https://citrusframework.org/tutorials.html. +
+
+
+
+
+
+ + + + + \ No newline at end of file diff --git a/reference/4.4.0/pdf/citrus-reference-4.4.0.pdf b/reference/4.4.0/pdf/citrus-reference-4.4.0.pdf new file mode 100644 index 0000000000000000000000000000000000000000..a28a44a5edee437294884191b10e5e7a8e21e371 GIT binary patch literal 8948480 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∓1lt_OT&>9>cT{N^){Uw!fA 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%0AnR!|n2F~X!;U}y{!p#S0LKY3!~j{ioN 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╭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

Ait!+LE{&>hI<{Ud>rNFa7bI!rRI1y=m`MezZ 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�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%0DKG}Tc&GtX$B$ww|MZ4I`T{h5luwv7#8LHapn#T% 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 z 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

C}oOl#{>ws{vS$f2G6Ps$GMCb|{am|+ zgc?`!cY!N9Ntu!Ryg7}kJmqQTn(29+1HHHa^jIE8{dRFC@C77dd{5J?JZDTm*kHZ+v?cOa8amO0Yi-U%WTVd*SP_jlsgxg)ah7vNLbLgVyGG-f zQQL`;5f;VBNRKt3b%uLH8pxINe8VQE0mHfnrVtz{J#T!08hOouo!cR!vhfqyzR*v_ zU0%b!usU{BHqC)Xa*MPtWDedRH+fW@yx`rj7gbjbk4rqN9uIwA2wvUqfXhV4LO&B^ z1b8Fd&=11{eP8G;atD0Z;&`{zBXhv}(E} zm)1@Yn#@Dp!Xn4A7qoRb3N{KbpoQmykV6e-lz&dtUsdolvqWUXJ*2J~bvRm2%S%H6 zu)xZvE`WF{!nz0I6LVs|6IKr}8V+KOgG;EtstLR$Mj?ZO8+mY$`=%N55YdT3-4JMp zR?fS!4P+RG#%wow(r0aP`P))#uJ305!q4v6o0aPhB(aC7QU5BLM&}&VXU#}5d7>_^ z53r|tK%&2Vt?ksTl{>V}qsQ??rj7lYxOj!azghH{Y)0K8EnZuJnMo4UEzGI8g#@X_ z24k&?bg)|j^|~Z3UVi9{mmhP7xZL=eAfa?aKMW7_#jB1j^2Mubu`h+OlL2J!{adhj z`K4*`@)KXFxGr0~>J3nZ338Lpxy2;+NHWtI@>4S{)7l~Ku3KkaL*Y^bWj@G+$AA!`XPjjQc|J<@bxH#2oHqmmwlIGAM9tdg*=}2>wR?alt~cERv;8n5g15i07BVEkv}8nTbFo+j~!cTfh-0UK9r+B zz^v>KhxWP^K1!p59gvbXEPf)}u=uICTf>ok2DAb?xT30C+TZOkDxh7@_ID8T+a(TK ziHE+w^RK)8ou3ICx^zQ73=j1E-Hm}(ZdhEG?eFG5D``(>=-~dIZn2_W;y;Oygc%^o z#J;Koit{9tLwI1{;Tq&N-#wL(#Tj^pWRgQkmv7igGA9ZI|F>szHw4w7j7z6mRwxUaD!3YJ=)9z|854B zzV_Y>HQ>jcHQ;B0ywVN*Fg(z$0dJ9ed%G4#Z*S_6g)04Mfw$K$O~#X-_)5if znKeM1pVaYj2nc^-Hpp{+$kX0kXO+#DsO7A(z8B@!fzow(Cd6``$bSERcOnAm?yUSX zb7r$+Ry$jeyme;Y;95yCvR7odegB!O!g+>^F za2HZks3LfN@1c5{9Rg~`a78b&V%M-bwi8ps8Zcu@ zuH2Bg^U&hu)LJ<}`Jn|OhE=PQ?LrFoIEk@1IR+$a@azi!uV)!DE2zE>Ir7v`Wcw38 z6}NMhz^WPYv^q3)i?p4qD0$W7$WuJM_uC%wv;wECOQLhv4}Cl5$K7_$&jcx^8^*)< zK;O=Ji+nrRwK#6)Qjcsq=SK^+bAD;s&iRS2R9u&B=d5bRgmzlGuov(bT0M*j4b=>m z9JG{ix-&Cj2NrM;gk?)Y2&`oMw^G&E`mkyP z&;u+?f)q|MWzvYCzzsHZ!+w!zQ)ihU$T#YwI-7B{5L8?+ z)954+K~BkK9U1I^JV~nC0ae#ZotgtT6k*fekvaua+~gv*dN7?h_rA)5>G4G7PT0j$ z(fhI^5Pqz?U^+lWyG8Q8G^9>}y6=`SR1^#kdET!$PIXCK!u-&eFhB0RFMcMhS?Pv; z7#`?Ln77EiFI|g$LG&JlV0t`S;C*pXB=3u#_)5if*%G#+?&ER7SI9@>EOm6rS%BKI!3VRVrvZ18x|`N5)ZPRImd8zxZJ7890ME;I9*;Jr6FpLU6WS z4jsr`Y3n)mRO=6Vz~=69$iM&$_obyzT?7j#E8C?J_`biiz)QX~_D)9EFy?-t6=;FQ z!97ZJY+>x()Jx%)O%l~+B7)#*+$2&y)H)aZHwnb`y-Y-NPiYn-uM(km4~kkkGX*pF zzTW4|1Mx&=5BfFHd?uL~cYMY?up>gvEt2_+iG%+pV;-PX4IZGJd7uJkp-Vh?84ulj z_OCnh+0O)fIo&WG#s|9jT*nr<`P{WQn$M|6Wa_iQ?c5Yf_T7UXpKeTaJbf{_DUdSX zw-X7?1GBTlO9Rmf#p;Zlcxjzq>jH4ea=>f_25>tuWPObk^lM;weE#edxI>~L4L|7ge=#rM1EYXRA+*gNVUt`z0IJdMfFx=^q18(#p0h=BA<*? zo=T>s&{QX74?N;UzHWB(!|gHpw^*F4vYiLF#lqb7f{-dBs7s;=>W6NE`f+E1`k7#J zrW^WUc%Yl0w-toEWpQ0*g3bjY@gvM&SZ_WZYA)=VTMiB!_s`!2DuEL<%KjVhokdOUryf=2#TtV0Iwa-Othtu{d zgk>kw%(Fq@1A@U&)@6thbdq!58#4TyaL+D88<-QayjylR!{I-C?cOmPk%eUqe)?FS zC;&bf0L5Q^OZvq2xV%A~tOh&e$00_28lgdOH*zapEiDS_deZlockv3t0H#=cw&$B< z6Q#Vj9&X-yX#8h4_a>3(wfD8X$jaRUCxOs$)DUaHj8VCAL&6@Uf$h1Tu6FTR5~CVC zW-Sa=$yx3vGH1D;im?Sa?5N_|m1=ADWWI8X6kBL2GN;;XW7kx;<-{wNSdC#juuB}8 z6Ayi3=U;alJ3kYp=r{Dk@Ic?#d5b)@(6uJ%IPRIN}NwraA6x9^S2he4$nHb zQCH2D%0PLFRLyp1vyE-alYJh5Ppajy4F0#DRjaU9kvgKrXWAWhLhkqxNhWbrwHh}m?P3yfM zNxWkS;|R~cy(e3Q?OTc+^Z81dxGKTJxT^N`N67hX(_4$w^u|?Fvr12mD~jM)#xO0~ zSm~xT(p8p;mNJ6!aWUxS>z)3m(Ues#Qi%$CQAZ_E(No4;>3-Ij>D%KTZqBTya!Y#w zrw4k|6mJDjBiF0#H)AkR^y(Q1G$%}5{@U4O3{%#oxeGrRy#&d$*M9*Sq$$lSup{NI z@fvpR`khP(IyDB!WJ$4S4?JD7(gwJOzNsHoSyDwN4f$}U-@6SJn=};;Tq6Y+2UAjM z$S78K;&*YNsuomhS$Z|9i&zd((L+-o?jEYguAmk6$jQ>uKKu1KsR2@-Ar+l231%7h zbdXuCE?DQg1ixO1DHV2+DD2v!8qaT3MT`n5{H20u_FC=r`gML!N_gQ=mk{-$C&a|l zdtz07aT)~Y1n~(mxpmSAE%kYEbLS#*w_ju1!d+L5$bDiOp%>hK232mJM%ZjocKfqF;ikh$Nt$2IP8s{&4SFX(1*~p7E+FxqOVwB~FJt`|t_SykN z-6P~CrR0hYbUOTTR<35TnawnkEJ);X4F`v@JK?pp#L6^bQiiCRi5P)HDYr%%1M7XE z@q0GXFem3S)9I`Wey%xbI(??sKIbDZl71>b`0+~Vr>fA(bkBU;@kF+k`!(+4rZ_fU zwZ!F2Nj|$p@^M!nlW>A};3W#o@QXbCv|^X7OA>xQ9J-I&zwUh8ekM4z(+&MFJh1a| zhZZFtcWSZwxML@SJ>&gb;^Y1%uDe`Zmzh3uxkvRjJjl3JFska13p;HVRE3(ooN$xnKU&f(V?9$q z4UZ;Qv1ZQjUk-s8r=@#l{Vg*v>Mi-&6KU&HP46U(pMKKpGFiLfRZ7}e(D%C&DS@A1 zdQ~kX5DUn7zrX|QO5p0rylFn;D-yQg$cF$LHh4@6qWD9}@lDIk-EdJdZj zFskpjw0ph!V2-vGkt3GEm=rH~*b$Iw02h|c^KDeZ0&e9L_VyFGt2|!gh9)&G>TTvK zudOI@2M6Cm-B{;!GPZ0nH@!L;+X|+}u1?NrBVJ$ciGh{~Nrn3M^1obz<&@{S`qlliO} zE$JsCy3ly9HdtZ{LLT0Qt4_x40a*Wvlku|*j;(4foCt$-lC54}LHll7a4IMCLmn3K zRqKNA$Z{XnmP9oM_(;=UJ%d#Wvx&R6JY@tH%$N$`t2nE-RVjjIAk->)iI4B~?uBwC z(4og2;7V8_H``--_h5_tj<3lz;AeYt1^(^shkttV-+y>w2~%8Yxe@`Z+vQCtFXD?x z4_IC&doIXy`&EWWaG_MsXAd%+DlF7^VIhU`BE)}xX!;QU|MTSOA0Pky&CAEX{J+1y zd-`7KQ9yVD9^&WIt$BY$^e8U_MyZv%J5%$OFW`1bT^4)T5if@*?md4Gpcf|I}@gQuK zGl~7-uczVl@poUdycEXCBxYl*pEH?#Yx3;A^@?#Zq5uwKvx{kyjH|ot*78s-EqF_| zolLw(rQ151yxlALk@bpnuzgj;i@wKFt*cLI)V%poz#F)4$(XhgTm0b>GH81T-ufYdza6iIPqM3LBx0~h7v{6jJa=cNQ z?!YHYTsDOgg3$TAN2&hoLo*OZsY(p&u!zvaKc(aL0HZ0oI|OQ>b~Cd@=1WN7%+L5t z-eKKwD`>mPPPaFQ7xj))KfHeOP%VeAoHZzgYt|ki{@tEy;kbTEDN*I6SZ+$AElpFy28y}9%l$hQ>W^U$srJrN=Wx2TW`eZR-j<_HH z6*+*6!`7Z>zp=Zc!_x5NWo^_qw-xm{WiOr;6M3~R8(vM*Ov#3JAC=3jzWV4)nb6i| zl4m;!RUy@W_rhD<{i-M3kamBx-X8bQO;cNRoW$X~AO6>3dw9{_ z7cV_ym*T0Xo(VywtV@pAk4?CT-eS8sSH{ZT9`;oZcWdiKz; z0EQuy+=?W(`%CMIUxPTjJa~aDVMqzz$1v>pMaZCLHO)6K2BomKUD^9hNz-Vdj0R); z=6P5g$-8Zr7QWgrrf|SkW4A9SjLXAeQclY6ra{|~#6BS*v5mk_P%%tI-|!%gfR09v z-q?<>>nGR_<@;-v2l@}`i!HxU06m{KnH(k_OJM@tnQy2QK#o28M{?@Z_HZ?ML8!4q z*Z1Ysl3KsjXw!hswIj8Sp$-sFi8a|oq3)ro!kI8uqD!_vUUW%9c8{w_%VJ}&g+Ur_ z)7Ocz-L|?4nQwPkC+Y7%;L)A4)P0j1HedmnRahI}) zQLtwgetW6B!ZZ}R%oq>+@NJW8SYsX;Dks+oowm)VV^q|gOGz_CyC5EG7D<7*kmxv6 zcj`E$V;_()dotRxWmIC#L|ZC&$b2oB75D{vwXNB%ou4e&LER=&#;D4UW3FOnHb+cA zS8~QP73qw4{dIGMxsBI>*5?i1J+v*O<#pRM$L19bh%fnkY}!tqx%s8XENMzUXx*Nu zwtE_do21veTm?U9Z5|q7hUa5R79$p~A3hSFM849eX`Z)q%1~U=@=S=xvT-~5yqunRgd=k4!{S*v!MrY=sz+p}-%$kus{@=%ck zhy9_u9(^xTFkk((nm>l+vU`!~<*ccLyFQX5#ELT3b6S~f?dc7lu)@yl-mB#`8uH;C zwt?MDwBgPLO*_!ZDoA>m(aG!yJLfr83#(a0zd9YKHO(}nc$mCzJ^@Sx%l;bcP^New zYU5t|ANCuQKD^a#1Prto_luEw^qG{m-ac*WoKXbv@{#Dv`~hylncvVb?6($f(NHjdQOF$ee<#q$S*!HDeijh>}!yVG{clG zThb8K1#5Xh{f6{Z0crfpd7G9zGrl3Vo<|n_Ffsd}xAp08;C+DmFZ0;@iOgm1r=rik zCKT9UH<8e785XLPrCTJYz3QLA3fOt=l_b9H@t!KFTbHDq@NnpUd;hv~-20gzqjW<* z3=eeIy|>7H_g#w_qczck)FX4=`_TfRn_rq7_I~0k71w1s7&Y7FDWd4B(c$0(m?U0R zWY(-uLfoeR0&RI-i@uZMglBshTYueX9 zR^_-W$D&e^Uxi&9)L9l$=y%KIY%D5e2uZ32^?eHHd{(|J?%AR}l5pUnnUZmZQBYLI zK#K`)jbwa5;?5@^2i8nb?HE?inG-YE0g>9?y?yb&p4@JNss-j(!wzW5L9}jY1am`E z4K*Cdnu#z4V^j{jfU&A;tPgf^>MDjyCx1s3w7cV#i38gMJMx!{ZBvc@lfVY&xJwJa zpU4(|KNanwv$?A51fcoN>?BfrsV$u6sLHDTa$FKsaX1fsN%$OD5%-9nJ^-*|24M4Pp?7gW%EHf)b_| zNjDCR6u40kv*Pq?zBT)SZ?_!T9r=vgU%tb7VB=b-%+yS#tXmFO;m$c%l&iyGhRr;_ zwiM0?&IP@plXipL5}93QZ?v<^%3zPrk{#kQ)IU9(cbTS~r7+Bz!pIZ9|2h(OtE^DB zPG#?!WUm6;#bGnazL*1cR|e|F#RgOe&ebVDM(INFJ5YobjB{zR_7mA+?Wf{mt=MMM zcG-LF5sy2!NKTEWg0Vi&-lG}>P{o|+uE9&MOT3s%JoLrdzwQ=mKNAF&ZWs^a1AVdf z7P(WSYjJdHq#l`5!;cm?HT=?V;?n!Rw3rJ(A7ULitQ8f{_P6c_z8bLvoUZq~iJTbL zcKHNwaGNc#uFo}l@iUK} zB_xiMqbHg*#{Y19H`za4oz;jTu(Me$ou%5a_ zTH&`xtcH5ug)O#Bj*TK4sa)HZB2>C0uJC^7E4&|fE4-fx@=7<1hw*{F!q>4yzQWh3 z#U8eZy$-n+-oFJaykDADct7!#itDoNID6oGSi47hTYDqNQvJsA^A$mB!8HzzntZ8} zKFt5g{0+~0f*E-q$ZF$%l|1E%-e9>G!l2TG(Ais*@jC!-zdvl}JKwosk^>|~{pZ{< zD{ryFidAD!Ai%S4=_-zrnpCdD)sor4b3;Z_G{;j90r~~IObD>tTdB5zp?{)-DSTKe z4ZCUYA!#@}0DPJjka<}r3Y?|j^3Qir-i*OMXL*vqatprND!p;OIk{8CbwiPvU*X}{ zPUz>WXF;>KB=Q*dG&wwG;Nua-m<>dSP<3<_NKc&9mg<~gwhS4?^#gQOhY@85kWlaE zB88V>7q{Sln`7)zjywXL+#$Ax!QV;i`cojEvK2}4YVUgO$tC<{K|Z&P$i1-C(vFM8 z=9}As;>+9B6QB7+1Skg(KL^IdLTUI8)j!$7DRkK<1k%^5(6_v~b76E6{cb&su1NH1 zVRQlUVoW@^`BF@MCX7BAIX{_?pBF{+l6%x;?nTa}%ZB;TeQ103?L;nhhtb}%c|T5J zv`^|eCakUalha`peb;N(H74wmmDvGUkFl0-^;EY9D`8JFA zVf1>r)KOhuTk^VP^EFGN63N&;DT3R9hPmSiwyoc)1@_(ilDe*?6h#Hn&N36zazG*^ zDZKbN9x3s#HEeWNbeSfO*80gYHl=dUzCkY7GhZXjKeUjnDOmR=UuH<#iHPvs3q1LN z>84u9If+$SD%dcgDljibnM=GHp{Dt5$kQcjz+OYh#u1WSFZGds;t)v*8eyO$gt^<1 z*zkuWkqdy~?LoP#xUiJGN)uB7-SHQWzt3fb0lsem`_79?qfqN4QQ7%dctL}eX>0$^ zr3d8ABTRSPlNdAKJUlnT;WJq@&5$;X4B2wNTEn(vM<3W4gjA9^#=t(do=nu!Wg0Ok z1M&hwPM&i3IOC<=HJOz&z&H`W!rGoP%6-I)#m(Kq*j0KGBQhP^-SRQXH!6NSGphT= z>1j)UOd`*~ar80c@$~CWiDNr-E!_|H}s3vwKqSR}R zIX7Zf*aNypIqIH1HpDJB)%4NhFBZ+3|jE4JY_AjOe#hxftvC_OMo5}`YzJro+ zW=4!g?3s~VsZ-)3D%y!%1KZ3ecEU`KQTO76G($6(F42H7(#fd!nmWfospmUbUdx~;?vJMw-652Yx_YeQihsXCHzWev*@7_Fr@#EwB-&y1S`s<4i|Mklw9Jp_O z{@-Hkefi<;8MJEd_aeYqLA>IQCjMx7R;Ybx9qaW*67wMyo%n}u>2K6o^klPcUwmk> z`m*%58m=s;bTYhMjr&EH_`WzErhRcd&i2LeOxy_j4gD}Y(D%jOBHtHx343v0jH82a zKaV#=y&o;u7yG4YU+gEceX*Zfnk`u0u(&SU7hjtG#uh;SbmQe2F2j5Fw{c^-BJE<@ zxjjsj--f)j^>M&uhr0r?6+Qtns2d72bECX-a z5s>c=**x`J0%h{TF37waNO;hp;3gP$Aa@v)>A<;)nTA0cG`-N^IF~wj72xCUOroEA zFKA5ML>8GS7*dmoe#429HAgAG$(d3=uIEZIINspy1^h<4nxNZ)U9&Z(sO$k59VeE7 zq3o|7EQE~Qk zgw6^9ewWl&RcCF)XJ*kg4zJL_qROz{vX!`K#P>bRYbwL|Hp;8RlLcja zvIi_(QXK+BnxrEdPRqh8B2;4{`JeYWW-^Ima`2Lx)!lvtRzVdW-A|15Q~t#(EznKX z-UAgm`v!_H&<$0BAb*=}h&7;}CtYGQQy*JcCCAOs<5^KG(6O>wc1QpmjYm(U=%FYE zKz-~f5hpDM*Pmrh68Yk8myt2}iOd(`r#w}YMj!Sa8AGk=4BR5Qj&R7R3YG3)6qG!o z?o%-kP|TPZ!jZd;xO@C{^z+0MK~#RPcod%GE+cP=yNr}47g`!`m3k7HB}3mAxQzUV z$z|jxzA`ag<|?XZ>aG%#2|IsFq5q5yA{+{Ef{b(ihjyry`CD4mWO-!$WLa18`}=a5 zii=kz+-6j}zTZu7X1IYM>12Vjo?E8C3VO1d>{v?Xcq!2ggO`uT%B)l}Ur&kVU{^E~ zLzh>R@Ry~AEj6)rb4(d}A#S~vATwD~+jg*9a4oYM5~aZFq`D~8h-OBYWO{PDScGw7 zNuk~=DaxhgcB`>Em~hmW;`w>8VR9R zGdBSSTfw3HPP%(atdP`Mf?DOoY%Qq)DS@(?Q2hDZyg>!Hhr8u-ttq?ezCB^@Xnsse zbanp&PZCyea@GlUw0Pcq5oxYei1}ezA;38V(Ct^6hNN&s1W<lZjKJzsykIt7({+Hr$(681 z%V9o!2U&?g(no-Oe8X6zISYX}{@VPL0Pry4x>`Edl|r0&L+^JJA-%a}sd%Wfy%_A1 zFAmoOid+cY>4wa3zGqPkt#p&_xSmIht8#zXXNKx{$NclGPM+Mme@Pf63X5Vyp4Hu5 zhgFZHgK%GO2wn~nDyc-5!gpM5{#jCqUJttj*YU~XYy$^vaW(o8;Gv>}V+Q0ix6I5B zj>RssStxU$qq(6|d}`HH^*$^#?gzo< z62>b9uqJ6ZTt1S=aCco~pKL@i6KFYWz>Hhxf`-Ur-$EZq6cI`ZXqfU3@f}gShMG5b zHK08?9e?r@*cRkM$_p8sRGXt1#VR8dYv3)2><**T&Y^^Sxh*MLi1`@I0z%PuoD(D5 z1u=)S8i`~q+cgFbuC0>l>CXln!yfiGQPK5?lAz{NPDZF&XX6|&!Yg)Jz0%+K zRz#a5QmzInTk^Ogx1L>{G|Os~V*T!5BGEliZM_cls8&a&an9FKs993}jHkNate%`> za7&Q+*KnIaQiiM(9p3tKBXxIw+&dLp90tH2?{~*I405SG6X9i+K=_Y$?DPo_?Cu`= z6gS3xl7Nw`iL>8YM&CVHjN@Iey{E*P*w_%P>a;`0Yt>LR9bbH)R&fq|yrw&5tGaUZL ze@QoUBE~@%LkfqS5ZUO|Xb5+c;B3UIM&j!o@CCard@HmMTu0_(KSAcW{`h9}9;7{c zYOW&23|I76%{_ZaFVTn)rL%bDss;rC|3BWLB{zVB!f02AxLn+W5=f7=vI7OL_PYB$ z5e`q(X}zv|NmI4o+`4U5{^rnc?{KPy5hl_+_6KkkX*^2z#i_>l;(eH~HLAKvnK=>H zA3;JA!3#PVLBOo()6@uJyf7H7t+~1}R|G&!&4NsaTK`5~S+0r1gQ2(9Zv%Sz9Ao`e zs+B7!t+PRu8M|&e?=rHM3`Q`w(v*GN?F)=n(!PB$fgYlrv?-8MhK{tE#%f2ew89v7 zFQ1CDg|}^%!=&B{%rTOH(aUm&v2q^Bn5Qw$EXb|jiG7$^UWAr$3pE0{^=r&VvXxM$6$;Rb6ll4$x3z_?L?gQ+0FEOw&s)-{?%sGDy+Lh8umM_DJj^{ucU*{F z%`z6EMwVV?apgD=a8einrZW{wh!SNU@~z^1Q?h;4NpdwE%}D221BuGV=dVB4cq}%f zw_7t5`a;6WKqL&&faDDpN>C#@2#}mF!Lz1ng2*)WQQ}5FXn(LD({W60S(_S|rm;&|BpP&ER&3^gc-hG(;?hkK&{y+oY!(c2B)@n>q^EfeW?WwY7&$8{db4Y2G!0V$gCJ|&K z+Ng{qic&X0{?B&yD*oamQ5C*7`6l`-QEgtm;(xsP=?wyS_7BgE66*bT@Bhz_zq|W~ z7jJ%k{_elNd-41|d(rQHdVK$$7YaAjk8fT*7j@L{cw_(bIp>GJZ1*O~yY7A;p1=F> z-TM!3fBD@VQ${_^zkK`4cOTyT^!U5G9SU>$yLbF>XVh5T4?nzn{!;C6t}5Q36}0GG z@$>uFZ{PjIty_~a-@X3u`0l&+zrOjv1FJ1{Y{C=mwAimW%XE%se|&t$iERskdbsSD z=P&>M_}xpojfhZ5-qT-xfv)S#fAVAIQ@9qvy?OcFuaX*lOCHG?z3*9M*b~S+d)I_{fBpt&wqOI zfARtv6D2a%fEqT>QQ53Ni}lXgG)kw7O8J3)BFhi-Q!y*DGXYPSZWs^a18);vc+28i2VQtJX6iYx-yAcw ztYMj$RLmNgpNRmh95eMfc;3+H`~sM%&+%$aHd*_9=&Xk_CO{AfwX=l8LWJ695pMWn zP7Q{0l4ol^*TrM0E}g@=o$peyrp;j9F5rq?V!_A70V47plHcL$;bKgriFwtRD}3 zHTAE%)zr@f38fqQVR)dgrrshaC+J$tu7{uzW;qPVdc2Vn_|XD#0>AW|xb(jN9^;@3 zwx(ojG@b^W8TSX=>P&4x<;sP71c! zZ(!4ZE##Jb1VlpQj!=}uco%S4;CtA;AfrH^dm`vWX60#+6N4kW<2bHfsG>8T_xs(6 z)Xy>It`PFPW#%5|(mFGU)3`zSbFv|_4CQzQHcM9gd)$$uvF+dq$Ge>E(EPfaCo?nr z>fFdEL@Nj9XfrWky;BCr7}=Q@Krxmqie4H+Ww7Suiz_;FKNlLc4Yg>GC#FyKl9TEx zA`M_1DAajrctia2?5LXt3zr#H4aQWvV5%%`{QQ(D)B&oE?@vsNuHjPbzJ`?<2%zpE zky)a4QbVS2#f7ln4Sb;3c(ctjh+X-4TZ_MZV#MW$wv}H`v`nGJR#BxOfSxH|oNmm# z?fcHMR}Sp~G*D*Q`zg26n++UI_^kby3|ajmS@v7m^Efz@Wxs721Z!?FDJ0yd+lF3p zNwnn)C!ed1u%`bKnFEDl^MVG>0JX zZelnOtluJhV0cXqCx&un>J)iAw#4?tkd@VSrAaN&Pct`Mv)!v1g5%+Ptx3M!Q#Izq z&~-a?rkU5AW!skU+QhJSHJOhsUh|6!9Iu}My{MK#FEI1)Z=C>MbQQ}#7I<;{CAusm zeFfl!FfRdXF$u3YNzmgpxKuyOt5zKj^_8RMw@1*^Qv4Ysu-h55Y)rRGb7@&WZD-Ij zJ#Zcp}VR)eL3_PaqKL0M}A9n@`6JR?7KU%Oe@JrLqz)xg5 z13wivPTj+200*}$uFG}?-w1j(cUxe%An@E`>@B;|T3`TqWZ~;3=vlH$EEF6$hXnBV zHg={KayNgY=ZUjpEb&1UXx3Ei?PRYLG&xs`s~bjmhp!Vnxu7yvd1tJEaodUP-Z}Ni z%RlM5UfFRQ!c9vnYWd6b&$A#%)4bTZoQZMuRD$@QZ=oqX4pH4e))@98F`@C3HG5YHGN#Q63OkbD&v($>+{Rj=CI3ePbEye9mSb zD_<{WCxv|Cln)lucJ!2x1^>E0X3>V?4GlRkAxSvw9>MKQr!88JunCY}T5eFxLsRzC zREiwYT_vf-TyTVDqT^kpWNUrP`Cg8fjzK($0wAPxj_d%wnaXBDlB9InWBfG_eric( zdP9=A9?&XRiQNU+mMo+-S&-|e?x*anMj3`qF3``1W4sbh=$dYW3;0xe`JQF%SzaQR z&`Oibf$1;Ns$cnOOZM_~*$ztvj*B-F)3x}C-jZyti&M9bqMJ~zaQC4stbiY+#=E5k zBnN??$Q%TIDmn-n0+ZVVliiOg@viKG6loP#jVgfa76C&EcCNA--0n}Qk8mQJgN2AI z>>lyZ{V9Ij`BVH%44wK7{V+Vx{V7dsk^57+7DsXG?V{Ahtc#V`FPF1_zdF_et_ zN$Yv4W^D-IG43aI4Ckke(G5kSHyvQEKnSbZFw`b$(0x=F=1kGhjTDPpwHtB9z;U-;aWa8W=RoQ9c(GSYSJ_T$9+HFLJ60)=Xv6K9C7wt4ET`iaFAGJ4h(s zqsd@W%36XtBfAX-CVXO0&P=9oXF{qUcbft$781_{wk3c=9WJ&Y&eqgv40i?j9JqFSCq%jAXKr#h+k9M@w8_ zh`>&BOGOPLVs9|&WaY`WN^L11N9qo083A}fLdd)?M43y@%b?|*-)coSeg@el znlUjC`;>UQAMqY^OOZq1CyF*4XxmVO;I*%NI8P`KBm!3fE=(3;D(uK8=?Q=CfThhY(rAhiVW z*PtV5Ilf>aS*D-+2KB_A55^sVb=DA^oC zESYEEf|`z>047?K#|2N+51&-;s})OySE9O69v36jc=GfwkMH09`VP{JJAroo{O;|` zzdnArd-n9tfBgRL=?{}jw>dvdOD>kNoo z^7?EMm_!cEwSh^uLFZ8)D4JqCz3x1t%yJWaWf6>2AK0RBi6jio{4*Z zzo8$72fFj@w!lcYEUtCHNMAagN9I`g0!Tcd2y|+RtYJn9ymVDM>(3IMnPF;|f^w?I zk*Rlp05SIsP%m)tvUx!R@n&u(yqP07gJjk1GHIOtSD-;>nL!2s_4=icsaDbw*_|2B zMPjT=!7(1m_s{xe(=#^fM+n!op@J6@gEVB>E8ewLw03xH2`SGof{b2!f-qIDuPNuH zAe%4@OH7Q#5SmA*bb?2s;H0<^3ImSE8dVF8iEk}z-Q}5Na)f=Qyl#ZMg}uFsCuC`abMxI5S7^Sr-Zb=OnWnXS zSbaaPY2Hle6U6JzNH5dGGZ-Il#*$B(dVqZK(X}b+zrSuVn!^l%r&*=Wam6@$31Vh~sEBH=mEN*eDjguV!dE1>2@{b)EQo>)RG7gi7(ibBU~ zUeQ7Lv312#<4R8A=EAyP-l()p4HRRM*G!;}2-R{;VE&~(E|V^aE>u5s7pfn3E>u4ge5UD!ei$Bjn=aH_7S}p1RE$8^esQ z%B!4@ant(1&m35v-+4agxXnzD=h2BWGC{sP=lLqG-Z`Jq^_=M|yMs$Q*H?7-cJrgC zpR--T8S70QetuTx`=>Z?haDLnqq8n_#uu>j=A6J-zF(r(|5A7GQ07y|<)Z*g-NTuQ zG}Ta@v&I&U3Y>E!FKpzT#xG*is1Q17JRcbRs< zQpiNDNs>4$h^JUXM*f8&BMgkf{pM7BCB86Ls~GMm(~NctIm5DnPE&fZ7Si-bkrq=Y zgR2UxGIb3t%z}NHHK(ZjDj3O6gcGd+S$aYtnys4jr0v824+HvQFx(fBBCxHy)Vq(3 zNqMPJ!Rl`_MZn9iUN1%9;yeJ#NOY0E7?WzC)W2>_s&p{|Hrphz9=l=$enR{f5t8qx zB4+2NOeXz+K`B>OJa!14?RTX$6biZ&xDv%x}hJ22i|6g>XyZ| zPKYXnrMhAS8QjsmvLYP^_AwK?;@gaLd<5P;dm95Z z?DZlW9}%FDPrYOW;}e1{G_7b_zzV??N$>Ne1FR5gxjgc~>i>lX1dgyjo-y-={!2eL zXHUt&HWyr(((AoOm7JU(6GAb+l>5jBimr&Clf0*8i27)_T;G9zDompKOYX%iVY(~{ zcMN>L*zZ8>M*iPwzj%-H2~NhfiW*U&esOc>VDC-l{JK#Wqx^SYIP5(y9Ti=SaA94W zJLL9?8ddQ79`Ps2Nogd!RlB+0_egj}NTf>~1RoFG!{}dk9!5VCT#D(2ei$Bjn;ynn z7S}o+MohUGo_I{QuENhO&g>&0?-6*}46bMM z)b~M`z_?xtt7jICUv!`A%@df{W? z`%+stmwNQTMHJT@EdP`}k-y@rD6gfJlJbV-f4ell2o|BaI!iq(Ex46t4b(4(MQ8=j zahQ^cK5W~lKeO;R8K0j;d;bT0<=Q`xyqqn|*WQZBB z^OqX?IOT(mcx0FF(odNSMFVh4eAgE>wrH&6BVhVdjSohctQ^+mfz~f#>s$)yA2zzz z;E9aNGL2pc`yV#ekBiyfOTqu%5dZ9?2!Ug&eNjes7bFI#dDgU%&!bG!7J~mfsiojq z3ExnCCI!Hok$Z!#DHiU&E;8(^9g&rZoEK}rjL&}MhQtt$lH;b!f#6iJs%-Lp_UnaZ zj$~v2C0`yeV$7KImQJo4~bJnW)t@k9`Hx|tt_ zhk0<#TjLcjkzs5tvZ^=7yVM)2aOp=2DqQ-d-$Zq3b;~VzB6I4i@ZNU2S4D`^nzQg; zb=&SHmDJQ~@>%zus=5a0^4V1;*f!I9$y5C8`bB}&daL4&6N!Ggd~IPY2}9eGrL>z_ zq3z)Xwos&5*3G_O`-}?Mhw0L1O}~6nuT&CBk{Vn5*Q!XV4zsAQvel{~?+~y)#V=LF zl5f%h*;E0ynB}~1W};p;=Pp|a*~@j66<8K+0aP7Lt4SV@Q_a6YLASI-u2`ZFBGo|| zN2*!OEc=U>d#mo5O2{>#m!jNjl^B93tzJ83fl5`X43^SGkc_`A&hRd^AqU?hYR@y(nJ7KQC;my(AA1?m)_W zZ?+T_d$8IDlwyz$Q(-%j-!Cxdmuz8!S-jt|C?1gvvO7GxYq~j{sfwt`NOyB{bG!V_EE^JjC(tOp&@aOmx+UQwa!cZvMjS1P zG$XSl{Az_I;g2Ru!f$+`79dTQ6Ar;b{%nHUao=s9wjbmTbv^Arwr7*Tdm8iIWt02 zw!@))MD3ptVK8OdIvLQ#+6UAa1j6_*v$+!AW>#@X%com~+~cYmIog(Eak?gn9Cdn5 zumX?mrTy@^^_=MGetnqZ-EB8Y)D*}dXp!-A%2jASzj|X_bOe9)!nGwMM8HgM0+jLigM~b6=Wif2TG8og#$i z>w_)^U+PN9fu-T1Ek)hx74iaho=P0-bq51Cx4XjGbz zB=yYJcV5pcHK&i(p)tBocVYYGAyox4bbEr8D>k5pgGBgTKn&fkC5Q1khgx)^CU~Jm zHES+x6&pZ(If_Mv`)EoJeZ8M<8?$j#e(+Z`Z8N7W)-KT3HfY7WV^$vhMxhP)t*AV< zMAJ@tN-U=9-d>TE$34m;=So%{c^F2sXnw5uw?}!@BT;$uOIIHKIxCNUClD;X&@aOm zy7Jh9wa}zodCVh@%43?5DUW`&LV5H@lk(^{zEE=AraZR018LNe&5K^TNnyNqfj*(8 zcJ2Z%2Q(BmHL6DlAw}Ehi6U*M>HP}y2_J<^a()=mkuu4^tY4rHU?1+lE5j=E!78=M z8nlbu47-jM9*?D}Jm1GEqZJg<2JNJsVe)bsp8QpZj_4VOC02K59X~&aj)mS^fp+`T z3Fq1ZAJ#4~gO~Vme`OPll*yk-ff?Wjm%@ zE_CYkA>=<>!@7CE;U8+<@b~cl=O5k)<8UAto6!zlV5ZsMxrX)A%PTO$iA!OvGIEVR zj4D~US9@Z~dc-5w@zOP9|8v%m{Z3Gcdw-!{hA(st87<7}a=V6{i*9@5Iu`E6k4;pL zh>ktJLPPdPlZNa!3JuwBd7%G9eeGQl=#PU-2E|Jz*KHc|5z~oi@I)QMb+-Uk$BOz| zV8;BH&xfNq13|j+&kk+uJ$AeOuOTQ)xLaOMo;na=#oH-2%+Ug_-_sC123~Oys!e*& zU-y=SCyX7Ru2rw4RoG*?-maTvx4OW63=Y6vvX=0CvV%qr-2@zHHg;8n2=LnOt#@&J zf8hmYSbCvxGuR+&(4VVQ{6ovuun*ih{%(_L7iL3K$6bDF0i57v9B=0;oA_{JsT($P zP51BN1B%mpMs9Qth{wasne8&%gAo3+x;uSsk(xWX)vuMLDc$RS%2i?erP4DtfI>fL z-w+9n=l+%h!3H~$UiR(ZU%mR(x38jNE(JiSTfxeP_~K3}>eyJE_olXR^1lNfke^KH9?*OUx22F#a zYX<)3c;SQq>NV|}7h*FuU1$9HtiYjwME!ITD(DRMR!kq)x@hR5h zB-N9@EBQjyHkva!b2&G|bPkSop3_@mN=NdGtWB)AO2y2Hc=SX}R&9;v%!Qb_5B~3O{^9>Ka{BdO-~PZgUC`pc<7+*icW?(LlARS; zj&Q=m{$v>X_S8JLw3o9*9#CLJMzI8QWnQr*P+DXkkbZv9Ao(Cf9&VAY#oET>Guw?UTpP(HPxpq8 zL-5tiCEQ{E@OS=uZoxJTe~24#*~m8}6hYrBvm@SMXUFQv!S_K0*|gQdRx0oKW}>qv zFH;C!Y2U`2@acmf;UuIq>$@8IuGP=kox6X;h-DGOxdCU{7t=$fpF21Rz&jfcH?af~ z!)0}fVBw5_;+&R9^Oe!_dWt*zHcI%Hl;eSS@Hnhw`;Eo!&ty}QKGP7yd4k#X2q$~s z2R@<`oS3_vJ2uuV=C<4ePAT%G7ZOMZ0~hBd-N8h+PTu#2H-Z0+Gxc{UQ}SuhMKZdb znTdi3onJfv6FGIjRG(nul)d@ULNc9zEhyMSI}h6BEYcv@WGv)64!!b36Dz3K02|T% z+uAu-tl~|Z?tIwcsedegh>wFOmaX`>Ng7as^4;a2Idt``2w#&N-D2N?$xHF zoh>)?ics#Hl2*HO3HEJ3sOXXCjrL3TM*DU4M*E$ha%sJ9t;*0+cx!)}14N0@$1K04sl=WP{>J9qKPvuY2SS0+ zka3Lsr4$%3rR&XV(mW;JGht%9rKf`NNr+B-thcf_R@jaIn%9e^ z3#O?&GO~d}d6Lnn!Z=|CwB=*2?ywneCf#w5{j&3<#FBL1Nn^)x!5rDLux4N|dFIFp zougtDo^q8GtXxa`6d95Eb@SW(ktOJ5M+) zS>lOY;ABkPfVlfiilp?b6^;dP))Cj+OD~clL`+3gRNuu!1;6zrK$YHeEXwl`{tXUiyq$lK zt_LT@S8}Na&8@cd60+-lHAy<0*E2=%@U_p@Bq`6<1S&d_F;S@+$rU6NQsFdkyD^m2 z2hn$=mIgXn5Ei}Vt+X2~b;Wh8iW7E6apcnilwuGy22Y*U{Y+LEFl6RleY2%@~# zs11bbeHqhorzPEyICzP(JbPrYq~pRmUT{ad6thtgNUR78zhGH__K+R2qUg?G$G;z1 zH6TdMqsY4y<*u{8uOVqFF#`tLBdwq(Zna~T$|(v@W1h{afSXrNA(OT5ieO3~Zxq24 zzZDh0p43u2Kq;8gH$*>qMGB_0ghR<1%E6SD($;61#}Ye=eWzYhOFx=Vct8!xaXOulB)|~eMhG*C+>RO z!g^hg5Idp&X}G`#k^!6J0pZgsR?5`?q`o=yg1a#mCMg^}=4MAzKr6(t3%oBl1Eo_p zl|aayiZm_6pftT0m>Cp+sYPwXACCOVDdN<=OU6J)WO+BU34IWG$;;!s4)>vAH5ayl z55<4pVqa9SEjm;&4y?uH^I=-7tx$!k(5{uE<^o&i!Bk&H-1>m*uG7VbG+oBqZH)@c z+x7rFR&5NjqN*=1Z3g-kTf+eWQR%*#{!&HJuaiAuB}*=BH```K;H;9+2Ea;c=9Ihb z+=yz+#ydPhggBcq*XGQC+9h$C!|9Rua)wy>jY7@!TMn2a`qvTnLdOpPD$+RhiewcW z0Rrrcia22C_5|d!O#r@64@8q7Ub#gOFS9`qZv;~LyW&;&CbtF%u-Qo58UQ34M;fhx zG!wH1{Az_Y;EyJ2z;AqEWV+1?XwZTM1Io>?l>LFSlN}otH#&w z+2QBu*PAM)(i*N|TUC{;W7il8y3M{{7z$dlC=!)=8%$|t;XV?2WKn#c%U>RGZllxf6)x!HdQM=S?sMCQvUvouR zx0ISG!U#Jo^i9Z0%tb)JD~__C&@hx#C+A^IMLyD?b$9yT4QN}0p zvK-k(+JtPiP(CFBdaW)^SQ*hoNr;;Bu$7~_KuDG%9p{vb`!(t}CHw^~>hDBwS_ zR2zE{YG~hb$Lb;#Z;I*O+zE-Y3Ssd*fe)d&jzKMCSPAj2WlVA>aC>wlZ_k@4L$V_* z(Wr#mIL|clV?L|Je`z2e9gd*f2}Rk4o1+C|+bxJ_pp-_M0fUE{OjZJGNwg?c9Aa8# zvI$HH1>VGB%_o>k!0NA)M1T8qSRND7#`3EAqcUo`qc;OVk0aFHO;emC zl}B7lYyv}Wx|S-SL>4Zcv*~!N_U4S19V5YDR8=_xHm~cs*B{OW3dQqHE+`b!=wrFQ za8B7*@P!a$B(H;HhG;sutN@~&jv)=5DrY8{L{y!vS(cA#oB8`Ih#I)`bQ%?JYiZhk znk!TFq-`$YA>N9U@{P|nXZk_Z7MtEC&IB(ABZ&ZUs<_K*7J6Vl@*Cf)l|-D_dIs|8 zow-m#!KJ(_3i)#Bw&zg5EY@6Sz@b!7+AkD1oDc^C0yLjpP{5ymEs;^Lfhe55q_JkA5eh}leBKz0||sPJ6zQv zsMr9xRIbqv{*l6I{HNnzbq#zINj{2WjSF>Gn-;0BVuLQtOkVKJz=Q!Zz2SL~r??|C zqxT4F?fm0bklLn5Kk*v{g350>u#8g*`I&)cs)NES642~S!cTdbQ_*iCZNSREOv^3R;gX2BFaR!%46v{x@_Vx0O8`7cYYDFb4(tR=< z@l-r^E1=HPd}EwS7+~N2;njcn_LXUNt`>h#rC3B@EVxFE)8hr;u{>+#KchoZiI|*L zSapM(5=*_5@uE6B@g%cFmiE^)Z>cu3lq_8*l@f&$OKu8mPRl=-B!{pRC=MkCZ`s}B zX-mn!dD=B{!1uVC682?OFt1!Uu@C>NG6b;OWFaoYlZU+d)KYU+=|D`62b8*R|>9CuIHczzSR1b=564z14+$& zSAxrE^l6WHCQH0@3&a1MO$@&itcvtPzYJgKR>sQ$m%U_i-DYiE0GGKc?|vhTyUr^6 zKZoRYO54v?S#rJdE;yFswOUG14H-trt3+ehK)Xt{bgWmu5OZQJXw0YjV$6v(P%%yF zKER%9g{CrJM?Jp^Pp^fE`C_xpR3s{C`|b0G>-t9L(c4z5nK$6MR>IG0I8|wV1z2VS z7`TS(Ecrq`EPXvL0drPu{KY{5>W`c!Ddlb8k*=KwO_d`Gb`HU*LzTA0&QX9Hm%>(nbR$ehwxLH6}% zPaJ3yzsE2FRV637$N5S>vB_7P_Nbg_!+#JUqsCmF0W1`$a`jb58Y)@pjHhL(k|=tu zNR*$gFH~P#TYBon=!q8#O^I_|NvM$)-d!mzC1x3^V3x=K;cD2%p_h18(NL|!6CAex z;H-bDn~2y^qwv%hB~ScDad!Ewc+?9oMIb*#qT4einRrDy>h}lK2X3UJeougj4;MvG z_JS|-NIdHO(vNz-&PTo93G_-YjF<5X{iyd5`B9%o9FO`mBRlH-YQ<6SkEWyEZ+xNT zy6vcMiA?VtV^Kt?e#VK2YKaJBW&T``MysD_{_|&(h}g0{`wPV>PV3*8}SYpLwjn2F$LR}{C!_eF5aLdmP~FvQO<&}-LRDydZ*Gu6Fz z4Ke&n1+@Zw?~<3cR4&Vxy!7Dt`BUX=St_1o1Niv7G{uA0v}@kWRx(vTwrfUAV9%qb z2Q7}iue5+^$Z^?WjNpq1J(MT6hkcv(T5t*;S|&%?w|PT|8lyr`d)5XZXsh(2#Da75 zn3PSna^GfPTLHT+gfd`$ulA7Z#rp$~)wF z2|BM-)9@@ltdRS|-;dmH4&U2fJpU_oGu|*q1EYkR{Q&{*)S}eOZa+&cLzSb4fx@Pn zJ*h$?NTy9W`F(7 znd2yGSAe<0?eNBkUT39}&XUVGB4GLhQdOgNR0b`cH0CUl3#_1J+Hnq>)z3NT>_>pfwyRop zTJ7gvf|4BzkkbpTS|*&<9jcZUt@WVlFbm=?e$}Y;0(MDR$WuFFp z*6b0|CHf328I_>$C?fOh5l5fJOZO=HpR-5N?*td(!Cx3J;}^O|@r9w!UNE_C^C&K% z&p33YcA;)bn=!SEjJlu&a*u<1u1QK$BSf);3;VDkj&oT_6Ra}m1svIj4cgSYBInnA zdBa@b)gov;m}Lor_F>Z)XkyQ$bnOZpO7q+oVbZRwNdY@nnB)>r3v;As@5ma&_GeNs z%OSEq+)hHbLce0Aq(_#|jHiJjTBZ5i6`0p>N;!iJ7>*@)nBGlRL8bG$+SYGe!#;?{X0o#dIpzTf-?fJ&}sj z@$fL1C7Aq&z5GCwJO1uzjXrQ@1~&GE1pLf(UKBW!M6E997}F~(^Qmh=jqHcOReXq& zbSekcJ#@sHbm_LIUuWCX?*tm97y4!RLbpBpI3h>0^l8MAGyRTGkO?Y|;djlu$!9qU zI8$)7R_t<&@=FQD=ue&l91NO0YdV~W`ln7BG>tkR(a$H?oz0sq$9>N}CvY+k0^B%7 z)M}m)`%63DZxlPDO6M`kg?b^g_Q3U+99eJ%Rl@v)-5yUDkXwZN_YI;I2t<%tJ6+Wo3Ytn% zx(Y#R@Q*@{Z~WzPTcV$wdSCB>$~UsVyS*j8Crk9B^*<`V0TnnDVlCb%#ag`OVhsQ^ zKA0rd8byA2MG|X`3XARzS^sO0b6BNC?4hAPnjVQ_%`aW7`E?d+ekTwty)a(JFLbfy zBT8Z|jo8JS&nSqsc(q2X#YeMPi#NVda^0r?H6-ZK8+oc8+#_8_-93fDH`qzJ9dwp=}*-3 z=mCb|gWf;v+fXJt$}zumIp)_{j`^KHuk=E{3}2Y!SR9edu{`1^$I^^Uj``IJIp&Xk zC70IwR`qNTiie(HV@dKe)6Q@bf>oN#Qu6YSiWv@Z+BQr^aTmR84+QYk#xF1Z@Wcx! zb@SMEK%URdWTv>H) z;%tUNxmo~lDV}N3QiX&Sdfq-)+`cEZ~I?-5K1H^m6hax3 zqGpcYC`>lL6%8@;FZ9dsg)TaML~gR>5l53P&B#nPzgl6k`J>5X^BZ3%xo#7kY+X8IO(Rnio6RH` z(YykYIF0R@XFbcYItkW<7m2G+hwS2Z8@aVw6MPGn!Y-zavd---f_wrmKn93q7K>=nre)sv>$mm$J_-%>Wa3=s-~phu!W^Gg?K zew_uH-w6^dz0fbi7rH?65xGFiBaQ+s&Bz3rU#$>m{%8_te&Y)z*KGo=?>Rj^WK_7b z6)h`)2X#tc;Rq#TZlaZ#FMXW^#fy|R!3sjCZxq^I7-AvZgHL=LSz4#k5ulmI(1ShVuN%rv{xi~*6mM-uOc=`BEaKr5E~@MX^%vC=9ezd z{5s1szY_#ldZAy2FLZh4BXW6`M;zr@nvuyfzgi*B{Lv)O{KgkbuG{1p`4aTtnRE1( z(hN&%op@0#oZ1Q+`3IDhpAOli;3h_81-S^!lBm~o&^48_Jzy51|AVHqt=jy8$e#4G zEQ%4R%ZHlYShrYSk?H~n^d7tj@`M|1+cLq+j;R+Q%W{4jq&elvN5{G4iVIXPuY5}X z5gZu+%C4tL#Q`bN(`k_2jKK--pmAZQc_}(f_NZ?LtXD;>)2Kr&2x-8Svjm(VwNoBb znG8>qAQH69VFJczL5b3dGtFgEgu!syVV8x@bfC%kU+9{sMJodoixmw5#C-C)3Pjvf zpJ3ePw^f_p(<~8<$5fy}i>jWn25BeAqM|!&d+TyM%%Tc~6GcF3GUyYL%Ond@v4`+3 z-l67C)VYR@hVXaQD~LRJJ@Y^H2jt6&cES33TOZ-*Q-o(TeoR1mz@FfEX6W}cPP?2; zdwtEK&!DOR9WqzT;)Sr&i7GKE1oAS&P8P+vYuITv&~&Mg0DC!8ITjM2O5NQH3A~6v zlkoVbGSEa3qsPM_(A1q20#AV^zf8(_{Bxm<$2(E`_80nP_(E64Usj;$C6ntmWqc{n zbhn0>OQ9z0^ddt$r!$utkEb%LZyl##jjZcyL8kHHr^E}6V-zmbMzwIgV#+?}F|OUd}|=C+||IFrB~l&n%6;7Uq; z8c?hfsAWYh{2VH0tWBf$DSX(_C){19q6P{$j;{;+SyXA%gg$ICY(w>AXS129`Rvl8 zdZmq}RR0Oze-xVy;#i+i1rCs{=XU+t4&^>;mMq%OwlYUgKk)r|{SCZH#L$jkx;5$7*_!k_fkNqpei^>dtw|qI3hks3duYdJ z6hb@kYE5V-KKhkhTJKxaCDe3mH;cV7wF?&|r&iI#VAh!XIW#;~XtKG0=%Kp>rT|B5;SEBmZ=Q}tw_+QwB#*nO*^v*ogS{n3;}U zJ=J77iV^AG8eR}WLaG(DTEqGO{@-m^=k4}D(N zK6%n4&)+`1Vw#_)wcjY$>V|!pCRD@PCzbPYzv5u5I|x92-HOfHzw7IiV%Z<)y0T&` z)kG{M-v?C?!FVk*z73+j_O_>9N;AWzrp3y4jS+Q&uJ#d#itSQ)n|8nYpk2aLv_-W4 zg<>iMSorjqiv0s>b{Gnni}3&FAKs}Y!{O8wRQBc!``w+BcWY;F;9Y-Ie}v@Y@f(Fp z%x^`P*pXZlIzuIwn8O*8ON`93N7@tS3L-ro04P^f5b1?>=8=@W5iZ>&=6}vEF~1Xh zVCjW^8NSe6Vm=~wiRBSTmspySxy1Zxg-gsI{YtL$2e`zR02av&Mta1Y8*H_}T<;57 zgj!5pQ8nzoi%<&XvbbXqinzO}1{D_aY~4Llc(;_fvJ$&dW1tJDjgbqf#!_8GYTP63 z=&%BrQJTQY?K!@!un22$79Zwusp4N*i>COnA>YYKv=%e*VUze|&LQ^hBiYLAkBiRprqcFGpmLm{OL@nC_fj~J?y&{=gdu75ON(2JlJyLuMb8Am2B|YK@ zgm~%Zmj5}MTYe`(4*Z4jGJc_(TU{KHn_FEPu_F-TtU)F;v^|JdE6go_^eeeO2!TM_ zUO(efB)(lRIdN*5z;YOaG)8eef!2Pj-z}a^9wPtjP$}ONIJW;?Z;vNX@Zrew%Jvd^ zk1jD>MTZ^tLKoZ`C}#R%JsvMOF5QP*{w${aW2$Az6Kw@KzvA` z%~y=b59Iac&Jrrb`YOe*zG6gf&deE`Cw>4_&j|U75m^y-c70`NGqYx&e@4hxjL1Uj zL|9W+^eaXLK^`h=FA4M)g%Q!he#MEn$oj-sk!<`-P0%W)&AuU_Wd_b<>h*%%z2!iZ zb%0a-@1_m~hmBB}^qZU%9eU~}#c*)8lZ0kL#}6%t!yAYdsxVO5DR25s<0o;U9k-sOU=)o{TEU3?PK!0GZkp&U*jq3G6=qq(#P`IB304 zUhDNsfGO4Q7pUjy>EZPY1xyKz^yvXp7mLsw3M!`}G`mxcZU-u`aySHTAZydjzzQzVP~nW@j$xyPR_-mN{*6ESzeDBczkU(DD}3EK*t91 z_ei}hHeP1#+<_f4%j7Jxu@Ra?0M;1f2J(VBZ;YGT8HyJ%dZKK@4k+5tR&*D15x5(BAZ@PIR`TKApu!006)8F?z(ZeF+p<#SgKAr3#n~ec291{< zo%BEF=%n8XG)gb@%kYIBo%9iTbTW@vX9I1~(~K-S=~pYFlm2LmPWp{6lw7w}+d6a< zNS%TI+^yOc5^J^^iz)AoDGO5Ab8=EVqTMrEvCe(iZK?T2_Imi*QNvuD#uAZjbbCp!806u!85<%y?6q)EjIrL?N7r#+R1-})A zXivHgCuBm@^KpAc5~3aBSJerPLBTEIA?mZY;xo z4h1HZ8*-lUxMkNL8eOufDuD=kx@|WrA~{qVNJ4lhYz4U4NNCq7F42+rGlwV2bZ*|? zfzsfSW-&e=m=$={PD^E^SBSLkEU^PI0 z;mE)*tyiQ&rA5@A&c}SHw3HqM@KoRi$&Rx};-TV~eyI3$K2-cpI7QM6{W5%^A1YlO zksm5u8gV>S(u@LbFw$Vfq2eD*hl=0$LdkX8p+ZJKmQiH$qWoGqNR*~EI!IONKIJX{UP9bP}Q~Two!>!|`i%tJ?7Mp%2&?~*rFT)qQ*z^&(*vuo2Vl&Oi z#HL@Z5S#w!S8^RbAiK3W6M7{rdR(>gXAHM)Xmr(f(T_o6MfB@7^8A+h-gnp|I_yVPSNn2SIA`e2-4Ua+;)?A6Hh`c&_PkAb4Z zAeVl2+@LlEd5!3PD5J8(Sn;f!&;jXrg=1Bng%k-? z#E>)!oCt4nq?7ktge80giek&cGwo{KZV5+mEF%0b6h|SD!e%%MK@TVqZEyUwSm+dg zmy$~b@cOs^ z_V4_1B7B1X_lLjz@sGcIm1@?Upg&A{I6H9|MB^M|NiasH~-JC9^U?y zNbH$r-!O3bLlNtcu6LsJ0$-GL!gyV1(D6=Ghfh1^dqxXR*EZ0kKNF3A#K(}-=boTr ze$gzL;`&W92xT2Tb4F$!F$1<{4tX2Hg=$ZdIOynS}juWe&=+uMW zdDjC5cff?;eZq}lZSDx*>v{n{W3v9?+dsVeFWB5uiY&_sP($z((lt^A;+{IhhEA{!JVvqsIH-#E;z-eOBJz_J z%WF_Tnvy4cT{v>}`L*83bj0Vl-^~p7d%#Wn)7PkYcsNs6a%Sl%`g=wSHhoWWI>@Sy zpFMopH}+fKz2&d#Px19s01QK^(kT^uyX3`l#XSEkH(J<6YQ{a~Hntb&8$F%h_F1vQ zq3r<`PKki4^Sw5bBm}+|q2!`Q=z6liw%ip^NSiXXE2+S*NH{8YP6tWj((es-%n)p# zI11+nO1>3crTCZFVT}RqsP#6p{|6E~3~`B;0y}y;7l9%HRP!&O^j4tef%mt<1bW;! z?7T$*rp5MsAzF*0hyRF4pzs^&^m*R8d!@n zn{Mh8R2~sCwR{!06=0s>1LG>gwuVA=d>g_9sn@|32|OQ>kMIJe47Be?pjb&7!}|$k z4{A>}`G=_4##-~newA_G4h~0K<_N#n7|jBl;$!^;dtPr1t`Wa5-YSJ8jH6nAPeCQaXO6so@8in@J|Q=w^cDM$su^@^nIx1fCbQrmAS_KS*AX#4FM zg(0i^e(CzYUuT8i?*tm97y4!RLRa~HM6UDa5l5Xr&B&B~zgpoe_eZ~yD=YnLSUUu{ zR3m1tPuShif1K*`__Kvxo03Wh6N;crRT~c93>mK1f3xfNmwR+kqXki@qf;F>%k#hX zq1n;m=u)$+Og&_+^@~RhlXdh*bx|KXgV^&8p7KU=TyY3nszOlnm|RFs z$%p7>`2kXw@oo)?sm50AEHUR4k#f=*M`ru$g6ffSE{sn2j?G$td*jxO9L;^w1NmC> zE~l5u+x%XXTCWIY~F(Ht^-N$aV(scDeV=JCpqAKNH zZ2+i|us%bQj=r5N*GSRLgmQy2Y%H;iM$7XtmCI6>f*=$*h4)tCO;DjjT9+7YFOgWB z1IBcgGL$Hwtt`elV5=u)3MWU%VU;^9-mB}&=$HDRd_ zIj!sq?A6mxi1xBLY$e`_^8)p_pI3sA?6Ix6F&j1}E{z2$N^nuPPZB0iDo;AoP4X!a z#4I3A3y~myM$_a?VrwQkq3JIkPHLFgo*tgq_rH7i_MbO%qsEO-)b2DZe`biD7F7$Z zg^hforP7uOTgcBo%`E2D@t1QvFF663>)FoGu<`8NMH6{(iPh`n;6gy~Ox*LOCsr$D zwpl>12=%>Q4hR-u!`Xn~r7UX#YaS3Z>ZgEUYby9SA_#smuTYE#c86vd5iFuH9~7$z zJMoBD8&CC}ycI})!cB#@!fzDb3cnS-6}b&W0PcC4i0rK(BTT*ty~3btYoAH~JS7K%xXk59~d*NXC>G2e0b zs;zbO4g$3#YP#cm!23;8mhRp-f*w9 z)mTYcJYSW071zikonV6^F9lSUehQFj+@aUu?O_UJ{cb*w@N2JGm>VZyipb_S3Lg zTb0dP+R&bEWV01#ijL@5L#XdF0sd#d{k4G0 zlArJ8cbqjx*k*pdC47JB^qY0-0am=701RV!$JZDQ=Q&@e=`$2auSu2N$%s5z9;mhP$IkZk{?e zP(jW63!Fv9vphP`*0MfFQ>-$|IXmvT zj;c&IW1TL^w-1=4EZ4~-gTZ~ziC%O2e)NuPWfqPmdf&BdNwruZbmoLaB{_K2#~rDD zmud-Amzb?ky3Fg@W!}`O0k^h)ah5SS!7U=7turcHgd0_G$T2eQdNe=`F@BfbOW&1{ zYS%2@^~&U}jewbMQYSbZ2L)Pn{H=%>*yc1_EVhZz=bUKy?RN51TJIa11vBZi23xJS zVh5jQ#TVS|tM=dAir?)1t-!_|NZI2hf8FR@@ts`$lu{a?`;DPRfyoK*P58qY^vv#5 zJYp^T@@OS-bu}I_nrs#JB{K0z*!OD8VmkTD0_(G2--YPJ(w;2Y)_=dozNYKJ!WQjV z%f!+e>&RdguLMH8>|vj-91N290Bc~y3n8wmTmk~)%&Et7CGeL-vQHoAh zs4Qc}6)MrANc6E5R?0=N6KX!Oq>z4r@`37#66YKTqqL(zCnp@#^&A;`BB9nNNI~os)HQ#GgK0aCPq>zgH+Lgn9h;SC7vjR z4ObKn;(w;Ua;1hJblei0OP^5?Oe|*^J>&>M5F^|T)pPa~hnm`89g%i(G*>;ayf%qHlhD7)B)q2&MuPe=7FS)c=!7nP?4hAsHH64xs!hGERD@Q(; z|F>o)1>x{vrySV<;g%J?dPFP-GbG|*OBX3baGM01KxfIGf`8>95eJScSipp~pOf?? z5%fL(s&uC?5!wTCM#cx}JK&-NS&mWTQ6{{!n3n%)7VNl` z<{7jd`)``RA5j82D{FOjC4%MyeL^z4WhX)%E9Jnw#C5VujsEGo^;aEJ{(YIoX|rue zvql{l2PC8F3x&(3B>PTnHwVIuo`aT02?f$|ZKDoU%XIP_%z{r%i&WP_s|m#l=-40T z@McCG5);ytY?_J5AX1vBo$5x|fp%b80Qx|doSV@y={cZgk8=sn>TAjVfI=E_$$d6= zXb|thMrS-{)HT-KS6!Do1MRIXO)@82gSL(gpsDv|hD{vj1|zcVE|R&V{2 zUmy3UN6YM-t4+E)tCnj+(+30@9dsY&N|a6>asZ9Hz$8Ob+H zN==N;ID8wqPDN2tVY5?7eTk1`afc(`=|xkTcCPjEcTd6ShH75XCZFOllZF{{)`*|b zk~zPNm8S$nP;{(%WhPQdV&~n!KK7c<4zg!ntVJnV$!g`qstwSccDvLf>(ABGdjf*R0u8#<#XPsA6M_858QHHpk6n+i0FFQH?R>TqcfL)Dk{2 zSYX1aA%-_3jW1}6;wF8<1l2_JiFs9usd_~dYza!S$C8<5N?UV#FJ(k&Xx10^6a!*X zy~q%kT5up0>O3zxd#FR9vXiPnJjs?5(Y2UH{6V22IoQGs zqN;ASu6zbO&z9B6!*5jj;Xc-?akyN1gE@;y(1Wd#XjrL89jFX-IMS~(NQX#J9DaLW@S({$Yl%PrndovloWt~_+B*s2U!y4|5X%2O_OM$44g za!Y{{N!YYBTZwySK*C`0$ad1orXgIjX-eg5RvAmSTTg)UFel2M*rX)l<50LSyj4^VMq9xpH+ZFQm?EX>Y0fxb*~Kl? zD4v-jHLBC@mfHE@^66?ei5fc}%PKH_qbO_Qx4dR8fahJ&vA(BqvR;v@z$nSKrHE~+ z0@G85cTY=;Tm`15DV!eh78UW*tHAi5a}^lB6Sy_K&@aOmdKDNSkynA~(}>|(b*xV_ z3N>pZ4OUcv@eiit8^7^|lIylAFeFAjB1R`r1lL4d0c+oN=pRVl@7cv1PF$J!b6B5; zw`Ok!;C_$fo6CHcg(Yek+OxEDI97b1!z{e)fta9y&m|_XwMwq zJ*`i2ktnKO>yaoPR0La>E*|_kiwD0GbY%{Rv82&PFA8$LL26yFY!#;AhNnGh-esa~n54jXVc z)4M()`Bc}&tpp9@*;U-$R47zcYHj$v_6?HGBpJ$@B%_OlaUaLChFsdU1UUa9gOs|#;m^|(+i{gK`&`ONnl#UbXm;t9T|!w)#p)Dd*A z4qLn;o%wsFgP$&+`Fm_EydZ^1#je*A@yL%?e&WZ=eBj3$fmrEfei^>Z&wC$@pZ9sR z@w`v7vGd-qR-E_#Xgcrx#urGc+s=Ao2D8no)A>%%wKeB^g+p*p3B|eg)gy89rp8yJ z0qvJMxhqiO2VRvgN2{S_>cw++?ugsiAssZ4JuceAir(t^MCBab@O)jpxE}$H+OqTa zarJ&1^Y?kv&fkLguobO!z@X57froniYn{v_?uDnMr+jD|Z~>HJ8}Rd>4LDId z;hKhRz_~FkB!+w#;Hv5u{eO9d#10Lb3Dna8ZO(@Sb;6rL0|0_|_DIx3{L)nszs|ad z-wE1BdSSebU+Bun%W44dlF4yMMZkVm-WyDC z8iGy3*UK)e%3hqq%2Hl;N)HFlbg|Du>DBRFzp-~GST~1-vRL;@4^P4Ro{moYS3pKpb1rlpuuIP$}t=zn4t_6}WMTs-^5H74)7s zAb9WGZ8Mo=>`=&Xy+3{kv#cLA@fC=U{PWQ$QB1hoIv}l%Lt-Sz>ki!9&9TQw;mPec&-^X8(PuQKvErp)>_UDaf z9ge>apUJ^D<}`mHWJ*hKAfnBdwA`HTP4^B|U?|<8Eu#A=Kb%Inn=KBKgp{Bm0KX+5 zb@1f9p(wd=oSK2n%$H=erCC5?{FVz9a%}>LpT*#l93eVHl;&bb%UjFz(C_-6=oK;6 zTD*YS^xbLzbI-EUcOOETWq#w0iF%s}5+IO!LAS~@22RaK3L?x1WHCD92&n}|5vwJW zbKz~)x$1&pP(=%6doxpGd&{U3_JJ$?#SYnPd}9=3GfpXHZ&9auAz=lzSG~8?X-2slXIsZW2$6NfZb2f&fb6WWR5j`ao=! z9NFR8Q+uMF7j$vG8J6X$GbJ6t8j}92J+I^y5Xbyu_pGKySTn7;??90v9@oC=mIBj9 z#VqcLvE<-WkOYATC-D!tJw{w{(cCUlZq<8={3xrz(l=^wfRcbz7;3P4s5?RT+_~Lz zkpY5umo$J5K+c&j`(LzTCQ+&m=;RdxG(+1%CRcP2g-RUpzz9?_dWoe3VP`j3`W#P2 zDq13o(^KmU&0s!LwVVM>Qq|l=RG&D`3UA2a=WAdzPjcpL<$o}PvD&74BW-S2h;7o` z3FyuekqKWQG5tni2>LC@Rf20I13IBH!2a7SvfT{0lNvL6gT+Ef``hnI946+f9&n>M zTqT=1ToxvCxDid{_^x;rzRB%nABo$`B$~yMMteEU#O!6iT468yqsdpRM?&u|f5cMfIM?RsfXIuoQJDf5*_3GNYNjCcwuIbgk$L~@%&Kj-Y08wM&=!VEOgEJ7(0QfN7N$f(u%d})9xestxTcH8uv z2&}-FMj5yX%HwW14Ak}^e||ausR4623|T$s-l+V9v4p7v{O$*Qy&MMm@&av}4mbJK z$zjMtEC&at*5JWC&d&1;52gWmy;&IsS2&FHi|fx+nFIxo_iMnl&xK~g&X4-ebEb3i z9Qx^2*zJ3IP6i$gblKkDVclo}M0FfBS#`{QU6xU*G)q=U4pqFV8>x^q|g$b?k^T7nA6|VImg1X-*T4O@f9GC@ z)+M*+0NQojQ8hL#*MEKf;lKa%KORn}W`A#J*9+(h`I6B|pP(z`OD5NC_RIw^murjz zFc0~$!CBp3&@t}`!McPjLuLE?Gs&*^X^iHY8E=&`$<_md8{x(v&zo&D$dqU1pJ8-)YaZ@Js}8a}J* z0R~unKYpTPn(eW~XLYQ&9*M4IzjR--UuS2t-w6auFN~M*3*F!RvhZ0inOwK&X-oL5 zbQ+NbxJEZyZ6dFC_4aVm9NKCmc4{Qz^=cBqwPA&ah9vDj0rUQ%Ti%PQbzpyKYu<5!vaowI0R3r$dz^CxlIS$-VN*%FVB8yN-vC; z@eBQU_7QnFnDWYT#4#M4W@O=DzgiIv_D8>xOY8kVBEE9im#RDy9a|a8!JHeQlvBt3 z&p0Ozt&|F!(xfg3k znFdkp8eJCzxW%QjujbML;kc^yR5_UsoP_j;I({kA*>9>`^${yk&qqZ|%2k!9!r;kc zT)C5~NS_8pbq+sOZu&drI5u5Bi>30R+%3mZWgh3SQXAzsu1z)pjAfc@N;VEU}~Mnq`{B^zwB`~-UboCuYVh(lE=fWTo@O5)%(wRkqO)T}~bev~x9 z^%gr7S(}Km)Ebl$MqSW+XkjxI_&(qc3;3T=AcFgyng&N6P*3#Y)5@|9Efx$%&7BNt z#&%`ZcT^R7c%m;!s`0iN6)AhapHh(mSky?HQc=zRI{q>3Rui8x6)v6-K2zh#7@9H0 zQ+kMqm$Kxz_A-~26l4I;XR$EvC)CEX%5o4f(j9(tV0s|`h-BNd8E9|cctBw=OlPPP zS!;bcgU_U9)Oujw60%6pAt75{EV3w|ZSH_98lZ_JnN;rS8)150|Mp+L|HJd!pB_ZS z-~9CEPk-LiZjV+R@$Wps|DS(&Cqf^|z{w00hN%gN z{A4lN0Z-bX@ROWddc@Nm;-x#e{Lk6R<#&QtOU(i7g?<^n(4Aa9B6o5f(}<&!3pWB- zJHFnWTz<8}$>onGCzszSe1d)}PCkEmAcha_XF;ypVo(>bLZvU~jVlh8toUUVeu8P< zaR}pZ!b4FKW3k#*`P7Fww$c%z^h>RF1@>EuZyMH%-^x{7V?rx&Pjx1w68YK3 zj=MA(bjamrnjg{3p~jRk_fHq9#W|bJPx-_4(RlyVnAR1X)jg(#>#h(pz%IvPqvEPA zl;Ii+k1baBMgKicAO7jLZQK)% z=pMhyaptTt&v24r8#}0@F+ykr_NI5QBll2!{&>HCsa)V7fkkbX@GdW zED6}u7^@TzeSMp9Z$ok*W>7g~D>9?%Lh`W&-r4pmJ38KC6b-+1K&W|t7G#na3vU%} zyon2R(=oOfj3->q%Y?ZWMci~a9a(*NDF&k%5zIxox&1=TA365cJIYFE!fcOL_<}-! zgEAW(poN`kZ%kM{Aqk`Z(wH44cNcAm0At9(J=@FGYboV3RPA@g|jyjXHW_&aSfZQJN)8-7A!mJH(9%B z0u@j?6pkV|Vco-{2udGQpd+tF9(L(jj`cxU*S3OJozT#^#Zz2Xf9cR5smV4a?Gpo+ zee}ICQf#!WNk*nAYw93_%Q`piOy?)(yx6p$xUSiAyd~OS_I`;g$$Ba^@ttLLB*k{Z z89-FX-xKc?BeYsRssKY#74M>LPusWEU{eY>j<-0{`naE=<#$hmwJ%mVvTR~QCU&Np zfYoSY_*7*Zgj#GyquNAJ*mya_)3_4%rr?CAE8Z^G$3J0fqxwCe^Eg!29{M206Gon$ z+tF)BeUS+dM!7isg9R*!!ItDh8|d1Os(DKk6gS#R7K98Ymh)j!*=nz~!x!^V|I4?p zUTr4-QXL-(I8abwhMS&{cf>|nSJg&hZTU@W9w5OvN!LUC7|mS$AXxWem1la@*W? z$XN+H9d>>oS`jTf=zPKVsP{9d{w)PEIgTQ# z?-Ev-cC8i~PaFH%Ag&gBZk2~)l|Exk#cvdm3BMJ$d&{WteWgH7tHhwtS~-L&_O$*w zqx7Xf&YtGWhjW=sq%K@~Bz~!1dLYNIb0Ej>1d62>`epb+59IiWJdl$|EJcOp?P*39 z$nmQcfgFD{1#u&_K`cB#6(F|5ua3OvS5~Mox=SJnO;+JTogW;7;5+nNRjBc%G{`%8jp5OfG)&F|+ zwe8-+1Wt6IiQ%y?&{qdw*}WR^2{qMpxc3e_lFfJ|D(!yhO1ocYrQPoYEj_)^FT)qQ z((WU2r9A_nqSB5j_W7W%UNX6EQ`$cgef6SYNuB!KFUKM$3IK}00KHR$&6j~nm>VC0 z;VFC|l|r%CP+6o^6+>?W{?7d=$q6Y3)uGe$v&uYcUDe5$T#LGzOlDwuY#j29fUuRw zC}*=GjV<}H=93Yt40kO`%7^Pei(zLYB&8nMzJO_F%#k{|cel3SyI~shrb(q~ti(Iz z;eX-`JRA-eTl)w8GA#YWl9^N&)-{;^UsFbIN2e4INk3pUut~26uvjK)tXDF(?rz9_2B_U>F zF%jZUiZ>~=ka0ON3YkC);*>H=uQ<6cL@zAJq4=kY8WL=_;G~7Ota^P?8FEBov%nkV zIuO1bk&8oXHy_e9AL6*-jisK6R`S=B1XNItKwV1ro5?||KBu-hJa#*kODShHgJCKv zHdP|8f)n6R!0D7jDRDaAJs}(A;645V8w}{o=>XJ1vCfSBGE@T2Jd*z+FNOftgt!$* zOGf8@!Y!ocG;<-_h*N28M@;x4<`u#rO50SdD*z#KTrNT-3jT@tie*@m&uY_IP&M({ z%5A5pB3*}g1u@hL)XMpaJ>d`>8q)};L3zMG&~byoXeJ8tS|roN41>#6`Z!z-aS@-N^4H`fkY~ZET8M8z_f+F9bcp{y0uf% z((!o%NFri2dr>fk%a!XPn?#H3-@(rj7{_)TJj3S%z|?pG;L@5iC12)dQUOYybQ%pH zN%Uc~n-ioQGga&=%wPnA@q=fXZp;K)STi{N2Ij`VOpyk5q?OQ#Bt%3L1&{%4v~X$}E~E&ISe|_t zCZ`q{EL(bGDNSy`R7`>cS=-a#hx~Pxc=kE#+9i|<3-b)FM+givlliG_pp7XZ2Aj@{ z`3MiuSMZ>kfX4N!Bc6hP&I)!eOK=;tHfmxNn`>Z-xPdJr2__lLTzbNLuyjF-QuuYK zUIpU7+k&tit!82c%thA-nzIIT5zddqtsjlJQ0cTDHcb!$zfnL4{FZyYsRswW6XK#H zBBWQOTu@bSJ9Gu&LdD&>wnSVsd%EQCNOa!%r8{r^Iy-OuPT+?0Lca`O=+0Xokvnfy zFD{HYI&agAVtu$kgB6Gi|KL}0X}xc+4~NY*6MZ$G43-Q|yEp7%L^zJ5;m(Xsy8z|S zG49-Vx|a+L9vviD$DSvIyer-pj}7zi#Eiom-&V(U0-Wm+={^ZbZ$=cs?KoVdcXWc- zbwk3emL=<>?3@skyPQr*@>z%T4Qntr_)6-uYO%xf)A^O@x;P6f${wT9 zBS#)E&2?jLpKQ=Y;kokJGgsQ{K4Rwufff0S=r0%y# z8^Eb+phxB*{iGG%@Hkuo8qK(H>u*W*&76Y}%?w6n(Ij}btu!$A_;e3* z?XM}vHSspRktuD4oSD>SDFuW&HbAt7%s7-;TER3KPJjwu>fGHv4CYX}@bH@nT_p_MK@JbKCWlT9b@gn{srZm^kEJfvC!fM$O_9fw0J zsRn^uYk*Xn8|kCrz<;O7aK@C19=>7uJp2|i%A?XMYFZYb8`ij`vJWtD0qUx_AsE`p z1eYH~Mr@6#?uFSL>^EW#=eZv3xJAt)B~J;z$q6ZVZW&gPx-Ikit@-}sZHZ1_Gq2xa z%q}<~%&9O_B`>-aw5v;3SmC7*xy*?=C7=->qVw74O0$f^sT=KWh3%G-ME3a1_p=?_ zMI4-W>oa^li;{0`OP1TWe|V)ls%xHxC6uJH8EMoQv z`a_DWFSSJ8HmJip^}9bVApaKo-J9i;ZP02Rua_`+#LfstXv1^xp?>F~pcPC8SEXot+7o`;zCAj)!`#4u9M$&6otP#z?JO$9;~#=lm| z$^DVT?6i9g4u@UWU!Yu_WUi$OQ#T}Yt=U~6O2;`s6mTKPxpDXKe&5g$st9ZPjY2#0 zTTwgg2@-tMdSof4pMwciwwhT8VA1xVlghppuan^2?t%4)!0hCTz zzfqjBek&>^Eu}46%xKRzrf|5uA}J*}<*i+jUST=OsdZ*bl=aq{32PNvbGlOEf6hvY z-^t)AYwj5@;}^P8;v;gUB#$^MC22;Xx=p0P3Z=w9_?28A)QfYWGhI?dK3%KqrG9gx zGrC51>Wf|CK!%nlbH?IUYL&gF3tS#V%Ysd<(F$IWiyh(aPNRjcaDH4#Te(7`^)>oG zBIwpU{Ns55~lEv05&#IRK&P?rk&;~7EeEor(jC<`2KZ6xQP0<`c(R+bletN~lbZ(ZMZN=S`oH&4WqgU{(n@ZowV zPlV)Y@T7(qwZ;&7R__Z4)O6Z!27OL0NM<)*yW*+T=HEdcCZMUP_JGpj3@vOW)3wx* zOb{WY4(BXt2r9s-<>f}UFrtWLOgv^k2eAAaf&*pdJ7oHMF%iDA)98c%7Djk)%qNWS zZ4lS~;qTCw<`-C5gCDA4PJdP@Nir-{k|kGq*-^mz<14+8rP}T5R(in&+BGSQ9uTYZDo>D|9gsf;75OcK(g%NCv$UZ!f$z+@{AbVZ4x3HuZ5v2HYs3wR z_r4CK+Nrhg7s^s({clK>V)qwuj2jqpjs6~-;oXsXpq|ffX$vI$%aL0i#a~|?G^q{;wIeSR0Pt?0g3r{(AQTd}`e?XJ zLiDB6!D6)(iS73;onTEp9vcCfL>tW*8B)}J4gx;>*W?Q_Psu!kl07Oq5Q;oR!bQ@W zundJo*cps7h(=_3m<>-*S-cTtiF2HsGvsF46QK^>$gE-q6JXGUf1w8d(k{g0 z`iM4pI~zr4zr%jhv_f{t;Awjz=9?5-V0ZvdKEacgZ^C%uxbk<#JRrzd0Jk?g4)=5e zJJMxhz>mOob_-P=25e&MKW@Qe88$kRm?aM&{#bBPOsAplgyQs0Jp@dq6ZD7E8Zj2< zuAR7&aHtxwYgF#r#=An|S)p7ge@ADaKJTJfjQHLfnrNlt*@+NuD#%L?nv-hxl*DY$ zM9=37`V82BA%|mJZLlcu#jx|f83`}`CLPN3xxo$;dB-ah31#e>cB8SWw=-$=CX*;e zYTi+hDtrt7wP%bybxuj`;He}SH)F`=v29Y}sEEK)&$`*#LE5n-p;s*Q{$QHCUX?1~D^-QQQH03M!rc=@rq%FCX>*x@HJY`cZoz9`lnN(*H z&g$tz?t^#;KtEA7Bix>X@MGSi(9L1)V0jvHjaJim3jPoYRTc_j5*|;%FNOKL`6|djjqr zTV_7my>Q@p{s39O&!7VIM6nS2&C+goJWNIAVCJLMa#JF#86D}2ns!`_X~y+n)Z5cA zSy$K+kNbr)WL6?EHa|Ag;UO#0wwP^JlRfZ5;60p69SGPCc z>#9I3PQ`&G)oECPh_9>D=ZSj1?cDM3-P5RxqRv33ihUU*RoJFn1>!)|sNboISG=3I zQP^^N$CxSXFUhuyjRH9uOcVqM!hrq8Omtf{rjH2j?$-u)d!p56vf3|%ch_t5OW|E& z%r88=Yq8V2hIe28dXQZyQ;j@@7}$ON+kg4~4{G%A^z`uhH$T1k)1NP8RANH~`hR!a zYbm~Yc>UXd`*(h!Tc^1te)!uT|M=ww2wEqzZ*4N>(B(87V$fu!L$8wWw-mg* z)1oc~B$pPI#WOw4EZ|YkugXii6nsR>8syntUfN3&sItIVRxdW8b6~D`&Z+Vy*&-nXZE z;d3}R-^)hT;6l74$}wvixqCj9Y#`|NNm55U3auY6WULO7kMG24WNmZsOZ+8J1)zrxb?n0rkN$ygWY+z!>xK{6z4Gb*c@kCl~g0cFI z0>io_fL;8${eNRi{EJj)Dc#E&(f z4Lp!ZN#{_6;e<;5mOx2s8JH)Wx*dg--!$)Oqg2$!_Vshp8FT(XbnU2G2JKR2s3Y!t z@c#4iBvvYBb&`SG{zy!5n&dj3iedP2+-bscTjKbV!J+g@6)gQ$-8?RI@gAkC4;W@! zh+!TY`p^DCjrl*a|%+@iQ#2DiZd-fwDQ`@B-=8Ch|Ebyhc)XVROZn2uX z#-+$9oJOB6rX7|I&%L8K((bOAbz7T*!2u7KA}Ews(%N$+sI0WX39E8FADO zmv3abHS3e_*ZZND!d#^lFdSATDlP@Q%7K_($`aEb{Ynh80?RLjx#kCWNj=V1YK>uD z%BA}h+hZxtR?=lC7&g;Pxh?p>UV`jY9kKTT%N0XG}CGyUR%su~#H_xf)cROLuuoUe9shE+=8e z9*OR9zjSxGUuSo@-wE_eFZ9dsh3+o*5xKiOk2t!^(~Ls#%t(V3?sETN(!Tu07fP<% zkUc%ib)L1Qm4+dB1A5pXtM#%w`~_5fAW8MHxxu}qGZ_`%BLHs(gjpQ857 zY1%Li%Jwb>BkHitmFQqe?MvZ^I)hsoH5?9ds6HaUl`!%t0ur~z1m`(95C0M$R|`tq z5)-@}n5e=cYvO!&3Qe@2Q2GnULm8s*1GWxL7Q%}*fCbHN%Ykrc?N6huL=_$--7g&C zgQVk!?L`TK$-Hs*u<`5#7xDM>_p})B9oM3(uf6W8d;Ayu5Nz|-=(a)kQ8Ot z^8y24fdq%8j_R|FfIPEdPQI&b$p+mpvGZ_JQ;IUHSQS+Fb3HoMG7z!dmt(k^3|aC^$7Y(zDz1Li4rw+f{XpiqPlXs2)M1I;yj+ z2}5ZFNHw!0rhPevw^#;eNfFpsS{g$nCd*M~!7C46jA7e?XJB8;^t=9TTH=rvY~K;e z@>sH^y+urs$G80wf)zTA>t!?~_MN(!)udr&gmmRy3L!#fY#_*J!bX(IZt2QG7giAh z{!ncJlA_A%6Gp?LS-F z$IWC3XyNua>Gyl42>c8=pGKSGI&(r8F@x`QrkeT#8yk_Q%ijXyh;2%#Zj2O4K8T5x z)4L>NdGBzYokcB^w+0jL$uAyC;5`V9W=;abgeFrg8~4bXOE`uU_agaw&H6LVk#vIZ zRA)db-;f7U8VIiRa_#$2k3@;}ItsK%%@h==CsHZ)C=T4`2|s4T_K?!!&)a4wDoVtZciu3_%(gQiWpYEha5#&Y;sx*!v!{u|c}|Ky*~sn8K^(A3}!r{D-;xCK)3gl zmasN)s^?^x?2_QI22DJ@!u!-5hu=&s8N7Qa*KHTGOCsw9WiaF}NQI31n^{^Ri^Oyr zQt+fsuu-=Nk7T>~jIl3|i_L18a+29>fgKIXly ze^^uK@s=HY@AmYgX&83LkbY-s&CE&gC!I`b^TkO=C9#njfI#iT27*A+c2z;=>>HWi zMw2eKor!d*5ymo*40cu3lj%2RhE0NZ>~tQHd8c!`yDu{D>Duwn&bS~Y(*C{1YM-P$M1MR!QYSCxT=mBu1EMSsfx=;r z#2~U?dJx&Ka}e3@c+fq*&@aOmdJy?#m4|rA)J3oSsNIgtS^VmPIKqzBZQBEettD2{SYSdXH? zGDD^bo!MdjM3>g4pFsqA(kM|w1E)&8<_l|h*`ZI4xv zYYlt9WXisM+mf=xWCwTa6(>N>9#-U4vsMQJNGJ4jtK$Xxy=!1O`6A4YfhE(5QqWjx zrFjsou0jJAY&0SK3bLY9xEpfFh9DwrRT$!5{B3ZH9M7n~p+G?GLgX$G24oKnGJ|tIaIt;m`rlQTY4RSXqKJcoo3Q6{(XTsy-M>ZUW zz?%WaGQ&2t6m*svF8xG=$+@XaURDT^Q`2g?BQ=n~CySQ+;0>pX}{$)SR^D0P`SDl=oJ}Menc$qiW)2}p`G)&tieL_WP8Lx z%Gm3*xo*cvI|J(;T6se|ZftcU6b9jmD^J%eN7tS~I$VHh zmugHQ>~FQ!nLrier=@T|VZI=@i{chHD7kAEK1u~Jcc*T)rTn0y6Ne#YeD`)cq1v{T zn%b8g<>QS)O87HTsH!}=oGGYa)-S$QHzHn|?ZQP0=&V-Gr^0^9&EC)jYfR zX|;E<**sq%?jdaZ<1xy+Qcry%w*c4`jq^{ri0!ek7#KrMQ zoguI{qi_joY$2!+LS|mBRx8%*so*QzqYF?qZ!&%@Cjcu;8l?v10vX z;3sNuHyNr6e5z@lmWGE!tW!UEPXV~Ino5lpFb&F`-^3(GVw8Hc@(k!iQkdY1AyA`! zG8L{s`mY)M(61$GGM$+M_@AVhF6gVrZe|muHK=2O?8#<7&TXA{tM}#T$MouGB47sku@g|39XEPT=71(WMGMQjOQl#3N$ z_Qb>x*^}3c6ks6biVl++4%h5ZgYX>5(^hj#VI#nYb7gPjXH*FJn_*@uRdQIuEBV2C zmvRUfOO?5H#m`G=<7N;KLtF30`q=GGjV+T|6JlUZA+!>4GA*tU!d78AvpU-LE{b4F ztSN)GcIX!POZgK+TccVM`r7homlMz{m888^I_*yB=Z6JERGD_Z@y3WJDb5wzo6mWF zY8NY|0X!91igH_9mkVm>d=W;M<) zk*JCIrE4O7oi!1^69|@G=$GLOT@&#UxjQJ2IJ$${%CRs`He4>T(@Z= z{aG>aX<#d9AD^aJDLL#!m1c%j03L42y;<+0!bL)QSH7qF(EcjB5hdvm7!_BQHXiJ6;H*ES{b_{G~M;Ry&|28?TJ7;=s~?A1g{D6 zA3#p!07;7=(j)Oy^h-Y#{W_nDekagNxB+{iUxqLAQ_)A{r(zzl<9*_+Bi<)otvD5( z6zNp-8(%27ZaWpR0Kk1sqrI1`z7<0F=0Ntws%?;cY+oSK)5+;P`HbwlZbw-K55E?W zn+wA?(dDN1o1xq}fuoG35(dGR8KR+?1h}x(P7um=%c2}CAd&gu z`eDX_R+h4vo^BeG&BUaR#v0qz3-EHve_D{B$YN{iCS++5$O9F z8dBXxj3y>CP`X$x1$2Fig}K30jAa?R)!WFVGq{qfbUgEqfAYOD*V402e1I&S!0f7f z0{M6Xc0ZOynpm$h0dJM?ikS-($x$r?gL^YT19_)aJ@O)}!B7FUE|D_I0RXl)j|+mD zVLn##MO4td*e|4~!6Y`*;2yk2Wu|-L^TxD+6^+HL0+3d~{+23Hndp+xAQ4W?1GeuoJ6E7)5-{|PK)IOZNavRlj$vFBHxt~F zHzgbvKvY3s^IYD3Dfz-E4+D*ABJo8koM!*EFV&tGVPe98z0#N#(yC^*h$`Z;u;dt} za$eAoRIBjsLU-jJKNRU*oh4--FpnJx#DxH?lJN79nq#{{srC;Lu ziJ{`I*4bL&VCPWS;Tats3P9z$*@JcANYvR7N1Q3ZZ#o#0^a)$YAozg>;hZ4h8kz~d z;%CD^-EwNhlSrEkk#6GOVUwONHCVAI8yQvnWZIyK<2O54v+Tk>LFVjKBO!k&j&i83 z+0379gjPYWkVARdnew^}t>^WU=Oe%_TNc|nrp34>eiq;^puIBO;$;@wF~rCn;4T^A zGTR1kQf%k-FMs&q$DjWC@EwZ006D)Cgys2%cPecZZh4WTU;X%(ch7%$_)gH5-S1w# z{^i5d)5Ghq8ozw|)9-)$;nnNkJiPvI-~7`n{paC7{)g|M-~afR=l}fIzy1EF=l`Vl zzW&YMzW?d}{`vXg^?&{S5C8Mk>u;Xl{`Bx&anb=5Y49_p1BMa_hz7naevQUD7+_m4 zM#SMzN9}OBHxQ?&eu4s_Q-d_h)ogz?(GLlW5v!!{=!5ecg(u5zMK|7&3=>F^kkJl< zNsd3H(qq#Wg?}hUfva!;%mMzbM;w?FFWvEXh}YTi=XZh?nO^9Z;S1gI=Oc2*Umh`H zLWzE9Mivh9s}+tvfAlN4w(Q+kHPLSg_#*wuG%BnAD7~W8&}^q!YWty2c<6!klkV0_ z>$?V*k&!Fgil5jGtETYWQHmHyNhxL(?`8FS2x!qTn;HP`wSboKK-0Cd-b*XtM1Mu)0^sl)+;8d( ze`QgkG~6-m=Z3E`Q_X#bzW|jf!^DH3*TJa^pSo9(|51uUl}yT=dAjDUpWvhU6h5oq+o*(zzJ~p=cx|3w;DD$U(y}*6_hJenAfZ-O+n6>nffnFy4C%{{)v;jl^q5RxLt@lPL2B8Om&QoGbmH1 z-^`%O=tB}@b@-EtCA%4{sV(Bd`MTvms4PP_<6(e;M$Keu&oxBoQXd+RyPM-Zv@)0_ z8s7Ejl;byx-z~W6^Hb}*@d_bPFUz`3SJ~pvsst|w8Z%|rX)4K z+u7C<&i96LQS9?Q=m8z+vAG6w7~ot?t5T37AXltE0dps~D&-*scQV37A+f<5##GT8 zW#HoF2q7Ysk|y~I%ROObWItL+Ezy<=bzbLhGs>j^55Yb9RLwD7>4wQm4g;W_Dq6*m z9r9sJ1{oFa5)lG(4q|1n&HA%OKH@d?L0c0uGRm-#gy{y1V{rTU;KcZydRKVpT@ z;!ga#hkVtE{CptbOR3TR6zp0|+*BlV!>Wr^Qj+gChAN3UY7Q-BAWyT6DkdPH>&&Jt z9%7NK6)O`81}j#Zumf5(TT7mW9TQ_4E`#W>vAoa~-#g3m7j1y-``U~xv9W=Sj|oDu z%MQYrhhczfvmka8rXseJCB(oarQ|%-gpD-^@Cxnx3=+|E`3*)Y!nacM4aFvs8Pr7K z+$k7EvLTR_w;FkbqEkq{!k&dYsJ%NPPIDIH&kzTI&PDdHWkreyX=7s#jG|2}gxTQJ zVU|%ciN*%EafArh=J6GK8JeanL}_kdflsWqx0eJm0$T)IFUw)x%~**lwym~rz=p-W zg(H;a;WN}y=Q9-{f^{Ga5qvE?zYW-fk@{hf7yhk?!skGd>-my2cDO*s$QoD3n<#@w z)+mNxo$Zf+{o|>j80LsT)VDm$9S5)zvt&j%>aDNLF5Z zV+@^FQ^CpCS5N{_mVjoA$f&&iIYEc6tD;ucvi1fzW3uw_VtneAf2@o-#onj?Z5pyzo_-Q{G&ho?T>%_U4}lZ zIjTdSBeIzOYu$FhVqs^pUoS}hBPD7$)@KyI4gnx<3<4yH6Pfw!zNw^&jd_CT82+7m zBi(>IcE*Nt)Krk9TARN|XDI46;!6GLaV2tXWvzqK5uR7)X8Nw6qyT50-pfQJhB_GneVPfj|ys1oNj}R+uN| z$XjVL+|&2q*&n!6C-1RuFIz0hy=q>hffDEznzd}&o`Pz`bH>gnPf=o&cpv6yIOHUw zU^)+EV94~+$`|u6kGj#=DII3yR7KA~dk|+quc(s@O&9i@bEuhqoICoAQC*)5hpOK0 z76jiAM#0a)-q@ag^ur(r%#1 z+!(lXqcN;m*w40GjmDL!mNbqdMpuvTX0lz)vpV){%+d-<#o(cKv(_70iGw7iqTwEP zYmje7OZ{CMu3V5ZyFNe;h{r}!K;1Yg_+MBIwsbe-Yppk_0dL{WoTc0-uUFfVsfN^S z#V`t_16SHY!PX4%TO(QCO2&$|rFnM17WS9nL1S%4ZM&KSYxq2$AF;pHuDT_Q7M<^M zW@dM(Krq8NSd#us$LO!R8U8^(s8;lMFR^ z{Avvd_A9v(@kFlMK(K7r>=`KP!H}90L$ccFCjWA<^_s!ryGlPVr-mGm*L+ow*MqO` z9o zj)xdd1&OfnU#j%hvIepqV=RVzr-fy`C~3BSVOeU^edVISoVxGw_B4P|rTJNu?eyu@6#N zR6JLs!F30UgMB%nmg6Ny%|}K&hO_IxSz~$i=1ClDmB}-b&^IzPQL$4#|#I z)$JuduCuhQN>R;lRF%{?z)n=ESxAlBx@{!Thy(DFl-uU6Or{^(b7X}xc?1KQ?D3_F&fDO4a*bE5Wuxn1PCB$Vt#n@tBf@lMJn zyh91V|1`}K!>fsdKtU_yn9P35qruv+U^oaV{hVZng*V=UPlo!W`W|{!JoroeTWu5Wsp_4|$6aKNPr$eP1OCj52SM}x4oAUWaM_uo zz_RM%L4Cu%{Y=Wat#{ciK_L{+_t^Rig+d4(uo)CWaAj{xr~)384hetS5U z+He2m`#-2;nhLKOzGYI*tt{TAH#(KQM1LPzIh$R6C)io(h4C_ep_^SVtTNgQCf9A@ zm!+14$ZfaF<>@HPL8=Y})YJ4??Er_YQA7%PWjwxg(G zkSfak7}RAhs99sF6f9m-vTrcJ%e=MeFvHo4?2`RGr@K6rnPR}xHuf0z6m{*XW0qW? zexvXh`>m*mFoZ{N>bZOxxx0Er@)$D_Lf?hQxNR}h`qE=eD8e3bd0s}&w&fAlN4KEz|ZR6}fK`Lszl<&Ucx=3Z*N z${}Z`N~1kE^n63XB1y}_1%9`RaW{AX) zHL|<-@&AAJ-tAX%+(`F*ufJje`(^y#RhcQ}4JZuY%k+T`k^kXJnd~) z8GV_{e}8^okU>!rl~PuTS(UDKyL&BZDV1c93imuaN=y ziRL#TKH^m$JtaCfd5TsIW_L9gc?&lzR@RDLxICw;b)-@Gfz7gxe3H3LeI^L4E;mpO zLw-u0H_DMp;ok;yB1!F&gP!~Tee11a0W>XVgTex`2Hb$s4D-1q=D?ZvT2M@E(@e<`8OIrcXRQZWfz6<6=A{Ge}48)Uq5@cn!Hjh0$^na zk?&1023=FcP_FzQ)c{SiL?N46BJo>J$+yHB52s`x(&g0j7v+(mF*e^lT}4=REPCZ% zGH0#Hwmu|PFBr<*;l?Ijn4SMU&UmHyKm;;5VlIrXzNgq@s6Mc!UBCZNSABHYelQ?D%i?>p70qPW@-Ms@c(?;=((~yFy7Gn7JFxw-ej|R zC|_oHJDD71W5_gHf3Cw0aoUjk)sr5!MwuZ|{X%aE&RxvQAIsC`m-11SAJHw7m@{Z8 zV<8jSvgf3C3@q+%Cnq-K1(alJIs_(#pbvt!;=h)Uk=i$qa}5a|IKK8JxW&jRQ!1); z>@bpq5e)HDX>!u5-sj%jDM~c*f0{%sYXa$r$|xY`BoS6Ot5Ow1T|Y+zA0+1Ftc3hx z-p#Bj zqCDKwfB*RK{C9tS`KPB}$DhB6KYvGAx3Av63uuO~reF`xzv{pd#fo;j2iU^`F$I4Q z|M&WJ4YVOc2*jDq@3s(#7ru)xo;07P9vqk{qNy3`0V06?riXeE|1Xa?>LFfw=zz8D zZ-~x*zZ0yWgTK%(!xwt!;LcDFcPy@TP!HrLW}t9)3ooAJORVPrTb@EU$VdIzrLE0X zgZo5jYfEqv=2_+RDEpXyqjjxBUaV{^Y;2Cq(f~HQ*+DVOy>p92!)G8GfCQmVQtx7P z#VGF%Q~q;HzM92e)JeXA!{?EroFm^lKCqY}vM&V;)K;f!rR6`=MX@e(2X-DBbUb4KTeh zUdAu<{m@(Fq4Yy)vG1<2*O7!FUM&cvyC{AZ*N24CDWwi+c-{fcPj4QTpFu*XQOGTLBk@93iegSxQZt!cpSiT;tQU=-9h`dnFW9IzO(kjJ zuBQ5HXGHpq%!u?`ZW5Akj4M9jG21N>e_oM{NH~-s^gMP(Bqt`StsJvd5>l$|k!VEv zr5llc-5HU7CkQOP&@aOmx)JFuawD=$EsjQH>XG3w{c3>`>5nEO(rI@bcpa` zzn^Fl8=U?b84gus)1Ya#mm6Y@=?p7o(6yeM8uJN@hiFxKP@@E~XL|f_wFVRPNkaN( zYi?wL%d>UCxT+u}vJ2TbE=x(nyR)Xv8BVJlNnP*^Ds)gy6R z_DkQE{kq$h{Z5cqdZAy2FZ6BMTjbkv*W$P>rykk1>{ko6Wq&kn%YNev71wp!@{V}` z8~8|DUG^7LGQ!zfs2VkHjPw-^y2W{QixSbFy=WzOT>3h zk&xpODKHhVk&Y!&NiNO+230h?DOZZXfm=f(82-;toWcQuAnId=Km&;je}oa@p1*${ ztE6hi5n;p>OlYUj&I@Iy!dFzNQNy`_!km41aG6U`--BPJyj>w^8X89A;PKxc9xEeA_2aTDzbGe9?xcP205 zN#%fvv9)R3$rn4TS3@Yj9 z;ipSHNcgfkkw+e+?Pj-Mv6Pci><^>u2|cAfYq&qXNNzpfCq~{66sVa5w$lvjc6!RR z;%z8k@Uvpz7C4!WU7s`sE;ZA+_Csm{kWvyN}*wFk*Wuf15qa-R|3js{!zB zZ^y_;D`B-14$kPHhX$KG-pFlRkRp1X&c)It(Gn6K49ln6fHRjRT?t!n+}1nMnIOVv zLY-#`r&obD7zRoW5#FD_T6ILT#tg5WDO7gxGYwE4Ni0mmUavwiy0-iiezyRQRbx#> z^g89cqBwy}4W!9g1oqbPoJ5*T2b)G%kD7djL#NIX(+FFDzr;`@zg?6v-97Pno3vpn z+7x5LAT^m-`kR?LR$X#fes)mWml0+RdxdK?2H@H8=)h&Reb9EVlrOCzz1~tgDo8U~ zQG5rOpP~%;6Lt^n%V3cv)3}(FrIr>YGmQUf`C2|2&vnaBHg~lDxz7a3W>{S98m3_C z>r1ufB^Xw`hRsWQ! zQ(Lm4eCGb*FnLR5V}b`u{%=`wx~=V@D}>&r3eDfS>7*+o5-@0_+V znX%!m9ApMsKA`pOsNFTwL{XiGQ|{8-%Efs;v#YD?DNG9}!+5g26q;yd^8h+YVxLng zvxyj}dllyDf)jot^S1k~7-~4EEaag2!RxwfQyov33(z0iryY^ z;Ay<{;DrCV3r_f*5RFJL443|e9-N?c)*=s1bS*|+R{bmXIs#AQ)q>!Jiy{Rl{Kgk5 zuIqvmhaK3C0;3v<7}rkhC95kWU+{&HtrsxkY!7TQv1ZVIumM?v;%4rdAt**Qb9lF2 z1)+oLs2AYw9`D68QjJZW88C|$b>XQ6eS-#9&2v6S-GhlPEmkqhM`BM^z-EeRGe*)a zM(n=}N|H7lHpi|6@0{MdqEV!O0zeE$ib8;>*C1~gKhr5<1YT4_t5m$%@AojqU*FW! zg;8dSrN+qfOM1Lc*ce}W<~8`WHt0acf*lePIJ+XERb9N*Gr>o>B^)^9nUQI$x~T~bVo z!$7Y{w#kkpdCY^(Hrc^Q**1An42!}ZaXe$Zblb%L+}S36Cm18?g?<^n&}|cMk=rKn zGlv#O+a&cU;2EO~7T6~K!JozTAxSYD-l$<)Op2M{8e$LV>J8nDY_Y<=++vm)o5WJB zrtL55x(@Ynw_%7B3NL*e(I)Tad=`#xl?WT*_@$`ic;wy6A_pMv;LF@%g4v?;OuzzS zNe#*GP&6WURq`^ZtxU1W=}!30H0n&x!m86W%)U(_-OT0dP4l0h1ggXu?}BDmn1LqG z+;U2kQJM-mD->+2w{_%*l`UZ)R9n{Dw%Cz0n=P;hWMfeyG5J zmVCd!^nu8hCST9Y=(@=H9B`YaWNvt9y2+EpU->Oe&|YW&_wsdKbF<;INmHqlZ z6eZgdA*0bdQ#CrE#T)uTmOrPf;20#PK&dR8+ue^4ear8}zkBqJip}Tq;lWCeQ3$}` z2ZzV)gM@>w_?m;_we}wKrGez&V>UeVP=BZz!JX;y3GbROcmE|z0Ze!Mm?x$0&oBs z1yz8V8D!0U^9Lhe;Fw3;cx2|B@Nhi5FtwYRBlh)j1=m1r%5!~A?71#0d?Km#d@idO z4CCY=7dBrB=z^%mYmqyFGFN1Sg4l!rXWR_5mTY@TN?*@+zGo!Gx7FB4cbikfxVVrg zfwC)Y3Eu#B)a0gZf}lv}mkksdD*a_84WlU&7iN-%zwZ_Dv{0`$SN@uaL!I!}zB8S~ z8Ij3As;zf@Q5I=s8m74EYO0Do)FlShdRtW4Ju4|6(CaqC4rv>=FKue}ukD7~Dj)ut zfB*dKn{NT@VR>71!}a(YJHlcAV*S*Y=htf76mC-tgI-MWPH~&UL9T||l=hh`S^4}c z86Kp=Pu8y-kvBg7)w_4^fBfO$8)($@v2R7ynCKjJ%Ln1t@4tWZ^!>v(qIlduCHX6( zpA19utJgn%_x>HT=;8VQ`NQv?=|2zu@V{O?y?y`v(=UJc>AN4Fexdh1|Km@ue*B-m zJv}`Cm+#*F-)GPNpxT<>Wbh?&_I3{)Xb5Ka6W9OXU60fc&1uxn-)Tz)`lHcy9*}IOLiXaqe*3%OFyS$hnp}4W}%1lG0@-+4FGh$ zQT7H4AJC_nUc%%@P3}7xpYQ18We&+h8*sK&_Oau3m@dRVLMCDvzoR3JPOWyf)?T3v zskhx4f{Q5<#V8ynLWy<}os8#l6Q$#y0xn4+!s_7|apFvB_{wa@WJX13qQN)&bBwXM zG)hQ0G>aK%zn^TJj%;;RcDFbiIU#OJcufGrxlkrV!94TU+SyQZFN1!`Lm3E{!yxq5 zTyID+&{a5qhvRbG?oA#(C=qkLa=pwT4q!y`GZev6K6s1O!#q5S^ilBXT?q0JZ)71z zzvb|#Gidr#29KiXfnJe9kbAs`ryL$ddUg-vwA;&uiKkTURI;SZAV{F^U3+}R9%VTcM`CYPy0XVP zcq}Z@>8>OvUgxa)Xrna+qV^|_F@*&?*_?<=lIexVUeN!qOd<+4I;;;_)8T=@;l zQ`Ankkv8BLa${!WY-vT+SkC)BlxUZhb0v&d1Nf=1XzF0R1kj$sc&$uz3^&c=sfX%{ zH!>T+pK(+d2FfN!b&(pNS0s~a2Y!4*8na$ubT~VTA|KB^R2OO2dc;v(@zPByWo5@V zL?g)W1RE;7&@aOmx=Gc>7P(2)rWVJyr5*)TSM2fvlgdAsOe(+eg^KGslZseMv92B% zlkN=ZjCE`ps^aEOhY5>@>NFYnNgxlxas0DEExv`@a&Es4`?}a#rGiDEum!|ma4LSr zR`EAl!hx+0S_mt1rp8}>9Iu3;AZLU`#4#3NxOst3$wq}OXk@_{)aG{f(sF0)toteL zIPc$LV7JCOh&kvW_e49hl|#MGK9~;uG>p)cEQR zuzDwr%{-!JHb9A%Tc%YSu;n02iOJEx&K7&8Ei9;f+}t%-XX2orfeKxmIA%p^7Q2B}V+n1sXEswyC|cQW&g$pDptT{r z)~MYrAJWf+n5|hn2d4l&hYY=OrvM)TP*wx@2v!m>IFVm-4(%gA&Ab^d_V4_1BF`D$Qz*e(W>W;yfYcCqB!5{Tl9-@oy%C&BhhH} zOE+5mx-(k+POwtb3;i;Dp&PBNmbnab0J$9!Z@B zk~7-kL@iFpI>LpTkgy5JNGK}={Dwfb$_|ZOw;z|OI(FSIR_V*#C{vYWbF(7fO!a%# z<(p+GuY4GfWptaC8WZF3_Re=s{p3FHWn(UJ?$>EJr5H{NqQ>%cSNEkXu0z{-Kr=7X z->Lh3ww`UlP|erbz-aw^-0)KsbA8R^oydP@E!A{#9`O5|E-dA|DW%^lyXC<<_GpuUVD+i!y8_sxpT^5JQqXT}GM?~~uU z49`*Q-%>>a2;DIgGWwJaIes>#Mymz9mxQ;BO0z;<+8+MC&AuQP(N*`-I`BOZsfmcB+G=Hj^h3Apw$pk!om&sk?lPM?3GmSKn9Eoet@PrW!9qxZhgTNg@nRN;$7fA^~ z8lo^!^Ka-I)9Dnwn%uys1V;}jX|{usuz-#$fhuwxYu*Vc8%_qG_Ix4Jca<#dZw&XL2TghEQfCbHIqUx-Mw9dU9n(ZcB-v9b= zs6h6BHi@piNcJE|$9~^!TKFcC#t0fAzti8U8d�Xpgt5716J^%Szn?Crc) zikTH^-{Hf`M6m0uoWuI-VFMO$he&#~22dh$1S$!Nj=B!@y@Zt^=L&Px6Uwt0pUvPw zw|JAptF@zKMZo6Wv%PO&wQ!9JVMO_Ep3>@IrPy!;l@cj3xTCd&7}pmRiX%=V#`h7R z)mY7vqkm~z4tbk&J1l<|v<^)))|NJhbr$cCw4vKM@;&&2vR#wrYoPqw`!X0O;96lY zw4;(KjHQDHj#5^Wd_THbC>Hcc&r)bOR$*3-1w1G=XMSE$=G(-xRV7%hCX}YBz`CJG zfbNNU$e0nrRO30Pw~ywcD`_TCZ>rjRZ3oK}YkJdg+L+bi&>Bxf`bluB?P%ECIzIFy zxFfD|^dZiTa*WUE#zyrf+tVy3Eaa%doGPPdPsP2~Kyy*8ui4LT5;hmd@nH2WXE{`0ec`uf?k)uac@7y;P6auw38>_lQ$Mt(>F3*0Ouu4wP2 zeu>E;9i=Wm8@Dal2SEy|Ic1i^EWbjmU}Ynt?J_&8b>qfw6&N>?`q;wFR`fBwa1(~^ z2isf|Nek!om8Zkb5fqMf-L;I+ZGHBmj>>J$)SLoGaWYNVn>z(ZMflPmo_=`$)Az5R zelU#E@4tWl`j1bL{yhKvZ@+qY{`J#;|M>9ycYl5Pr>9@XpTCJee+Ti;SMT2iXwz4s z@h84za4Rc|j#U#b4@D8Se;+DE z$@6ZwA`{Vpbj}(~L}(r8G9pe=ViBuAu%Fha6Jcjs9Ug`DiLrwSs5)SXZSV|s@Th|r z`&xRTUxqKdPk7Wli)$Tt)XnHbroc*AwPiXHSvYoDnMl2@ zM1!uoI#oC_4sctaI4p$YaoPl8eJp~TQD5{$Yfm6OO#2cvFP$+gFkfe+sviFSftx}D(Hot@x!VmQrT z7%$@&x}D%Hau{{jVyt?j9gDq=v}5sV0gT#3@w2!-r1BA)*<)KwuI&!7xCTNVAjrlp zE--+;kd~Y?G3+r&}SQ){($27xMUECaRUS;I!p7{2$u$Ucc=gpY%+g_23 z%AKlLHW{IWSQnT)ne#~$4|*gTm44|)rC)bOrQZnxOE2`x@P%$vdW+ns>{=X+%G4vv z&GV}TMx{TRj7q=pg^KGs=MzB`(23*p^JGXGL&3Z$nPN|Kp8w^BM8izl7c%4f;mj&Y z`BYPSJWb`oD-l1Lado~Pn}vAnNbBXs!8oiIxIZjBc^f|372)d1dTg+Z8b7=j?0K0B z?s%#q`yKYmzOW#2*_+K$n~#B=9k|uyNst>)eKf9325f`tNXG7ukD)^k&MBUWkRu_b zE{1iVAx8_tt;WYN9dhiVjK#p>B?<=Y>`uxtQn=lKEWUB5@D5oONI6onkgOS_%!N_m z@wCaqhI{G+=#gl-`K4QKe%)DaekYh}>4ot!exX}#cgCu4$Ktxqa{HN8Ve_!1xGCj` zMtgIX%SkBTi6p*kR)x-H9hVkJWgzO%7%vTv-o#nEIKUYv(HG&gy*AwHhG%6j>Edu{ zw&1;K`gu2A(%Hc5WCtsINv~yCFu!1TI$jY8osNi0IS_8-qQo6>k?|mRRhkY4f4Z{E zG6Y@}T`e&jSOadDG=CJ2V4gIu9IPy9KF>Cs%Rf}cI*7vH3CUCCSIs|!{~Q-{FRgBm zH?$1bolcdH*ztho2JwxjLU?bLV+uL9De2qpE2%qG#fcdf;Gw&Hn%{+$SE+(mmaszp zMgDhv#)_+tU`~eeuYw3~$YD{kQeRjtA-_^;1Sw2i<=c=jL>Yy{t2`mZGG+}(?*Mx8 zk%A}%sP9B1fHtllLG&$?5D!>Pb{;^(Q9qWbAi)KQxThuPyQG{Vw7){Si1IZySfzdW z?1Rcv2%SP^HXYn!1zCvDoPJv7c8Dc=MHb^{n zazA6=gk>2&dLcp+ZayY-RuCOT1XT1Kif&7sqLixbO1YD?Khv!H{Gj<)!o$Q)z>=FWs~}7>O^W`(4TpLw-_-nv;EbGA??N zBAI+sPof&TKD$U5g$hE%y70_%YIT(ps>_06!i0v$={MDxAVi;fT2ZFE!&0^ED4t*< z$L!aTk0rr`tSLRcqBVst5Ae88n&A0?2V^Q)x(fiMhL2{A&3%n5zMc8xCl%u{KrR6D{P4{P5=E?2n3$+KZAvXx$8E)hqy z=uKFVQMN>sC`uO$897qPL9^@y^q5w}?l6~3rktRZf^PgJDRIh_vh2a+YOa(G*T=|{@hm(Dho7967b`xv?C~^-%W_L zsc}zAJqpAoh7%H`X~mRSzOt5bN42uXbM7c8-XXf^XgEeBQ88(2NGUZSOj=w zjv_?M8OwD;REvtLZ^~)vo_}Kt%Tj)s1LVZo!qswngHm8_1O<pTDk;JgP&yokh6@KSh{1{r zp6MG$dGK0ghEqMlD97V@7LEQyK;i>9UCuU3fd#wc;(kd)vz>qfDH~OM#sC-}A zO(ZHSA4?-ME}DLKF?OM73}Q>2D2dIrX>TsEm_qma7K)3ff8^L86y{-#++^m^W5|}+^&9r$ zp?*ssn$;E>mIl1i!`ZVTeW0YuVY`#&rt?8V+fK=RLM$$Ve6rhJpKZfA;*@n_A~4Oy z)3zh97wdR0_ynt+-v-N+Z;JCSh`Xces3D$H%YNHmTsw+>Hf7C?Y+~-csRkLl$%CVH zG1$@QifIdk7K|lZ9GYAFCCxge%_DdT41q^Y%;#L>oj`oy@iUy3%1b=>IM_q$m|@W% zU@biE%j$Z#Ol%P7;~CYPNwgr$*5%gT60}+{ zOLyW5^+h#iYQn^nm%+wbwzj%1+r&0v-^tPhpTn}uHj4*v)cC}XErfQo=t_Cv=7YuG zXj3CS*gGGXTEMol)00jZX}j1xg$QfbACWu-ijQER3H;b%A_8o@wxkDnZ+Sjr4- z_^zJvaf!uK;LCUnp|zn0Nq#HpPbTa@j$253%hYsCu+(~F6!iaSlAoZ= zL=tXBYw9wYO^HU2Nz^HsrbzO!1=uOhY;3x5lgmL;Cdt=kA+23se)8$H$NoG-L{knH zZ9YehzV$81sjnn#F4|LO)5kf6>}^%?)6JId5ZFIE`^ZSTW>A~1EyyvO<**s?Z14PC z-s2gkPQ9!)57X&)yNCOyq;>Hlbp4I8@cEGU!;iwY3Y|bkjypDRfZi1oI(5jC=Q z55IlSYz;iY`Z<;4g^v&l>n#Bv&km6{3l#|tr`a_u)uct{cCjf$rua_00Mnf!G6i?M z0V1;w35+OaLb)u$3K+}7R#Araky~vADZ_e zvAGHf397@E7`J_`>@{a~|$k zT6rt3?R(FxAOt~Ylv`p6c8?m8eV!92)-?IZI7SY@8o6?bzQK&Em zi$R6*^mXSsO(8$m9*G8&U%CP1 z*PQ|7cY?)~Ug($M3*CSMI%X~ML}r3evBm5XV#i56vP5RTT9C->kETRszww2N>pBB! zii4#qHi@qxXU8eoFMk(|I5Ye!2xMR@LGjzUtk$!2mNKu58`K}EZu3I(M@TKcxV^FE zWJbn}LHD*!CuewE419eXdCxJen0H?&iC6`oiaeIGs(7e@q3#@nZ*WeUjTwiws%=@P z`wKZ-JV^yH^x^}|@66_u7z#FLotZqx_~K3WpDf!#fTE66Cs<%cw&fs8X4piByk~+rU?t|!&`qCeEZPK6~baY@?SL!5KIIOXN?3o~S@M)!=rZjIgxdd!G zEv8*k$hOKHZ-|N!xSy1fWYRw}*J%coH*w>Snqfl{-8?IQakR53TSkq8$am2@m{ccR zBFBKxe8=M1#2cC6?YEq8NhKt5!X-#Y^@?;(QA++k<6EN0&k1Y?UR|+{owpA#HtB(Q zNQqZ|Mv0f*5hdOTqVjjetME;JK51f0{Cv`+md5i*>PaA4id|iBKJgEx^NHX1!o+ml zxnzn@ChbEIEQO$A-4JXJ?lEm)?h<&mF8v{ZWftvh?vkkJmO<;>Da!#L1% zt-jo*4mK4U2{Suo&1ctvO}K#&`^T!qZTkoS&vq$*XU}GG29tLI!qe3tobv`wL3ob$ z58)B41Ir_Xf{|N&OL^_!x zDzQ-vBChNoi^!pcC8oyFv`XQ<>v`0Meulm*^8^297v@_En7U!OZz+uFCSkv8`OE%J z!+#v=a9O~`@`fUw6K7LDcjZ4nqcGr7cD20u`h6H{i-+zSzyf?uMZi?<0T?zfzaBPq z7(45Z=0iO+J{#}qM9ikR+}7&i)G2z{;r=A#7(UHQfloRuB5+e+PKfp8`*1H-B)RFw|B zRKLx;L;{GCX^g)jKO!%+G++tIG5}1Cp|EZBP21e?hXyMiCgUJ&`Kr z&g(O7CM%^RjEjFuozCJ1DV2hAlQ^0fY0sbs^)%u?aAuTI6CEa7KgSedX+-3iM>KCK*))T)Um8 z7)f{KjL0X5Ys2&{plz(S3`PL`T5J%79P!e3}7)hg~Od>0W z5j>Ex$V3-s4}vw0lA%b^tvw^Ww^Ie52%jF1KI8&-2)uo}22 zB*R=PiEd*=S}1|Xxn$I*A%zg0*)Z=dFE#%VV=7ZhV<^5YJ3{gOhwiMi{=C~_N^Ca; z$%?Ko$%Ph06XGhc%12-Z)+7BmrByq3Qk+5zoU>T=osxcpF#hvDJpJ(gr|(}s{qXSO z#l!R8fB*jVAD@1F_~!ZVfBV(L^RJ)&`^Sgpzx(UUKRx|A{`^h+`MYmX=kMSBXdnCP zgUhh(9-7w5t^Gl@)x!Uu-n|h{;JDvpQg*J6&2D?+Dr|Sc)v@E~4l{>NyjFSbKnM;v zZwBIK@!BKtbnlmby7%kubnkbecq=EyQzhmpWwFp9;af4Hqgicy`(qYe?q zTo}6&5yk}nMjaxIa|;P_IS#QuwQt}(UrPTo%Ou7T9#>)(d+-~XGu>}F5e6Awls?%K zIEYnWclHWQi*Tc%%+~32>Z}t^GDO8snRTL+LOl|#6Tfup#IHN+#P0-iB)!lt!xy@B zvOk3udF%n9#TLidL+Vi=!iX|h5PR?srr3ku_(H{Xoppkz_YoeZLIhL?-+187eAQ(P z8>i>4a4HU7Rd3**4cSm{XStnJ$iXFmiUzTZc59aXVqDX#Y2UP4@}qO^hQUg3h+SS_+WQBSY410_P;p&n+LMs>NI-F9V|m<2R0Sn-e(_0m zHg1@9oCX^!ot`tK`_O`A=dMCaaAL(zf9sy9}x*aHykpcG5Y z&LDfRuzDn(LHyFsAb#DQLHtfQbclz?Czw$z#RZT*wOjxo zvAw)(9Vq#62FziIcMB_}a8AN8%4u6Vk5)pxAAhDu5KdP1^TpCOb=>1iaVq8wyiFkJ zXNm-y4h3y8pb{=u-&xsL8{tfI*phfSbw%nw?;t?*Gj&2IBnE zg>;Q7tKeG7gBZc7#wM_k+#oiib|7hv+`xuvVENS#2Z_Il7INk zlAMIz30_>ClEPIeNnPf7 zxFA`}T2hU@lxU_1f)!gPQA!xDkit~*LGl>`!PZP@qBi^E-izJ$<{+(gdO4d&}%M*H6EyfK#!a+6I*{vwA%5Wns?S4rH_-8Ek5wZtzRd)S=GxG1NP zte@fv+J*v2SrUog$e~m58AqBCV%cQ`Rt@B6dPRpc1A4ZlysBOikY;#$&-*-ygd7=r z#F1w4(xW{7=Pt_QcY=(z{zAVDU+7UDZ&5;;r4~EV%zG4&X7OqX((Gq(J@^cfxUP%x zP{CpD!;GblMny@U~*GBv|p(SMJbwHOTS1xq^5YVSBo z%6YXlMrV88J~o9#G#;J47lhPa_pH!Z%z`>)pnAS5RuR^k3e#7Zrudc~N$OiNO@~Sl zD{F}o#Qv|+@B`TROUt}Y8nMCW3(NY7G~$l{nXSdC13YH&T$+NIH5vHnP9bK(Z`~AP z_WUcki$Htmdy6G`E)wkMbAysRTM{*zTLaEk&S2-fMvlt4W6$*)+2O-)#iPU#zP#<` zl+s)r(3K7!_e>b`7H2DTPw`(7c3?{EAO7pv-p(m5ij?N!H@;ADU3d7n05R*lB40uV z`yB8LOaz_}_o0CMSuv23GJWO%U>QIoIL1`947w?zL528yUWiAA{;W)7b4)Zrd z_n`1_3oWurU_N5U+XYnvygQdcH^rRnT`gFL`1CJS81N?hPjHDP6P+WSMR~MwRg@xOp$u*|`x;WeV_><5O1F$-#{ZyV?|aQSF3h=i*7Gjo-*j z8^7hL1Bn?ZIGLR}C|QCn?y7yxWz^EmrpIN}GU9q9x}p8j-OzsBxuN||5LkL)yo_Jy zZfI|jyP-dCE~9%E*L9ZQ6qk`j)rjogFyVQMO=w_&)kpxm$RAWUZ+1V!>Z9GZXYn|1 z&AsN$f?X+A?#R84y$%mtZXtDbsgYN~AXvgXWbs$lmPK;vB>nk1<7gu8}7Uy(ZHMcu4L04q>9WXvgkBQqrYRx~8qEe!SGPOt(j zTHS6b$doguP^tu!TE?6rPW$5_XHMCXk*-IgA>o&9NceSUNcf!~uk=E{3}5Jmgty2I ziLS*lo}GGRej>kG5YP5UlilSvzEE*pXGk<>3NjU#Q~r*#7O|fx?lvZi$#*h8Ec;K~ zlyX{#6YsvW7J&mj64jcFnSDlCivoM@Rf}V$X6#LzeGTxQ({{cwK4Gj;#OWujK=XH1 z@~{Ll(RKI4fIgX`S-P}xfhM(H`H$~Yr*R9XU2}t#YY1$`8YZQK#oq-js?*29rpgXMFwr=S=JnQ%9D_Sxj3BHgb$ad~1fgOq$SXSvBam)_2Fe<6 zg9NsX%A){X$x{KgGEBA+&(ce3@C3HBFjq@y>9^wu0pp%#^;*);5?O?ssol=)2?*3_ zf9f~1Co-_ymThJzzJLyoz-c?=r((Wr&|6jQi+O5R4AQXUY~8@7mG-7g5@jY?rj9b1 z`sY7qn&3^n@5urC>kDKHLhm$4cc3HGcrHyKCG~)gH+-XEL>*i%yt|ToEWa@&I|z5L zJ`=aJUcIr;?me?g`67JAvYXUr`+U`Grhac5@a16d&JVo~_vdLKTK~+lnfl!T>8Ui< zK{p1oSYwbuiC0_rDIH-;0D6)zI)FA7J_?q8Y4}s6(1e5;j4a{K`J7FfcppLV zhF-2%P*he5Fabv*qFAET(hiwUmJYqX^1=u>%e9v8e(0`~k8yt*qKVWcQ0=kSLVsNO z8^W}EAlmgTae+550?P%jOrw}nBt0Hx0{1PchM&@2CcLQM)qUj`Sz$>f%kbW)>2iHO zYC&lhxQ z$iF#~VFpt3;rYM*+rRV6)(r3C!@HmU@|SO)rLu>|Y=mOj!^2^-A}CY2gZ*_544vdK zESFJ{UY3hx&}h-J=t#w2@shM^i*TUf$g;uwka^NymQlZUPe%=#G$P7`EWlf?vwis`>~bh&)q%nzB>!zRW>47nNN+7z3Ud>@d1BQi?<6y763Psa>8PC3V)2 zVtWE=+uLcV3=i0=AVp=gGWBHVYhoc9S^nNox@g-W*LJc{cf&-YJC@=bb`o}(!WPWa zX{+UFn|x+o+2Cjw;w?Pk-`2}@)vnZS%3*63qe3jz#%GQP)HP{48|9L}h}%{m7}0!h zyEM<$EJ&92X)_cp@u#LKh*lILN{!Q5!6v1ohdgzz3Z-w}+BCInUri5_R(7U9(mcmq z%O{RTlqbFy7B$k*ey@|Aa)2#uiZA~D+HK9mAGJ(h-x3OH4vp87TkSY)cDm4a*2h<#2ZkAP246>@Ugp=VKmw#g6u<^}K z**2a`MBWtF*vh=xp(88_>~OY66RT!tGhxvj~1oOK~Jtjx<@vzScX4~D~9&yZ9y!245|G5j*`kf%7^g_Q3U+AG) zZ;^*;yB5b#ZR(MQYW-?KsMa4%p<2K3g^KICP_1D*+gL0;t1NM&)MLYRdad@}*YC00 zv;m?LgmOadl9#%Jj_2IQL=%($qS5p9fjg;|%vDP%-vW>=kj=)KtP z3Uezp!Xs<4;<|}WAhtZKlvY}2W`P503o|P<)TBidwPG>7*p!3mT1Rdz^gGAGJWI_< za$|1g7BPN3`^V%&1ewa3*bUfYW>xs%hFwy&T(Z&T+!V7%u9Vt?SfB|Quh7(RpLKFF zR+8PGTH(73O-Qo)#B;928GkIyxht}Ymkdm_RW_=v>jA{RdAD|P;s!^>>6r7%#2cBl z;?G3mt~t}BQ&*h0AvZ^_NXFd`wyz_^J9>p7^>$l2MD!lmU94cXgON>-I1Vpfx^d@! z?uxpCLEI2w1UM`qml)dJ(rA5F%c-}pksb)9ji3e)(lN9Ie1 z$3g+-shx9MvK- z0=3ctksEBd%bGnl2rzt?H(iE7~&=3drFoHDnP zAVvW+VoT@ZC#@i}MqvfN^NB-+b<>GrZ;clNU12?la{VZ4lA==QRc zv$(z7wK&?#sYhln`_%$_*&qE`TxZTl*YYqwNu!8dJHaBIbimn#DB+=Mu?>NvL4P)yP|3QW0u6V;I0!E4x&}yqO}( zFst0>4VGk;Sp(PvK*MD(*C(4baYq29$w8nPQS1YO*LFZ1z^I?0c1Syf-^eypzva@o*bL*_`k%^gt9iFhNA#0}LieM9x@ZbS7uL0;*F@iKm) zZ>ZiP-%t;!#U5RZy$*z7-oFJKsz3U(xHR6^Zm57)p|c*J(*BMUK>;~|zaDpa${(R4 zKUUk{M$T>fv0XzRT7T zQ@uWQ>yKe@G~PG`O1T2cGSg}ckn50B7L%;F%cfw!cfh<30FKg%sZ!ah%>nhuk58CH zk*|a4wTgvq4)Ts~U=@axRLerJwiwvQzHz_4Boi#VLAN)KyXlF~8_Yb8H4Zxw(fpAj zW7#UT0xS{20!1y6UJ|?sC*rAtFcPL3l@#AlR)?LMn!`YSMA&N0+_EN(;9P?z0#}Dk z7E-y>z?Gsxs|Bv6f>qDI(j@kfmX!7-3ja&FWzdUtvBDU|!Y#PJZ4|2lioZrAhODE< zQwsQUfvX## z_@@F??dG#U@lOS@K0_4$aUz;@qk)`?Azd8E0|~1fbTTWXQZfc4rw8^KOTxO8j4^Id zNW~c4uL74B5?~9$W7y1_C1OnRq<@Bq7}&R@ZI5N;J`W1O*H6Sah@-SHuTmr2+1fu` zPA6ihbgV+qqxn`ZMMJqag*lhHaN86O%dc5d_(I;42h<|j-A73M2X`pcJ4Q_*ty?| zv2)6N0>STM=WVMh$yw}tyTdiG$ztbQAf=mg9y{OecJ@fL>HX4edcW>$dcPASlwRnU z;S1fS_ZE5VylZicou?id7|pL1#LoTE6g&4DU#PgQv+1Y86I~3IZRSf$-k1-P^mmk- z21wFw8x4j$GFzn~jp_t0DcYJfs58?mRWP%pqbp*9d2Fz2Tz_s)=Db!*bWxJfg4m!p z-hakucIOAr7U+acSgi|6F}e^>^d|ey5Z>!Xpw{$&c;ZxuE{+$^&Ui^ew4loJ*(r5s z!A!j&M1cS>4!v>gbts)|&^{eBf$Tp5jPs36Gi#6_UT086heIx@*w(7 zi9rkIRyUA&9H-LS+ikFoub5rs#(iSd3>VeocEPOk#{19DNHuRyFeER~fnC$33#+T< z?P34Oau|88hRP=bK`dljW$|p4FLPn>r~x;y^R^9$oWgRk{>PZ<75)E+DCv61eeFlb zNJSFqHMj3GMrtv~o5o15u58Za@1z{VqNk?a-Zm_HkI8*|Y7fCz*d_M?$>ETc$4IGc zX^%vIieI`v#jiVmir)zil=Q-Q8Nbl|Dfbm4y=QS<=TDi6ktQF?&&hpTh&Q1$wEfQvC*&BFns1(&I$rx06bMIaXOsQ&Hc1uH0ZXA?(W$T@R*yg4MJ%&f7Ju z_G*e21Z=I4h?GNEJplRI0WAe;31oK3pnfBZ(D~3=RyMD&V~rg!B=DqeJ2u2a&0m8L8A z=^{~p1hGB5%9#Wh5WYd~0FzW8L>PQysPYxR&+^9r5DAzuN%gS4M8S^W>ljFsYE7vq zMxJ19)#t`!50a@Qt@>oDp2csIb7LV9L0(Oc`8Jx=gA9GXI4~b9r~;V#tt-$tq%{4l zw4hh$$ffu~0tzQ zkH7if&$b(~q1uNNIjMN>|LWIDr#&74SjhdGz3TN3+BD9v0zB^ar1euY2pG!`uixbl z+4qee(ziWh86E&!wGSu{>OBS+8d$#v?G%Ki*YwbCA5Z&^FNgicz89p(c~`1e$ZqMh zC2@;q^I&H}3B;2ayFmO)uB?J)9V(8nLx;T_;u0y86MK%xc;3p4Fiq^LBTJA=dtIp2 ziIZEcICiubD{k84ETt{R#dDO2Ul0$wwsu4-9zHI=8uwJW*pX3GoK$+`GcLF^_d`EE!^y^J87|O7ajC0J!(X6R~V3<)zimGGm z1G@*YX=%Ach9m^*ghNM!tL3Pr7n!L#nXai*8pXJC*&e`hZ%P{1xW8<2k7OaCi}}5x^0Mi5GFz%4 z)1LgcZrf2pyUKxw4QItzIN8~%UDsds5Qy78IaH}HoK3ECaqr$Bs@SSVn_X@Yb=oWp z2Lp^&kWk&E7@24M-3okb_~TG?1=n>X4(3<XjW=hhyDYE+oRxn)*r99FXkaiSo(CzBtmvVWZKtx?%#TKU25 z?oYt55r>IK)dOi7-Xxd_pX#QrZBEg%G}0Q3pgrrZLG404*OYc>c5fQX+=dcGUuVjs z%0@+40*#UH(|fe*sk~3K8`G`Kew1Nh8?`Q5$`P`8Q{H=LOWx7k%=`{43d&iY=r4gJ+64Z(BDe-H#&nvC$xs6K> zi1Puqi~bMkn^2j7nE|>`&IV7;h&OVCUA*OhM3iOQp0=O~t@!C4SEydm0TOZFLu=b* zglq+2?3H`k0%Fu74oHlb36L1CGeBaz6A_61Lca`Om;i~fMG26YT8zA!4PWa$3V_6T zwFHnDAN^TeA5!iK4-h8nnC<6gOkJ(Ym=x%*rkJ|A?S$I+g1i z68$c6X^9rC_7rZ8&Ev7ahL!q$%X!kUwl|;eJZW$u;4hobK(91UR6zZbmbuA1*`T{; z=Lyzdh>PQ&z-efQ0&H8BZQ z$2py9Xwxf-xuZxz8_)oDcEevGvtqPeRM;4{XHFNF22f#;k|b;FQri>8#wCk~&9Mq) z?Dhb_s4$#r33Ml;TbQM#a`yX3V`uVTky?g)T z4-enqwo==_6=vY+-5X&xjt3RO)^Ge(gY$=n=l}X||IROv8xib$c=yv^{_<`2v|iv? zk6*w4{>{_(58tS$!sgp&&wuss;>E-BKpFC@*FS#u9$>&9AD;i8Km6{Q{`2q;|LgVp zcR#-T?%mV(Km78?@BaGq{V&v#=YRa^)sO%4x2K2a|MK0t|NHFuAD&+S`0x!7sOTaE zq(E4y^G8CKdEndP_o!>V{uHWa<3zo6y@9n8IcroKz%BlG&Y3iD&cP3qGieakwnw7h z#4p`%;@6$u#P0-0NqS+tj9=(}llx-QxMy))m&iHAq(RWe-4eY-zRm9l0gQflX#2;t-)nW}o=2fLdj2u{^D@J8T+uzzf9Qcz0{lSWdX za+t&bntb*<4rI}5U#I%!5*`rmhJM~gt`mhAhH}jt78;j1RiJ@K(u#)Q(Z|tZF}nk7 z)sm_lF1V&Pm2&PDbBCk}a+5@Zi-o~sQ-U0A9jCzWV#{*5gOg)Vu~5TshzCn21+%Iz zj3tyF`TV=d!XRi?^jQz3mNzU6=;yL9mePRSc46!(kUs0_Htkn^VTjdY)|qTg$(*N( zOBOs+LDQk_mIL3Hui!nn!HaI?OreB1$n2FjfsnKCVs#odS3_dZC|@Xoyd-!0r`$Of zSD=U;xlxMRR8@(g;)$thHFpjs&}BDul8pPVa%c`A`&sj=l2Jgs>XAgWNpIk-hLV8z zC092aS0xLXp#H&QYsT@(awn&Q<+qNu9wO*%sUFeMVStz zgrn}So@o?3P6Yjwh*|EW*0IP(~h|sL$bir<$glV6ZZyIXvz|w)eUCKQXiEVfx9zXm07cd-_{S1`Z?)v zv{@Bgjx`4Ek}IwL+FIf$yVVq4;2yih6kh7&sy~I7I<|Zof1)W&2F)~_v;Gub;&Yqu zu(7n8VGIe645f6HVodo-$kTV}C}K-K#y3@^T4$rX5SZ zuv^Sq2R&x?6S+Agcq34Sx^+cZAomRBGtB-QCvR@}f^jb`SU{vfY7;W_e}pmT=TA z$49lGZ}o_KTjFK%w#4hq+Y;|Y_lm#JFT)q!skh~h#kG#N#Ucqs21C^QeG}bJ`E`cD zIXCk4Gwbq8LM)wNMsP4^`p=(Q4hzfb3DgNgU-T@|Q3H@z%mf5bC^j&QkGmqevfQFy z;)Bx2+yqFnxb6}S3XSSKbW1|0>A+tf!M4P26*|%X?`IS8U+nQpV^JN1vJ{==617Fv z0USSHlvdW@&jatl8U89n*9`y`*ZPe5gFoRXG0bHxB+@1CQCu`W@cGZrMguJIKlK}4 zT>~t3{3NAR1Zre~o%U1VZk9TZZiT;D;Fr;0-v)=X5KQH>PfKR(zp8}Cx#+FQ*7c2W zIW2TvmlBn8e2&|iRV>MN0>Nbs$Zh$on%9~Qp?(|;rG1j3MhIH5mX4X9Sok@^(v~BE zICMrlKuq}_{nrK7rku|7A&3z{K@D>3RtFfGS9ny;Og?gXx-6i;X6LNH8c#1X5X;=e1R zg}G0jgyg6djx@#iMAn1^VRxb2Rz8LOU5t9luK>d!!RWo#9{Bz24peTmg{O@Na?62H z;$wX5t;YUEYdT!=74&YGnbH#FQv)v$xrO5yDW1Dzt0Ei(;Mh}DD|pGSavgWY+H2-AQh)!T_}&bd2# zJOye<=Lb`d^iDVpmPsy9u*FRQLa#uJML&()OVfbK6Q;q4YD*H$maq3OA0Ha0cN=D0 zBx2B7Yw88*@HprE@G3XMo}Dh z!n*cUa*YKmNZe_#o9tjFKt~j0$N2ZwCJIVQ$mr?f>P)L!7AO6I(Oinpm0NI4aGjnr z6}j7K4Mth>S9wxg`GU^77sVX*jull?*D1j!eI<=~R1c;X zdIYn%)<~;;1zov6!ywutXQZs!WTQ*@EV$CXcBBy49Lt((5dLGs8sh>c-Hfd{7>pTJh&PPv}7{IWi>^Q?*GG zW-4nIAK=S1Vc3(7Z3WvWjk2+k_$c?di~07r;dVNYpjAeK$vl`KUgQ!&tks>5^4}Qx_Kp)ujDF9F0%P1MQFyQMI#J$1| z68#&l^#*$YVu5XwSBQpJKo7*YS-kSFS-k9`X7NUlj=w8h#c%SEnYYBL7`LgVEKN}{ zrk)rTqhBqcV)RE76{Fwy!o+l4sEpv~BQCkH%POKR6NXwJH=|(OQirWQjTjNgvj@mY6S7)>KHVBH{rms?pIFIC3fI#Vgzx?Y{>B&RDGTdt#{mVCc+PJ2=+kgB1yLWm^qa3^JEr0vz`#*j6?oYo2 zuJpI}Jo3XY9*#SMJ!PMb&;0qXKm78|(+@v>_wJ?WrS#}#&?tW$ef#0%pPqjC`afR2 zd-wDgJvwaY_fM~%zWdLoUp(xGFZqGS{NkbATP|JKj3By)!^WD|qtT*X)+nd#yx*U0 z4YE45Z`zKCf9^OkOV^F5OKGr-uG?>9Mvvce(+@^T3X3J%&`F+>ZODcS`#=V(64The zm&8V$7JDR_hvBlb55skCAci~9Li883)Dt6+liXb)w+aL7v*o;^ z_TRq1ROvXc+aQOwRHK+<$_?Sm+#EEgdEW@OQMhCTzg;tE)lH8DDR&BY_N9rhVPwTy z2j;BcI-QsUJ>4jlJq2CLL!m1VV%#F8I@mua;ftBXm zbS@bVdiIL6?UDxnxWl!mSHwCR7^$l8le|2*5bcq;?fRu}yMEnmyM8AKj6-F3p2R9D0F6YWe3OfHM z>+*dk#88;z@q8YSw|Cy)+7>8DV~~(2I?*gMCn`a?Tg=qme!B5KV*SHeB{Int<7-cu z;9;b}CFzavpZ!Mp{-1}aKGBi4Ia8pjpaMR!BQsleB~);O=?Bttc2sV31a2?{3D-?F zCqD}Nf?N4W9F!g*`^SA@=~x49fC^^!Z)6bXrAr%V9sx@P;q)*ahGOH0dH`q1VMbwG z!QRy3O9A^cEwW{QX9x;#&-!LdN&D$b4#-SUui2abeYEdjn zo_46!@LE_zd_!MWJLvFE=O`8nrI?Ac$iVX=z2+C#GblwWbw9(_Zo>hQwrR7<%1jibkBR zudTzI3i3>-F^~W_`wLQhq1LdDg`S-Tz^w>Z1bDe&8_3lkWd=~mrN#|%B6_ej6KKkj z@WyNJKoLq6vI6qyY(wIZ@g5+9=Z4S{%^bZ$%2A~!HJAgXm@kF2Dy6EkC3I|RD8;i% z2lpjNv;n|sX_3%Ow7hju=o-zvD4NUrfu8K04VzR4kHr-m;G@J|y!qi$JZ6pmT z`kN$+@UJ*q{dfHw)~y|0_c>nC5Ra#=+t8PMENv9X;zrEI$A#3~QcOL$4g5ytHt<`~ zs}gF#?UR>fOE_GwNM05UY4{;KC(9X;@Q%(+Ptj975M3ijLW zE0{b#W#Q=*0o?wByH6=jb*4^{$qm&l+i_QJ16o|G$Rwe=#p-zqvX~bs3}pg;4;1X# z^WVSx{^{M14}mA^`TzU$=DU}_e*fR0fZ-n4DiPNcm0wS1&~d-{{{7!3|M+V#bZ;jA z`t|qU{dMw>zxw{i$-n)E@`yC>hX?$h0?DZs;t%hC`u;UIJ(X7c{rB%*|M7|9h|hoj z+pnm!`1IdDK0N>3U+LSgFANT;rpfU_7N3>MhZ4wztcF63}n>Zt*8^JXXH89f^A0rBVIqrw`s% zKNam)ILpalWCaxE@4`2>Q+m3bX&#*y6cAw)&6`~%7xoktn7OQ@`M9Q!SXLwcx8BM6 za3X2Blwu2hD*8(XKGiMCN{Ne>+MgYUL;kTmrW6y$4kJUCr({dTd|Es2_EHvmt7Ojo zK$=8KPL%Cwc4|n^4LPSYiy|rGj9eX>z@4M6CtSYCy@Z*^#@>{> z?esg}(4~3uohd^#nR)AbAr5;yWhGt){M=nuEN+-El`Mmn{;`}-+>uYTb3975noi>{ zEbM_#ID4ID?W^q1NcO3lA-R9!#Uz^^Q?OWZj8snCdV*IGOLQ#9 zF*cBO=@AE^#7j4r{Lh`iZ*ao1|-Tbd#hW83@I%7Pv|L(c~ua z8(*lnt}~eSia;0Oa#6ckzB_AJ!K*@?i$&23ZgH*c+`O@DGf#Lii~)#G+h05rH1}>) zIo1n?NQ`FWq4>aV^>j!y~&Qe-vHs7;_SIy7a!sKAk32~=gfU9Bnv@FI( z&5c33I3W&`e*tlnJfoAJ$MZR!I+Z-3B5p4s+I{jkm};_1a`W~^4+!s*{X@!mo%v2Z zANG}za`Yx&;ly38ni{e@O9=Nhzl=nd{cb?LWH6#OX3ymyjTh)?JGUf~Bn4b8#&?2{voN6)lMaS3E&*zXhIafCxm;);^brOX1TWe zFv$P(^|NQIiE|6mc*y0&Y3LDuSy(;!gyOu%T#*K5n}|@W0p1{5b@{=~3_MfK>FC!T z5U45 z2X5{>QftH#&!@sHd?61ZyC04t8kYE^KESy$P-3>DCcuacT|v3bFbUuuvyAM1@BkS8 z(GEINes9fK89RTpDSj+gEWAHl;*`M09mFM5wOs_N_zSJY|s z)Z{fRc^qjtGU4pV8=J4q7bTN#x14-s$)3G~_)4JrUL*1~0m892v@3#bw1+|2(DO^8 zII$i|BL}Og)*;?C^Gv!g(f8ZrTVoV`WIa`ba|iY7bDBhlU||{H!V=VuDV(>=;g=SWU3-6E6z*O`*fXi_ioYNolfnyydN9oDqRL(%jZYU%^K;GoH+9#4&*hLUdTfkhPi&T* zPw1`>9BbgI*$5J$GvXVYhnk;R=bRSDnf@axww`sx)~ zKpsb5PAsGdJsGrF#)2a1dL)`fe(7eBUw3Aa-wAe5dZAy2FLbkLA6w)B`L4xG6Xh+W z9$7%%uNDO4{n4MrrSblcXV;lUdy+CsF^!vT-H@4-;~P_PyI!JjZrZqgVf$sBI59Nq zm)U+6Y!bz7J0|sAyrwE!lm$3m}3ersa(dnTGtgeSsuu zO+#i2=Ml)kzI(I*gLo*rN24Qj!cY#VVbFRwIhB|$(?&_^(GCg@PDK+Ao zsW%*E3X-0Xdf*9Y`(ZY+AefntYn1rfZgJNBr4G(_mUJADEFgs z9db?BhxkBfFI!%CS>Emn$O-m5*Gp9=0I z6=>`5yz6f}M-JI^uQWBsdx+sZhLj<6PlkmHh>p^D+p2n#%SE-O7mT$=&UJ4pkTVSM zx7eT3x~HjqsAe}NvW>NiQqE5Q?RBQVQUoNS)65AiM$MO4m6ApM7MHkCGyL6*6|aXG z#AIS))FraK9m%C=e=)GaaP`H7T4jY%>~dgL9+X7@%Sb_k1@wd_EC&fK9ZhxRlhG*? zxx}ccFFQ@G*8ha3iwBSKMw6g%CK9{_Rnn=Nh&{lT0wHuX{p zDZXnYU<%EqrL9g`x@mVo%}e?Y%oaVC)MEsP5hX59#@=KeutN#EF6JjunQ5$#6-1d# zWoFSMp|SB~1SqEk$e{WrChOfCD#$1p#ahfc71L;A2zzbNXj=NbLGn5WWpIVDJZma+ z9m3JbaE1=ae%Uf(uwP`aQ2SZBLq`_@mu%6{7{Uyz+AJ+aiF%V%K@|j55V9Y-B%#W-MOkz_y7By8FQl`8OW-M~bH=WVOWB@10 zt+t<1uaXkM0|~OsPd=)>qpM9*d0>KCGx!-3)MYYIlGZQ%H8ZqWV%l_N&`C#R`;m=+ zTOZ+_3j0NSVz5WqzJ^qmSvkIkNs-$(G9UAKxS}-ijWYFe8&Bb*?VQr2VWCWQHZ2gG zEf*6^a3-axY10G2YL!ciGAXSdE_a?f6EJ?#_c7_sxIt$)!F+Ej>y$!*uSUh@X5aV<|^ODi*4hGpOD(sJS&NEO%oE}I2v{^)o@dzhQw37oL;?OiD^3kETfcs}^ROZ(3|D45dp&`?^zU_WUTjTqy2fe36WA zAJoRLSGs(ee>EqW820JXSd`kTBmCM}KFOh{t@5S1zgjvb@DO_CdD>h!r@Ce=i#^|Y z!lGU7?OMKpE7K3Qpc_TuTe(I-38t{J-^ilyek(@ZTVMiP_%u8U-x3PfE4nB=$V0IP z=@lU@e#10Z?Y>mrha`D>Bu3%=(xdQx-9_R3P7J&I3;i;Dp-17pMIMFkTCC+p6h8Hc z&$a1lK@{FU__Me)-q%LqTWU#d3#ICA7KK+fW^(Rjsi&xlEbkj76SHSa`WI~;lt(?- zT+8%^AtPwIteKvHsn}+zX@UeKdz7jE(X6JCYMoLi=k0~&cx4GuyXGgRQ;o(PBQMQN z_OM69k&}2vME+|4L&+^z0+x<{V#hx3Ry_Z35Q|dVgZL;+_B4ntwfNJTh0SP~M;SDB z1~$J38!N{TW?jJ9)sQM&gG2_WXPh^-%KV}}-1*XUuaoD@$Up81(|XNtd^(mB(S|s$ zjICRn8<1!`KA{X*=QpxF-EYMm8dHwiA04uePgz15} zp~oxV&*NpcoyQwt`}TLmtME;}mwQWmFYj6!_wv*e+splG!Cvl;uTSE>xnY-YDR4CBwf+f_y4uV86e z57KQap^a{P;p(i#qL4%ayA|v zrsd)>T%SQl{;mqd3x8K4R~_venNrI9viDse9xZ<{nYnXZOK`Y z`?0V)4kyBm{HOpbAC=WT6|c!1s;<7PsAL#8$i5giBn(d3Zdkb?!OUzZ!PIz8_7LAM zYWSFwi2q1PEp-{QjhoRz#vJZEGO69p!<1 zG<&%IAQgI%0Oqt^IDbhomrUs87-a6Ij8byI!}5=Iyp$hiQ#QokA^@GYD*IdXv;kY4 zCASNH#5YU237l>tNHm$T^lXC>!g_rvCPWQcPi3NYz~jS-qhaqMqa{MIu!qElI8h=X zSeakz?y+Iz?y$nkoZRy0nH(iQcE&iuc>F-kGioMbGB#qekuorZZ`MywGGHy)no@^e zsjJ=k>W@x&osDOMRuJzBIQr${_=r%|dRhHlQqCL*aw<@D|7Clj@3&CWI)SR`vb_@_ ztYV<*Qq^7@GbvDIQ7{iwH57`MBc~s!I_C_{G4=$q_r|fO3bc4N!c8p@rBfbmg1V7} zygc00?)LVG`@-U7@`c6g%oi5#MCX^k&@aOmx-aa$!cF%quIqeZQ{kqY0rIDUOYBEQ zKz`X)OnAb2ko=3GC{B_xoou^w`W%>RZSxe`gWq?Uyv@E67usBSs?<0FGO`^6GpEdf z*@nW%TSH?F;abg|jU6R!y^*mJApBm_L2_-6uR1v&3G1i?7?K8-nT*dlD`2^2ZgG6+ z7O4=|#+Vp#cY2Zb0MgC=p~6KKNdZULUIO*I`=!d4<2Gmu(EjAbsFP7}peD=tQuOi4 ziCtc!O!7LDo03n&)D{F!Z!x(!pFOrq=1-hQH=W#2K|dZZ&99o1Tb#li_a=Q}l{T3@ z)sWjuvtzx<9cT!iC{r(IPe}Pj*Qaesw6A)GGkvR^XB-f4cIO9H?GyY{VFzf*Ts?1rV+lSx2 z$6YzYjj0R`5^>M%@c~FeO3{$_5wEVOVs_Bfbflwm*3*O!1y+L&9eSV4h~{MY^vsBt z@Vyja>!ck0Ankd7>#9j>BZ6vpK|ptq#+-p}IRQN$H@O!?!4*9cy&!(+UJ$?TydZwZ zV>9uE@iKnleR@IeSzPOQK{{jzwuS?6F}?%&-|%djoDhExNsUu}89zWFnt{WkQexwr z-z7xshmGlvSLYw#;AEZ}3v%r(aZjFtI$2wDUYR9LFP{L%-N;PiN}ZX39$OszHdA8G z2Xhlt)KcFIjVXqgEkLL6_LFAev=?h-3_(OmFZInt3;i|{o%7lFabfV&@MiAUDyHT( za%j` zp7jR}7K~%~KIy`twBO_I()oPQ=o{h9W}RGVU|GkvTR2PoJj)gisS$vKSUMs##Zf{a z2*3}#L)6qf0v;&^hFDTZ`P_C#X7s=_myC}(L`qYBq*?dhkzz8a{wkVa*1t5Gzc3xZk#w5V=J8Ze z-}-tXFNGevV%>d&&vQN07<8;(|M}TJef`W3pYHWkaU}m;KUGC(%Hx?=DY;XRr`(C3 z-s5=*D28`^?C~Vz|1;|V+(z3?$II%VE4-J1WZ<50O>bF*zyjmHVNo9U5C8QH{#tP7 zHT=c*EUtANpvmb;I`UdiN@yJaGu1~EUJ9KvICxh@&5MZG}wtN~h7_$z$TMXDj z2c3BKSxeEqSw+z;Mt#K-t^5W)pQL-yH(&`X4An(%;cX}N61>-VQkRvWJSjD#HHQjg z_--(<7yI>YFtO(VYXcX}%_jCm2-$5X_7cZpe_~HM4=so_Ipqyk4kZ4f^N<-j2k8U) zhflA@0-AC&=6m#V(qVA^=MDzv zcVhORztAtk7v3ifP9RyW@ViddRGWOrRFAyvV2HnlUu%s~GB2us&H)``(D)0Mv-FN%q+G z3^aXo87E#m!%DK; zf%S@U5L+TVdwRmS@)$wd-<7LfO@6S z>=@WBL!gJ%-=~9Q&>WcqTG+7!yiptSD*kTwiM!B4V{lA!y$A~6Gj^YM^_VA_dEB>e zQe|~95Q>l?%-E6r&wTv$;p=}kH05f-?5H2fvOhIN3EE;2nqAUzRE*JC+Cs{flLj0S zQb{3`sFg3q>Qz5^L9CN#lH(AN9a^pbtV5AV3VI{i@~JR@Tp2H;=>pRT)-3eEMS#5- z$-K>3AD=oIuCSPC{%|qlr`_y}VoY=7wR&XYyk@ra`Yh8w>y@I=tUv}w`t}W1uks;a z(Ib3Y`uy1x1ys^1e$%jU4OkpLhDar54=3Vb_cm%@0$*+~E^OK%OYACA(HLA3;z(5h>w>A$TCdXh=dl!x`g zW~oe^@t{bgh~Xs*i=8WU*aW!E^#NaijcKz=i;b7c4z;iAEEri)iDlA;MD~Q@9EUg% zG_Ham(^}c0Vx?inCq6SVwg=S26{yOOfT*mOr_>!&=2q|&Kqar+d8c_wLVw&8pz{2y zjOqGnc5AFKXSY5ZF}Jf@?+z_^9bp(&-RD|TH<8_w8ZNS&=T(i1WS6MUxqKdPe98(i)$S~ z%V*1O9X4aud9>9yg@*(0r{lGz<}%J5+q6@&U<#C-r~6}MUOp)0bN^|R*G#(8bH5J8H$C?kkNOu9 zQ%;+l_c|t~9JZV7jnD4)z{tGADR3t7gmZUbDB0~dkH=GdU~N>hA+I&llwi3Yn_ujSY1C7cLW?@bVF#NaBx;2zsuJU#QsFgvpsIeTYqa5 zenfDH8Y$k4|C%=_Ds)sR^6&~%OFxewrXa*utXbh|uI!Ct991Q%xw#~jo502Al11EZ zVT1k*Cu9kgIsl4E#_gFR8YeO zLsg*LETgFt``kuQec3D_OYz~&e^%C@ppcf;*;+o-&5ee7Y4SuaP5oYfsIMd?_69Q4 zf`oOx-2(NRawCU+-3q(WQUYUd`rOaX?HoH$hgf@#;CQZ?j6eq3s#KL`ivD;`MGYHY zSu?0Q)#d{tUBhPjHO(E{R$(y??pK)4%^p<81rAJa+vO69@15Y>TR&qJu zSuIR@lSA~`T`^BS1EA&c3R26dfJ&m;wKiCBN9VlEX-zo`hwz|yZlXMHj5Aqvi6w4+KRX6WB# zs@*~sOXC{@YEq>1>I%5U6%N;>#8sg|<2Xi*!MYatc!PoapwPMWEpZ#mBzH4JDnQPKk8{X9_Qkp|B4jk+uKa-HLBxV`KvYR^RFMe!DBWeuim26x$ z*n%!{-Vfwv8tWEX{zC&gYG8478jg7JfPRFNV?Dz2W3ye{;3+ppUXkri-5l~Ee0n#> zMOG<^W;~y(d$&6uA9vf#&9S41=0=W>eY>aB7&KwKb7PM<%rsuQo5TOy zxjFn!#FhFB{W5&veY!dBSzPP5IRwZvMq6VwXkHrSgesSan&<+Y^l1MBHcIyK2f#|B zo19Mvw(T0G!IUdy7{5q+Fk4;LTpTr_l#4wunbh)m=)V`C6}Q3L9j^4< zc$597MVM>Kc(Dg(AY+R?7n0zwh(j;;MK384=n~6+R)zpw>q^O+rr!(m@@6>DE8Q*L z^y>5RgM1l5mNl2j$9OX)hWchW&<}*L)*ot^W{(TtK0f#SC(EYiCdFSg%J07w4)g<| ztlpL3&&=5xfUI?JpdSlgt*lo+7N+V_E$COAh&Hcp0I7s{^K=Eq&KvDNt1rI~1+ZGf zdJC}1o_{SQRm~a!25Q*#OChKxr%w+xHMtDDA9V(70#s@Zm~i>5*^td6%}_^+2x$%WyYix~C;^1QVw=U?#iw|;wTC=uo-(5SNFCmPmx>jvPY#c0 zwuVd`lUJUDqgSMH$OF zkD?Mu?GbUJj!Z1Za!ugR80Ot7;5#Hp3Dta#MtO=Af^gqeYydu-U5o+Q#IB8Kncwh-83S`D>ZSn)ifSt zw&I;r{L~ZeHf!k9(UgEl=(Zwk=n=i}r%M7mHG*1kj_bB6ltgG8ZDsBE;?&w7Z(G_* z-1G?6>zn{lSnT2hA#%An90mi)QNZt@wWLK-?eN$862saZ+aWhm^0A%Nu0e{0ZUS9j z8b%s~JNwBv#CAi{dqFzMFtNIQaf=|^eK%`2j^$0@3)_v*fTx1zE%n1+h3lxLB89Zu zQs*BVgCs$ZFH3Y%0@uA|5&L@)*ZY22wMuj_EEbZ%iY!w05*`vmrd{`x8XPD!Xq&^$ zU64F{fqiEI=Mb8}rN(?C>`{EJJ_ z(F|Mc9P)i`F?#$2J+jC(5lXB+tzF;gYHg2I?xdN1iZJ7=2`?sYCf*mPEj^oU$7L#-)TInakP zk;LS%Wb8bDL4%-2WQ(rVdjuw4ydHD8qH5gn@y*{}sI$d0%@tK5=2de=AJu#0K-;yB zy%|u8iQctUdNP0Nj?%F(4^q_W336C^hd7fyz?9xQzjgS`V&k9%Z zP0uq&^f{7go!ro8(maI2Ky){;)7A5gCY#^?&HAyP*X!psX-FSCi^6%u<{?XKQ?G$d ze`!*pPMK4kItnb=rPZk(>b*|WkOyW=`XC+L*H~TwDfxJV7wO=iwfWuUkm`PH)z3Ne za-Ez?pG^8`?ibuUY^EY@9(Iq+uuKERQE&g;%WGubBsy4t6e(}Xdo|xE!Ou%8V101s zeyRbyFrtM8EtCFWxX>8z0}n`O+L3uh>ce@DNtwPtGx?h|eAa2C=T<1R3J=ZD9I=kC zj##L|jr;+g#zZ(vP?iq{e&Yqm4Ld|C$n&Fuy3E=pa@CzxK zsd(Kc<54Ad^{V}K=LlF&T|X8R)J5nQ6|WCP2TiNsEapG&wM#mOLm?si(45iJ!|plg z4{gM@-^zhO_)I<}JhkuJH$_D6WAjZ%Q+wp5FQ8p;dOiwTbz+M0Y$@oeHBv}oc{kVP zCdfl!RY$}1JraLnJB7GMbO>{$nz)dOLjPY)Ow-!kqY8;Wm6_ZFQ*zHu&OcwG#rbYs zx1idL6l~N#B}|?6p^3a@TEtzN0ei(m&V%7uuW>khXils1=abOFmu9~D;3s~TKHeQ)-`Ue|1_DdaXng_zOPE4clk%l*pPa4R_B1Xrhu&@*4@KwFk+_2Rye8xD3 z=6Yf}VOn4MjG^{hn4UM^zkBiWJB#a)aPa=c-KqNWd{R$By44MN!;h$o$R>21(?wko zrg%V^QZ~?TR}4d#*FINJba-o7@(*O8Y*LTh;ss6=6=_@b1WxkO{n4A;HO>-jW^(8s zzM-=L8;d=OGem`}7G%!{OR3?c{Q6O62lri-I6G8rOB=-pOt{Ek8ji9jAj_SaMGOd~ zlWk9Jz%p%Us|}qkC$`ZAxTudv09g|*tXV7-=TblpSw6xuO#x9##Z^;4E^kAtPPv|F z6SF>!`?`-7CYIXX{PV@j-`)Sm4{z`P_&gh@7Oc|qV;|#KeO5#fXli$5Nkag zZ+`M?VI=SONo1B>mOsoh2Ne`h6%&<8oIWjsl}9U`d2g>|toEw- zX@PueSOj0skT#eFRXa%=<;0Ow9|AR)575DK>G-cIoTg&k1bZyNd1*D7D8LJpn6Biz zt|pAw9d`--rm`o?5012swAvpEP)ltvw$LS%cseI-DZJTDQ!6h~b4n@frO8-TU<*KF zssinj6K(ZjK3jcqJt8IabDG3jmLALYD3%XHJjZt}@x3Dc84}djuh~>eX54CYrr#c> z2_)9&b_@H0(j45(j4?~qbZRgsMGpHLj%_2CyK?e77U7r^x0bxw@>|E!SYxGFHv%b3 zmIy+CkPNmv9&Q;y5H(h4bdZR9b=Ms0`z919#CrCe8MM2y5{pNN3K4Skeo!H>qvZpB z?nx;)GbCf^=B;CGXxX}RrPrK(iWSTLK*fw;7nC=1tWXiTCsZCj958gLT&gUM<8N|l^W$WwB) zzy|BoP~F@%Q)>7w6C7!ONieYKrHRA#SIM))M{Y}m{kAU1Ne}_sBZmWwfgl5@6TiV+ zS3N36gY}cmw`6Z`DX9MGMZ^g98%h((AYws`nLyRGTn zmSvl_Ta|6+>EgN;nmMEaBIty8gDA*feP|%ea1oR7!dMhYbVq3rsgL)r@Tq1~ZVxqc&4xqizvD&GAA^`)+I zTRNfW5lQ9N6qS<)+ZA|G{LZ4`&P-Zd(O-SVdjZ5tSGoRir*i#Hpip|CUxpXD%JmVs z%5Bq#qsmP)GL`FB3skOuHK|;`@s*P6GL=hHU*TztBnN2RQUfXl*dWeA`$NQ6+fyz{ z;|ba1M27$bCV!{%9Hz1=gY9`3*K$w3LG9@09+W^qVaW+X9wk@yM1IDR@L4!|m4V(= z`W&4_Mx<~#24-c?H?bx{UXtV-%5a&^55j|l6G*G_M40OKM)j=R=xCawuLiYWW*S)Z zyZZbzvgurbw#Yo83SF9{QyNnhW2l&t@sZ02o#6 ziOn=W87ilufmLK+^|3-VE@y%(VTA&WK+x^{uxvOz8C-@+7+2Mat#U1@;4o+>wuWBs zT4Ck+NAm?dAfR)m?7h+*uh|)#jrN`S=QlEY#&1RQuU3`?L0LEdD#9vyL^A(~C!;z$ z>u)C?Azqzi{IT5nLbUzjm79L?va|f+jX)}YR=f&tahtu`y{ zliH7S868aLUZ>k9NS@$)jc1>${Z5gm7MjbUXf9X?qS3&wo-~XmOv&qX^{lWYHWMt{ zqf>c~!E7J`aFRqwpzXxlFmhbQkZg3E#BylNX%OgnQ3{! z@Jw1>waF63o@rX1a^6-;%TuNqri4B5JB8}-RO#v8DL(_BZMd+2BI!}#N>M1>kKsb% z6u>oIOs4PEJO!IBe$H3;|NVz|O4>VAda-_cb+Co`%I(5##L+HHGcvo-uNK&a{?%j` z`i-xYT$kC0drUIo@gp^-=6oHKe`^ie`8vPu)}Yg8g>Q{P%@oYcFzYDSbKA)Dax?4+ zIBYM)?(zv1_KiLmw=2^AN%}^255)U2r&~$iDB*)!>n5|X1o2AF$fZbKS8_^nl)5E3 ze551&K$<%zJ!G}AlQKfC%^+ae0A|$nngb!XuRY?j&f7YX3QH!!RIiPcpiHW1OhUDU zcBN8Ac&iYyAeM+PG9ao5PesYAI=_<5o;8D#@D$Jw-{oKZEd?U`iDsTD$Qn}XZ5*V{rt|S?sj;}4fh6yfQD*a0lZjV%qKGKg zRA3EwxlCxCkdJyq38kVKWtIIYh_M6>&l5X3DiRCTEx&r=8B>K9itR%Ge(`~B@j6ep zPBlJh$jXIR0<~AD@Q{)@o;Xc#w@oo-AdF?`tDT54?nAv1kUlJbJla_xoF+winFM4y z%RbWbJjGL7J$ERw9-oFHAzK38ZWT_JXWaigE!KP06F^htnRaziE9RJ5Q-wht#CAiK z+f<7Q;vhb$QIt9Cn(j;-c~5+$7`65^%Wk{bQ)$IP1itNWV2l&HloAQcz3cas@V%=- z86(|AT-m*@BoDTnscAnDG)JBVeFw)y(KC~A9H!(65FI~FkRIY`i=WEsUnBF3_8XQt z(wo$|Jo7bPjI2_A@%E|A( z04GQS#V@kkO$Mt*u^T42Dplk= zkH6E0PgbW#%Ku28ZpkELn1So9$jf`Jz@yXtTP4FSc}c!_UOP+dvw^t%*Y>zWn~iM- zC8A)qRagiUy<}M3+#C8mY+dV&=H9$Z#zaoeHD=#?@!8p%QW0XR#K!VU_X}x3YSY0r zNuL%#1eBvh{@Okz)TPZ!pRT|QSRfmh{-gPqn?-BtJpC*tPV0-TFTcPE2v~_ zpr9rPD%Y(`*cHhO}=#LOHOH!-fN#9)hY_bQq$EQ)l|7q zjB35t=2YY8N(4PKci^~YM}vm0%AeC!-X+;NMn9*x$Zyeo9y=r2hO-EygV8kf5?#>H=v^BenTyH zxab_-o!RUlJn(1q4Sk*2Is2Pi%j(=4QbnR?z>C<;Cm;dLljQU=;j5#v`wuz`eKi7N zr8|46CdX#Uv_lr zvvAJ=!yJ2F2xITu^%6FL`fJd`7;4y3#wAK%51j2(r(m^$b7w9mBOC#FOCYkKGAnvu z_1ub}*UYvHh0oJMuEt*dL6A4fw%On0!{{ldlP9x6gA)7i>fV@o++SlAl_pF@Pet}# ze-wSnoI9(OqRtUb31`pJM+N-SF4`(Ey|jxw6q1v;%87Js1aNa_j!Uzx?JH3@A`VRj zfsmz&AbJ1f=1|R1@cdgfklYj8aTnO2kTtpPOog%Yct#mP>6tCleOX@#EFi}$G9CQR zq`9=Ld^9}-7{rFA4W+_wO#8kY_&Hhni0r#HVevW$iE{&<%fC}5m;<&w&-^=*Q!VrD zkM}=+{Ku!a_dnmL%i|wDeSG_;`_DJ8UjE^C-_i8({y#t8y!`!7um5`goA~p$@#pXV zf+hL!!)N=m@8)vpUiOml`uTSf6)80@OW>Q#zpIpg7ls^?@ACXRCGq)cMEE>*|L)2e zb?f6;cox{2X<<8($d6P}D6`CvFLp=>&eC~Z1rc?9#S1IqrDxG$Z}=0~K0==GJ3-c@ z2gb|z!snSq_ngVKP8QwOa4a~zf*d(cQ6N)%zFWjg^X>P5sH9VNK%Ht z0aH?@L=*0yWe?33go_!Biy42&l+)qtAtu%Gp6wIq31Zhkx!5o56d4Dl)2gD;PYC5= zagN%wbL(-7c{UTR49dk^u2>P23o5obGa_xV z_1K|Y?5fHhk;)uf6?oH`J}G2{9(PTSa?#TDQD2D)*)Lro`!!F93fb=j4V)h6m*Iu3 zkbOj+)=n)#9I>nSIO~A);qzON*6v?T_KV;6O38JZLf&$U#o0Vc+4~AnE^tKRz8;gJ z%U~m~qI)lCMs&;V?nHTcmR%ejww5y_r>oqe^3om7B~7=uB`z@xTIJLg znJlv6I8nsz6!*#cPjZ&8umTuhB&Cmb#N42=!9~NM46Ul;Z9B11&kZXZ-T>R8V;C_{ zAC1crh6mqIuD)~rjOBKqrO=(&az6OsPa9rIYPUjqU$6~*U^bxgyh(_hyrJ{FX~XHs zhax=L;>6sZ*eche3UHhIiLIg6Bd*PFy7K&^kwg1~7Bs*hD|%L8X)KHuV2cAN!O80J z8=2MPx1y1##3z7R6Bb586kLx;Mxt^dj(}q%Be5nd!PznM+SIJLz7mZ@zjPzfuR9~r z?*xLS2l{1rp&N-lA~zDd5xdD5XC2|-;?)8p(Mj=*Tw3o-(MKCBqm3VaRK!d%vOsk) zI0F3HHL)>Bg$8hNj5jba4N72RG_dV<4h`Zu*ckL-AysfZ``irZ6uYAutl1bPnW_yI z2_*n04W)5_JPhd}CTIcsqalUAnPBW5HT!D41Ygxy8x)?Oq@-CI;xRXSiVTGK^I?v` z-6xm*Bo=9|MD`v5Jm)q)hm6h23;6I6QM~mqGbUTTwZ7<=EUevcI$PNY48OVO8G`TKw3w}epNJegM z3;1#0e-b-?M>vg^Tg^AL3rqo}_i^ARvKW$;%D4@eMh~yzF1$2)$e?E}fv&J$X|<{7U#X)cilT7zb5Xvm zK?)c;##A{6?;4dAlZqNfM z*hpJlcA_T{)lwP2#()3*g)xJN&>oa| zLpKt-fDX12VrB-6!gQK4s^61|?o~RWB5ItLow(YIbhJWV^|*L{g{1e8wH{1DHbtre z87F*?-GoIq4{?JTu!)HZ7|XDyL`m86YgY86y-Z=>GL6gGl?2k;Oi&?D;lUCVg*26&p1fgh}OM&SZB4YL0!%%NV~71WGK(R z5ORt@(%$c0%kN>;d$5|U9qx)*C}a-UeW+fQL966VCmH+1p2pqtry9Q5gFCvUTyDvh z3Y4o!130via#n+BJ?TSB`cMF_Dn$t=%#Zc>hcn7fEgbWsV@($F0SG0-8W^mi;Cjr* zCbB?E3X-v2*zHEpR5Q+%7DqNySgs~4g>hmAxMro!_PhZ`1KVBazwsF+GoS1Qks`jT zlYb$k5pW!XX=mIboJT!h7En{b9<~E{f>MY}OrH40mpCUY;EG~kQA+M^4NJ^whv-!8 zukZAk+bPZ``gYJ-k+}mIv<>{Z>2#9F+WT}fTp1e&Rmw|{!4f;Je;BVxgkU>Q@#55G zX7fXdF)tw#!i4O<=0b<$LeGau0~4BjkZBHqhRh3jb(XETufGKWv*Q^*ZtCaMk#i|r z2p(LzPRRy#{1DiNUol`qd}(u3_s)7Nj{>KbCb|+vx80EtfkXJQ-y=+hz#-EJHd8Y= zE5%TnmN^-Oh$A~3=%O{H3)0bxJ?Y4&zRzJ_1dL83ac{B~-mg(rWWb4NFB|K3DAU_Tdah^|&AZR@+4VktiQ{hsUHh zlAajCv#rA{BEzWP;VP{*BGNd;ihVx8=EBMy@9?{5N#XQkbsq>Slj{hclQ>St@oAj^ zUl?bNgt8<>1e{rat+1_q-)uRvPibG!44{b63<7%Gz>YZ~^4-}Wq&-tGvvV}p1$2^6 zSXPzkNy*1F<8$Kfflkkw419DWNSEE@`)<$s`dzak*pYlBct?9cc8qMVrg8+Gn{x&oskI=}W71DO!e-upTagnjpo#L|Tf}mk1cA+XJ1p z2aSo;k;xO{97X||b>&no592Hr8E4&t-(VEl8>hhn_n?0@xd;75=1uim(VNe`dQ=)B{k0tU3UA zIrRu2!JwqEKkYs>mK!q1k9=#7NFhYl%*msr*3aIfjW|Mc)md-xcMiq{#j+~CH_f!_>D|^_^odc2{f(zhA81Q zxI7kjDMZ3HbAl&bC*O0IER2xb9dN3&`wgP+J&Af*cxFfD42NJH=-jR3p|$t;vn^qT zPb-RB?TKBHE1wBob6cuh|9Jr<^c1}LtIdC$!6S4EUyum{#XeT|G6KqEG;eXEegi^q zAMWYE?)DoHg3^1#KNfi|nNs}=07A&+K$%R5Z!ieoU=W0g;7M5yde9|h`JEVLbzB9% z{04&%aVIzhsD|)baMdR6!7W;&$DH(U6$-%pedlBU4_Eg=S_6 zp7{oLK;skZokPAxdqcY3H?RY`wE*PO)ZoD$7W3RpD6Xc9QHt$6(@>nkQ&$beT?}?m zlUtLh>|h6|&nrjJzJVQl13Pf+f>@j2mu?38b!P_qonZHt!-lxbuKNad@D1!hTF|30 z9rkTb#i8~M&N3Kjngr7Y)hYrmj_c5(DDdFI?d zrxZ1k^(Zb~Y+kt^R6kGqLcakXWb`iX3nhGTG2p@Z9Z-fb0CR7v^O*vnaw*U3FEgBP zAP4~jp;rA9MQM2{3mM_G0-Nlf-WpQDuqIm}KC1xmN`Nfjh&=T?^{%Ggax9d;f~0+G z&9_FmvswL-=N8YDyv$c`SW0dzOGq8ryCQ_uGPFs5Wh)MdD3fv$5Mhv!TsW^jADMco z;_wk#ZZ^1HV!c%h(pbDqYJG1os>eNS>i%HzOk(w`v*h}`6Rp8nIG?Gmfv|K}*${Yb zP{&}I+{Kq2xC$yycDw$3dc<`bBPrfO9M~Y;4&WQ~hcYB>FJIlts6y@&|5XW;6;8$4 z5vwnWU=5@r(W94Ax0+Ug0dQo{BCu@aXb%@K$<4Q^PmV>k4PEl4YlR9l|#nAXq0(( z%-bwAG(OT-9M2oOOkdSy+4He4-Xzr{vD?u=5$G1n*i9_HuPl*CvrVZYtbd~5>m#9eZj zKZkrsosd&<2N#W;LE3- zp)-v=BB|dBcmfQ%4o<65hnQX7z(zfA_(s&e@yeBNyzF#uyb*M5dYE5^m$~Zo(YWgE zMjKUcnvJPmzgnPr{i{j!`i-xURF|n;<&haw;-Fxvi|`=S&PH~A0jc{nW#pWHW~CQk zUOjbF#0y+Efa;y;T_YLJ>hwLD6A_{=mZa4E*>*CE)PJ%5hBZbPutT#{PYNsQ+3TzV zrdI2RtgM;SoYMC}GPtPzi!et8UK<6Mi)rP<@}CUv>0x(Q;D#JeY&#$P@MrN*R)r~5 zFW8Dcuq(xhDvT`PKF>0NhLg*PG8|d&Z#gl{4(3`kscKvZ<6#&L3?*t0_Tpmy+7rS3 zSZ<=vB^%aR8r<_tHndE>t0o%;M>vJZN^+dcJgja&j1_6^bH2j=??1c~Vu#M>R z?bppb9KbXZ<$l+`?R=x>yxeDNiyd_$S=)Xiv$p+KJed5VktyEeZ5F6o_%{Sd2(I?%a*MGaJ+`3SNuk%hW%Dl!#iSW)v*iD z?Fd#M4_SDwt%+Xe;klN0-JutrBjd`x5*>to=^jGA?p%a^C(tWBFkZ$Nx{uIDzgplU^sjy+*F)g;Pe6P$me6KNZ_R5%;+0QH;r$bE9(()Wg8nx;#qK%F z_F+BZsZRMc3TYM5GsqB}>Epn{DK}6y<>%e*5Jwgm@bi=J{KIJt7Wj!TIE61a%a%fe zT*Y^|rGW|l*;$u}yNmqiz?1vv3V_EOI%U@AfsiDHU8+J;-e0)IedYA?NxD=o1tjqa znYXT_1DhU6H3%={Mw!YEa}m#d|XHv$NLkZ_1x3x^0*9L$kN$NY#1BB zj3Kb*KrArB2|TY3Xvi$BCOa}%mJ2zJ=W-D-Rn$_XQqM1bw~iQeAfOK|+2=Z zvRX1D);~RbC}{7IZ@<57rh7BMO1;*0U6yG0#Ap_p-N72$czj zw{6hJ`=`c8z6sj`8K@!m47Xomzyu6u93?xGel0`WdL$NWL_z$epku%5|wGWyBSR+g`$2*lmA-NvI~u5JghY`7U4 zoNe~4XZ&v^Hth9s?iBB+DG~H)Yq66Lp(E1Z`x;IWRdw8>ewdUlm}FU zMJD^qNXCxfcM2ww99e!CA#VixS^rMLR?v2d$Yq~|q;Ma7ee<0$*KZKwm`gkqvun3- z$_x$iq^7KXF7sIMxy)0w(HfYW84SA-p4%k51* zX6(=#FDKT*!~N@X-(VcLRhnaO6glNo3xArk;z5S$(Qw#_|5ZRoYNhKnYG4h!H$2Z8 zv++}{0QpAd3kY*&O+sn3%9to-O8fW$o`FZC`PDbS`^f5_+061I7>uF{7~Od%5++2! zL$kai+gy^LGS$3W)H6-;Q_|d*OY(d9ooy~0PO~Y0wNn1VC_}zqp7N)^3*EhN7x0Li zmw*1(f8&>m!y`O8=El0tzW?;=x3Ay+ z`~9zO{@dG+A3neS;lur>pMU-H{r~;P{fEy#y#Dc5e|hopf4%zjE8qm1JeWF|M1s;e0u%)hmRkAbp!B*O?vb}wW-vzZ1@+yzW?waKYaT5;U`AI zh(3S*;lp2lw#Qg|w!ve5{r68F|9=1J^MC#N{SQAf9bjE8YjXItpa1@e=h$NmTGBrM zaR2u6$4@-GI$%=xP=5aSD(hEYaB{fZ7--S?e(uYdlp4{v{Ua{zt7 zALSoGl6OCd98i|O?M9Hk@Qd*jP-1;MIGD2jRJgOm_5PG-XWmLxQP9pPZ=;$GZC;r21n>7 z9`!>sX?i*%z#0UUpY?TUpD4m5!R+XfrLW3!3w$+$qCbcOr-I|YKZsnDqsZl7l(`1I z}4YJHcd65A@6MLU)q-h&)k@BV-&gBNdKAnvo@n`PG6%G5_i}ay=+tn}oj9 z>OCu-yBdxI{;J!pM{cqKEWvRA2I0OUo_=nrs=@gURz z(o)oVk)*gQHeSRxLZ~E24DG(^Mfq+SvUo!s81rQt-uuHNwlHsxw0jbuPsx5<^rPNu~2VGK)*m}J3pD_ zRc{wiQnB1qo2(2l1wb5Nhm7Z31ek&b(O^E#q@f?I0BmU!*|YYm)m4Y9+V~sX$vm7wcxD)+v8aK0g=c$D=621R8HGw? zGA}K89r(NFDe9B)pI4!9yGL$%T=WEmeNg_B!4=KqML4IR)CI%JhSxK)ntSs(C@e5h zw`Gy&!S@%Rj+dJWEe02%v-38}!0@u+6{WTiQ$2ch0kvTQw+RLCX%Q1#9AudpBFs{I zunaK2s=`uec)_GXI!6xpRz?bJz>-+7;WV7nLaoT~8c;~<32oSkeL5v)(On{;%YiSJ zZxupsppcBWicv+o7+k)UUmUGAGEOVXiYFXrgG`atQ4fSOx7}rMY!nUPfIg0tJkj*%-(YDp6D*q#!wl2X_y)WL@qc=W z+(I_a>Dz4A#y1GZB4w@vW_yya67{0FS!Azan&ZV=Fc9~LPEc>D4|MTnctjFWwKR!n zD^SRGPeRFT8WB}f-~a8!lH!}WG$Lgocv{LcO(Rmm!)j?n3Xof71_^_Ce$dPB6s_F` ze6W|_N#@g-NG~QQ=;fdP_nW_wxpH%Nck}X3pI`s<_mf~@N;YwtdxplY{??}Suob{a zvYOFqWDDf6XJSp%$aGfomcnB6Z00NG1Y%$D*mJyetJy#9e8qkzn91pZei>fqRzBhELzPZ_GOKwGD-2)pOl>j&u;&d@ zGKWbvGHx=bRW{}44N`Iv6^#jZF#_Vdo)v##tYBp~Mlh;=QB6zb&Bx_)y5J%|1_4K{ zLl8%!QMQ*HlliHn2=$lXuH|;P|6bUsz8Hrs+sZyP{bYE3llLh&)i1?#^9dDqsuOLx zs8wkA;FyHXrrM^)r;0_)RdxfG$x zmh*RY9Mi=HFk{uMIS{pn(5XAG>e~tkwVLXM7LYwsINNB&Aco`#$DQ8j z@^phOmDt<^R|I5wy z|I-{5tC2Kim4m=QbG#|8gtK~>JDH2gc&PE$@L!AIlvX$brFf9MZ59b3aulTpg+jyGC*>20Xl`|(9M zH*HjSa$9dHPPqjGsfk6WquUO9Lk=0oRUm@+HbrVG;@~KLqr5%POxJW$qjB)#0rZZ^`5(=gco5RZzVCZ3? z>qGE~&QuZNZrWF=B-kmnr>!DoUgJ8OaZH*yo-@r&I6$GUANEASFQ11Rk-2Rz5g^(k zJZv+lrCche2r?|WDOcP5(BS}pZ4{_Z9%UC!>Ze>M*pd(HM$+W6S`k&FjG7NKHJ5XH z)zPbd)k(zP3YiG0WA`A4$&HTjLfLuLJ(+l?P9-a8b)W8P#1gizGMs`gcVf}@dN-|p zGS(=N@**5`i`Jn%%Eu>=Epmous?3|e7}TTC+tKn2dOaESGzwEgxj?S!yf z;@<=4ko{G#F(kx!SG(`B$5-1k2pEgm<@PU3POZ^|_anfdlJGXmUs>5+x z>Pl&E%tDz=rz80K<{PGt5Vd+1u_bO#$#3W@Efg4H%rJp=h;TE)B!rYe-Hx<21Gtg+!99Owcv|kYZvL zO~?4p>?543HpS4oJN_L?ffcj+O4HC^#CPdlRE}XyUC0OFAq);kjF3xsvfYNRjL-+pWykj;=;i9j-(b%OkWq!M@Ty z6@PYXB06_`e_9^&=@{TjP2BP(@w$u>6}gJ;T5D-fQ^yF;^>?>wIF#|wV@BF_A948nJUP*g8t7+5<|noGnpE!%kvoXzwXocZ{cyw(yS+Vbck zx*yB-W0M=RMaB$l#^UVwj<$jd%SlAie{IR^x$#@nj;+s->3CZocer9E$cCE$C?XZ; zqSukvGCU;%RqPxj9pa9=+I!+6cBpYzZwlP$%(Dq*jmfsvgxb&u~aA7W

8m8qz)5-aF596i`@G?TI-^v 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 z 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%0Dn~XVe!7Y0qS$`=3LVoLtHenFS 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

n`A*yh&Xc7}%9I=<_^me_ZW^ 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

  • ?yGu1o_71t>;i-QT`2(Z4!xu}?|C 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%0D}^Y` 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%0Aw;Wyk0s8AF_$vF2%9$1IyO$1CQbw|6wG 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

    uhcg$h~F09rC{TSr_9pfHjL< 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

    <$rP>pS_FM_CwUP}Q{d#<4wZ)|K!&3q86JmD8 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%0Dgoq= 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 literal 0 HcmV?d00001 diff --git a/reference/html/index.html b/reference/html/index.html index ca32f97f0b..593e4fdcdd 100644 --- a/reference/html/index.html +++ b/reference/html/index.html @@ -663,8 +663,8 @@

    Citrus

    Authors: The Citrus Community
    -version 4.3.3, -2024-10-02 +version 4.4.0, +2024-11-19
    citrus
    @@ -691,6 +691,7 @@

    Citrus

    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�be4{he6zmpUh)#Q)hCVK&0zdds%pvp$ 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%0Dly&r}xnb<~V4GSueEQFaiRKvTy^yt`4A_*oP> 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%0Dsa7q=qzmbWuNZReD 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%0ANFPBhQu-WGEmSl|1rU-eDFSC-xN|oJ~>AryQJH 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�lb#4 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

  • 4.5. QuarkusTest runtime
  • 4.6. Main CLI runtime
  • 4.7. Sharding Test Cases
  • +
  • 4.8. JBang
  • 5. Running tests in Java @@ -799,14 +800,15 @@

    Citrus

  • 12.7. SOAP over JMS
  • -
  • 13. Apache Kafka support +
  • 13. Apache Kafka Support
  • 14. Http REST support @@ -953,191 +955,227 @@

    Citrus

  • 26.2. Docker commands
  • -
  • 27. Kubernetes support +
  • 27. SSH support
  • -
  • 28. SSH support +
  • 28. RMI support
  • -
  • 29. RMI support +
  • 29. JMX support
  • -
  • 30. JMX support +
  • 30. Zookeeper support
  • -
  • 31. Zookeeper support +
  • 31. Spring Restdocs support
  • -
  • 32. Spring Restdocs support +
  • 32. Dynamic endpoint components
  • +
  • 33. Endpoint adapter
  • -
  • 33. Dynamic endpoint components
  • -
  • 34. Endpoint adapter +
  • 34. Connectors
  • +
  • 35. OpenAPI support
  • -
  • 35. Connectors +
  • 36. JBang support
  • -
  • 36. Functions +
  • 37. Kubernetes support
  • -
  • 37. Validation matcher +
  • 38. Knative support
  • -
  • 38. Data dictionaries +
  • 39. Testcontainers support
  • -
  • 39. Test actors +
  • 40. Functions
  • -
  • 40. Test suite actions +
  • 41. Validation Matchers
  • -
  • 41. Customize meta information
  • -
  • 42. Tracing incoming/outgoing messages
  • -
  • 43. Reporting and Test Results +
  • 42. Data dictionaries
  • -
  • 44. XML tests +
  • 43. Test actors
  • -
  • 45. Configuration options +
  • 44. Test suite actions
  • -
  • 46. Spring support +
  • 45. Customize meta information
  • +
  • 46. Tracing incoming/outgoing messages
  • +
  • 47. Reporting and Test Results
  • -
  • 47. Samples +
  • 48. XML tests
  • -
  • 48. Appendix +
  • 49. Configuration options + +
  • +
  • 50. Spring support + +
  • +
  • 51. Samples + +
  • +
  • 52. Appendix @@ -1149,7 +1187,7 @@

    Citrus

    -

    Version: 4.3.3

    +

    Version: 4.4.0

    @@ -3058,6 +3096,339 @@

    +

    4.8. JBang

    +
    +

    You can run Citrus tests with JBang. +Running Citrus via JBang does not require any project setup which is fantastic for fast prototyping of integration tests. +This means you can just run your test case sources directly with:

    +
    +
    +

    Given this very simple Java Citrus test:

    +
    +
    +
    MyTest.java
    +
    +
    import org.citrusframework.GherkinTestActionRunner;
    +import org.citrusframework.annotations.CitrusResource;
    +
    +import static org.citrusframework.actions.CreateVariablesAction.Builder.createVariables;
    +import static org.citrusframework.actions.EchoAction.Builder.echo;
    +
    +public class MyTest implements Runnable {
    +
    +    @CitrusResource
    +    GherkinTestActionRunner t;
    +
    +    @Override
    +    public void run() {
    +        t.given(
    +            createVariables().variable("message", "Citrus rocks!")
    +        );
    +
    +        t.then(
    +            echo().message("${message}")
    +        );
    +    }
    +}
    +
    +
    +
    +

    You can now run this test Java class without any prior project setup using JBang:

    +
    +
    +
    Run MyTest.java
    +
    +
    jbang citrus@citrusframework/citrus run MyTest.java
    +
    +
    +
    +

    The command above uses the JBang catalog located on the Citrus GitHub repository. +The command will automatically setup everything needed to run the Citrus test.

    +
    +
    +

    The command output will be like this:

    +
    +
    +
    Output
    +
    +
    ===============================================
    +Default Suite
    +Total tests run: 1, Passes: 1, Failures: 0, Skips: 0
    +===============================================
    +
    +
    +
    +

    4.8.1. Install Citrus JBang app

    +
    +

    For a more convenient way to use the Citrus JBang scripts you can install Citrus as a JBang app.

    +
    +
    +
    Install Citrus app
    +
    +
    jbang trust add https://github.com/citrusframework/citrus/
    +jbang install citrus@citrusframework/citrus
    +
    +
    +
    +

    Now you can just call:

    +
    +
    +
    Run MyTest.java
    +
    +
    citrus run MyTest.java
    +
    +
    +
    +
    +

    4.8.2. Run tests

    +
    +

    You can directly run test sources with Citrus JBang. +This includes test sources written in Java, XML, YAML, Cucumber.

    +
    +
    +
    Java test sources
    +
    +
    MyTest.java
    +
    +
    import org.citrusframework.GherkinTestActionRunner;
    +import org.citrusframework.annotations.CitrusResource;
    +
    +import static org.citrusframework.actions.CreateVariablesAction.Builder.createVariables;
    +import static org.citrusframework.actions.EchoAction.Builder.echo;
    +
    +public class MyTest implements Runnable {
    +
    +    @CitrusResource
    +    GherkinTestActionRunner t;
    +
    +    @Override
    +    public void run() {
    +        t.given(
    +            createVariables().variable("message", "Citrus rocks!")
    +        );
    +
    +        t.then(
    +            echo().message("${message}")
    +        );
    +    }
    +}
    +
    +
    +
    +
    Run MyTest.java
    +
    +
    citrus run MyTest.java
    +
    +
    +
    +
    +
    XML test sources
    +
    +
    my-test.xml
    +
    +
    <test name="EchoTest" author="Christoph" status="FINAL" xmlns="http://citrusframework.org/schema/xml/testcase"
    +      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +      xsi:schemaLocation="http://citrusframework.org/schema/xml/testcase http://citrusframework.org/schema/xml/testcase/citrus-testcase.xsd">
    +  <description>Sample test in XML</description>
    +  <variables>
    +    <variable name="message" value="Citrus rocks!"/>
    +  </variables>
    +  <actions>
    +    <echo message="${message}"/>
    +  </actions>
    +</test>
    +
    +
    +
    +
    Run my-test.xml
    +
    +
    citrus run my-test.xml
    +
    +
    +
    +
    +
    YAML test sources
    +
    +
    my-test.yaml
    +
    +
    name: EchoTest
    +description: "Sample test in YAML"
    +variables:
    +  - name: "message"
    +    value: "Citrus rocks!"
    +actions:
    +  - echo:
    +      message: "${message}"
    +
    +
    +
    +
    Run my-test.yaml
    +
    +
    citrus run my-test.yaml
    +
    +
    +
    +
    +
    Groovy test sources
    +
    +
    my-test.groovy
    +
    +
    import static org.citrusframework.actions.EchoAction.Builder.echo
    +
    +name "EchoTest"
    +description "Sample test in Groovy"
    +
    +variables {
    +    message="Citrus rocks!"
    +}
    +
    +actions {
    +    $(echo().message('${message}'))
    +}
    +
    +
    +
    +
    Run my-test.groovy
    +
    +
    citrus run my-test.groovy
    +
    +
    +
    +
    +
    Cucumber feature sources
    +
    +
    my-test.feature
    +
    +
    Feature: EchoTest
    +
    +  Background:
    +    Given variables
    +    | message | Citrus rocks! |
    +
    +  Scenario: Print message
    +    Then print '${message}'
    +
    +
    +
    +
    Run my-test.feature
    +
    +
    citrus run my-test.feature
    +
    +
    +
    + + + + + +
    + + +Many of the predefined Cucumber steps in Citrus are provided in a separate Citrus child project called YAKS. +You may need to add additional project dependencies for that steps to be loaded as part of the JBang script. +You may add the additional modules to the jbang.properties as described in the next section. +
    +
    +
    +
    +
    +

    4.8.3. Additional JBang dependencies

    +
    +

    Citrus JBang comes with a set of default dependencies that makes the scripts run as tests.

    +
    +
    +

    The default modules that you can use in Citrus JBang are:

    +
    +
    +
      +
    • +

      org.citrusframework:citrus-base

      +
    • +
    • +

      org.citrusframework:citrus-jbang-connector

      +
    • +
    • +

      org.citrusframework:citrus-groovy

      +
    • +
    • +

      org.citrusframework:citrus-xml

      +
    • +
    • +

      org.citrusframework:citrus-yaml

      +
    • +
    • +

      org.citrusframework:citrus-http

      +
    • +
    • +

      org.citrusframework:citrus-validation-json

      +
    • +
    • +

      org.citrusframework:citrus-validation-xml

      +
    • +
    +
    +
    +

    This enables you to run Java, YAML, XML, Groovy tests out of the box. +In case your tests uses an additional feature from the Citrus project you may need to add the module so JBang can load the dependency at startup.

    +
    +
    +

    The easiest way to do this is to create a jbang.properties file that defines the additional dependencies:

    +
    +
    +
    jbang.properties
    +
    +
    # Declare required additional dependencies
    +run.deps=org.citrusframework:citrus-camel:4.5.0-SNAPSHOT,org.citrusframework:citrus-testcontainers:4.5.0-SNAPSHOT,org.citrusframework:citrus-kafka:4.5.0-SNAPSHOT
    +
    +
    +
    +

    The file above adds the modules citrus-camel, citrus-testcontainers and citrus-kafka so you can use them in your JBang Citrus test source.

    +
    +
    +

    The jbang.properties file may be located right next to the test source file or in your user home directory for global settings.

    +
    +
    + + + + + +
    + + +In case you want to run Cucumber BDD Gherkin feature files and use the predefined steps included in the YAKS project, +you need to add this YAKS runtime dependency accordingly: org.citrusframework.yaks:yaks-runtime-core:0.21.0-SNAPSHOT +
    +
    +
    +
    +

    4.8.4. Run from clipboard

    +
    +

    You can run tests from your current clipboard. +Just use the file name clipboard.xxx where the file extension defines the type of the test source (.java, .yaml, .xml, .groovy, .feature).

    +
    +
    +
    Run YAML test from Clipboard
    +
    +
    citrus run clipboard.yaml
    +
    +
    +
    +
    +

    4.8.5. List tests

    +
    +

    The ls command lists all running Citrus tests. +These tests may be started

    +
    +
    +
    List running tests
    +
    +
    citrus ls
    +
    +
    +
    +

    @@ -9832,7 +10203,7 @@

    @CitrusTest
     public void selectorTest() {
    -    Map<String, String> selectorMap = new HasMap<>();
    +    Map<String, String> selectorMap = new HashMap<>();
         selectorMap.put("correlationId", "Cx1x123456789");
         selectorMap.put("operation", "getOrders");
     
    @@ -18265,7 +18636,7 @@ 

    -

    13. Apache Kafka support

    +

    13. Apache Kafka Support

    Kafka is a distributed streaming platform that enables you to publish and subscribe to streams of records, similar to a @@ -18323,7 +18694,7 @@

    @Bean annotations you do not require this step.

    -

    13.1. Kafka endpoint

    +

    13.1. Kafka Endpoint

    -

    In case of a send operation the endpoint creates a Kafka producer and will simply publish the records to the defined Kafka -topic. As the communication is asynchronous by default producer does not wait for a synchronous response.

    +

    The endpoint is now ready to be used inside a test case. +The test simply references the endpoint by its name when sending or receiving.

    -

    In case of a receive operation the endpoint creates a Kafka consumer instance in the defined consumer group. The consumer -starts a subscription on the given topic and acts as a polling listener. This means that the message consumer connects -to the given topic and polls for records. As soon as a record has been received the action is ready to perform the validation -process that verifies the record.

    +

    In case of a send operation the endpoint creates a Kafka producer and will simply publish the records to the defined Kafka topic. +As the communication is asynchronous by default, the producer does not wait for a response.

    +
    +
    +

    In case of a receive operation the endpoint creates a Kafka consumer instance in the defined (possibly random) consumer group.

    @@ -18406,9 +18778,11 @@

    -By default, the consumer polls for a single record per receive operation (max.poll.records=1). You can change this -setting within the consumer properties on the Citrus Kafka endpoint. The property max.poll.records that sets the number -of records in a single poll. +By default, the consumer starts a subscription on the given topic and acts as a polling listener. +This means that the message consumer connects to the given topic and polls one single record at a time. +The action is the ready to perform the validation process that verifies the record, once it has been received. +This approach requires looping to find specific Kafka messages, which can be highly inefficient, especially when the Kafka topic experiences high traffic. +See Kafka message selectors for a more effective Kafka message selection.
    @@ -18435,7 +18809,7 @@

    id

    +

    id

    Yes

    -

    @@ -18443,7 +18817,7 @@

    topic

    +

    topic

    No

    -

    @@ -18452,56 +18826,55 @@

    server

    +

    server

    No

    -

    localhost:9092

    +

    localhost:9092

    -

    A comma delimited list of host/port pairs to use for establishing the initial connection to the Kafka cluster. Usually - it is only required to connect to one Kafka server instance in the cluster. Kafka then makes sure that the endpoint is - automatically introduced to all other servers in the cluster. This list only impacts the initial hosts used to discover - the full set of servers.

    +

    A comma delimited list of host/port pairs to use for establishing the initial connection to the Kafka cluster. + Usually it is only required to connect to one Kafka server instance in the cluster. + Kafka then makes sure that the endpoint is automatically introduced to all other servers in the cluster. + This list only impacts the initial hosts used to discover the full set of servers.

    -

    timeout

    +

    timeout

    No

    -

    5000

    +

    5000

    -

    Timeout in milliseconds. For producers the timeout is set as time to wait for the message to be accepted by the cluster. +

    Timeout in milliseconds. + For producers the timeout is set as time to wait for the message to be accepted by the cluster. For consumers the timeout is used for polling records on a specific topic.

    -

    message-converter

    +

    message-converter

    No

    org.citrusframework.kafka.message.KafkaMessageConverter

    -

    Converter maps internal Citrus message objects to ProducerRecord/ConsumerRecord objects. The converter implementation takes - care of message key, value, timestamp and special message headers.

    +

    Converter maps internal Citrus message objects to ProducerRecord/ConsumerRecord objects. + The converter implementation takes care of message key, value, timestamp and special message headers.

    -

    header-mapper

    +

    header-mapper

    No

    org.citrusframework.kafka.message.KafkaMessageHeaderMapper

    -

    Header mapper maps Kafka record information (e.g. topic name, timestamp, message key) to internal message headers - (org.citrusframework.kafka.message.KafkaMessageHeaders) and vice versa.

    +

    Header mapper maps Kafka record information (e.g. topic name, timestamp, message key) to internal message headers (org.citrusframework.kafka.message.KafkaMessageHeaders) and vice versa.

    -

    auto-commit

    +

    auto-commit

    No

    -

    true

    +

    true

    -

    When this setting is enabled the consumer will automatically commit consumed records so the offset pointer on the Kafka - topic is set to the next record.

    +

    When this setting is enabled the consumer will automatically commit consumed records so the offset pointer on the Kafka topic is set to the next record.

    -

    auto-commit-interval

    +

    auto-commit-interval

    No

    -

    1000

    +

    1000

    Interval in milliseconds the auto commit operation on consumed records is performed.

    @@ -18509,94 +18882,108 @@

    offset-reset

    No

    -

    earliest

    +

    earliest

    -

    When consuming records from a topic partition and the current offset does not exist on that partition Kafka will automatically - seek to a valid offset position on that partition. The offset-reset setting sets where to find the new position (latest, earliest, - none). If none is set the consumer will receive an exception instead of resetting the offset to a valid position.

    +

    When consuming records from a topic partition and the current offset does not exist on that partition Kafka will automatically seek to a valid offset position on that partition. + The offset-reset setting sets where to find the new position (latest, earliest, none). + If none is set the consumer will receive an exception instead of resetting the offset to a valid position.

    -

    partition

    +

    partition

    No

    -

    0

    +

    0

    Partition id that the consumer will be assigned to.

    -

    consumer-group

    +

    consumer-group

    No

    -

    citrus_kafka_group

    +

    citrus_kafka_group

    -

    Consumer group name. Please keep in mind that records are load balanced across consumer instances with the same consumer - group name set. So you might run into message timeouts when using multiple Kafka endpoints with the same consumer group name.

    +

    Consumer group name. +Please keep in mind that records are load balanced across consumer instances with the same consumer group name set. +So you might run into message timeouts when using multiple Kafka endpoints with the same consumer group name.

    -

    key-serializer

    +

    random-consumer-group

    No

    -

    org.apache.kafka.common.serialization.StringSerializer

    +

    false

    -

    Serializer implementation that converts message key values. By default keys are serialized to String values.

    +

    Whether to use random consumer gorup names. + Note that these will all be prefixed by citrus_kafka_ and end with a random 10 characters alphabetic suffix.

    -

    key-deserializer

    +

    key-serializer

    No

    -

    org.apache.kafka.common.serialization.StringDeserializer

    +

    org.apache.kafka.common.serialization.StringSerializer

    -

    Deserializer implementation that converts message key values. By default keys are deserialized as String values.

    +

    Serializer implementation that converts message key values. + By default, keys are serialized to String values.

    -

    value-serializer

    +

    key-deserializer

    No

    -

    org.apache.kafka.common.serialization.StringSerializer

    +

    org.apache.kafka.common.serialization.StringDeserializer

    -

    Serializer implementation that converts record values. By default values are serialized to String values.

    +

    Deserializer implementation that converts message key values. + By default, keys are deserialized as String values.

    -

    value-deserializer

    +

    value-serializer

    No

    -

    org.apache.kafka.common.serialization.StringDeserializer

    +

    org.apache.kafka.common.serialization.StringSerializer

    -

    Deserializer implementation that converts record values. By default values are deserialized as String values.

    +

    Serializer implementation that converts record values. + By default values are serialized to String values.

    -

    client-id

    +

    value-deserializer

    No

    -

    citrus_kafka_[producer/consumer]_{randomUUID}

    +

    org.apache.kafka.common.serialization.StringDeserializer

    -

    An id string to pass to the server when producing/consuming records. Used as logical application name to be included in - server-side request logging.

    +

    Deserializer implementation that converts record values. + By default, values are deserialized as String values.

    -

    consumer-properties

    +

    client-id

    +

    No

    +

    citrus_kafka_[producer/consumer]_{randomUUID}

    +
    +

    An id string to pass to the server when producing/consuming records. + Used as logical application name to be included in server-side request logging.

    +
    + + +

    consumer-properties

    No

    -

    -

    Map of consumer property settings to apply to the Kafka consumer configuration. This enables you to overwrite any consumer - setting with respective property key value pairs.

    +

    Map of consumer property settings to apply to the Kafka consumer configuration. + This enables you to overwrite any consumer setting with respective property key value pairs.

    -

    producer-properties

    +

    producer-properties

    No

    -

    -

    Map of producer property settings to apply to the Kafka producer configuration. This enables you to overwrite any producer - setting with respective property key value pairs.

    +

    Map of producer property settings to apply to the Kafka producer configuration. + This enables you to overwrite any producer setting with respective property key value pairs.

    -

    13.1.2. Producer and consumer properties

    +

    13.1.2. Producer and Consumer Properties

    The Citrus Kafka endpoint component is also able to receive a map of Kafka producer and consumer properties. These property settings overwrite any predefined setting on the producer/consumer instance created by the endpoint. You can use the Kafka @@ -18650,13 +19037,13 @@

    -

    13.2. Kafka synchronous endpoints

    +

    13.2. Kafka Synchronous Endpoints

    Not implemented yet.

    -

    13.3. Kafka message headers

    +

    13.3. Kafka Message Headers

    The Kafka Citrus integration defines a set of special message header entries that are either used to manipulate the endpoint behavior or as validation object. These Kafka specific headers are stored with a header key prefix citrus_kafka_*. You @@ -18809,7 +19196,7 @@

    <

    -

    13.4. Kafka message

    +

    13.4. Kafka Message

    Citrus also provides a Kafka message implementation that you can use on any send and receive operation. This enables you to set special message headers in a more comfortable way when using the Java fluent API:

    @@ -18827,9 +19214,198 @@

    The message implementation provides fluent API builder methods for each Kafka specific header.

    + +
    +
    +

    13.5. Kafka Message Selector

    +
    +

    The Kafka Message Selector feature allows you to selectively receive messages from a Kafka topic based on specific criteria. +This powerful functionality enables you to filter Kafka messages by different criteria, e.g. based on headers. +Additionally, the defined time window for message retrieval significantly improves the performance. +Imagine a large Kafka topic with thousands of events. +Looking through all of these would require an immense amount of resources and time. +Instead, selective message consumption starts at an offset Ox = OT-n. +Where T is the current timestamp and n is the maximum timespan in which the wanted event is expected to have been published.

    +
    +
    +

    13.5.1. Basic Usage

    +
    +

    The Kafka Message Selector can be used in various ways, depending on your preferred syntax and test framework.

    +
    +
    +
    Java
    +
    +
    then(
    +    receive(kafkaEndpoint)
    +        .selector(
    +            kafkaMessageFilter()
    +                .eventLookbackWindow(Duration.ofSeconds(1L))
    +                .kafkaMessageSelector(kafkaHeaderEquals("key", "value"))
    +                .build()
    +        )
    +);
    +
    +
    +
    +
    Java 2
    +
    +
    then(
    +    kafkaEndpoint.findKafkaEventHeaderEquals(Duration.ofSeconds(1L), "key", "value")
    +);
    +
    +
    +
    +
    XML
    +
    +
    <receive endpoint="helloKafkaEndpoint">
    +    <description>Receive selective Kafka message</description>
    +    <selector>
    +      <element name="header-filter-key" value="key"/>
    +      <element name="header-filter-value" value="value"/>
    +      <element name="event-lookback-window" value="PT1S"/>
    +    </selector>
    +</receive>
    +
    +
    +
    +
    +

    13.5.2. Configuration

    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
    Java DSLXML DSLDescription

    eventLookbackWindow

    event-lookback-window

    This defines how far back in time the selector should search for messages. + When using XML configuration, the event lookback window must be specified as an <<https://en.wikipedia.org/wiki/ISO_8601,ISO-8601 duration string>>. + For example, PT1S represents a duration of 1 second.

    kafkaMessageSelector

    See <<kafka-message-selector-types,Selector Types

    This specifies the criteria for message selection. + In the examples, we’re using kafkaHeaderEquals("key", "value"), which selects messages where a header with the key "key" exactly matches the value "value".

    pollTimeout

    poll-timeout

    The timeout duration for each poll operation when consuming messages from Kafka. + This value determines how long the consumer will wait for new records in each poll cycle. + It is not the overall receive action timeout! + When using XML configuration, the poll timeout must be specified as an <<https://en.wikipedia.org/wiki/ISO_8601,ISO-8601 duration string>>. + For example, PT0.100S represents a duration of 1 millisecond.

    +
    +
    +

    13.5.3. Selector Types

    +
    +
    Message Header
    +

    The framework provides two main types of message header selectors. +From within the Java DSL, these two can be easily invoked using statically provided methods:

    +
    +
    +
      +
    1. +

      kafkaHeaderEquals: Matches messages where the specified header key exactly equals the given value.

      +
    2. +
    3. +

      kafkaHeaderContains: Matches messages where the specified header key contains the given value as a substring.

      +
    4. +
    +
    +
    +

    More advanced users might want to do pre- or suffix matching. +That is also possible.

    +
    +
    +
    Java
    +
    +
    then(
    +    receive(kafkaWithRandomConsumerGroupEndpoint)
    +        .selector(
    +            kafkaMessageFilter()
    +                .eventLookbackWindow(Duration.ofSeconds(1L))
    +                .kafkaMessageSelector(
    +                    KafkaMessageByHeaderSelector.builder()
    +                        .key("key")
    +                        .value("prefix")
    +                        .matchingMechanism(STARTS_WITH)
    +                        .build()
    +                )
    +                .build()
    +        )
    +);
    +
    +
    +
    +

    Note that if the specified key is null, all headers in the record will be matched against the value. +If the value is null however, all headers with the exact key match.

    +
    + +++++ + + + + + + + + + + + + + + + + + + + + + + + + +
    Java DSLXML DSLDescription

    key

    header-filter-key

    Key-filter being applied to Kafka messages. + Matches exact if specified, all keys if null or empty.

    value

    header-filter-value

    Value-filter being applied to Kafka messages. + Matches all values if null or empty. + Otherwise matches as specified by strategy.

    valueMatchingStrategy

    header-filter-comparator

    Specifies how the value is being matched. + Must be one of EQUALS, CONTAINS, STARTS_WITH or ENDS_WITH. + It defaults to EQUALS, if not specified.

    +
    +
    +

    13.5.4. Best Practices

    +
    +

    Set Appropriate Lookback Window: Choose a lookback window that balances between finding the desired message and performance. +A larger window might find older messages but could impact performance.

    +
    +
    +

    Combine with Other Citrus Features: The Kafka Message Selector can be combined with other Citrus testing features for comprehensive Kafka integration testing.

    +
    +
    -

    13.5. Dynamic Kafka endpoints

    +

    13.6. Dynamic Kafka Endpoints

    As we have seen before the topic name can be overwritten in each send and receive operation by specifying the citrus_kafka_topic message header. In addition to that you can make use of completely dynamic Kafka endpoints, too.

    @@ -18888,7 +19464,7 @@

    -

    13.6. Embedded Kafka server

    +

    13.7. Embedded Kafka Server

    The Kafka message broker is composed of a Zookeeper server and a Kafka server. Citrus provides an embedded server (for testing purpose only!) that is able to be started within your integration test environment. The server cluster is configured with one single Zookeeper @@ -18958,7 +19534,7 @@

    <

    zookeeper-port

    java.lang.Integer

    -

    Zookeeper server port. By default a random port is used.

    +

    Zookeeper server port. By default, a random port is used.

    @@ -23849,7 +24425,7 @@

    < -The default Camel context name in this lookup is "citrusCamelContext". +The default Camel context name in this lookup is "citrusCamelContext". You can set this default context name via environment variables (CITRUS_CAMEL_CONTEXT_NAME) or system properties (citrus.camel.context.name). @@ -27510,7 +28086,7 @@

    <

    22. File support

    -

    In chapter message-channelswe discussed the native Spring Integration channel support which enables Citrus to interact with all Spring Integration messaging adapter implementations. This is a fantastic way to extend Citrus for additional transports. This interaction now comes handy when writing and reading files from the file system in Citrus.

    +

    In chapter message-channels we have discussed the native Spring Integration channel support which enables Citrus to interact with all Spring Integration messaging adapter implementations. This is a fantastic way to extend Citrus for additional transports. This interaction now comes handy when writing and reading files from the file system in Citrus.

    22.1. Write files

    @@ -30065,684 +30641,3239 @@

    -

    27. Kubernetes support

    +

    27. SSH support

    -

    Kubernetes is one of the hottest management platforms for containerized applications these days. Kubernetes lets you deploy, scale and manage your containers on the platform so you get features like auto-scaling, self-healing, service discovery and load balancing. -Citrus provides interaction with the Kubernetes REST API so you can access the Kubernetes platform and its resources within a Citrus test case.

    +

    In the spirit of other Citrus mock services, there is support for simulating an external SSH server as well as for connecting to SSH servers as a client during the test execution. Citrus translates SSH requests and responses to simple XML documents for better validation with the common Citrus mechanisms.

    -
    - - - - - -
    - - -The Kubernetes test components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project -
    +
    +

    This means that the Citrus test case does not deal with pure SSH protocol commands. Instead of this we use the powerful XML validation capabilities in Citrus when dealing with the simple XML documents that represent the SSH request/response data.

    +
    +
    +

    Let us clarify this with a little example. Once the real SSH server daemon is fired up within Citrus we accept an SSH EXEC request for instance. The request is translated into an XML message of the following format:

    -
    <dependency>
    -  <groupId>org.citrusframework</groupId>
    -  <artifactId>citrus-kubernetes</artifactId>
    -  <version>${citrus.version}</version>
    -</dependency>
    +
    <ssh-request xmlns="http://www.citrusframework.org/schema/ssh/message">
    +  <command>cat - | sed -e 's/Hello/Hello SSH/'</command>
    +  <stdin>Hello World</stdin>
    +</ssh-request>
    -

    Citrus provides a "citrus-kubernetes" configuration namespace and schema definition for Kubernetes related components and actions. Include this namespace into your Spring configuration in order to use the Citrus Kubernetes configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows.

    +

    This message can be validated with the usual Citrus mechanism in a receive test action. If you do not know how to do this, please read one of the sections about XML message validation in this reference guide first. Now after having received this request message the respective SSH response should be provided as appropriate answer. This is done with a message sending action on a reply handler as it is known from synchronous http message communication in Citrus for instance. The SSH XML representation of a response message looks like this:

    -
    <beans xmlns="http://www.springframework.org/schema/beans"
    -       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    -       xmlns:citrus-k8s="http://www.citrusframework.org/schema/kubernetes/config"
    -       xsi:schemaLocation="
    -       http://www.springframework.org/schema/beans
    -       http://www.springframework.org/schema/beans/spring-beans.xsd
    -       http://www.citrusframework.org/schema/kubernetes/config
    -       http://www.citrusframework.org/schema/kubernetes/config/citrus-kubernetes-config.xsd">
    -
    -    [...]
    -
    -</beans>
    +
    <ssh-response xmlns="http://www.citrusframework.org/schema/ssh/message">
    +  <stdout>Hello SSH World</stdout>
    +  <stderr></stderr>
    +  <exit>0</exit>
    +</ssh-response>
    -

    After that you are able to use customized Citrus XML elements in order to define the Spring beans.

    +

    Besides simulating a full-featured SSH server, Citrus also provides SSH client functionality. This client uses the same request message pattern, which is translated into a real SSH call to an SSH server. The SSH response received is also translated into an XML message as shown above so we can validate it with known validation mechanisms in Citrus.

    -
    -

    27.1. Kubernetes client

    -

    Citrus operates with the Kubernetes remote REST API in order to interact with the Kubernetes platform. The Kubernetes client is defined as Spring bean component in the configuration as follows:

    +

    Similar to the other Citrus modules (http, soap), a Citrus SSH server and client is configured in Citrus Spring application context. There is a dedicated ssh namespace available for all ssh Citrus components. The namespace declaration goes into the context top-level element as usual:

    -
    <citrus-k8s:client id="myK8sClient"/>
    +
    <beans
    +    [...]
    +    xmlns:citrus-ssh="http://www.citrusframework.org/schema/ssh/config"
    +    [...]
    +    xsi:schemaLocation="
    +        [...]
    +        http://www.citrusframework.org/schema/ssh/config
    +        http://www.citrusframework.org/schema/ssh/config/citrus-ssh-config.xsd
    +        [...] ">
    +   [...]
    +</beans>
    -

    The Kubernetes client is based on the Fabric8 Java Kubernetes client implementation. Following from that the component can be configured in various ways. -By default the client reads the system properties as well as environment variables for default Kubernetes settings such as:

    -
    -
    -
      -
    • -

      kubernetes.master / KUBERNETES_MASTER

      -
    • -
    • -

      kubernetes.api.version / KUBERNETES_API_VERSION

      -
    • -
    • -

      kubernetes.trust.certificates / KUBERNETES_TRUST_CERTIFICATES

      -
    • -
    +

    Both, SSH server and client along with their configuration options are described in the following two sections.

    +
    +

    27.1. SSH Client

    -

    If you set these properties in your environment the client component will automatically pick up the configuration settings. Also when using kubectl command line locally the client may automatically -use the stored user authentication settings from there. For a complete list of settings and explanation of those please refer to the Fabric8 client documentation.

    +

    A Citrus SSH client is useful for testing against a real SSH server. So Citrus is able to invoke SSH commands on the external server and validate the SSH response accordingly. The test case does not deal with the pure SSH protocol within this communication. The Citrus SSH client component expects a customized XML representation and automatically translates these request messages into a real SSH call to a specific host. Once the synchronous SSH response was received the result gets translated back to the XML response message representation. On this translated response we can easily apply the validation steps by the usual Citrus means.

    -

    In case you need to set the client configuration explicitly on your environment you can also use explicit settings on the Kubernetes client component:

    +

    The SSH client components receive its configuration in the Spring application context as usual. We can use the special SSH module namespace for easy configuration:

    -
    <citrus-k8s:client id="myK8sClient"
    -              url="http://localhost:8843"
    -              version="v1"
    -              username="user"
    -              password="s!cr!t"
    -              namespace="user_namespace"
    -              message-converter="messageConverter"
    -              object-mapper="objectMapper"/>
    +
    <citrus-ssh:client id="sshClient"
    +           port="9072"
    +           user="roland"
    +           private-key-path="classpath:org/citrusframework/ssh/test_user.priv"
    +           strict-host-checking="false"
    +           host="localhost"/>
    -

    Note: You have the option to set an oauthToken for the client instead of using username and password.

    +

    The SSH client receives several attributes, these are:

    -
    -

    Now Citrus is able to access the Kubernetes remote API for executing commands such as list-pods, watch-services and so on. Citrus provides a set of actions that -perform a Kubernetes command via REST. The results usually get validated in the Citrus test as usual.

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +id + +

    Id identifying the bean and used as reference from with test descriptions. (e.g. id="sshClient")

    +
    +host + +

    Host to connect to for sending an SSH Exec request. Default is 'localhost' (e.g. host="localhost") +port: Port to use. Default is 2222 (e.g. port="9072")

    +
    +private-key-path + +

    Path to a private key, which can be either a plain file path or a class resource if prefixed with 'classpath' (e.g. private-key-path="classpath:test_user.priv")

    +
    +private-key-password + +

    Optional password for the private key (e.g. password="s!cr!t")

    +
    +user + +

    User used for connecting to the SSH server (e.g. user="roland")

    +
    +password + +

    Password used for password based authentication. Might be combined with "private-key-path" in which case both authentication mechanism are tried (e.g. password="ps!st)

    +
    +strict-host-checking + +

    Whether the host key should be verified by looking it up in a 'known_hosts' file. Default is false (e.g. strict-host-checking="true")

    +
    +known-hosts-path + +

    Path to a known hosts file. If prefixed with 'classpath:' this file is looked up as a resource in the classpath (e.g. known-hosts-path="/etc/ssh/known_hosts")

    +
    +command-timeout + +

    Timeout in milliseconds for how long to wait for the SSH command to complete. Default is 5 minutes (e.g. command-timeout="300000")

    +
    +connection-timeout + +

    Timeout in milliseconds for how long to for a connectiuon to connect. Default is 1 minute (e.g. connection-timeout="60000")

    +
    +actor + +

    Actor used for switching groups of actions (e.g. actor="ssh-mock")

    +
    -

    Based on that we can execute several Kubernetes commands in a test case and validate the Json results:

    +

    Once defines as client component in the Spring application context test cases can reference the client in every send test action.

    -
    -

    Citrus supports the following Kubernetes API commands with respective test actions:

    +
    +
    +
    <send endpoint="sshClient">
    +  <message>
    +    <payload>
    +        <ssh-request xmlns="http://www.citrusframework.org/schema/ssh/message">
    +          <command>shutdown</command>
    +          <stdin>input</stdin>
    +        </ssh-request>
    +    </payload>
    +  </message>
    +</send>
    +
    +<receive endpoint="sshClient">
    +  <message>
    +    <payload>
    +        <ssh-response xmlns="http://www.citrusframework.org/schema/ssh/message">
    +            <stdout>Hello Citrus</stdout>
    +            <stderr/>
    +            <exit>0</exit>
    +        </ssh-response>
    +    </payload>
    +  </message>
    +</receive>
    -
    -
      -
    • -

      k8s:info

      -
    • -
    • -

      k8s:list-pods

      -
    • -
    • -

      k8s:get-pod

      -
    • -
    • -

      k8s:delete-pod

      -
    • -
    • -

      k8s:list-services

      -
    • -
    • -

      k8s:get-service

      -
    • -
    • -

      k8s:delete-service

      -
    • -
    • -

      k8s:list-namespaces

      -
    • -
    • -

      k8s:list-events

      -
    • -
    • -

      k8s:list-endpoints

      -
    • -
    • -

      k8s:list-nodes

      -
    • -
    • -

      k8s:list-replication-controllers

      -
    • -
    • -

      k8s:watch-pods

      -
    • -
    • -

      k8s:watch-services

      -
    • -
    • -

      k8s:watch-namespaces

      -
    • -
    • -

      k8s:watch-nodes

      -
    • -
    • -

      k8s:watch-replication-controllers

      -
    • -
    -

    We will discuss these commands in detail later on in this chapter. For now let’s have a closer look on how to use the commands inside a Citrus test.

    +

    As you can see we use usual send and receive test actions. The XML SSH representation helps us to specify the request and response data for validation. This way you can call SSH commands against an external SSH server and validate the response data.

    -

    27.2. Kubernetes commands in XML

    +

    27.2. SSH Server

    -

    We have several Citrus test actions each representing a Kubernetes command. These actions can be part of a test case where you can manage Kubernetes pods inside the test. As a prerequisite we have to enable the Kubernetes -specific test actions in our XML test as follows:

    -
    -
    -
    -
    <beans xmlns="http://www.springframework.org/schema/beans"
    -        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    -        xmlns:k8s="http://www.citrusframework.org/schema/kubernetes/testcase"
    -        xsi:schemaLocation="
    -        http://www.springframework.org/schema/beans
    -        http://www.springframework.org/schema/beans/spring-beans.xsd
    -        http://www.citrusframework.org/schema/kubernetes/testcase
    -        http://www.citrusframework.org/schema/kubernetes/testcase/citrus-kubernetes-testcase.xsd">
    -
    -    [...]
    -
    -</beans>
    -
    +

    Now that we have used Citrus on the client side we can also use Citrus SSH server module in order to provide a full stacked SSH server daemon. We can accept SSH client connections and provide proper response messages as an answer.

    -

    We added a special kubernetes namespace with prefix k8s: so now we can start to add Kubernetes test actions to the test case:

    +

    Given the above SSH module namespace declaration, adding a new SSH server is quite simple:

    -
    XML DSL
    -
    <testcase name="KubernetesCommandIT">
    -    <actions>
    -      <k8s:info client="myK8sClient">
    -        <k8s:validate>
    -          <k8s:result>{
    -            "result": {
    -              "clientVersion": "1.4.27",
    -              "apiVersion": "v1",
    -              "kind":"Info",
    -              "masterUrl": "${masterUrl}",
    -              "namespace": "test"
    -            }
    -          }</k8s:result>
    -        </k8s:validate>
    -      </k8s:info>
    -
    -      <k8s:list-pods>
    -        <k8s:validate>
    -          <k8s:result>{
    -            "result": {
    -              "apiVersion":"v1",
    -              "kind":"PodList",
    -              "metadata":"@ignore@",
    -              "items":[]
    -            }
    -          }</k8s:result>
    -          <k8s:element path="$.result.items.size()" value="0"/>
    -        </k8s:validate>
    -      </k8s:list-pods>
    -    </actions>
    -</testcase>
    +
    <citrus-ssh:server id="sshServer"
    +             allowed-key-path="classpath:org/citrusframework/ssh/test_user_pub.pem"
    +             user="roland"
    +             port="9072"
    +             auto-start="true"
    +             endpoint-adapter="sshEndpointAdapter"/>
    -

    In this very simple example we first ping the Kubernetes REST API to make sure we have connectivity up and running. The info command connects the REST API and returns a list of status information of the Kubernetes client. -After that we get the list of available Kubernetes pods. As a tester we might be interested in validating the command results. So we can specify an optional k8s:result which is usually in Json format. With that we can apply the full -Citrus Json validation power to the Kubernetes results. As usual we can use test variables here and ignore some values explicitly such as the metadata value. Also JsonPath expression validation and Json test message validation features in -Citrus come in here to validate the results.

    +

    The endpoint-adapter is the handler which receives the SSH request as messages (in the request format described above). Endpoint adapter implementations are fully described in http-serverAll adapters described there are supported in SSH server module, too.

    +
    +

    The <citrus-ssh:server> supports the following attributes:

    +
    +
    +
    SSH Server Attributes:
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +id + +

    Name of the SSH server which identifies it unique within the Citrus Spring context (e.g. id="sshServer")

    +
    +host-key-path + +

    Path to PEM encoded key pair (public and private key) which is used as host key. By default, a standard, pre-generate, fixed keypair is used. The path can be specified either as a file path, or, if prefixed with classpath: is looked up from within the classpath. The path the is relative from to the top-level package, so no leading slash should be used (e.g. hist-key-path="/etc/citrus_ssh_server.pem)

    +
    +user-home-path + +

    Path to user home directory. If not set ${user.dir}/target/{serverName}/home/{user} is used by default.

    +
    +user + +

    User which is allowed to connect (e.g. user="roland")

    +
    +allowed-key-path + +

    Path to an SSH public key stored in PEM format. These are the keys, which are allowed to connect to the SSH server when publickey authentication is used. It seves the same purpose as authorized_keys for standard SSH installations. The path can be specified either as a file path, or, if prefixed with classpath: is looked up from within the classpath. The path the is relative from to the top-level package, so no leading slash should be used (e.g. allowed-key-path="classpath:test_user_pub.pem)

    +
    +password + +

    Password which should be used when password authentication is used. Both publickey authentication and password based authentication can be used together in which case both methods are tried in turn (e.g. password="s!cr!t")

    +
    +host + +

    Host address (e.g. localhost)

    +
    +port + +

    Port on which to listen. The SSH server will bind on localhost to this port (e.g. port="9072")

    +
    +auto-start + +

    Whether to start this SSH server automatically. Default is true . If set to false, a test action is responsible for starting/stopping the server (e.g. auto-start="true")

    +
    +endpoint-adapter + +

    Bean reference to an endpoint adapter which processes the incoming SSH request. The message format for the request and response are described above (e.g. endpoint-adapter="sshEndpointAdapter")

    +
    -
    -

    27.3. Kubernetes commands in Java

    -

    Up to now we have only used the Citrus XML DSL. Of course all Kubernetes commands are also available in Java DSL as the next example shows.

    +

    Once the SSH server component is added to the Spring application context with a proper endpoint adapter like the MessageChannel forwarding adapter we can receive incoming requests in a test case and provide a respone message for the client.

    -
    Java DSL
    -
    @CitrusTest
    -public void kubernetesTest() {
    -    kubernetes().info()
    -                .validate(new CommandResultCallback<InfoResult>() {
    -                    @Override
    -                    public void doWithCommandResult(InfoResult info, TestContext context) {
    -                        Assert.assertEquals(info.getApiVersion(), "v1");
    -                    }
    -            });
    +
    <receive endpoint="sshServer">
    +  <message>
    +    <payload>
    +        <ssh-request xmlns="http://www.citrusframework.org/schema/ssh/message">
    +           <command>shutdown</command>
    +           <stdin>input</stdin>
    +        </ssh-request>
    +    </payload>
    +  </message>
    +</receive>
     
    -    kubernetes().pods()
    -                .list()
    -                .withoutLabel("running")
    -                .label("app", "myApp");
    -}
    +<send endpoint="sshServer"> + <message> + <payload> + <ssh-response xmlns="http://www.citrusframework.org/schema/ssh/message"> + <stdout>Hello Citrus</stdout> + <exit>0</exit> + </ssh-response> + </payload> + </message> +</send>
    +
    +
    +
    +
    +

    28. RMI support

    +
    -

    The Java DSL Kubernetes commands provide an optional CommandResultCallback that is automatically called with the unmarshalled command result object. -In the example above the InfoResult model object is passed as argument to the callback. So the tester can access the command result and validate its properties with assertions.

    +

    RMI stands for Remote Method Invocation and is a standard way of calling Java method interfaces where caller and callee (client and server) are not located within the same JVM. So the object passed to the method as argument as well as the method return value are transmitted over the wire.

    -

    Java Lambda expressions add some syntactical sugar to the command result validation:

    +

    As a client Citrus is able to connect to some RMI registry that exposes some remote interfaces. As a server Citrus implements such an RMI registry and handles incoming method calls with providing the respective return value.

    +
    +
    + + + + + +
    + + +The RMI components in Citrus are kept in a separate Maven module. So you should check that the module is available as Maven dependency in your project +
    -
    Java DSL
    -
    @CitrusTest
    -public void kubernetesTest() {
    -    kubernetes().info()
    -                .validate((info, context) -> Assert.assertEquals(info.getApiVersion(), "v1"));
    -
    -    kubernetes().pods()
    -                .list()
    -                .withoutLabel("running")
    -                .label("app", "myApp");
    -}
    +
    <dependency>
    +  <groupId>org.citrusframework</groupId>
    +  <artifactId>citrus-rmi</artifactId>
    +  <version>${citrus.version}</version>
    +</dependency>
    -

    By default Citrus tries to find a Kubernetes client component within the Citrus Spring application context. If not present Citrus will instantiate a default kubernetes client with all default settings. -You can also explicitly set the kubernetes client instance when using the Java DSL Kubernetes command actions:

    +

    As usual Citrus provides a customized rmi configuration schema that is used in Spring configuration files. Simply include the citrus-rmi namespace in the configuration XML files as follows.

    -
    Java DSL
    -
    @Autowired
    -private KubernetesClient kubernetesClient;
    +
    <beans xmlns="http://www.springframework.org/schema/beans"
    +      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +      xmlns:citrus="http://www.citrusframework.org/schema/config"
    +      xmlns:citrus-rmi="http://www.citrusframework.org/schema/rmi/config"
    +      xsi:schemaLocation="
    +      http://www.springframework.org/schema/beans
    +      http://www.springframework.org/schema/beans/spring-beans.xsd
    +      http://www.citrusframework.org/schema/config
    +      http://www.citrusframework.org/schema/config/citrus-config.xsd
    +      http://www.citrusframework.org/schema/rmi/config
    +      http://www.citrusframework.org/schema/rmi/config/citrus-rmi-config.xsd">
     
    -@CitrusTest
    -public void kubernetesTest() {
    -    kubernetes().client(kubernetesClient)
    -                .info()
    -                .validate((info, context) -> Assert.assertEquals(info.getApiVersion(), "v1"));
    +      [...]
     
    -    kubernetes().client(kubernetesClient)
    -                .pods()
    -                .list()
    -                .withoutLabel("running")
    -                .label("app", "myApp");
    -}
    + </beans>
    +
    +

    Now you are ready to use the customized Http configuration elements with the citrus-rmi namespace prefix.

    +
    +
    +

    Read the next section in order to find out more about the RMI message support in Citrus.

    -

    27.4. Info command

    +

    28.1. RMI client

    -

    The info command just gets the client connection settings and provides them as a Json result to the action.

    +

    On the client side we want to call e remote interface. We need to specify the method to call as well as all method arguments. The respective method return value is receivable within the test case for validation. Citrus provides a client component for RMI that sends out service invocation calls.

    -
    XML DSL
    -
    <k8s:info client="myK8sClient">
    -  <k8s:validate>
    -    <k8s:result>{
    -      "result": {
    -        "clientVersion": "1.4.27",
    -        "apiVersion": "v1",
    -        "kind":"Info",
    -        "masterUrl": "${masterUrl}",
    -        "namespace": "test"
    +
    <citrus-rmi:client id="rmiClient1"
    +      host="localhost"
    +      port="1099"
    +      binding="newsService"/>
    +
    +      <citrus-rmi:client id="rmiClient2"
    +        server-url="rmi://localhost:1099/newsService"/>
    +
    +
    +
    +

    The client component in the Spring application context receives host and port configuration of a valid RMI service registry. Either by specifying a proper server url or by giving host, port and binding properties. The service binding is the name of the service that we would like to address in the registry. Now we are ready to use this client referenced by its id or name in a test case for a message sending action.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void rmiMessageTest() {
    +    $(send(rmiClient)
    +        .message(RmiMessage.invocation(NewsService.class, "getNews"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <send endpoint="rmiClient">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +                          <method>getNews</method>
    +                        </service-invocation>
    +                    </payload>
    +                </body>
    +            </message>
    +        </send>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: RmiMessageTest
    +actions:
    +  - send:
    +      endpoint: "rmiClient"
    +      message:
    +        body: |
    +          <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +              <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +              <method>getNews</method>
    +          </service-invocation>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="RmiMessageTest">
    +        <actions>
    +            <send endpoint="rmiClient">
    +                <message>
    +                    <payload>
    +                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +                          <method>getNews</method>
    +                        </service-invocation>
    +                    </payload>
    +                </message>
    +            </send>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    We are using the usual Citrus send message action referencing the rmiClient as endpoint. The message payload is a special Citrus message that defines the service invocation. We define the remote interface as well as the method to call. Citrus RMI client component will be able to interpret this message content and call the service method.

    +
    +
    +

    The method return value is receivable for validation using the very same client endpoint.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void rmiMessageTest() {
    +    $(receive(rmiClient)
    +        .message(RmiMessage.result("This is news from RMI!"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <receive endpoint="rmiClient">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                          <object type="java.lang.String" value="This is news from RMI!"/>
    +                        </service-result>
    +                    </payload>
    +                </body>
    +            </message>
    +        </receive>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: RmiMessageTest
    +actions:
    +  - receive:
    +      endpoint: "rmiClient"
    +      message:
    +        body: |
    +          <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    +              <object type="java.lang.String" value="This is news from RMI!"/>
    +          </service-result>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="RmiMessageTest">
    +        <actions>
    +            <receive endpoint="rmiClient">
    +                <message>
    +                    <payload>
    +                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                          <object type="java.lang.String" value="This is news from RMI!"/>
    +                        </service-result>
    +                    </payload>
    +                </message>
    +            </receive>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    In the sample above we receive the service result and expect a java.lang.String object return value. The return value content is also validated within the service result payload.

    +
    +
    +

    Of course we can also deal with method arguments.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void rmiMessageTest() {
    +    $(send(rmiClient)
    +        .message(RmiMessage.invocation(NewsService.class, "setNews")
    +              .argument("This is breaking news!"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <send endpoint="rmiClient">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                            <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +                            <method>setNews</method>
    +                            <args>
    +                              <arg value="This is breaking news!"/>
    +                            </args>
    +                        </service-invocation>
    +                    </payload>
    +                </body>
    +            </message>
    +        </send>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: RmiMessageTest
    +actions:
    +  - send:
    +      endpoint: "rmiClient"
    +      message:
    +        body: |
    +          <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +                <method>setNews</method>
    +                <args>
    +                  <arg value="This is breaking news!"/>
    +                </args>
    +          </service-invocation>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="RmiMessageTest">
    +        <actions>
    +            <send endpoint="rmiClient">
    +                <message>
    +                    <payload>
    +                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                            <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +                            <method>setNews</method>
    +                            <args>
    +                              <arg value="This is breaking news!"/>
    +                            </args>
    +                        </service-invocation>
    +                    </payload>
    +                </message>
    +            </send>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    This completes the basic remote service call. Citrus invokes the remote interface method and validates the method return value. As a tester you might also face errors and exceptions when calling the remote interface method. You can catch and assert these remote exceptions verifying your error scenario.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void rmiMessageTest() {
    +    $(assertException()
    +        .exception(java.rmi.RemoteException.class)
    +        .when(
    +            send(rmiClient)
    +                .message(RmiMessage.invocation(NewsService.class, "setNews")
    +                        .argument("This is breaking news!"))
    +        )
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <assert exception="java.rmi.RemoteException">
    +            <when>
    +                <send endpoint="rmiClient">
    +                    <message>
    +                        <body>
    +                            <payload>
    +                                <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                                    <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +                                    <method>setNews</method>
    +                                    <args>
    +                                      <arg value="This is breaking news!"/>
    +                                    </args>
    +                                </service-invocation>
    +                            </payload>
    +                        </body>
    +                    </message>
    +                </send>
    +            </when>
    +        </assert>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: RmiMessageTest
    +actions:
    +  - assert:
    +      exception: "java.rmi.RemoteException"
    +      when:
    +        - send:
    +            endpoint: "rmiClient"
    +            message:
    +              body: |
    +                <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                      <!-- ... -->
    +                </service-invocation>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="RmiMessageTest">
    +        <actions>
    +            <assert exception="java.rmi.RemoteException">
    +                <when>
    +                    <send endpoint="rmiClient">
    +                        <message>
    +                            <payload>
    +                                <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                                    <!-- ... -->
    +                                </service-invocation>
    +                            </payload>
    +                        </message>
    +                    </send>
    +                </when>
    +            </assert>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    We assert the RemoteException to be thrown while calling the remote service method. This is how you can handle some sort of error situation while calling remote services. In the next section we will handle RMI communication where Citrus provides the remote interfaces.

    +
    +
    +
    +

    28.2. RMI server

    +
    +

    On the server side Citrus needs to provide remote interfaces with methods callable for clients. This means that Citrus needs to support all your remote interfaces with method arguments and return values. The Citrus RMI server is able to bind your remote interfaces to a service registry. All incoming RMI client method calls are automatically accepted and the method arguments are converted into a Citrus XML service invocation representation. The RMI method call is then passed to the running test for validation.

    +
    +
    +

    Let us have a look at the Citrus RMI server component and how you can add it to the Spring application context.

    +
    +
    +
    +
    <citrus-rmi:server id="rmiServer"
    +      host="localhost"
    +      port="1099"
    +      interface="org.citrusframework.rmi.remote.NewsService"
    +      binding="newService"
    +      create-registry="true"
    +      auto-start="true"/>
    +
    +
    +
    +

    The RMI server component uses properties such as host and port to define the service registry. By default Citrus will connect to this service registry and bind its remote interfaces to it. With the attribute create-registry Citrus can also create the registry for you.

    +
    +
    +

    You have to give Citrus the fully qualified remote interface name so Citrus can bind it to the service registry and handle incoming method calls properly. In your test case you can then receive the incoming method calls on the server in order to perform validation steps.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void rmiMessageTest() {
    +    $(receive(rmiServer)
    +        .message(RmiMessage.invocation(NewsService.class, "getNews"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <receive endpoint="rmiServer">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +                          <method>getNews</method>
    +                        </service-invocation>
    +                    </payload>
    +                </body>
    +                <headers>
    +                    <header name="citrus_rmi_interface" value="org.citrusframework.rmi.remote.NewsService"/>
    +                    <header name="citrus_rmi_method" value="getNews"/>
    +                </headers>
    +            </message>
    +        </receive>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: RmiMessageTest
    +actions:
    +  - receive:
    +      endpoint: "rmiServer"
    +      message:
    +        body: |
    +          <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +              <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +              <method>getNews</method>
    +          </service-invocation>
    +        headers:
    +          - name: citrus_rmi_interface
    +            value: "org.citrusframework.rmi.remote.NewsService"
    +          - name: citrus_rmi_method
    +            value: "getNews"
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="RmiMessageTest">
    +        <actions>
    +            <receive endpoint="rmiServer">
    +                <message>
    +                    <payload>
    +                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
    +                          <method>getNews</method>
    +                        </service-invocation>
    +                    </payload>
    +                </message>
    +                <header>
    +                    <element name="citrus_rmi_interface" value="org.citrusframework.rmi.remote.NewsService"/>
    +                    <element name="citrus_rmi_method" value="getNews"/>
    +                </header>
    +            </receive>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    As you can see Citrus converts the incoming service invocation to a special XML representation which is passed as message payload to the test. As this is plain XML you can verify the RMI message content as usual using Citrus variables, functions and validation matchers.

    +
    +
    +

    Since we have received the method call we need to provide some return value for the client. As usual we can specify the method return value with some XML representation.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void rmiMessageTest() {
    +    $(send(rmiServer)
    +        .message(RmiMessage.result("This is news from RMI!"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <send endpoint="rmiServer">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                            <object type="java.lang.String" value="This is news from RMI!"/>
    +                        </service-result>
    +                    </payload>
    +                </body>
    +            </message>
    +        </send>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: RmiMessageTest
    +actions:
    +  - send:
    +      endpoint: "rmiServer"
    +      message:
    +        body: |
    +          <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    +            <object type="java.lang.String" value="This is news from RMI!"/>
    +          </service-result>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="RmiMessageTest">
    +        <actions>
    +            <send endpoint="rmiServer">
    +                <message>
    +                    <payload>
    +                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                            <object type="java.lang.String" value="This is news from RMI!"/>
    +                        </service-result>
    +                    </payload>
    +                </message>
    +            </send>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    The service result is defined as object with a type and value . The Citrus RMI remote interface method will return this value to the calling client. This would complete the successful remote service invocation. At this point we also have to think of choosing to raise some remote exception as service outcome.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void rmiMessageTest() {
    +    $(send(rmiServer)
    +        .message(RmiMessage.exception("Something went wrong"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <send endpoint="rmiServer">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                            <exception>Something went wrong</exception>
    +                        </service-result>
    +                    </payload>
    +                </body>
    +            </message>
    +        </send>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: RmiMessageTest
    +actions:
    +  - send:
    +      endpoint: "rmiServer"
    +      message:
    +        body: |
    +          <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    +            <exception>Something went wrong</exception>
    +          </service-result>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="RmiMessageTest">
    +        <actions>
    +            <send endpoint="rmiServer">
    +                <message>
    +                    <payload>
    +                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    +                            <exception>Something went wrong</exception>
    +                        </service-result>
    +                    </payload>
    +                </message>
    +            </send>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    In the example above Citrus will not return some object as service result but raise a java.rmi.RemoteException with respective error message as specified in the test case. The calling client will receive the exception accordingly.

    +
    +
    +
    +
    +
    +

    29. JMX support

    +
    +
    +

    JMX is a standard Java API for making beans accessible to others in terms of management and remote configuration. JMX is the short term for Java Management Extensions and is often used in JEE application servers to manage bean attributes and operations from outside (e.g. another JVM). A managed bean server hosts multiple managed beans for JMX access. Remote connections to JMX can be realized with RMI (Remote method invocation) capabilities.

    +
    +
    +

    Citrus is able to connect to JMX managed beans as client and server. As a client Citrus can invoke managed bean operations and read write managed bean attributes. As a server Citrus is able to expose managed beans as mbean server. Clients can access those Citrus managed beans and get proper response objects as result. Doing so you can use the JVM platform managed bean server or some RMI registry for providing remote access.

    +
    +
    + + + + + +
    + + +The JMX components in Citrus are kept in a separate Maven module. So you should check that the module is available as Maven dependency in your project +
    +
    +
    +
    +
    <dependency>
    +  <groupId>org.citrusframework</groupId>
    +  <artifactId>citrus-jmx</artifactId>
    +  <version>${citrus.version}</version>
    +</dependency>
    +
    +
    +
    +

    As usual Citrus provides a customized jmx configuration schema that is used in Spring configuration files. Simply include the citrus-jmx namespace in the configuration XML files as follows.

    +
    +
    +
    +
    <beans xmlns="http://www.springframework.org/schema/beans"
    +      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +      xmlns:citrus="http://www.citrusframework.org/schema/config"
    +      xmlns:citrus-jmx="http://www.citrusframework.org/schema/jmx/config"
    +      xsi:schemaLocation="
    +      http://www.springframework.org/schema/beans
    +      http://www.springframework.org/schema/beans/spring-beans.xsd
    +      http://www.citrusframework.org/schema/config
    +      http://www.citrusframework.org/schema/config/citrus-config.xsd
    +      http://www.citrusframework.org/schema/jmx/config
    +      http://www.citrusframework.org/schema/jmx/config/citrus-jmx-config.xsd">
    +
    +      [...]
    +
    +      </beans>
    +
    +
    +
    +

    Now you are ready to use the customized Http configuration elements with the citrus-jmx namespace prefix.

    +
    +
    +

    Next sections describe the JMX message support in Citrus in more detail.

    +
    +
    +

    29.1. JMX client

    +
    +

    On the client side we want to call some managed bean by either accessing managed attributes with read/write or by invoking a managed bean operation. For proper mbean server connectivity we should specify a client component for JMX that sends out mbean invocation calls.

    +
    +
    +
    +
    <citrus-jmx:client id="jmxClient"
    +      server-url="platform"/>
    +
    +
    +
    +

    The client component specifies the target managed bean server that we want to connect to. In this example we are using the JVM platform mbean server. This means we are able to access all JVM managed beans such as Memory, Threading and Logging. In addition to that we can access all custom managed beans that were exposed to the platform mbean server.

    +
    +
    +

    In most cases you may want to access managed beans on a different JVM or application server. So we need some remote connection to the foreign mbean server.

    +
    +
    +
    +
    <citrus-jmx:client id="jmxClient"
    +      server-url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"
    +      username="user"
    +      password="s!cr!t"
    +      auto-reconnect="true"
    +      delay-on-reconnect="5000"/>
    +
    +
    +
    +

    In this example above we connect to a remote mbean server via RMI using the default RMI registry localhost:1099 and the service name jmxrmi . Citrus is able to handle different remote transport protocols. Just define those in the server-url .

    +
    +
    +

    Now that we have setup the client component we can use it in a test case to access a managed bean.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void jmxMessageTest() {
    +    $(send(jmxClient)
    +        .message(JmxMessage.invocation("java.lang:type=Memory")
    +            .attribute("Verbose"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <send endpoint="jmxClient">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>java.lang:type=Memory</mbean>
    +                          <attribute name="Verbose"/>
    +                        </mbean-invocation>
    +                    </payload>
    +                </body>
    +            </message>
    +        </send>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: JmxMessageTest
    +actions:
    +  - send:
    +      endpoint: "jmxClient"
    +      message:
    +        body: |
    +          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +              <mbean>java.lang:type=Memory</mbean>
    +              <attribute name="Verbose"/>
    +          </mbean-invocation>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="JmxMessageTest">
    +        <actions>
    +            <send endpoint="jmxClient">
    +                <message>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>java.lang:type=Memory</mbean>
    +                          <attribute name="Verbose"/>
    +                        </mbean-invocation>
    +                    </payload>
    +                </message>
    +            </send>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    As you can see we just used a normal send action referencing the jmx client component that we have just added. The message payload is an XML representation of the managed bean access. This is a special Citrus XML representation. Citrus will convert this XML payload to the actuel managed bean access. In the example above we try to access a managed bean with object name java.lang:type=Memory . The object name is defined in JMX specification and consists of a key java.lang:type and a value Memory . So we identify the managed bean on the server by its type.

    +
    +
    +

    Now that we have access to the managed bean we can read its managed attributes such as Verbose . This is a boolean type attribute so the mbean invocation result will be a respective Boolean object. We can validate the managed bean attribute access in a receive action.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void jmxMessageTest() {
    +    $(receive(jmxClient)
    +        .message(JmxMessage.result(false))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <receive endpoint="jmxClient">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <object type="java.lang.Boolean" value="false"/>
    +                        </mbean-result>
    +                    </payload>
    +                </body>
    +            </message>
    +        </receive>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: JmxMessageTest
    +actions:
    +  - receive:
    +      endpoint: "jmxClient"
    +      message:
    +        body: |
    +          <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    +              <object type="java.lang.Boolean" value="false"/>
    +          </mbean-result>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="JmxMessageTest">
    +        <actions>
    +            <receive endpoint="jmxClient">
    +                <message>
    +                    <payload>
    +                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <object type="java.lang.Boolean" value="false"/>
    +                        </mbean-result>
    +                    </payload>
    +                </message>
    +            </receive>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    In the sample above we receive the mbean result and expect a java.lang.Boolean object return value. The return value content is also validated within the mbean result payload.

    +
    +
    +

    Some managed bean attributes might also be settable for us. So we can define the attribute access as write operation by specifying a value in the send action payload.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void jmxMessageTest() {
    +    $(send(jmxClient)
    +        .message(JmxMessage.invocation("java.lang:type=Memory")
    +            .attribute("Verbose", true))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <send endpoint="jmxClient">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>java.lang:type=Memory</mbean>
    +                          <attribute name="Verbose" value="true" type="java.lang.Boolean"/>
    +                        </mbean-invocation>
    +                    </payload>
    +                </body>
    +            </message>
    +        </send>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: JmxMessageTest
    +actions:
    +  - send:
    +      endpoint: "jmxClient"
    +      message:
    +        body: |
    +          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +              <mbean>java.lang:type=Memory</mbean>
    +              <attribute name="Verbose" value="true" type="java.lang.Boolean"/>
    +          </mbean-invocation>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="JmxMessageTest">
    +        <actions>
    +            <send endpoint="jmxClient">
    +                <message>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>java.lang:type=Memory</mbean>
    +                          <attribute name="Verbose" value="true" type="java.lang.Boolean"/>
    +                        </mbean-invocation>
    +                    </payload>
    +                </message>
    +            </send>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    Now we have write access to the managed attribute Verbose . We do specify the value and its type java.lang.Boolean . This is how we can set attribute values on managed beans.

    +
    +
    +

    Last not least we are able to access managed bean operations.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void jmxMessageTest() {
    +    $(send(jmxClient)
    +        .message(JmxMessage.invocation("org.citrusframework.jmx.mbean:type=HelloBean")
    +            .operation("sayHello")
    +            .parameter("Hello JMX!"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <send endpoint="jmxClient">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    +                          <operation name="sayHello">
    +                            >parameter>
    +                              >param type="java.lang.String" value="Hello JMX!"/>
    +                            >/parameter>
    +                          >/operation>
    +                        </mbean-invocation>
    +                    </payload>
    +                </body>
    +            </message>
    +        </send>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: JmxMessageTest
    +actions:
    +  - send:
    +      endpoint: "jmxClient"
    +      message:
    +        body: |
    +          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +              <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    +              <operation name="sayHello">
    +                >parameter>
    +                  >param type="java.lang.String" value="Hello JMX!"/>
    +                >/parameter>
    +              >/operation>
    +          </mbean-invocation>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="JmxMessageTest">
    +        <actions>
    +            <send endpoint="jmxClient">
    +                <message>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    +                          <operation name="sayHello">
    +                            >parameter>
    +                              >param type="java.lang.String" value="Hello JMX!"/>
    +                            >/parameter>
    +                          >/operation>
    +                        </mbean-invocation>
    +                    </payload>
    +                </message>
    +            </send>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    In the example above we access a custom managed bean and invoke its operation sayHello . We are also using operation parameters for the invocation. This should call the managed bean operation and return its result if any as usual.

    +
    +
    +

    This completes the basic JMX managed bean access as client. Now we also want to discuss the server side were Citrus is able to provide managed beans for others

    +
    +
    +
    +

    29.2. JMX server

    +
    +

    The server side is always a little bit more tricky because we need to simulate custom managed bean access as a server. First of all Citrus provides a server component that specifies the connection properties for clients such as transport protocols, ports and mbean object names. Let’s create a new server that accepts incoming requests via RMI on a remote registry localhost:1099 .

    +
    +
    +
    +
    <citrus-jmx:server id="jmxServer"
    +      server-url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi">
    +    <citrus-jmx:mbeans>
    +        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.HelloBean"/>
    +        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.NewsBean" objectDomain="org.citrusframework.news" objectName="name=News"/>
    +    </citrus-jmx:mbeans>
    +</citrus-jmx:server>
    +
    +
    +
    +

    As usual we define a server-url that controls the JMX connector access to the mbean server. In this example above we open a JMX RMI connector for clients using the registry localhost:1099 and the service name jmxrmi By default Citrus will not attempt to create this registry automatically so the registry has to be present before the server start up. With the optional server property create-registry set to true you can auto create the registry when the server starts up. These properties do only apply when using a remote JMX connector server.

    +
    +
    +

    Besides using the whole server-url as property we can also construct the connection by host, port, protocol and binding properties.

    +
    +
    +
    +
    <citrus-jmx:server id="jmxServer"
    +      host="localhost"
    +      port="1099"
    +      protocol="rmi"
    +      binding="jmxrmi">
    +    <citrus-jmx:mbeans>
    +        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.HelloBean"/>
    +        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.NewsBean" objectDomain="org.citrusframework.news" objectName="name=News"/>
    +    </citrus-jmx:mbeans>
    +</citrus-jmx:server>
    +
    +
    +
    +

    On last thing to mention is that we could have also used platform as server-url in order to use the JVM platform mbean server instead.

    +
    +
    +

    Now that we clarified the connectivity we need to talk about how to define the managed beans that are available on our JMX mbean server. This is done as nested mbean configuration elements. Here the managed bean definitions describe the managed bean with its objectDomain, objectName, operations and attributes. The most convenient way of defining such managed bean definitions is to give a bean type which is the fully qualified class name of the managed bean. Citrus will use the package name and class name for proper objectDomain and objectName construction.

    +
    +
    +

    Let’s have a closer look at the first mbean definition in the example above. So the first managed bean is defined by its class name org.citrusframework.jmx.mbean.HelloBean and therefore is accessible using the objectName org.citrusframework.jmx.mbean:type=HelloBean . In addition to that Citrus will read the class information such as available methods, getters and setters for constructing a proper MBeanInfo. In the second managed bean definition in our example we have used additional custom objectDomain and objectName values. So the NewsBean will be accessible with org.citrusframework.news:name=News on the managed bean server.

    +
    +
    +

    This is how we can define the bindings of managed beans and what clients need to search for when finding and accessing the managed beans on the server. When clients try to find the managed beans they have to use proper objectNames accordingly. ObjectNames that are not defined on the server will be rejected with managed bean not found error.

    +
    +
    +

    Right now we have to use the qualified class name of the managed bean in the definition. What happens if we do not have access to that mbean class or if there is not managed bean interface available at all? Citrus provides a generic managed bean that is able to handle any managed bean interaction. The generic bean implementation needs to know the managed operations and attributes though. So let’s define a new generic managed bean on our server:

    +
    +
    +
    +
    <citrus-jmx:server id="jmxServer"
    +server-url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi">
    +    <citrus-jmx:mbeans>
    +        <citrus-jmx:mbean name="fooBean" objectDomain="foo.object.domain" objectName="type=FooBean">
    +            <citrus-jmx:operations>
    +                <citrus-jmx:operation name="fooOperation">
    +                    <citrus-jmx:parameter>
    +                        <citrus-jmx:param type="java.lang.String"/>
    +                        <citrus-jmx:param type="java.lang.Integer"/>
    +                    </citrus-jmx:parameter>
    +                </citrus-jmx:operation>
    +                <citrus-jmx:operation name="barOperation"/>
    +            </citrus-jmx:operations>
    +            <citrus-jmx:attributes>
    +                <citrus-jmx:attribute name="fooAttribute" type="java.lang.String"/>
    +                <citrus-jmx:attribute name="barAttribute" type="java.lang.Boolean"/>
    +            </citrus-jmx:attributes>
    +        </citrus-jmx:mbean>
    +    </citrus-jmx:mbeans>
    +</citrus-jmx:server>
    +
    +
    +
    +

    The generic bean definition needs to define all operations and attributes that are available for access. Up to now we are restricted to using Java base types when defining operation parameter and attribute return types. There is actually no way to define more complex return types. Nevertheless Citrus is now able to expose the managed bean for client access without having to know the actual managed bean implementation.

    +
    +
    +

    Now we can use the server component in a test case to receive some incoming managed bean access.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void jmxMessageTest() {
    +    $(receive(jmxServer)
    +        .message(JmxMessage.invocation("org.citrusframework.jmx.mbean:type=HelloBean")
    +            .operation("sayHello")
    +            .parameter("Hello JMX!"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <receive endpoint="jmxServer">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    +                          <operation name="sayHello">
    +                            >parameter>
    +                              >param type="java.lang.String" value="Hello JMX!"/>
    +                            >/parameter>
    +                          </operation>
    +                        </mbean-invocation>
    +                    </payload>
    +                </body>
    +            </message>
    +        </receive>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: JmxMessageTest
    +actions:
    +  - receive:
    +      endpoint: "jmxServer"
    +      message:
    +        body: |
    +          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +              <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    +              <operation name="sayHello">
    +                >parameter>
    +                  >param type="java.lang.String" value="Hello JMX!"/>
    +                >/parameter>
    +              </operation>
    +          </mbean-invocation>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="JmxMessageTest">
    +        <actions>
    +            <receive endpoint="jmxServer">
    +                <message>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    +                          <operation name="sayHello">
    +                            >parameter>
    +                              >param type="java.lang.String" value="Hello JMX!"/>
    +                            >/parameter>
    +                          </operation>
    +                        </mbean-invocation>
    +                    </payload>
    +                </message>
    +            </receive>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    In this very first example we expect a managed bean access to the bean org.citrusframework.jmx.mbean:type=HelloBean . We further expect the operation sayHello to be called with respective parameter values. Now we have to define the operation result that will be returned to the calling client as operation result.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void jmxMessageTest() {
    +    $(send(jmxServer)
    +        .message(JmxMessage.result("Hello from JMX!"))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <send endpoint="jmxServer">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                            <object type="java.lang.String" value="Hello from JMX!"/>
    +                        </mbean-result>
    +                    </payload>
    +                </body>
    +            </message>
    +        </send>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: JmxMessageTest
    +actions:
    +  - send:
    +      endpoint: "jmxServer"
    +      message:
    +        body: |
    +          <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    +            <object type="java.lang.String" value="Hello from JMX!"/>
    +          </mbean-result>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="JmxMessageTest">
    +        <actions>
    +            <send endpoint="jmxServer">
    +                <message>
    +                    <payload>
    +                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                            <object type="java.lang.String" value="Hello from JMX!"/>
    +                        </mbean-result>
    +                    </payload>
    +                </message>
    +            </send>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    The operation returns a String Hello from JMX! . This is how we can expect operation calls on managed beans. Now we already have seen that managed beans also expose attributes. The next example is handling incoming attribute read access.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void jmxMessageTest() {
    +    $(receive(jmxServer)
    +        .message(JmxMessage.invocation("org.citrusframework.news:name=News")
    +            .attribute("newsCount"))
    +    );
    +
    +    $(send(jmxServer)
    +        .message(JmxMessage.result(100))
    +    );
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <receive endpoint="jmxServer">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>org.citrusframework.news:name=News</mbean>
    +                            >attribute name="newsCount"/>
    +                        </mbean-invocation>
    +                    </payload>
    +                </body>
    +            </message>
    +        </receive>
    +        <send endpoint="jmxServer">
    +            <message>
    +                <body>
    +                    <payload>
    +                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                            <object type="java.lang.Integer" value="100"/>
    +                        </mbean-result>
    +                    </payload>
    +                </body>
    +            </message>
    +        </send>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: JmxMessageTest
    +actions:
    +  - receive:
    +      endpoint: "jmxServer"
    +      message:
    +        body: |
    +          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +              <mbean>org.citrusframework.news:name=News</mbean>
    +                >attribute name="newsCount"/>
    +          </mbean-invocation>
    +  - send:
    +      endpoint: "jmxServer"
    +      message:
    +        body: |
    +          <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    +            <object type="java.lang.Integer" value="100"/>
    +          </mbean-result>
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <testcase name="JmxMessageTest">
    +        <actions>
    +            <receive endpoint="jmxServer">
    +                <message>
    +                    <payload>
    +                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                          <mbean>org.citrusframework.news:name=News</mbean>
    +                            >attribute name="newsCount"/>
    +                        </mbean-invocation>
    +                    </payload>
    +                </message>
    +            </receive>
    +
    +            <send endpoint="jmxServer">
    +                <message>
    +                    <payload>
    +                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    +                            <object type="java.lang.Integer" value="100"/>
    +                        </mbean-result>
    +                    </payload>
    +                </message>
    +            </send>
    +        </actions>
    +    </testcase>
    +</spring:beans>
    +
    +
    +
    +

    The receive action expects read access to the NewsBean attribute newsCount and returns a result object of type java.lang.Integer . This way we can expect all attribute access to our managed beans. Write operations will have an attribute value specified.

    +
    +
    +

    This completes the JMX server capabilities with managed bean access on operations and attributes.

    +
    +
    +
    +
    +
    +

    30. Zookeeper support

    +
    +
    +

    Citrus provides configuration components and test actions for interacting with Zookeeper. The Citrus Zookeeper client component executes commands like create-node, check node-exists, delete-node, get node-data or set node-data. As a user you can execute Zookeeper commands as part of a Citrus test and validate possible command results.

    +
    +
    + + + + + +
    + + +The Zookeeper test components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +
    +
    +
    +
    +
    <dependency>
    +      <groupId>org.citrusframework</groupId>
    +      <artifactId>citrus-zookeeper</artifactId>
    +      <version>${citrus.version}</version>
    +      </dependency>
    +
    +
    +
    +

    Citrus provides a "citrus-zookeeper" configuration namespace and schema definition for Zookeeper related components and actions. Include this namespace into your Spring configuration in order to use the Citrus zookeeper configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows.

    +
    +
    +
    +
    <beans xmlns="http://www.springframework.org/schema/beans"
    +      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +      xmlns:citrus-zookeeper="http://www.citrusframework.org/schema/zookeeper/config"
    +      xsi:schemaLocation="
    +      http://www.springframework.org/schema/beans
    +      http://www.springframework.org/schema/beans/spring-beans.xsd
    +      http://www.citrusframework.org/schema/zookeeper/config
    +      http://www.citrusframework.org/schema/zookeeper/config/citrus-zookeeper-config.xsd">
    +
    +      [...]
    +
    +      </beans>
    +
    +
    +
    +

    After that you are able to use customized Citrus XML elements in order to define the Spring beans.

    +
    +
    +

    30.1. Zookeeper client

    +
    +

    Before you can interact with a Zookeeper server you have to configure the Zookeeper client. A sample configuration is provided below describing the configuration options available:

    +
    +
    +
    +
    <citrus-zookeeper:client id="zookeeperClient"
    +                               url="http://localhost:21118"
    +                               timeout="2000"/>
    +
    +
    +
    +

    This is a typical client configuration for connecting to a Zookeeper server. Now you are able to execute several commands. These commands will be sent to the Zookeeper server for execution.

    +
    +
    +
    +

    30.2. Zookeeper commands

    +
    +

    See below all available Zookeeper commands that a Citrus client is able to execute.

    +
    +
    +
    +
    info: Retrieves the current state of the client connection
    +create: Creates a znode in a specified path of the ZooKeeper namespace
    +delete: Deletes a znode from a specified path of the ZooKeeper namespace
    +exists: Checks if a znode exists in the path
    +children: Gets a list of children of a znode
    +get: Gets the data associated with a znode
    +set: Sets/writes data into the data field of a znode
    +
    +
    +
    +

    Before we see some of these commands in action we have to add a new test namespace to our test case when using the XML DSL.

    +
    +
    +
    +
    <beans xmlns="http://www.springframework.org/schema/beans"
    +      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +      xmlns:zookeeper="http://www.citrusframework.org/schema/zookeeper/testcase"
    +      xsi:schemaLocation="
    +      http://www.springframework.org/schema/beans
    +      http://www.springframework.org/schema/beans/spring-beans.xsd
    +      http://www.citrusframework.org/schema/zookeeper/testcase
    +      http://www.citrusframework.org/schema/zookeeper/testcase/citrus-zookeeper-testcase.xsd">
    +
    +      [...]
    +
    +      </beans>
    +
    +
    +
    +

    We added the Zookeeper namespace with prefix zookeeper: so now we can start to add special test actions to the test case:

    +
    +
    +
    XML DSL
    +
    +
    <zookeeper:create zookeeper-client="zookeeperClient" path="/${randomString}" acl="OPEN_ACL_UNSAFE" mode="PERSISTENT">
    +  <zookeeper:data>foo</zookeeper:data>
    +  <zookeeper:expect>
    +    <zookeeper:result>
    +      <![CDATA[
    +        {
    +          "responseData":{
    +              "path":"/${randomString}"
    +          }
    +        }
    +      ]]>
    +    </zookeeper:result>
    +  </zookeeper:expect>
    +</zookeeper:create>
    +
    +<zookeeper:get zookeeper-client="zookeeperClient" path="/${randomString}">
    +  <zookeeper:expect>
    +    <zookeeper:result>
    +      <![CDATA[
    +      {
    +        "responseData":{
    +          "data":"foo"
    +        }
           }
    -    }</k8s:result>
    -  </k8s:validate>
    -</k8s:info>
    + ]]> + </zookeeper:result> + </zookeeper:expect> +</zookeeper:getData> + +<zookeeper:set zookeeper-client="zookeeperClient" path="/${randomString}"> + <zookeeper:data>bar</zookeeper:data> +</zookeeper:setData>

    +

    + +
    +

    When using the Java DSL we can directly configure the commands with a fluent API.

    +
    +
    +
    Java DSL
    +
    +
    @CitrusTest
    +public void testZookeeper() {
    +    variable("randomString", "citrus:randomString(10)");
    +
    +    zookeeper()
    +        .create("/${randomString}", "foo")
    +        .acl("OPEN_ACL_UNSAFE")
    +        .mode("PERSISTENT")
    +        .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    +            @Override
    +            public void doWithCommandResult(ZooResponse result, TestContext context) {
    +                Assert.assertEquals(result.getResponseData().get("path"), context.replaceDynamicContentInString("/${randomString}"));
    +            }
    +        });
    +
    +    zookeeper()
    +        .get("/${randomString}")
    +        .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    +            @Override
    +            public void doWithCommandResult(ZooResponse result, TestContext context) {
    +                Assert.assertEquals(result.getResponseData().get("version"), 0);
    +            }
    +        });
    +
    +    zookeeper()
    +        .set("/${randomString}", "bar");
    +}
    +
    +
    +
    +

    The examples above create a new znode in Zookeeper using a randomString as path. We can get and set the data with expecting and validating the result of the Zookeeper server. This is basically the idea of integrating Zookepper operations to a Citrus test. This opens the gate to manage Zookeeper related entities within a Citrus test. We can manipulate and validate the znodes on the Zookeeper instance.

    +
    +
    +

    Zookeeper keeps its nodes in a hierarchical storage. This means a znode can have children and we can add and remove those. In Citrus you can get all children of a znode and manage those within the test:

    +
    +
    +
    XML DSL
    +
    +
    <zookeeper:create zookeeper-client="zookeeperClient" path="/${randomString}/child1" acl="OPEN_ACL_UNSAFE" mode="EPHEMERAL">
    +  <zookeeper:data></zookeeper:data>
    +  <zookeeper:expect>
    +    <zookeeper:result>
    +      <![CDATA[
    +        {
    +          "responseData":{
    +              "path":"/${randomString}/child1"
    +          }
    +        }
    +      ]]>
    +    </zookeeper:result>
    +  </zookeeper:expect>
    +</zookeeper:create>
    +
    +<zookeeper:create zookeeper-client="zookeeperClient" path="/${randomString}/child2" acl="OPEN_ACL_UNSAFE" mode="EPHEMERAL">
    +  <zookeeper:data></zookeeper:data>
    +  <zookeeper:expect>
    +    <zookeeper:result>
    +      <![CDATA[
    +        {
    +          "responseData":{
    +              "path":"/${randomString}/child2"
    +          }
    +        }
    +      ]]>
    +    </zookeeper:result>
    +  </zookeeper:expect>
    +</zookeeper:create>
    +
    +<zookeeper:children zookeeper-client="zookeeperClient" path="/${randomString}">
    +  <zookeeper:expect>
    +    <zookeeper:result>
    +      <![CDATA[
    +        {
    +          "responseData":{
    +              "children":["child1","child2"]
    +          }
    +        }
    +      ]]>
    +    </zookeeper:result>
    +  </zookeeper:expect>
    +</zookeeper:children>
    +
    +
    +
    +
    Java DSL
    +
    +
    zookeeper()
    +    .create("/${randomString}/child1", "")
    +    .acl("OPEN_ACL_UNSAFE")
    +    .mode("PERSISTENT")
    +    .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    +        @Override
    +        public void doWithCommandResult(ZooResponse result, TestContext context) {
    +            Assert.assertEquals(result.getResponseData().get("path"), context.replaceDynamicContentInString("/${randomString}/child1"));
    +        }
    +    });
    +
    +zookeeper()
    +    .create("/${randomString}/child2", "")
    +    .acl("OPEN_ACL_UNSAFE")
    +    .mode("PERSISTENT")
    +    .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    +        @Override
    +        public void doWithCommandResult(ZooResponse result, TestContext context) {
    +            Assert.assertEquals(result.getResponseData().get("path"), context.replaceDynamicContentInString("/${randomString}/child2"));
    +        }
    +    });
    +
    +zookeeper()
    +    .children("/${randomString}")
    +    .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    +        @Override
    +        public void doWithCommandResult(ZooResponse result, TestContext context) {
    +            Assert.assertEquals(result.getResponseData().get("children").toString(), "[child1, child2]");
    +        }
    +    });
    +
    +
    + + + +
    +

    31. Spring Restdocs support

    +
    +
    +

    Spring Restdocs project helps to easily generate API documentation for RESTful services. While messages are exchanged the Restdocs library generates request/response snippets and API documentation. You can add the Spring Restdocs documentation to the Citrus client components for Http and SOAP endpoints.

    +
    +
    + + + + + +
    + + +The Spring Restdocs support components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +
    +
    +
    +
    +
    <dependency>
    +  <groupId>org.citrusframework</groupId>
    +  <artifactId>citrus-restdocs</artifactId>
    +  <version>${citrus.version}</version>
    +</dependency>
    +
    +
    +
    +

    For easy configuration Citrus has created a separate namespace and schema definition for Spring Restdocs related documentation. Include this namespace into your Spring configuration in order to use the Citrus Restdocs configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows.

    +
    +
    +
    +
    <spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
    +     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +     xmlns="http://www.citrusframework.org/schema/cucumber/testcase"
    +     xsi:schemaLocation="
    +     http://www.springframework.org/schema/beans
    +     http://www.springframework.org/schema/beans/spring-beans.xsd
    +     http://www.citrusframework.org/schema/restdocs/config
    +     http://www.citrusframework.org/schema/restdocs/config/citrus-restdocs-config.xsd">
    +
    +    [...]
    +
    +</spring:beans>
    +
    +
    +
    +

    After that you are able to use customized Citrus XML elements in order to define the Spring beans.

    +
    +
    +

    31.1. Spring Restdocs using Http

    +
    +

    First of all we concentrate on adding the Spring Restdocs feature to Http client communication. The next sample configuration uses the new Spring Restdocs components in Citrus:

    +
    +
    +
    +
    <citrus-restdocs:documentation id="restDocumentation"
    +                                              output-directory="target/citrus-docs/generated-snippets"
    +                                              identifier="rest-docs/{method-name}"/>
    +
    +
    +
    +

    The above component adds a new documentation configuration. Behind the scenes the component creates a new restdocs configurer and a client interceptor. We can reference the new restdocs component in citrus-http client components like this:

    +
    +
    +
    +
    <citrus-http:client id="httpClient"
    +          request-url="http://localhost:8080/test"
    +          request-method="POST"
    +          interceptors="restDocumentation"/>
    +
    +
    +
    +

    The Spring Restdocs documentation component acts as a client interceptor. Every time the client component is used to send and receive a message the restdocs interceptor will automatically create its API documentation. The configuration identifier attribute describes the output format rest-docs/{method-name} which results in a folder layout like this:

    +
    +
    +
    +
    target/citrus-docs
    +  |- rest-docs
    +    |- test-a
    +      |- curl-request.adoc
    +      |- http-request.adoc
    +      |- http-response.adoc
    +    |- test-b
    +      |- curl-request.adoc
    +      |- http-request.adoc
    +      |- http-response.adoc
    +    |- test-c
    +      |- curl-request.adoc
    +      |- http-request.adoc
    +      |- http-response.adoc
    +
    +
    +
    +

    The example above is the result of three test cases each of them performing a client Http request/response communication. Each test message exchange is documented with separate files:

    +
    +
    +
    curl-request.adoc
    +
    +
    $ curl 'http://localhost:8080/test' -i -X POST -H 'Accept: application/xml' -H 'CustomHeaderId: 123456789' -H 'Content-Type: application/xml;charset=UTF-8' -H 'Accept-Charset: utf-8' -d '<testRequestMessage>
    +    <text>Hello HttpServer>/text>
    +</testRequestMessage>'
    +
    +
    +
    +

    The curl file represents the client request as curl command and can be seen as a sample to reproduce the request.

    +
    +
    +
    http-request.adoc
    +
    +
    POST /test HTTP/1.1
    +Accept: application/xml
    +CustomHeaderId: 123456789
    +Content-Type: application/xml;charset=UTF-8
    +Content-Length: 118
    +Accept-Charset: utf-8
    +Host: localhost
    +
    +<testRequestMessage>
    +    <text>Hello HttpServer>/text>
    +</testRequestMessage>
    +
    +
    +
    +

    The http-request.adoc file represents the sent message data for the client request. The respective http-response.adoc represents the response that was sent to the client.

    +
    +
    +
    http-response.adoc
    +
    +
    HTTP/1.1 200 OK
    +Date: Tue, 07 Jun 2016 12:10:46 GMT
    +Content-Type: application/xml;charset=UTF-8
    +Accept-Charset: utf-8
    +Content-Length: 122
    +Server: Jetty(9.2.15.v20160210)
    +
    +<testResponseMessage>
    +    <text>Hello Citrus!>/text>
    +</testResponseMessage>
    +
    +
    +
    +

    Nice work! We have automatically created snippets for the RESTful API by just adding the interceptor to the Citrus client component. Spring Restdocs components can be combined manually. See the next configuration that uses this approach.

    +
    +
    +
    +
    <citrus-restdocs:configurer id="restDocConfigurer" output-directory="target/citrus-docs/generated-snippets"/>
    +<citrus-restdocs:client-interceptor id="restDocClientInterceptor" identifier="rest-docs/{method-name}"/>
    +
    +<util:list id="restDocInterceptors">
    +    <ref bean="restDocConfigurer"/>
    +    <ref bean="restDocClientInterceptor"/>
    +</util:list>
    +
    +
    +
    +
    +
    <citrus-http:client id="httpClient"
    +          request-url="http://localhost:8080/test"
    +          request-method="POST"
    +          interceptors="restDocInterceptors"/>
    +
    +
    +
    +

    What exactly is the difference to the citrus-restdocs:documentation that we have used before? In general there is no difference. Both configurations are identical in its outcome. Why should someone use the second approach then? It is more verbose as we need to also define a list of interceptors. The answer is easy. If you want to combine the restdocs interceptors with other client interceptors in a list then you should use the manual combination approach. We can add basic authentication interceptors for instance to the list of interceptors then. The more comfortable citrus-restdocs:documentation component only supports exclusive restdocs interceptors.

    +
    +
    +
    +

    31.2. Spring Restdocs using SOAP

    +
    +

    You can use the Spring Restdocs features also for SOAP clients in Citrus. This is a controversy idea as SOAP endpoints are different to RESTful concepts. But at the end SOAP Http communication is Http communication with request and response messages. Why should we miss out the fantastic documentation feature here just because of ideology reasons.

    +
    +
    +

    The concept of adding the Spring Restdocs documentation as interceptor to the client is still the same.

    +
    +
    +
    +
    <citrus-restdocs:documentation id="soapDocumentation"
    +                                              type="soap"
    +                                              output-directory="target/citrus-docs/generated-snippets"
    +                                              identifier="soap-docs/{method-name}"/>
    +
    +
    +
    +

    We have added a type setting with value soap . And that is basically all we need to do. Now Citrus knows that we would like to add documentation for a SOAP client:

    +
    +
    +
    +
    <citrus-ws:client id="soapClient"
    +      request-url="http://localhost:8080/test"
    +      interceptors="soapDocumentation"/>
    +
    +
    +
    +

    Following from that the soapClient is enabled to generate Spring Restdocs documentation for each request/response. The generated snippets then do represent the SOAP request and response messages.

    +
    +
    +
    http-request.adoc
    +
    +
    POST /test HTTP/1.1
    +SOAPAction: "test"
    +Accept: application/xml
    +CustomHeaderId: 123456789
    +Content-Type: application/xml;charset=UTF-8
    +Content-Length: 529
    +Accept-Charset: utf-8
    +Host: localhost
    +
    +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    +  <SOAP-ENV:Header>
    +    <Operation xmlns="http://citrusframework.org/test">sayHello>/Operation>
    +  </SOAP-ENV:Header>
    +  <SOAP-ENV:Body>
    +    <testRequestMessage>
    +      <text>Hello HttpServer>/text>
    +    </testRequestMessage>
    +  </SOAP-ENV:Body>
    +</SOAP-ENV:Envelope>
    +
    +
    +
    +
    http-response.adoc
    +
    +
    HTTP/1.1 200 OK
    +Date: Tue, 07 Jun 2016 12:10:46 GMT
    +Content-Type: application/xml;charset=UTF-8
    +Accept-Charset: utf-8
    +Content-Length: 612
    +Server: Jetty(9.2.15.v20160210)
    +
    +<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    +  <SOAP-ENV:Header>
    +    >Operation xmlns="http://citrusframework.org/test">sayHello>/Operation>
    +  </SOAP-ENV:Header>
    +  <SOAP-ENV:Body>
    +    <testResponseMessage>
    +      <text>Hello Citrus!>/text>
    +    </testResponseMessage>
    +  </SOAP-ENV:Body>
    +</SOAP-ENV:Envelope>
    +
    +
    +
    +

    The file names are still using http-request and http-response but the content is clearly the SOAP request/response message data.

    +
    +
    +
    +

    31.3. Spring Restdocs in Java DSL

    +
    +

    How can we use Spring Restdocs in Java DSL? Of course we have special support in Citrus Java DSL for the Spring Restdocs configuration, too.

    +
    +
    +
    Java DSL
    +
    +
    public class RestDocConfigurationIT extends TestNGCitrusTestDesigner {
    +
    +    @Autowired
    +    private TestListeners testListeners;
    +
    +    private HttpClient httpClient;
    +
    +    @BeforeClass
    +    public void setup() {
    +        CitrusRestDocConfigurer restDocConfigurer = CitrusRestDocsSupport.restDocsConfigurer(new ManualRestDocumentation("target/generated-snippets"));
    +        RestDocClientInterceptor restDocInterceptor = CitrusRestDocsSupport.restDocsInterceptor("rest-docs/{method-name}");
    +
    +        httpClient = CitrusEndpoints.http()
    +            .client()
    +            .requestUrl("http://localhost:8073/test")
    +            .requestMethod(HttpMethod.POST)
    +            .contentType("text/xml")
    +            .interceptors(Arrays.asList(restDocConfigurer, restDocInterceptor))
    +            .build();
    +
    +        testListeners.addTestListener(restDocConfigurer);
    +    }
    +
    +    @Test
    +    @CitrusTest
    +    public void testRestDocs() {
    +        http().client(httpClient)
    +            .send()
    +            .post()
    +            .payload("<testRequestMessage>" +
    +                      "<text>Hello HttpServer</text>" +
    +                  "</testRequestMessage>");
    +
    +        http().client(httpClient)
    +            .receive()
    +            .response(HttpStatus.OK)
    +            .payload("<testResponseMessage>" +
    +                      "<text>Hello TestFramework</text>" +
    +                  "</testResponseMessage>");
    +    }
    +}
    +
    +
    +
    +

    The mechanism is quite similar to the XML configuration. We add the Restdocs configurer and interceptor to the list of interceptors for the Http client. If we do this all client communication is automatically documented. The Citrus Java DSL provides some convenient configuration methods in class CitrusRestDocsSupport for creating the configurer and interceptor objects.

    +
    +
    + + + + + +
    + + +The configurer must be added to the list of test listeners. This is a mandatory step in order to enable the configurer for documentation preparations before each test. Otherwise we would not be able to generate proper documentation. If you are using the XML configuration this is done automatically for you. +
    +
    +
    +
    +
    +
    +

    32. Dynamic endpoint components

    +
    +
    +

    Endpoints represent the central components in Citrus to send or receive a message on some destination. Usually endpoints get defined in the basic Citrus Spring application context configuration as Spring bean components. In some cases this might be over engineering as the tester just wants to send or receive a message. In particular this is done when doing sanity checks in server endpoints while debugging a certain scenario.

    +
    +
    +

    With endpoint components you are able to create the Citrus endpoint for sending and receiving a message at test runtime. There is no additional configuration or Spring bean component needed. You just use the endpoint uri in a special naming convention and Citrus will create the endpoint for you. Let us see a first example of this scenario:

    +
    +
    +
    +
    <testcase name="DynamicEndpointTest">
    +    <actions>
    +        <send endpoint="jms:Hello.Queue?timeout=10000">
    +            <message>
    +                <payload>
    +                [...]
    +                </payload>
    +            </message>
    +        </send>
    +
    +        <receive endpoint="jms:Hello.Response.Queue?timeout=5000">
    +            <message>
    +                <payload>
    +                [...]
    +                </payload>
    +            </message>
    +        </receive>
    +    </actions>
    +</testcase>
    +
    +
    +
    +

    As you can see the endpoint uri just goes into the test case action in substitution to the usual endpoint reference name. Instead of referencing a bean id that points to the previously configured Citrus endpoint we use the endpoint uri directly. The endpoint uri should give all information to create the endpoint at runtime. In the example above we use a keyword jms: which tells Citrus that we need to create a JMS message endpoint. Secondly we give the JMS destination name Hello.Queue which is a mandatory part of the endpoint uri when using the JMS component. The optional timeout parameter completed the uri. Citrus is able to create the JMS endpoint at runtime sending the message to the defined destination via JMS.

    +
    +
    +

    Of course this mechanism is not limited to JMS endpoints. We can use all default Citrus message transports in the endpoint uri. Just pick the right keyword that defines the message transport to use. Here is a list of supported keywords:

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +jms + +

    Creates a JMS endpoint for sending and receiving message to a queue or topic

    +
    +channel + +

    Creates a channel endpoint for sending and receiving messages using an in memory Spring Integration message channel

    +
    +http + +

    Creates an HTTP client for sending a request to some server URL synchronously waiting for the response message

    +
    +ws + +

    Creates a Web Socket client for sending messages to or receiving messages from a Web Socket server

    +
    +soap + +

    Creates a SOAP WebService client that send a proper SOAP message to the server URL and waits for the synchronous response to arrive

    +
    +ssh + +

    Creates a new ssh client for publishing a command to the server

    +
    +mail + +

    or smtp: Creates a new mail client for sending a mail mime message to an SMTP server

    +
    +camel + +

    Creates a new Apache Camel endpoint for sending and receiving Camel exchanges both to and from Camel routes.

    +
    +vertx + +

    or eventbus: Creates a new Vert.x instance sending and receiving messages with the network event bus

    +
    +rmi + +

    Creates a new RMI client instance sending and receiving messages for method invocation on remote interfaces

    +
    +jmx + +

    Creates a new JMX client instance sending and receiving messages to and from a managed bean server.

    +
    +
    +
    +

    Depending on the message transport we have to add mandatory parameters to the endpoint uri. In the JMS example we had to specify the destination name. The mandatory parameters are always part of the endpoint uri. Optional parameters can be added as key value pairs to the endpoint uri. The available parameters depend on the endpoint keyword that you have chosen. See these example endpoint uri expressions:

    +
    +
    +
    +
        jms:queuename?connectionFactory=specialConnectionFactory&timeout=10000
    +    jms:topic:topicname?connectionFactory=topicConnectionFactory
    +    jms:sync:queuename?connectionFactory=specialConnectionFactory&pollingInterval=100&replyDestination=myReplyDestination
    +
    +    channel:channelName
    +    channel:sync:channelName
    +    channel:channelName?timeout=10000&channelResolver=myChannelResolver
    +
    +    http:localhost:8088/test
    +    http://localhost:8088/test
    +    http:localhost:8088?requestMethod=GET&timeout=10000&errorHandlingStrategy=throwsException&requestFactory=myRequestFactory
    +    http://localhost:8088/test?requestMethod=DELETE&customParam=foo
    +
    +    websocket:localhost:8088/test
    +    websocket://localhost:8088/test
    +    ws:localhost:8088/test
    +    ws://localhost:8088/test
    +
    +    soap:localhost:8088/test
    +    soap:localhost:8088?timeout=10000&errorHandlingStrategy=propagateError&messageFactory=myMessageFactory
    +
    +    mail:localhost:25000
    +    smtp://localhost:25000
    +    smtp://localhost?timeout=10000&username=foo&password=1234&mailMessageMapper=myMapper
    +
    +    ssh:localhost:2200
    +    ssh://localhost:2200?timeout=10000&strictHostChecking=true&user=foo&password=12345678
    +
    +    rmi://localhost:1099/someService
    +    rmi:localhost/someService&timeout=10000
    +
    +    jmx:rmi:///jndi/rmi://localhost:1099/someService
    +    jmx:platform&timeout=10000
    +
    +    camel:direct:address
    +    camel:seda:address
    +    camel:jms:queue:someQueue?connectionFactory=myConnectionFactory
    +    camel:activemq:queue:someQueue?concurrentConsumers=5&destination.consumer.prefetchSize=50
    +    camel:controlbus:route?routeId=myRoute&action=status
    +
    +    vertx:addressName
    +    vertx:addressName?port=10105&timeout=10000&pubSubDomain=true
    +    vertx:addressName?vertxInstanceFactory=vertxFactory
    +
    +
    +
    +

    The optional parameters get directly set as endpoint configuration. You can use primitive values as well as Spring bean id references. Citrus will automatically detect the target parameter type and resolve the value to a Spring bean in the application context if necessary. If you use some unknown parameter Citrus will raise an exception at runtime as the endpoint could not be created properly.

    +
    +
    +

    In synchronous communication we have to reuse endpoint components in order to receive synchronous messages on reply destinations. This is a problem when using dynamic endpoints as the endpoints get created at runtime. Citrus uses a caching of endpoints that get created at runtime. Following from that we have to use the exact same endpoint uri in your test case in order to get the cached endpoint instance. With this little trick synchronous communication will work just as it is done with static endpoint components. Have a look at this sample test:

    +
    +
    +
    +
    <testcase name="DynamicEndpointTest">
    +    <actions>
    +        <send endpoint="jms:sync:Hello.Sync.Queue">
    +            <message>
    +                <payload>
    +                [...]
    +                </payload>
    +            </message>
    +        </send>
    +
    +        <receive endpoint="jms:sync:Hello.Sync.Queue">
    +            <message>
    +                <payload>
    +                [...]
    +                </payload>
    +            </message>
    +        </receive>
    +    </actions>
    +</testcase>
    +
    +
    +
    +

    As you can see we used the exact dynamic endpoint uri in both send and receive actions. Citrus is then able to reuse the same dynamic endpoint and the synchronous reply will be received as expected. However the reuse of exactly the same endpoint uri might get annoying as we also have to copy endpoint uri parameters and so on.

    +
    +
    +
    +
    <testcase name="DynamicEndpointTest">
    +    <actions>
    +        <send endpoint="http://localhost:8080/HelloService?user=1234567">
    +            <message>
    +                <payload>
    +                [...]
    +                </payload>
    +            </message>
    +        </send>
    +
    +        <receive endpoint="http://localhost:8080/HelloService?user=1234567">
    +            <message>
    +                <payload>
    +                [...]
    +                </payload>
    +            </message>
    +        </receive>
    +    </actions>
    +</testcase>
    +
    +
    +
    +

    We have to use the exact same endpoint uri when receiving the synchronous service response. This is not very straight forward. This is why Citrus also supports dynamic endpoint names. With a special endpoint uri parameter called endpointName you can name the dynamic endpoint. In a corresponding receive action you just use the endpoint name as reference which makes life easier:

    +
    +
    +
    +
    <testcase name="DynamicEndpointTest">
    +    <actions>
    +        <send endpoint="http://localhost:8080/HelloService?endpointName=myHttpClient">
    +            <message>
    +                <payload>
    +                [...]
    +                </payload>
    +            </message>
    +        </send>
    +
    +        <receive endpoint="http://localhost?endpointName=myHttpClient">
    +            <message>
    +                <payload>
    +                [...]
    +                </payload>
    +            </message>
    +        </receive>
    +    </actions>
    +</testcase>
    +
    +
    +
    +

    So we can reference the dynamic endpoint with the given name. The internal endpointName uri parameter is automatically removed before sending out messages. Once again the dynamic endpoint uri mechanism provides a fast way to write test cases in Citrus with less configuration. But you should consider to use the static endpoint components defined in the basic Spring bean application context for endpoints that are heavily reused in multiple test cases.

    +
    +
    +
    +
    +

    33. Endpoint adapter

    +
    +
    +

    Endpoint adapter help to customize the behavior of a Citrus server such as HTTP or SOAP web servers. As the servers get started with the Citrus context they are ready to receive incoming client requests. Now there are different ways to process these incoming requests and to provide a proper response message. By default the server will forward the incoming request to an in-memory message channel where a test can receive the message and provide a synchronous response. This message channel handling is done automatically behind the scenes so the tester does not care about these things. The tester just uses the server directly as endpoint reference in the test case. This is the default behaviour. In addition to that you can define custom endpoint adapters on the Citrus server in order to change this default behavior.

    +
    +
    +

    You set the custom endpoint adapter directly on the server configuration as follows:

    +
    +
    +
    +
    <citrus-http:server id="helloHttpServer"
    +    port="8080"
    +    auto-start="true"
    +    endpoint-adapter="emptyResponseEndpointAdapter"
    +    resource-base="src/it/resources"/>
    +
    +    <citrus:empty-response-adapter id="emptyResponseEndpointAdapter"/>
    +
    +
    +
    +

    Now let us have a closer look at the provided endpoint adapter implementations.

    +
    +
    +

    33.1. Empty response endpoint adapter

    +
    +

    This is the simplest endpoint adapter you can think of. It simply provides an empty success response using the HTTP response code 200 . The adapter does not need any configurations or properties as it simply responds with an empty HTTP response.

    +
    +
    +
    +
    <citrus:empty-response-adapter id="emptyResponseEndpointAdapter"/>
    +
    +
    +
    +
    +

    33.2. Static response endpoint adapter

    +
    +

    The next more complex endpoint adapter will always return a static response message.

    +
    +
    +
    +
    <citrus:static-response-adapter id="endpointAdapter">
    +    <citrus:payload>
    +        <![CDATA[
    +          <HelloResponse
    +            xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
    +              <MessageId>123456789</MessageId>
    +              <CorrelationId>Cx1x123456789</CorrelationId>
    +              <Text>Hello User</Text>
    +          </HelloResponse>
    +        ]]>
    +    </citrus:payload>
    +    <citrus:header>
    +        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:Operation"
    +                  value="sayHello"/>
    +        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:MessageId"
    +                  value="123456789"/>
    +    </citrus:header>
    + </citrus:static-response-adapter>
    +
    +
    +

    The endpoint adapter is configured with a static message payload and static response header values. The response to the client is therefore always the same. You can add dynamic +values by using Citrus functions such as randomString or randomNumber. Also we are able to use values of the actual request message that has triggered the +response adapter. The request is available via the local message store. In combination with Xpath or JsonPath functions we can map values from the actual request.

    -
    Java DSL
    -
    @CitrusTest
    -public void infoTest() {
    -    kubernetes().info()
    -                .validate((info, context) -> Assert.assertEquals(info.getApiVersion(), "v1"));
    -}
    +
    <citrus:static-response-adapter id="endpointAdapter">
    +    <citrus:payload>
    +        <![CDATA[
    +          <HelloResponse
    +            xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
    +              <MessageId>citrus:randomNumber(10)</MessageId>
    +              <CorrelationId>citrus:xpath(citrus:message(request.body()), '/hello:HelloRequest/hello:CorrelationId')</CorrelationId>
    +              <Text>Hello User</Text>
    +          </HelloResponse>
    +        ]]>
    +    </citrus:payload>
    +    <citrus:header>
    +        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:Operation"
    +                  value="sayHello"/>
    +        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:MessageId"
    +                  value="citrus:randomNumber(10)"/>
    +    </citrus:header>
    + </citrus:static-response-adapter>
    +
    +
    +
    +

    The example above maps the CorrelationId of the HelloRequest message to the response with Xpath function. The local message store automatically has the message named +request stored so we can access the payload with this message name.

    +
    + + + + + +
    + + +XML is namespace specific so we need to use the namespace prefix hello in the Xpath expression. The namespace prefix should evaluate to a global namespace entry in the global +Citrus xpath-namespace. +
    -

    27.5. List resources

    +

    33.3. Request dispatching endpoint adapter

    -

    We can list Kubernetes resources such as pods, services, endpoints and replication controllers. The list can be filtered by several properties such as

    -
    -
    -
      -
    • -

      label

      -
    • -
    • -

      namespace

      -
    • -
    +

    The idea behind the request dispatching endpoint adapter is that the incoming requests are dispatched to several other endpoint adapters. The decision which endpoint adapter should handle the actual request is done depending on some adapter mapping. The mapping is done based on the payload or header data of the incoming request. A mapping strategy evaluates a mapping key using the incoming request. You can think of an XPath expression that evaluates to the mapping key for instance. The endpoint adapter that maps to the mapping key is then called to handle the request.

    -

    The test action is able to define respective filters to the list so we get only pods the match the given attributes:

    +

    So the request dispatching endpoint adapter is able to dynamically call several other endpoint adapters based on the incoming request message at runtime. This is very powerful. The next example uses the request dispatching endpoint adapter with a XPath mapping key extractor.

    -
    XML DSL
    -
    <k8s:list-pods label="app=todo">
    -    <k8s:validate>
    -      <k8s:result>{
    -        "result": {
    -          "apiVersion":"${apiVersion}",
    -          "kind":"PodList",
    -          "metadata":"@ignore@",
    -          "items":"@ignore@"
    -        }
    -      }</k8s:result>
    -      <k8s:element path="$.result.items.size()" value="1"/>
    -      <k8s:element path="$..status.phase" value="Running"/>
    -    </k8s:validate>
    -</k8s:list-pods>
    +
    <citrus:dispatching-endpoint-adapter id="dispatchingEndpointAdapter"
    +         mapping-key-extractor="mappingKeyExtractor"
    +         mapping-strategy="mappingStrategy"/>
    +
    +<bean id="mappingStrategy"
    +  class="org.citrusframework.endpoint.adapter.mapping.SimpleMappingStrategy">
    +    <property name="adapterMappings">
    +      <map>
    +          <entry key="sayHello" ref="helloEndpointAdapter"/>
    +      </map>
    +    </property>
    +</bean>
    +
    +<bean id="mappingKeyExtractor"
    +  class="org.citrusframework.endpoint.adapter.mapping.XPathPayloadMappingKeyExtractor">
    +    <property name="xpathExpression" value="//TestMessage/Operation/*"/>
    +</bean>
    +
    +<citrus:static-response-adapter id="helloEndpointAdapter">
    +    <citrus:payload>
    +        <![CDATA[
    +            <HelloResponse
    +                xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
    +                <MessageId>123456789</MessageId>
    +                <Text>Hello User</Text>
    +            </HelloResponse>
    +        ]]>
    +    </citrus:payload>
    +</citrus:static-response-adapter>
    +
    +
    +
    +

    The XPath mapping key extractor expression decides for each request which mapping key to use in order to find a proper endpoint adapter through the mapping strategy. The endpoint adapters available in the application context are mapped via their bean id. For instance an incoming request with a matching element //TestMessage/Operation/sayHello would be handled by the endpoint adapter bean that is registered in the mapping strategy as "sayHello" key. The available endpoint adapters are configured in the same Spring application context.

    +
    +
    +

    Citrus provides several default mapping key extractor implementations.

    +
    +
    + + + + + + + + + + + + + +
    +HeaderMappingKeyExtractor + +

    Reads a special header entry and uses its value as mapping key

    +
    +SoapActionMappingKeyExtractor + +

    Uses the soap action header entry as mapping key

    +
    +XPathPayloadMappingKeyExtractor + +

    Evaluates a XPath expression on the request payload and uses the result as mapping key

    +
    +
    +
    +

    In addition to that we need a mapping strategy. Citrus provides following default implementations.

    +
    +
    + + + + + + + + + + + + + +
    +SimpleMappingStrategy + +

    Simple key value map with endpoint adapter references

    +
    +BeanNameMappingStrategy + +

    Loads the endpoint adapter Spring bean with the given id matching the mapping key

    +
    +ContextLoadingMappingStrategy + +

    Same as BeanNameMappingStrategy but loads a separate application context defined by external file resource

    +
    +
    +
    +

    33.4. Channel endpoint adapter

    +
    +

    The channel connecting endpoint adapter is the default adapter used in all Citrus server components. Indeed this adapter also provides the most flexibility. This adapter forwards incoming requests to a channel destination. The adapter is waiting for a proper response on a reply destination synchronously. With the channel endpoint components you can read the requests on the channel and provide a proper response on the reply destination.

    -
    Java DSL
    -
    @CitrusTest
    -public void listPodsTest() {
    -    kubernetes()
    -        .client(k8sClient)
    -        .pods()
    -        .list()
    -        .label("app=todo")
    -        .validate("$..status.phase", "Running")
    -        .validate((pods, context) -> {
    -            Assert.assertFalse(CollectionUtils.isEmpty(pods.getResult().getItems()));
    -        });
    -}
    +
    <citrus-si:channel-endpoint-adapter id="channelEndpointAdapter"
    +              channel-name="inbound.channel"
    +              timeout="2500"/>
    +
    +
    +

    33.5. JMS endpoint adapter

    -

    As you can see we are able to give the pod label that is searched for in list of all pods. The list returned is validated either by giving an expected Json message -or by adding JsonPath expressions with expected values to check.

    +

    Another powerful endpoint adapter is the JMS connecting adapter implementation. This adapter forwards incoming requests to a JMS destination and waits for a proper response on a reply destination. A JMS endpoint can access the requests internally and provide a proper response on the reply destination. So this adapter is very flexible to provide proper response messages.

    -

    In Java DSL we can add a validation result callback that is provided with the unmarshalled result object for validation. Besides label filtering we can also specify the namespace -and the pod name to search for.

    +

    This special adapter comes with the citrus-jms module. So you have to add the module and the special XML namespace for this module to your configuration files. The Maven module for citrus-jms goes to the Maven POM file as normal project dependency. The citrus-jms namespace goes to the Spring bean XML configuration file as follows:

    +
    +
    + + + + + +
    + + +Citrus provides a "citrus-jms" configuration namespace and schema definition for JMS related components and features. Include this namespace into your Spring configuration in order to use the Citrus JMS configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows. +
    +
    +
    +
    +
    <beans xmlns="http://www.springframework.org/schema/beans"
    +        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +        xmlns:citrus-jms="http://www.citrusframework.org/schema/jms/config"
    +        xsi:schemaLocation="
    +        http://www.springframework.org/schema/beans
    +        http://www.springframework.org/schema/beans/spring-beans.xsd
    +        http://www.citrusframework.org/schema/jms/config
    +        http://www.citrusframework.org/schema/jms/config/citrus-jms-config.xsd">
    +
    +    [...]
    +
    +</beans>
    +
    -

    You can also define multiple labels as comma delimited list:

    +

    After that you are able to use the adapter implementation in the Spring bean configuration.

    -
    <k8s:list-services label="stage!=test,provider=fabric8" namespace="default"/>
    +
    <citrus-jms:endpoint-adapter id="jmsEndpointAdapter"
    +              destination-name="JMS.Queue.Requests.In"
    +              reply-destination-name="JMS.Queue.Response.Out"
    +              connection-factory="jmsConnectionFactory"
    +              timeout="2500"/>
    +
    +<bean id="jmsConnectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory">
    +  <property name="brokerURL" value="tcp://localhost:61616"/>
    +</bean>
    +
    +
    +
    +
    +

    34. Connectors

    +
    -

    As you can see we have combined to label filters stage!=test and provider=fabric8 on pods in namespace default. The first label filter is negated so the label stage should not be test here.

    +

    Connectors are quite similar to endpoints. +The modules connect Citrus to a certain technology or framework rather than implementing a message transport (client and server) like endpoints usually do.

    +
    +

    Connectors typically provide a client side only implementation that enable Citrus to interact with a service or framework (e.g. Docker, Kubernetes, Knative, Selenium, OpenAPI specification).

    - +
    +
    +

    35. OpenAPI support

    +
    -

    Nodes and namespaces are special resources that are not filtered by their namespace as they are more global resources. The rest is pretty similar to listing pods or services. We can -add filteres such as name and label.

    +

    OpenAPI is a popular specification language to describe HTTP APIs and its exposure to clients. +Citrus is able to leverage the specification to auto generate client and server request/response message data. +The generated message data follows the rules of a given operation in the specification. +In particular, the message body is generated from the given Json schema rules in that specification. +This way users may do contract-driven testing where the client and the server ensure the conformity with the contract to obey to the same specification rules.

    +
    +
    + + + + + +
    + + +The OpenAPI support in Citrus get enabled by adding a separate Maven module as dependency to your project +
    -
    XML DSL
    -
    <k8s:list-namespaces label="provider=citrus">
    -    <k8s:validate>
    -      <k8s:element path="$.result.items.size()" value="1"/>
    -    </k8s:validate>
    -</k8s:list-namespaces>
    +
    <dependency>
    +  <groupId>org.citrusframework</groupId>
    +  <artifactId>citrus-openapi</artifactId>
    +  <version>${citrus.version}</version>
    +</dependency>
    -
    -
    Java DSL
    -
    -
    @CitrusTest
    -public void listPodsTest() {
    -    kubernetes()
    -        .client(k8sClient)
    -        .namespaces()
    -        .list()
    -        .label("provider=citrus")
    -        .validate((pods, context) -> {
    -            Assert.assertFalse(CollectionUtils.isEmpty(pods.getResult().getItems()));
    -        });
    -}
    +
    +

    35.1. OpenAPI specification

    +
    +

    The OpenAPI test actions in Citrus uses a specification which usually is a json or yaml document shared between the components.

    +
    +
    +

    Sometimes the specification gets exposed by a server application via HTTP endpoint. +You can directly load the specification from the HTTP URL. +Or you may just point the OpenAPI components to a local specification file.

    +
    +

    Citrus supports OpenAPI on both client and server components so the next sections will describe the usage for each of those.

    -

    27.7. Get resources

    +

    35.2. OpenAPI client

    +
    +

    On the client side Citrus uses the OpenAPI specification to generate a proper HTTP request that is sent to the server. +The user just gives a valid operationId from the specification every thing else is automatically generated. +The Citrus client message will use the proper request path (e.g. /petstore/v3/pet) and Content-Type (e.g. applicaiton/json) according to the specification rules.

    +
    +
    +

    Of course, you can also validate the HTTP response message with auto generated validation. +The user just gives the expected HTTP status code that is also described in the specification (e.g. 200 OK). +The response data used as expected message content is then also generated from the specification.

    +
    -

    We can get a very special Kubernetes resource such as a pod or service for detailed validation of that resource. We need to specify a resource name -in order to select the resource from list of available resources in Kubernetes.

    +

    As an example the following OpenAPI specification defines the operation getPetById.

    -
    XML DSL
    +
    petstore-v3.yaml
    -
    <k8s:get-pod name="citrus_pod">
    -    <k8s:validate>
    -      <k8s:result>{
    -      "result": {
    -        "apiVersion":"${apiVersion}",
    -        "kind":"Pod",
    -        "metadata": {
    -            "annotations":"@ignore@",
    -            "creationTimestamp":"@ignore@",
    -            "finalizers":[],
    -            "generateName":"@startsWith('hello-minikube-')@",
    -            "labels":{
    -              "pod-template-hash":"@ignore@",
    -              "run":"hello-minikube"
    -            },
    -            "name":"${podName}",
    -            "namespace":"default",
    -            "ownerReferences":"@ignore@",
    -            "resourceVersion":"@ignore@",
    -            "selfLink":"/api/${apiVersion}/namespaces/default/pods/${podName}",
    -            "uid":"@ignore@"
    -        },
    -        "spec": {
    -          "containers": [{
    -            "args":[],
    -            "command":[],
    -            "env":[],
    -            "image":"gcr.io/google_containers/echoserver:1.4",
    -            "imagePullPolicy":"IfNotPresent",
    -            "name":"hello-minikube",
    -            "ports":[{
    -              "containerPort":8080,
    -              "protocol":"TCP"
    -            }],
    -            "resources":{},
    -            "terminationMessagePath":"/dev/termination-log",
    -            "volumeMounts":"@ignore@"
    -          }],
    -          "dnsPolicy":"ClusterFirst",
    -          "imagePullSecrets":"@ignore@",
    -          "nodeName":"minikube",
    -          "restartPolicy":"Always",
    -          "securityContext":"@ignore@",
    -          "serviceAccount":"default",
    -          "serviceAccountName":"default",
    -          "terminationGracePeriodSeconds":30,
    -          "volumes":"@ignore@"
    -        },
    -        "status": "@ignore@"
    -      }
    -      }</k8s:result>
    -      <k8s:element path="$..status.phase" value="Running"/>
    -    </k8s:validate>
    -</k8s:get-pod>
    +
    openapi: 3.0.2
    +info:
    +  title: Petstore
    +  version: 1.0.1
    +servers:
    +  - url: 'http://localhost/petstore/v3/'
    +paths:
    +  '/pet/{petId}':
    +    get:
    +      operationId: getPetById
    +      parameters:
    +        - name: petId
    +          description: ID of pet to return
    +          schema:
    +            format: int64
    +            type: integer
    +          in: path
    +          required: true
    +      responses:
    +        '200':
    +          content:
    +            application/json:
    +              schema:
    +                $ref: '#/components/schemas/Pet'
    +        '404':
    +          description: Pet not found
    +      summary: Find pet by ID
    +      description: Returns a single pet
    +# ...
    +
    +
    +
    +

    The operation defines the HTTP GET request on /pet/{petId} and the response 200 OK that delivers the #/components/schemas/Pet Json object to the calling client as a response.

    +
    +

    The Json schema for the pet defines all properties on the object.

    -
    Java DSL
    +
    Pet Json schema
    -
    @CitrusTest
    -public void getPodsTest() {
    -    kubernetes()
    -        .client(k8sClient)
    -        .pods()
    -        .get("citrus_pod")
    -        .validate("$..status.phase", "Running")
    -        .validate((pod, context) -> {
    -            Assert.assertEquals(pods.getResult().getStatus().getPhase(), "Running");
    -        });
    +
    Pet:
    +  required:
    +    - category
    +    - name
    +    - status
    +  type: object
    +  properties:
    +    id:
    +      format: int64
    +      type: integer
    +    category:
    +      $ref: '#/components/schemas/Category'
    +    name:
    +      type: string
    +      example: doggie
    +    photoUrls:
    +      type: array
    +      items:
    +        type: string
    +    tags:
    +      type: array
    +      items:
    +        $ref: '#/components/schemas/Tag'
    +    status:
    +      description: pet status in the store
    +      enum:
    +        - available
    +        - pending
    +        - sold
    +      type: string
    +# ...
    +
    +
    +
    +

    In a testcase Citrus is able to leverage this information in order to send a proper request and validate the response based on the OpenAPI specification.

    +
    +
    +
    Java
    +
    +
    private final HttpClient httpClient = new HttpClientBuilder()
    +            .requestUrl("http://localhost:%d".formatted(port))
    +            .build();
    +
    +private final OpenApiSpecification petstoreSpec = OpenApiSpecification.from(
    +            Resources.create("classpath:org/citrusframework/openapi/petstore/petstore-v3.json"));
    +
    +@CitrusTest
    +public void openApiClientTest() {
    +    when(openapi(petstoreSpec)
    +                .client(httpClient)
    +                .send("getPetById"));
    +
    +    then(openapi(petstoreSpec)
    +                .client(httpClient)
    +                .receive("getPetById", HttpStatus.OK));
     }
    -
    -

    As you can see we are able to get the complete pod information from Kubernetes. The result is validated with Json message validator in Citrus. This means we can use @ignore@ as well as test variables and -JsonPath expressions.

    +
    +
    XML
    +
    +
    <test name="OpenApiClientTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <variables>
    +        <variable name="petstoreSpec" value="classpath:org/citrusframework/openapi/petstore/petstore-v3.json"/>
    +    </variables>
    +    <actions>
    +        <openapi specification="${petstoreSpec}" client="httpClient">
    +          <send-request operation="getPetById"/>
    +        </openapi>
    +
    +        <openapi specification="${petstoreSpec}" client="httpClient">
    +          <receive-response operation="getPetById" status="200"/>
    +        </openapi>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: OpenApiClientTest
    +variables:
    +  - name: petstoreSpec
    +    value: classpath:org/citrusframework/openapi/petstore/petstore-v3.yaml
    +actions:
    +  - openapi:
    +      specification: ${petstoreSpec}
    +      client: "httpClient"
    +      sendRequest:
    +        operation: getPetById
    +  - openapi:
    +      specification: ${petstoreSpec}
    +      client: "httpClient"
    +      receiveResponse:
    +        operation: getPetById
    +        status: 200
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -
    -

    27.8. Create resources

    -

    We can create new Kubernetes resources within a Citrus test. This is very important in case we need to setup new pods or services for the test run. You can create new resources -by giving a .yml file holding all information how to create the new resource. See the following sample YAML for a new pod and service:

    -
    -
    -
    -
    kind: Pod
    -apiVersion: v1
    -metadata:
    -  name: hello-netty-${randomId}
    -  namespace: default
    -  labels:
    -    server: hello-netty
    -spec:
    -  containers:
    -    - name: hello-netty
    -      image: netty
    -      imagePullPolicy: IfNotPresent
    -      ports:
    -        - containerPort: 8080
    -          protocol: TCP
    -  restartPolicy: Always
    -  terminationGracePeriodSeconds: 30
    -  dnsPolicy: ClusterFirst
    -  serviceAccountName: default
    -  serviceAccount: default
    -  nodeName: minikube
    +

    In this very first example The client uses the OpenAPI specification to generate a proper GET HTTP request for the getPetById operation. +The request is sent to the server using the request URL path /petstore/v3/pet/${petId} as declared in the OpenAPI specification.

    +
    +

    The resulting HTTP response from the server is verified on the client by giving the operationId and the expected status 200. +The OpenAPI client generates the expected control message from the given Json schema in the OpenAPI specification.

    -

    This YAML file specifies a new resource of kind Pod. We define the metadata as well as all containers that are part of this pod. The container is build from -jetty:9.3 Docker image that should be pulled automatically from Docker Hub registry. We also expose port 8080 as containerPort so the upcoming service configuration can provide this -port to clients as Kubernetes service.

    +

    The generated control message contains validation matchers and expressions as follows.

    +
    Generated control message body
    -
    kind: Service
    -apiVersion: v1
    -metadata:
    -  name: hello-netty
    -  namespace: default
    -  labels:
    -    service: hello-netty
    -spec:
    -  ports:
    -    - protocol: TCP
    -      port: 8080
    -      targetPort: 8080
    -      nodePort: 31citrus:randomNumber(3)
    -  selector:
    -    server: hello-netty
    -  type: NodePort
    -  sessionAffinity: None
    +
    {
    +  "id": "@isNumber()@",
    +  "name": "@notEmpty()@",
    +  "category": {
    +    "id": "@isNumber()@",
    +    "name": "@notEmpty()@"
    +  },
    +  "photoUrls": "@notEmpty()@",
    +  "tags":  "@ignore@",
    +  "status": "@matches(sold|pending|available)@"
    +}
    -

    The service resource maps the port 8080 and selects all pods with label server=hello-netty. This makes the jetty container available to clients. The service type is NodePort which means -that clients outside of Kubernetes are also able to access the service by using the dynamic port nodePort=31xxx. We can use Citrus functions such as randomNumber in the YAML files.

    +

    This control message meets the rules defined by the OpenAPI Json schema specification for the pet object. +For instance the enum field status is validated with a matching expression. +In case the OpenAPI specification changes the generated control message will change accordingly.

    -

    In the test case we can use these YAML files to create the resources in Kubernetes:

    +

    This completes the client side OpenAPI support. +Now let’s have a closer look at the server side OpenAPI support in the next section.

    -
    -
    XML DSL
    -
    -
    <k8s:create-pod namespace="default">
    -  <k8s:template file="classpath:templates/hello-netty-pod.yml"/>
    -</k8s:create-pod>
    -
    -<k8s:create-service namespace="default">
    -  <k8s:template file="classpath:templates/hello-service.yml"/>
    -</k8s:create-service>
    +
    +

    35.3. OpenAPI server

    +
    +

    On the server side Citrus is able to verify incoming requests based on the OpenAPI specification. +The expected request message content as well as the expected resource URL path and the Content-Type are automatically validated.

    -
    -
    Java DSL
    +
    +
    Java
    -
    @CitrusTest
    -public void createPodsTest() {
    -    kubernetes()
    -        .pods()
    -        .create(new ClassPathResource("templates/hello-netty-pod.yml"))
    -        .namespace("default");
    +
    private final HttpServer httpServer = new HttpServerBuilder()
    +            .port(port)
    +            .timeout(5000L)
    +            .autoStart(true)
    +            .defaultStatus(HttpStatus.NO_CONTENT)
    +            .build();
     
    -    kubernetes()
    -        .services()
    -        .create(new ClassPathResource("templates/hello-service.yml"))
    -        .namespace("default");
    +private final OpenApiSpecification petstoreSpec = OpenApiSpecification.from(
    +            Resources.create("classpath:org/citrusframework/openapi/petstore/petstore-v3.json"));
    +
    +@CitrusTest
    +public void openApiClientTest() {
    +    when(openapi(petstoreSpec)
    +                .server(httpServer)
    +                .receive("addPet"));
    +
    +    then(openapi(petstoreSpec)
    +                .server(httpServer)
    +                .send("addPet", HttpStatus.CREATED));
     }
    -
    -

    Creating new resources may take some time to finish. Kubernetes will have to pull images, build containers and start up everything. The create action is not waiting synchronously for all that to have happened. -Therefore we might add a list-pods action that waits for the new resources to appear.

    +
    +
    XML
    +
    +
    <test name="OpenApiClientTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <variables>
    +        <variable name="petstoreSpec" value="classpath:org/citrusframework/openapi/petstore/petstore-v3.json"/>
    +    </variables>
    +    <actions>
    +        <openapi specification="${petstoreSpec}" server="httpServer">
    +          <receive-request operation="addPet"/>
    +        </openapi>
    +
    +        <openapi specification="${petstoreSpec}" server="httpServer">
    +          <send-response operation="addPet" status="200"/>
    +        </openapi>
    +    </actions>
    +</test>
    -
    +
    +
    +
    YAML
    -
    <repeat-onerror-until-true condition="@assertThat(greaterThan(9))@" auto-sleep="1000">
    -  <k8s:list-pods label="server=hello-netty">
    -    <k8s:validate>
    -      <k8s:element path="$.result.items.size()" value="1"/>
    -      <k8s:element path="$..status.phase" value="Running"/>
    -    </k8s:validate>
    -  </k8s:list-pods>
    -</repeat-onerror-until-true>
    +
    name: OpenApiClientTest
    +variables:
    +  - name: petstoreSpec
    +    value: classpath:org/citrusframework/openapi/petstore/petstore-v3.yaml
    +actions:
    +  - openapi:
    +      specification: ${petstoreSpec}
    +      server: "httpServer"
    +      receiveRequest:
    +        operation: addPet
    +  - openapi:
    +      specification: ${petstoreSpec}
    +      server: "httpServer"
    +      sendResponse:
    +        operation: addPet
    +        status: 200
    -
    -

    With this repeat on error action we wait for the new server=hello-netty labeled pod to be in state Running.

    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -
    -

    27.9. Delete resources

    -

    With that command we are able to delete a resource in Kubernetes. Up to now deletion of pods and services is supported. We have to give a name of the resource that we want -to delete.

    +

    The example above uses the addPet operation defined in the OpenAPI specification. +The operation expects a HTTP POST request with a pet object as message payload. +The OpenAPI server generates an expected Json message body according to the specification. +This ensures that the incoming client request meets the Json schema rules for the pet object. +Also, the server will verify the HTTP request method, the Content-Type header as well as the used resource path /petstore/v3/pet.

    -
    -
    XML DSL
    -
    -
    <k8s:delete-pod name="citrus_pod">
    -    <k8s:validate>
    -      <k8s:element path="$.result.success" value="true"/>
    -    </k8s:validate>
    -</k8s:delete-pod>
    +
    +

    The given HTTP status code defines the response that should be sent by the server. +The server will generate a proper response according to the OpenAPI specification. +This also includes a potential response message body (e.g. pet object).

    -
    -
    Java DSL
    -
    -
    @CitrusTest
    -public void deletePodsTest() {
    -    kubernetes()
    -        .pods()
    -        .delete("citrus_pod")
    -        .validate((result, context) -> Assert.assertTrue(result.getResult().getSuccess()));
    -}
    +
    +

    36. JBang support

    +
    +
    +

    With JBang you can run your .java files directly in your shell - instantly without tedious setup.

    -
    -

    27.10. Watch resources

    @@ -30750,39 +33881,18 @@

    -The watch operation is still in experimental state and may face severe adjustments and improvements in near future. +The JBang support in Citrus gets enabled by adding a separate Maven module as a dependency to your project
    -
    -

    When using a watch command we add a subscription to change events on a Kubernetes resources. So we can watch resources such as pods, services for future changes. -Each change on that resource triggers a new watch event result that we can expect and validate.

    -
    -
    -
    XML DSL
    -
    -
    <k8s:watch-pods label="provider=citrus">
    -    <k8s:validate>
    -      <k8s:element path="$.action" value="DELETED"/>
    -    </k8s:validate>
    -</k8s:watch-pods>
    -
    -
    -
    Java DSL
    -
    @CitrusTest
    -public void listPodsTest() {
    -    kubernetes()
    -        .pods()
    -        .watch()
    -        .label("provider=citrus")
    -        .validate((watchEvent, context) -> {
    -            Assert.assertFalse(watchEvent.hasError());
    -            Assert.assertEquals(((WatchEventResult) watchEvent).getAction(), Watcher.Action.DELETED);
    -        });
    -}
    +
    <dependency>
    +  <groupId>org.citrusframework</groupId>
    +  <artifactId>citrus-jbang-connector</artifactId>
    +  <version>${citrus.version}</version>
    +</dependency>
    -
    -

    27.11. Kubernetes messaging

    +

    36.1. JBang action

    -

    We have seen how to access the Kubernetes remote REST API by using special Citrus test actions in out test. As an alternative to that we can also use more -generic send/receive actions in Citrus for accessing the Kubernetes API. We demonstrate this with a simple example:

    +

    The JBang test action runs a script or JBang application with a spawned process. +You can call any JBang CLI command and run your JBang app. +JBang is called with the Java process API so the JBang CLI binary is executed and the command output is saved for later reference. +You can verify the command output with an expected output and you can also verify the exit code of the spawned process.

    -
    -
    XML DSL
    +
    +
    Java
    -
    <testcase name="KubernetesSendReceiveIT">
    +
    @CitrusTest
    +public void jBangScriptTest() {
    +    when(jbang()
    +            .app("myApp")
    +            .command("getUsers")
    +            .arg("--username", "FooUser"));
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="JBangScriptTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -      <send endpoint="k8sClient">
    -        <message>
    -          <data>
    -            { "command": "info" }
    -          </data>
    -        </message>
    -      </send>
    -
    -      <receive endpoint="k8sClient">
    -        <message type="json">
    -          <data>{
    -            "command": "info",
    -            "result": {
    -                "clientVersion": "1.4.27",
    -                "apiVersion": "v1",
    -                "kind":"Info",
    -                "masterUrl": "${masterUrl}",
    -                "namespace": "test"
    -              }
    -            }</data>
    -        </message>
    -      </receive>
    -
    -      <echo>
    -        <message>List all pods</message>
    -      </echo>
    -
    -      <send endpoint="k8sClient">
    -        <message>
    -          <data>
    -            { "command": "list-pods" }
    -          </data>
    -        </message>
    -      </send>
    -
    -      <receive endpoint="k8sClient">
    -        <message type="json">
    -          <data>{
    -            "command": "list-pods",
    -            "result": {
    -                  "apiVersion":"v1",
    -                  "kind":"PodList",
    -                  "metadata":"@ignore@",
    -                  "items":[]
    -              }
    -          }</data>
    -          <validate path="$.result.items.size()" value="0"/>
    -        </message>
    -      </receive>
    +        <jbang app="myApp" command="getUsers">
    +          <args>
    +            <arg name="--username" value="FooUser"/>
    +          </args>
    +        </jbang>
         </actions>
    -</testcase>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: JBangScriptTest
    +actions:
    +  - jbang:
    +      app: "myApp"
    +      command: "getUsers"
    +      args:
    +        - name: "--username"
    +          value: "FooUser"
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -

    As you can see we can use the send/receive actions to call Kubernetes API commands and receive the respective results in Json format, too. This gives us the well known -Json validation mechanism in Citrus in order to validate the results from Kubernetes. This way you can load Kubernetes resources verifying its state and properties. -Of course JsonPath expressions also come in here in order to validate Json elements explicitly.

    +

    The test above calls the JBang app myApp with the getUsers command. +The call is similar to a command line statement like this:

    +
    +
    +
    +
    $ jbang myApp getUsers --username=FooUser
    +
    +
    +
    +

    The app myApp represents a JBang application that has been installed previously in JBang (for instance from a GitHub repository that holds a jbang-catalog.json):

    +
    +
    +
    +
    $ jbang app install myApp@github-user/repository
    +
    -

    28. SSH support

    +

    37. Kubernetes support

    -

    In the spirit of other Citrus mock services, there is support for simulating an external SSH server as well as for connecting to SSH servers as a client during the test execution. Citrus translates SSH requests and responses to simple XML documents for better validation with the common Citrus mechanisms.

    +

    Kubernetes is one of the hottest management platforms for containerized applications these days. +Kubernetes lets you deploy, scale and manage your Docker containers on the platform. +You get features like auto-scaling, self-healing, service discovery and load balancing.

    -

    This means that the Citrus test case does not deal with pure SSH protocol commands. Instead of this we use the powerful XML validation capabilities in Citrus when dealing with the simple XML documents that represent the SSH request/response data.

    +

    Citrus provides interaction with the Kubernetes REST API to access the Kubernetes cluster and its resources within a Citrus test case.

    -
    -

    Let us clarify this with a little example. Once the real SSH server daemon is fired up within Citrus we accept an SSH EXEC request for instance. The request is translated into an XML message of the following format:

    +
    + + + + + +
    + + +The Kubernetes test components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +
    -
    <ssh-request xmlns="http://www.citrusframework.org/schema/ssh/message">
    -  <command>cat - | sed -e 's/Hello/Hello SSH/'</command>
    -  <stdin>Hello World</stdin>
    -</ssh-request>
    +
    <dependency>
    +  <groupId>org.citrusframework</groupId>
    +  <artifactId>citrus-kubernetes</artifactId>
    +  <version>${citrus.version}</version>
    +</dependency>
    +
    +

    37.1. Kubernetes client

    -

    This message can be validated with the usual Citrus mechanism in a receive test action. If you do not know how to do this, please read one of the sections about XML message validation in this reference guide first. Now after having received this request message the respective SSH response should be provided as appropriate answer. This is done with a message sending action on a reply handler as it is known from synchronous http message communication in Citrus for instance. The SSH XML representation of a response message looks like this:

    +

    Citrus operates with the Kubernetes remote REST API in order to interact with the Kubernetes platform. +The Kubernetes client component holds the configuration to connect to a Kubernetes cluster:

    -
    +
    +
    Citrus Bean
    -
    <ssh-response xmlns="http://www.citrusframework.org/schema/ssh/message">
    -  <stdout>Hello SSH World</stdout>
    -  <stderr></stderr>
    -  <exit>0</exit>
    -</ssh-response>
    +
    @BindToRegistry
    +public KubernetesClient k8sClient() {
    +    return new KubernetesClientBuilder()
    +                .build();
    +}
    -
    -

    Besides simulating a full-featured SSH server, Citrus also provides SSH client functionality. This client uses the same request message pattern, which is translated into a real SSH call to an SSH server. The SSH response received is also translated into an XML message as shown above so we can validate it with known validation mechanisms in Citrus.

    +
    +
    Spring Bean
    +
    +
    @Bean
    +public KubernetesClient k8sClient() {
    +    return new KubernetesClientBuilder()
    +                .build();
    +}
    -
    -

    Similar to the other Citrus modules (http, soap), a Citrus SSH server and client is configured in Citrus Spring application context. There is a dedicated ssh namespace available for all ssh Citrus components. The namespace declaration goes into the context top-level element as usual:

    -
    +
    +
    Spring XML
    -
    <beans
    -    [...]
    -    xmlns:citrus-ssh="http://www.citrusframework.org/schema/ssh/config"
    -    [...]
    -    xsi:schemaLocation="
    -        [...]
    -        http://www.citrusframework.org/schema/ssh/config
    -        http://www.citrusframework.org/schema/ssh/config/citrus-ssh-config.xsd
    -        [...] ">
    -   [...]
    -</beans>
    +
    <citrus-k8s:client id="k8sClient"/>
    -

    Both, SSH server and client along with their configuration options are described in the following two sections.

    +

    The Kubernetes client is based on the Fabric8 Java Kubernetes client implementation. +Following from that the component can be configured in various ways. +By default, the client reads the system properties as well as environment variables for default Kubernetes settings such as:

    +
    +
    +
      +
    • +

      kubernetes.master / KUBERNETES_MASTER

      +
    • +
    • +

      kubernetes.api.version / KUBERNETES_API_VERSION

      +
    • +
    • +

      kubernetes.trust.certificates / KUBERNETES_TRUST_CERTIFICATES

      +
    • +
    -
    -

    28.1. SSH Client

    -

    A Citrus SSH client is useful for testing against a real SSH server. So Citrus is able to invoke SSH commands on the external server and validate the SSH response accordingly. The test case does not deal with the pure SSH protocol within this communication. The Citrus SSH client component expects a customized XML representation and automatically translates these request messages into a real SSH call to a specific host. Once the synchronous SSH response was received the result gets translated back to the XML response message representation. On this translated response we can easily apply the validation steps by the usual Citrus means.

    +

    If you set these properties in your environment the client component will automatically pick up the configuration settings. +Also, when using kubectl command line locally the client may automatically use the stored user authentication settings from there.

    -

    The SSH client components receive its configuration in the Spring application context as usual. We can use the special SSH module namespace for easy configuration:

    +

    For a complete list of settings and explanation of those please refer to the Fabric8 client documentation.

    -
    +
    +

    In case you need to set the client configuration explicitly on your environment you can also use explicit settings on the Kubernetes client component:

    +
    +
    +
    Citrus Bean
    -
    <citrus-ssh:client id="sshClient"
    -           port="9072"
    -           user="roland"
    -           private-key-path="classpath:org/citrusframework/ssh/test_user.priv"
    -           strict-host-checking="false"
    -           host="localhost"/>
    +
    @BindToRegistry
    +public KubernetesClient k8sClient() {
    +    return new KubernetesClientBuilder()
    +                .client(fabric8Client)
    +                .url("http://localhost:8843")
    +                .version("v1")
    +                .username("user")
    +                .password("s!cr!t")
    +                .namespace("user_namespace")
    +                .messageConverter(messageConverter)
    +                .objectMapper("objectMapper")
    +                .build();
    +}
    -
    -

    The SSH client receives several attributes, these are:

    +
    +
    Spring Bean
    +
    +
    @Bean
    +public KubernetesClient k8sClient() {
    +    return new KubernetesClientBuilder()
    +                .client(fabric8Client)
    +                .url("http://localhost:8843")
    +                .version("v1")
    +                .username("user")
    +                .password("s!cr!t")
    +                .namespace("user_namespace")
    +                .messageConverter(messageConverter)
    +                .objectMapper("objectMapper")
    +                .build();
    +}
    -
    +
    +
    +
    Spring XML
    +
    +
    <citrus-k8s:client id="k8sClient"
    +              client="fabric8Client"
    +              url="http://localhost:8843"
    +              version="v1"
    +              username="user"
    +              password="s!cr!t"
    +              namespace="user_namespace"
    +              message-converter="messageConverter"
    +              object-mapper="objectMapper"/>
    +
    +
    +
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - +
    -id - -

    Id identifying the bean and used as reference from with test descriptions. (e.g. id="sshClient")

    -
    -host - -

    Host to connect to for sending an SSH Exec request. Default is 'localhost' (e.g. host="localhost") -port: Port to use. Default is 2222 (e.g. port="9072")

    -
    -private-key-path - -

    Path to a private key, which can be either a plain file path or a class resource if prefixed with 'classpath' (e.g. private-key-path="classpath:test_user.priv")

    -
    -private-key-password - -

    Optional password for the private key (e.g. password="s!cr!t")

    -
    -user - -

    User used for connecting to the SSH server (e.g. user="roland")

    -
    -password - -

    Password used for password based authentication. Might be combined with "private-key-path" in which case both authentication mechanism are tried (e.g. password="ps!st)

    -
    -strict-host-checking - -

    Whether the host key should be verified by looking it up in a 'known_hosts' file. Default is false (e.g. strict-host-checking="true")

    -
    -known-hosts-path - -

    Path to a known hosts file. If prefixed with 'classpath:' this file is looked up as a resource in the classpath (e.g. known-hosts-path="/etc/ssh/known_hosts")

    -
    -command-timeout - -

    Timeout in milliseconds for how long to wait for the SSH command to complete. Default is 5 minutes (e.g. command-timeout="300000")

    -
    -connection-timeout + + -

    Timeout in milliseconds for how long to for a connectiuon to connect. Default is 1 minute (e.g. connection-timeout="60000")

    +
    +You have the option to set an oauthToken for the client instead of using username and password.
    +
    +
    +

    Now Citrus is able to access the Kubernetes remote API for executing commands such as list-pods, watch-services and so on. +Citrus provides a set of actions that perform a Kubernetes command via REST. +The results usually get validated in the Citrus test as usual.

    +
    +
    +
    +

    37.2. Kubernetes actions

    +
    +

    Citrus provides a set of test actions specifically designed to manage resources on the Kubernetes cluster. +Each test action requires a reference to the Kubernetes client. +Usually this client is created once in the bean registry and used by many test actions.

    +
    +
    + - -
    -actor + + -

    Actor used for switching groups of actions (e.g. actor="ssh-mock")

    +
    +All resources created on the Kubernetes cluster will be automatically removed by Citrus after the test. +You can disable this default behavior via system property setting or environment variables (citrus.kubernetes.auto.remove.resources=false or CITRUS_KUBERNETES_AUTO_REMOVE_RESOURCES=false)
    +
    +
    +

    37.3. Create Labels

    +
    +

    Resources in Kubernetes are able to expose labels as part of the resource metadata. +You can set labels on existing Kubernetes resources with this test action:

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void createLabelsTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .pods()
    +            .addLabel("my-pod")
    +            .label("test", "citrus")
    +            .inNamespace("my-namespace"));
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="CreateLabelsTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <create-labels type="POD" resource="my-pod">
    +          <labels>
    +            <label name="test" value="citrus"/>
    +          </labels>
    +        </create-labels>
    +      </kubernetes>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: CreateLabelsTest
    +actions:
    +  - kubernetes:
    +      client: "k8sClient"
    +      namespace: "my-namespace"
    +      createLabels:
    +        type: "POD"
    +        resource: "my-pod"
    +        labels:
    +          - name: "test"
    +            value: "citrus"
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    +
    +
    +
    +
    +

    37.4. Create Annotations

    -

    Once defines as client component in the Spring application context test cases can reference the client in every send test action.

    +

    Resources in Kubernetes are able to expose annotations as part of the resource metadata. +You can set annotations on existing Kubernetes resources with this test action:

    -
    +
    +
    Java
    -
    <send endpoint="sshClient">
    -  <message>
    -    <payload>
    -        <ssh-request xmlns="http://www.citrusframework.org/schema/ssh/message">
    -          <command>shutdown</command>
    -          <stdin>input</stdin>
    -        </ssh-request>
    -    </payload>
    -  </message>
    -</send>
    -
    -<receive endpoint="sshClient">
    -  <message>
    -    <payload>
    -        <ssh-response xmlns="http://www.citrusframework.org/schema/ssh/message">
    -            <stdout>Hello Citrus</stdout>
    -            <stderr/>
    -            <exit>0</exit>
    -        </ssh-response>
    -    </payload>
    -  </message>
    -</receive>
    +
    @CitrusTest
    +public void createAnnotationsTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .pods()
    +            .addAnnotation("my-pod")
    +            .annotation("test", "citrus")
    +            .inNamespace("my-namespace"));
    +}
    -
    -

    As you can see we use usual send and receive test actions. The XML SSH representation helps us to specify the request and response data for validation. This way you can call SSH commands against an external SSH server and validate the response data.

    +
    +
    XML
    +
    +
    <test name="CreateAnnotationsTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <create-annotations type="POD" resource="my-pod">
    +          <annotations>
    +            <annotation name="test" value="citrus"/>
    +          </annotations>
    +        </create-annotations>
    +      </kubernetes>
    +    </actions>
    +</test>
    -
    -

    28.2. SSH Server

    -
    -

    Now that we have used Citrus on the client side we can also use Citrus SSH server module in order to provide a full stacked SSH server daemon. We can accept SSH client connections and provide proper response messages as an answer.

    +
    +
    YAML
    +
    +
    name: CreateAnnotationsTest
    +actions:
    +  - kubernetes:
    +      client: "k8sClient"
    +      namespace: "my-namespace"
    +      createAnnotations:
    +        type: "POD"
    +        resource: "my-pod"
    +        labels:
    +          - name: "test"
    +            value: "citrus"
    -
    -

    Given the above SSH module namespace declaration, adding a new SSH server is quite simple:

    -
    +
    +
    Spring XML
    -
    <citrus-ssh:server id="sshServer"
    -             allowed-key-path="classpath:org/citrusframework/ssh/test_user_pub.pem"
    -             user="roland"
    -             port="9072"
    -             auto-start="true"
    -             endpoint-adapter="sshEndpointAdapter"/>
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -
    -

    The endpoint-adapter is the handler which receives the SSH request as messages (in the request format described above). Endpoint adapter implementations are fully described in http-serverAll adapters described there are supported in SSH server module, too.

    +
    +

    37.5. Create Service

    -

    The <citrus-ssh:server> supports the following attributes:

    +

    You can create a Kubernetes service resource with this test action:

    -
    -
    SSH Server Attributes:
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -id - -

    Name of the SSH server which identifies it unique within the Citrus Spring context (e.g. id="sshServer")

    -
    -host-key-path - -

    Path to PEM encoded key pair (public and private key) which is used as host key. By default, a standard, pre-generate, fixed keypair is used. The path can be specified either as a file path, or, if prefixed with classpath: is looked up from within the classpath. The path the is relative from to the top-level package, so no leading slash should be used (e.g. hist-key-path="/etc/citrus_ssh_server.pem)

    -
    -user-home-path - -

    Path to user home directory. If not set ${user.dir}/target/{serverName}/home/{user} is used by default.

    -
    -user - -

    User which is allowed to connect (e.g. user="roland")

    -
    -allowed-key-path - -

    Path to an SSH public key stored in PEM format. These are the keys, which are allowed to connect to the SSH server when publickey authentication is used. It seves the same purpose as authorized_keys for standard SSH installations. The path can be specified either as a file path, or, if prefixed with classpath: is looked up from within the classpath. The path the is relative from to the top-level package, so no leading slash should be used (e.g. allowed-key-path="classpath:test_user_pub.pem)

    -
    -password - -

    Password which should be used when password authentication is used. Both publickey authentication and password based authentication can be used together in which case both methods are tried in turn (e.g. password="s!cr!t")

    -
    -host - -

    Host address (e.g. localhost)

    -
    -port - -

    Port on which to listen. The SSH server will bind on localhost to this port (e.g. port="9072")

    -
    -auto-start - -

    Whether to start this SSH server automatically. Default is true . If set to false, a test action is responsible for starting/stopping the server (e.g. auto-start="true")

    -
    -endpoint-adapter - -

    Bean reference to an endpoint adapter which processes the incoming SSH request. The message format for the request and response are described above (e.g. endpoint-adapter="sshEndpointAdapter")

    -
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void createServiceTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .services()
    +            .create("my-service")
    +            .portMapping(80, 8080)
    +            .withPodSelector(Collections.singletonMap("test", "citrus"))
    +            .inNamespace("my-namespace"));
    +}
    -
    -

    Once the SSH server component is added to the Spring application context with a proper endpoint adapter like the MessageChannel forwarding adapter we can receive incoming requests in a test case and provide a respone message for the client.

    -
    +
    +
    XML
    -
    <receive endpoint="sshServer">
    -  <message>
    -    <payload>
    -        <ssh-request xmlns="http://www.citrusframework.org/schema/ssh/message">
    -           <command>shutdown</command>
    -           <stdin>input</stdin>
    -        </ssh-request>
    -    </payload>
    -  </message>
    -</receive>
    -
    -<send endpoint="sshServer">
    -  <message>
    -    <payload>
    -        <ssh-response xmlns="http://www.citrusframework.org/schema/ssh/message">
    -            <stdout>Hello Citrus</stdout>
    -            <exit>0</exit>
    -        </ssh-response>
    -    </payload>
    -  </message>
    -</send>
    +
    <test name="CreateServiceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <create-service name="my-service">
    +          <ports>
    +            <port-mapping port="80" target-port="8080"/>
    +          </ports>
    +          <selector>
    +            <label name="test" value="citrus"/>
    +          </selector>
    +        </create-service>
    +      </kubernetes>
    +    </actions>
    +</test>
    +
    +
    YAML
    +
    +
    name: CreateServiceTest
    +actions:
    +  - kubernetes:
    +      client: "k8sClient"
    +      namespace: "my-namespace"
    +      createService:
    +        name: "my-service"
    +        ports:
    +          - port: "80"
    +            targetPort: "8080"
    +        selector:
    +          labels:
    +            - name: "test"
    +              value: "citrus"
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -
    -

    29. RMI support

    -
    -

    RMI stands for Remote Method Invocation and is a standard way of calling Java method interfaces where caller and callee (client and server) are not located within the same JVM. So the object passed to the method as argument as well as the method return value are transmitted over the wire.

    +

    The service is able to define port mappings as well as pod selectors based on labels. +This exposes the service as a Kubernetes resource on the connected cluster in the given namespace.

    -
    -

    As a client Citrus is able to connect to some RMI registry that exposes some remote interfaces. As a server Citrus implements such an RMI registry and handles incoming method calls with providing the respective return value.

    +
    + + + + + +
    + + +The Kubernetes service test action will automatically bind this service to a local HttpServer instance on the given port mapping. +As a result the HttpServer instance is created and started as part of the test action. +The HttpServer instance is added to the bean registry for further reference. +The default HttpServer bean name is citrus-k8s-service or the service name chosen for the Kubernetes service. +You can reference the HttpServer in following test actions to receive requests from the Kubernetes service. +
    @@ -31231,95 +34382,98 @@

    29. R

    -The RMI components in Citrus are kept in a separate Maven module. So you should check that the module is available as Maven dependency in your project +The behavior to auto create the HttpServer instance can be disabled via system property or environment variable setting (citrus.kubernetes.auto.create.server.binding=false or CITRUS_KUBERNETES_AUTO_CREATE_SERVER_BINDING=false ) +You can also customize the HttpServer instance by referencing a previously created server from the bean registry. +In this case the auto creation is skipped for this test action and the custom server reference is used.
    -
    -
    -
    <dependency>
    -  <groupId>org.citrusframework</groupId>
    -  <artifactId>citrus-rmi</artifactId>
    -  <version>${citrus.version}</version>
    -</dependency>
    -
    +
    +

    37.6. Create ConfigMap

    -

    As usual Citrus provides a customized rmi configuration schema that is used in Spring configuration files. Simply include the citrus-rmi namespace in the configuration XML files as follows.

    +

    You can create a Kubernetes config map with this test action:

    -
    +
    +
    Java
    -
    <beans xmlns="http://www.springframework.org/schema/beans"
    -      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    -      xmlns:citrus="http://www.citrusframework.org/schema/config"
    -      xmlns:citrus-rmi="http://www.citrusframework.org/schema/rmi/config"
    -      xsi:schemaLocation="
    -      http://www.springframework.org/schema/beans
    -      http://www.springframework.org/schema/beans/spring-beans.xsd
    -      http://www.citrusframework.org/schema/config
    -      http://www.citrusframework.org/schema/config/citrus-config.xsd
    -      http://www.citrusframework.org/schema/rmi/config
    -      http://www.citrusframework.org/schema/rmi/config/citrus-rmi-config.xsd">
    -
    -      [...]
    -
    -      </beans>
    +
    @CitrusTest
    +public void createConfigMapTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .configMaps()
    +            .create("my-config-map")
    +            .properties(Collections.singletonMap("username", "foo"))
    +            .inNamespace("my-namespace"));
    +}
    -
    -

    Now you are ready to use the customized Http configuration elements with the citrus-rmi namespace prefix.

    +
    +
    XML
    +
    +
    <test name="CreateConfigMapTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <create-config-map name="my-config-map">
    +          <properties>
    +            <property name="username" value="foo"/>
    +          </properties>
    +        </create-config-map>
    +      </kubernetes>
    +    </actions>
    +</test>
    -
    -

    Read the next section in order to find out more about the RMI message support in Citrus.

    -
    -

    29.1. RMI client

    -
    -

    On the client side we want to call e remote interface. We need to specify the method to call as well as all method arguments. The respective method return value is receivable within the test case for validation. Citrus provides a client component for RMI that sends out service invocation calls.

    +
    +
    YAML
    +
    +
    name: CreateConfigMapTest
    +actions:
    +  - kubernetes:
    +      client: "k8sClient"
    +      namespace: "my-namespace"
    +      createConfigMap:
    +        name: "my-config-map"
    +        properties:
    +          - name: username
    +            value: foo
    -
    +
    +
    +
    Spring XML
    -
    <citrus-rmi:client id="rmiClient1"
    -      host="localhost"
    -      port="1099"
    -      binding="newsService"/>
    -
    -      <citrus-rmi:client id="rmiClient2"
    -        server-url="rmi://localhost:1099/newsService"/>
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -

    The client component in the Spring application context receives host and port configuration of a valid RMI service registry. Either by specifying a proper server url or by giving host, port and binding properties. The service binding is the name of the service that we would like to address in the registry. Now we are ready to use this client referenced by its id or name in a test case for a message sending action.

    +

    It is also possible to load the properties from a file resource:

    Java
    @CitrusTest
    -public void rmiMessageTest() {
    -    $(send(rmiClient)
    -        .message(RmiMessage.invocation(NewsService.class, "getNews"))
    -    );
    +public void createConfigMapTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .configMaps()
    +            .create("my-config-map")
    +            .fromFile(Resources.create("application.properties"))
    +            .inNamespace("my-namespace"));
     }
    XML
    -
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <test name="CreateConfigMapTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <send endpoint="rmiClient">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    -                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
    -                          <method>getNews</method>
    -                        </service-invocation>
    -                    </payload>
    -                </body>
    -            </message>
    -        </send>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <create-config-map name="my-config-map" file="application.properties"/>
    +      </kubernetes>
         </actions>
     </test>
    @@ -31327,16 +34481,14 @@

    YAML
    -
    name: RmiMessageTest
    +
    name: CreateConfigMapTest
     actions:
    -  - send:
    -      endpoint: "rmiClient"
    -      message:
    -        body: |
    -          <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    -              <remote>org.citrusframework.rmi.remote.NewsService</remote>
    -              <method>getNews</method>
    -          </service-invocation>
    + - kubernetes: + client: "k8sClient" + namespace: "my-namespace" + createConfigMap: + name: "my-config-map" + file: "application.properties"

    +
    +
    +

    37.7. Create Secret

    -

    We are using the usual Citrus send message action referencing the rmiClient as endpoint. The message payload is a special Citrus message that defines the service invocation. We define the remote interface as well as the method to call. Citrus RMI client component will be able to interpret this message content and call the service method.

    +

    You can create a Kubernetes secret with this test action:

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void createSecretTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .secrets()
    +            .create("my-secret")
    +            .properties(Collections.singletonMap("password", "top_secret"))
    +            .inNamespace("my-namespace"));
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="CreateSecretTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <create-secret name="my-secret">
    +          <properties>
    +            <property name="password" value="top_secret"/>
    +          </properties>
    +        </create-secret>
    +      </kubernetes>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: CreateSecretTest
    +actions:
    +  - kubernetes:
    +      client: "k8sClient"
    +      namespace: "my-namespace"
    +      createSecret:
    +        name: "my-secret"
    +        properties:
    +          - name: password
    +            value: top_secret
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    +
    -

    The method return value is receivable for validation using the very same client endpoint.

    +

    It is also possible to load the properties from a file resource:

    Java
    @CitrusTest
    -public void rmiMessageTest() {
    -    $(receive(rmiClient)
    -        .message(RmiMessage.result("This is news from RMI!"))
    -    );
    +public void createSecretTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .secrets()
    +            .create("my-secret")
    +            .fromFile(Resources.create("credentials.properties"))
    +            .inNamespace("my-namespace"));
     }
    XML
    -
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <test name="CreateSecretTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <receive endpoint="rmiClient">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    -                          <object type="java.lang.String" value="This is news from RMI!"/>
    -                        </service-result>
    -                    </payload>
    -                </body>
    -            </message>
    -        </receive>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <create-secret name="my-secret" file="credentials.properties"/>
    +      </kubernetes>
         </actions>
     </test>
    @@ -31401,15 +34592,14 @@

    YAML
    -
    name: RmiMessageTest
    +
    name: CreateSecretTest
     actions:
    -  - receive:
    -      endpoint: "rmiClient"
    -      message:
    -        body: |
    -          <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    -              <object type="java.lang.String" value="This is news from RMI!"/>
    -          </service-result>
    + - kubernetes: + client: "k8sClient" + namespace: "my-namespace" + createSecret: + name: "my-secret" + file: "credentials.properties"

    +
    +
    +

    37.8. Create Resources

    -

    In the sample above we receive the service result and expect a java.lang.String object return value. The return value content is also validated within the service result payload.

    +

    You can create standards Kubernetes resources such as Pods as part of the test. +The easiest way to define the resource specification is to give a YAML file that represents the resource.

    -

    Of course we can also deal with method arguments.

    +

    Of course, you can use Citrus test variables in the resource specification.

    +
    +
    +
    pod.yaml
    +
    +
    apiVersion: v1
    +kind: Pod
    +metadata:
    +  name: my-pod
    +  labels:
    +    name: my-pod
    +spec:
    +  containers:
    +    - name: nginx
    +      image: nginx
    +      ports:
    +        - containerPort: 80
    +
    Java
    @CitrusTest
    -public void rmiMessageTest() {
    -    $(send(rmiClient)
    -        .message(RmiMessage.invocation(NewsService.class, "setNews")
    -              .argument("This is breaking news!"))
    -    );
    +public void createPodResourceTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .resources()
    +            .create()
    +            .resource(Resources.create("pod.yaml"))
    +            .inNamespace("my-namespace"));
     }
    XML
    -
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <test name="CreatePodResourceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <send endpoint="rmiClient">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    -                            <remote>org.citrusframework.rmi.remote.NewsService</remote>
    -                            <method>setNews</method>
    -                            <args>
    -                              <arg value="This is breaking news!"/>
    -                            </args>
    -                        </service-invocation>
    -                    </payload>
    -                </body>
    -            </message>
    -        </send>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <create-resource file="pod.yaml"/>
    +      </kubernetes>
         </actions>
     </test>
    @@ -31478,19 +34667,13 @@

    YAML
    -
    name: RmiMessageTest
    +
    name: CreatePodResourceTest
     actions:
    -  - send:
    -      endpoint: "rmiClient"
    -      message:
    -        body: |
    -          <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    -                <remote>org.citrusframework.rmi.remote.NewsService</remote>
    -                <method>setNews</method>
    -                <args>
    -                  <arg value="This is breaking news!"/>
    -                </args>
    -          </service-invocation>
    + - kubernetes: + client: "k8sClient" + namespace: "my-namespace" + createResource: + file: "pod.yaml"

    +
    +
    +

    37.9. Delete Resources

    -

    This completes the basic remote service call. Citrus invokes the remote interface method and validates the method return value. As a tester you might also face errors and exceptions when calling the remote interface method. You can catch and assert these remote exceptions verifying your error scenario.

    +

    You can delete any resource on the Kubernetes cluster. +Of course your client connection needs to have sufficient permissions to perform the delete operation. +The Kubernetes resource that should be deleted is identified by its name and an optional namespace.

    +
    +
    +

    The next example deletes a service resource identified by its name.

    Java
    @CitrusTest
    -public void rmiMessageTest() {
    -    $(assertException()
    -        .exception(java.rmi.RemoteException.class)
    -        .when(
    -            send(rmiClient)
    -                .message(RmiMessage.invocation(NewsService.class, "setNews")
    -                        .argument("This is breaking news!"))
    -        )
    -    );
    +public void deleteServiceTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .services()
    +            .delete("my-service")
    +            .inNamespace("my-namespace"));
     }
    XML
    -
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <test name="DeleteServiceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <assert exception="java.rmi.RemoteException">
    -            <when>
    -                <send endpoint="rmiClient">
    -                    <message>
    -                        <body>
    -                            <payload>
    -                                <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    -                                    <remote>org.citrusframework.rmi.remote.NewsService</remote>
    -                                    <method>setNews</method>
    -                                    <args>
    -                                      <arg value="This is breaking news!"/>
    -                                    </args>
    -                                </service-invocation>
    -                            </payload>
    -                        </body>
    -                    </message>
    -                </send>
    -            </when>
    -        </assert>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <delete-service name="my-service"/>
    +      </kubernetes>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: DeleteServiceTest
    +actions:
    +  - kubernetes:
    +      client: "k8sClient"
    +      namespace: "my-namespace"
    +      deleteService:
    +        name: "my-service"
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    +
    +
    +
    +

    As an alternative to that you can also use a resource specification to delete the resource.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void deletePodResourceTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .resources()
    +            .delete()
    +            .resource(Resources.create("pod.yaml"))
    +            .inNamespace("my-namespace"));
    +}
    +
    +
    +
    -
    -

    We assert the RemoteException to be thrown while calling the remote service method. This is how you can handle some sort of error situation while calling remote services. In the next section we will handle RMI communication where Citrus provides the remote interfaces.

    -
    -

    29.2. RMI server

    -
    -

    On the server side Citrus needs to provide remote interfaces with methods callable for clients. This means that Citrus needs to support all your remote interfaces with method arguments and return values. The Citrus RMI server is able to bind your remote interfaces to a service registry. All incoming RMI client method calls are automatically accepted and the method arguments are converted into a Citrus XML service invocation representation. The RMI method call is then passed to the running test for validation.

    -
    +

    37.10. Create Custom Resource

    -

    Let us have a look at the Citrus RMI server component and how you can add it to the Spring application context.

    +

    Given the following Kubernetes custom resource:

    +
    foo.yaml
    -
    <citrus-rmi:server id="rmiServer"
    -      host="localhost"
    -      port="1099"
    -      interface="org.citrusframework.rmi.remote.NewsService"
    -      binding="newService"
    -      create-registry="true"
    -      auto-start="true"/>
    +
    apiVersion: citrus.dev/v1
    +kind: Foo
    +metadata:
    +  name: my-foo
    +  labels:
    +    test: citrus
    +spec:
    +  message: Hello
    -

    The RMI server component uses properties such as host and port to define the service registry. By default Citrus will connect to this service registry and bind its remote interfaces to it. With the attribute create-registry Citrus can also create the registry for you.

    -
    -
    -

    You have to give Citrus the fully qualified remote interface name so Citrus can bind it to the service registry and handle incoming method calls properly. In your test case you can then receive the incoming method calls on the server in order to perform validation steps.

    +

    You can create the Kubernetes custom resource with this test action:

    Java
    @CitrusTest
    -public void rmiMessageTest() {
    -    $(receive(rmiServer)
    -        .message(RmiMessage.invocation(NewsService.class, "getNews"))
    -    );
    +public void createCustomResourceTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .customResources()
    +            .create()
    +            .kind("Foo")
    +            .apiVersion("citrus.dev/v1")
    +            .file("foo.yaml")
    +            .inNamespace("my-namespace"));
     }
    XML
    -
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <test name="CreateCustomResourceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <receive endpoint="rmiServer">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    -                          <remote>org.citrusframework.rmi.remote.NewsService</remote>
    -                          <method>getNews</method>
    -                        </service-invocation>
    -                    </payload>
    -                </body>
    -                <headers>
    -                    <header name="citrus_rmi_interface" value="org.citrusframework.rmi.remote.NewsService"/>
    -                    <header name="citrus_rmi_method" value="getNews"/>
    -                </headers>
    -            </message>
    -        </receive>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <create-custom-resource kind="Foo" api-version="citrus.dev/v1" file="foo.yaml" />
    +      </kubernetes>
         </actions>
     </test>
    @@ -31675,21 +34845,15 @@

    YAML
    -
    name: RmiMessageTest
    +
    name: CreateCustomResourceTest
     actions:
    -  - receive:
    -      endpoint: "rmiServer"
    -      message:
    -        body: |
    -          <service-invocation xmlns="http://www.citrusframework.org/schema/rmi/message">
    -              <remote>org.citrusframework.rmi.remote.NewsService</remote>
    -              <method>getNews</method>
    -          </service-invocation>
    -        headers:
    -          - name: citrus_rmi_interface
    -            value: "org.citrusframework.rmi.remote.NewsService"
    -          - name: citrus_rmi_method
    -            value: "getNews"
    + - kubernetes: + client: "k8sClient" + namespace: "my-namespace" + createCustomResource: + kind: "Foo" + apiVersion: "citrus.dev/v1" + file: "foo.yaml"

    -
    -

    As you can see Citrus converts the incoming service invocation to a special XML representation which is passed as message payload to the test. As this is plain XML you can verify the RMI message content as usual using Citrus variables, functions and validation matchers.

    +
    + + + + + +
    + + +When you have access to a Fabric8 Java model that represents the custom resource you can use the Java type to specify the Kind and ApiVersion while creating the resource. +Also, you can use a Java object instance directly to create the resource with the Fabric8 Kubernetes client. +
    +
    +
    +

    37.11. Delete Custom Resource

    -

    Since we have received the method call we need to provide some return value for the client. As usual we can specify the method return value with some XML representation.

    +

    When you want to delete a Kubernetes custom resource you need to specify the Kind as well as the ApiVersion in combination with the resource name on the cluster.

    Java
    @CitrusTest
    -public void rmiMessageTest() {
    -    $(send(rmiServer)
    -        .message(RmiMessage.result("This is news from RMI!"))
    -    );
    +public void createCustomResourceTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .customResources()
    +            .delete()
    +            .kind("Foo")
    +            .apiVersion("citrus.dev/v1")
    +            .name("foo")
    +            .inNamespace("my-namespace"));
     }
    XML
    -
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <test name="DeleteCustomResourceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <send endpoint="rmiServer">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    -                            <object type="java.lang.String" value="This is news from RMI!"/>
    -                        </service-result>
    -                    </payload>
    -                </body>
    -            </message>
    -        </send>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <delete-custom-resource kind="Foo" api-version="citrus.dev/v1" name="foo" />
    +      </kubernetes>
         </actions>
     </test>
    @@ -31758,15 +34915,15 @@

    YAML
    -
    name: RmiMessageTest
    +
    name: DeleteCustomResourceTest
     actions:
    -  - send:
    -      endpoint: "rmiServer"
    -      message:
    -        body: |
    -          <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    -            <object type="java.lang.String" value="This is news from RMI!"/>
    -          </service-result>
    + - kubernetes: + client: "k8sClient" + namespace: "my-namespace" + deleteCustomResource: + kind: "Foo" + apiVersion: "citrus.dev/v1" + name: "foo"

    +
    + + + + + +
    + + +When you have access to a Fabric8 Java model that represents the custom resource you can use the Java type to specify the Kind and ApiVersion while deleting the resource. +
    +
    +
    +
    +

    37.12. Verify Custom Resource

    -

    The service result is defined as object with a type and value . The Citrus RMI remote interface method will return this value to the calling client. This would complete the successful remote service invocation. At this point we also have to think of choosing to raise some remote exception as service outcome.

    +

    You can verify the ready condition status for a Kubernetes custom resource. +Usually the custom resource exposes a Status sub-resource with that expose a ready condition. +You can verify this condition as part of a test like this:

    Java
    @CitrusTest
    -public void rmiMessageTest() {
    -    $(send(rmiServer)
    -        .message(RmiMessage.exception("Something went wrong"))
    -    );
    +public void verifyCustomResourceTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .customResources()
    +            .verify("foo")
    +            .kind("Foo")
    +            .apiVersion("citrus.dev/v1")
    +            .isReady()
    +            .maxAttempts(2)
    +            .inNamespace("my-namespace"));
     }
    XML
    -
    <test name="RmiMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <test name="VerifyCustomResourceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <send endpoint="rmiServer">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    -                            <exception>Something went wrong</exception>
    -                        </service-result>
    -                    </payload>
    -                </body>
    -            </message>
    -        </send>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <verify-custom-resource kind="Foo" api-version="citrus.dev/v1" name="foo" condition="Ready" />
    +      </kubernetes>
         </actions>
     </test>
    @@ -31827,15 +34987,16 @@

    YAML
    -
    name: RmiMessageTest
    +
    name: VerifyCustomResourceTest
     actions:
    -  - send:
    -      endpoint: "rmiServer"
    -      message:
    -        body: |
    -          <service-result xmlns="http://www.citrusframework.org/schema/rmi/message">
    -            <exception>Something went wrong</exception>
    -          </service-result>
    + - kubernetes: + client: "k8sClient" + namespace: "my-namespace" + verifyCustomResource: + kind: "Foo" + apiVersion: "citrus.dev/v1" + name: "foo" + condition: "Ready"

    -
    -

    In the example above Citrus will not return some object as service result but raise a java.rmi.RemoteException with respective error message as specified in the test case. The calling client will receive the exception accordingly.

    -
    -
    -
    -
    -
    -

    30. JMX support

    -
    -
    -

    JMX is a standard Java API for making beans accessible to others in terms of management and remote configuration. JMX is the short term for Java Management Extensions and is often used in JEE application servers to manage bean attributes and operations from outside (e.g. another JVM). A managed bean server hosts multiple managed beans for JMX access. Remote connections to JMX can be realized with RMI (Remote method invocation) capabilities.

    -
    -
    -

    Citrus is able to connect to JMX managed beans as client and server. As a client Citrus can invoke managed bean operations and read write managed bean attributes. As a server Citrus is able to expose managed beans as mbean server. Clients can access those Citrus managed beans and get proper response objects as result. Doing so you can use the JVM platform managed bean server or some RMI registry for providing remote access.

    -
    @@ -31881,110 +35015,42 @@

    30. J

    -The JMX components in Citrus are kept in a separate Maven module. So you should check that the module is available as Maven dependency in your project +Instead of specifying the resource name you can also use a label expression (name=value) to identify the custom resource on the cluster namespace. +Citrus tries to find the resource with the matching label.
    -
    -
    -
    <dependency>
    -  <groupId>org.citrusframework</groupId>
    -  <artifactId>citrus-jmx</artifactId>
    -  <version>${citrus.version}</version>
    -</dependency>
    -
    -
    -
    -

    As usual Citrus provides a customized jmx configuration schema that is used in Spring configuration files. Simply include the citrus-jmx namespace in the configuration XML files as follows.

    -
    -
    -
    -
    <beans xmlns="http://www.springframework.org/schema/beans"
    -      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    -      xmlns:citrus="http://www.citrusframework.org/schema/config"
    -      xmlns:citrus-jmx="http://www.citrusframework.org/schema/jmx/config"
    -      xsi:schemaLocation="
    -      http://www.springframework.org/schema/beans
    -      http://www.springframework.org/schema/beans/spring-beans.xsd
    -      http://www.citrusframework.org/schema/config
    -      http://www.citrusframework.org/schema/config/citrus-config.xsd
    -      http://www.citrusframework.org/schema/jmx/config
    -      http://www.citrusframework.org/schema/jmx/config/citrus-jmx-config.xsd">
    -
    -      [...]
    -
    -      </beans>
    -
    -
    -
    -

    Now you are ready to use the customized Http configuration elements with the citrus-jmx namespace prefix.

    -
    -
    -

    Next sections describe the JMX message support in Citrus in more detail.

    -

    30.1. JMX client

    -
    -

    On the client side we want to call some managed bean by either accessing managed attributes with read/write or by invoking a managed bean operation. For proper mbean server connectivity we should specify a client component for JMX that sends out mbean invocation calls.

    -
    -
    -
    -
    <citrus-jmx:client id="jmxClient"
    -      server-url="platform"/>
    -
    -
    -
    -

    The client component specifies the target managed bean server that we want to connect to. In this example we are using the JVM platform mbean server. This means we are able to access all JVM managed beans such as Memory, Threading and Logging. In addition to that we can access all custom managed beans that were exposed to the platform mbean server.

    -
    -
    -

    In most cases you may want to access managed beans on a different JVM or application server. So we need some remote connection to the foreign mbean server.

    -
    -
    -
    -
    <citrus-jmx:client id="jmxClient"
    -      server-url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi"
    -      username="user"
    -      password="s!cr!t"
    -      auto-reconnect="true"
    -      delay-on-reconnect="5000"/>
    -
    -
    -
    -

    In this example above we connect to a remote mbean server via RMI using the default RMI registry localhost:1099 and the service name jmxrmi . Citrus is able to handle different remote transport protocols. Just define those in the server-url .

    -
    +

    37.13. Verify Pod Status

    -

    Now that we have setup the client component we can use it in a test case to access a managed bean.

    +

    Each Pod in Kubernetes exposes its Ready state condition as well as the phase (Running, Error, Initializing, Terminating, …​). +You can verify this Pod status in your test case:

    Java
    @CitrusTest
    -public void jmxMessageTest() {
    -    $(send(jmxClient)
    -        .message(JmxMessage.invocation("java.lang:type=Memory")
    -            .attribute("Verbose"))
    -    );
    +public void verifyPodTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .pods()
    +            .verify("my-pod")
    +            .isRunning()
    +            .maxAttempts(2)
    +            .inNamespace("my-namespace"));
     }
    XML
    -
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <test name="VerifyPodTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <send endpoint="jmxClient">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <mbean>java.lang:type=Memory</mbean>
    -                          <attribute name="Verbose"/>
    -                        </mbean-invocation>
    -                    </payload>
    -                </body>
    -            </message>
    -        </send>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <verify-pod name="my-pod" phase="Running" />
    +      </kubernetes>
         </actions>
     </test>
    @@ -31992,16 +35058,14 @@

    YAML
    -
    name: JmxMessageTest
    +
    name: VerifyPodTest
     actions:
    -  - send:
    -      endpoint: "jmxClient"
    -      message:
    -        body: |
    -          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -              <mbean>java.lang:type=Memory</mbean>
    -              <attribute name="Verbose"/>
    -          </mbean-invocation>
    + - kubernetes: + client: "k8sClient" + namespace: "my-namespace" + verifyPod: + name: "my-pod" + phase: "Running"

    -
    -

    As you can see we just used a normal send action referencing the jmx client component that we have just added. The message payload is an XML representation of the managed bean access. This is a special Citrus XML representation. Citrus will convert this XML payload to the actuel managed bean access. In the example above we try to access a managed bean with object name java.lang:type=Memory . The object name is defined in JMX specification and consists of a key java.lang:type and a value Memory . So we identify the managed bean on the server by its type.

    +
    + + + + + +
    + + +When asserting the Running phase the verification also checks for all containers in the Pod to expose the condition Ready. +
    +
    +
    +

    37.14. Verify Pod Logs

    -

    Now that we have access to the managed bean we can read its managed attributes such as Verbose . This is a boolean type attribute so the mbean invocation result will be a respective Boolean object. We can validate the managed bean attribute access in a receive action.

    +

    You can read and verify the Pod logs as part of the test.

    Java
    @CitrusTest
    -public void jmxMessageTest() {
    -    $(receive(jmxClient)
    -        .message(JmxMessage.result(false))
    -    );
    +public void verifyPodTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .pods()
    +            .verify("my-pod")
    +            .isRunning()
    +            .waitForLogMessage("Something interesting")
    +            .inNamespace("my-namespace"));
     }
    XML
    -
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <test name="VerifyPodTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <receive endpoint="jmxClient">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <object type="java.lang.Boolean" value="false"/>
    -                        </mbean-result>
    -                    </payload>
    -                </body>
    -            </message>
    -        </receive>
    +      <kubernetes client="k8sClient" namespace="my-namespace">
    +        <verify-pod name="my-pod" phase="Running" log-message="Something interesting"/>
    +      </kubernetes>
         </actions>
     </test>
    @@ -32066,15 +35125,15 @@

    YAML
    -
    name: JmxMessageTest
    +
    name: VerifyPodTest
     actions:
    -  - receive:
    -      endpoint: "jmxClient"
    -      message:
    -        body: |
    -          <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    -              <object type="java.lang.Boolean" value="false"/>
    -          </mbean-result>
    + - kubernetes: + client: "k8sClient" + namespace: "my-namespace" + verifyPod: + name: "my-pod" + phase: "Running" + logMessage: "Something interesting"

    -

    In the sample above we receive the mbean result and expect a java.lang.Boolean object return value. The return value content is also validated within the mbean result payload.

    +

    This action scans the Pod logs for a message Something interesting. +As soon as the log message has been located in the Pod logs the test action finishes with success. +The action waits for the log message to appear in the Pod logs for given amount of time with a specified polling attempt configuration.

    +
    +
    +
    +

    37.15. Spring bean config

    +
    +

    Citrus provides a "citrus-kubernetes" configuration namespace and schema definition for Kubernetes related components and actions. +Include this namespace into your Spring configuration in order to use the Citrus Kubernetes configuration elements.

    +
    +
    +

    37.15.1. Spring XML config namespace

    +
    +

    The namespace URI and schema location are added to the Spring configuration XML file as follows.

    +
    +
    +
    +
    <beans xmlns="http://www.springframework.org/schema/beans"
    +       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +       xmlns:citrus-k8s="http://www.citrusframework.org/schema/kubernetes/config"
    +       xsi:schemaLocation="
    +       http://www.springframework.org/schema/beans
    +       http://www.springframework.org/schema/beans/spring-beans.xsd
    +       http://www.citrusframework.org/schema/kubernetes/config
    +       http://www.citrusframework.org/schema/kubernetes/config/citrus-kubernetes-config.xsd">
    +
    +    [...]
    +
    +</beans>
    +
    +
    +
    +

    After that you are able to use customized Citrus XML elements in order to define the Spring beans.

    +
    +
    +
    +

    37.15.2. Spring XML testcase namespace

    +
    +

    We have several Citrus test actions each representing a Kubernetes command. +These actions can be part of a test case where you can manage Kubernetes pods inside the test. +As a prerequisite we have to enable the Kubernetes specific test actions in our XML test as follows:

    +
    +
    +
    +
    <beans xmlns="http://www.springframework.org/schema/beans"
    +        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    +        xmlns:k8s="http://www.citrusframework.org/schema/kubernetes/testcase"
    +        xsi:schemaLocation="
    +        http://www.springframework.org/schema/beans
    +        http://www.springframework.org/schema/beans/spring-beans.xsd
    +        http://www.citrusframework.org/schema/kubernetes/testcase
    +        http://www.citrusframework.org/schema/kubernetes/testcase/citrus-kubernetes-testcase.xsd">
    +
    +    [...]
    +
    +</beans>
    +
    +
    +
    +

    We added a special kubernetes namespace with prefix k8s: so now we can start to add Kubernetes test actions to the test case:

    +
    +
    +
    Spring XML
    +
    +
    <testcase name="KubernetesCommandIT">
    +    <actions>
    +      <k8s:info client="myK8sClient">
    +        <k8s:validate>
    +          <k8s:result>{
    +            "result": {
    +              "clientVersion": "1.4.27",
    +              "apiVersion": "v1",
    +              "kind":"Info",
    +              "masterUrl": "${masterUrl}",
    +              "namespace": "test"
    +            }
    +          }</k8s:result>
    +        </k8s:validate>
    +      </k8s:info>
    +    </actions>
    +</testcase>
    +
    +
    +
    +

    In this very simple example we first ping the Kubernetes REST API to make sure we have connectivity up and running. +The info command connects the REST API and returns a list of status information of the Kubernetes client.

    +
    +
    +

    Based on that we can execute several Kubernetes commands in a test case and validate the Json results.

    +
    +
    +

    Citrus supports the following Kubernetes API commands with respective test actions:

    +
    +
    +
      +
    • +

      k8s:info

      +
    • +
    • +

      k8s:list-pods

      +
    • +
    • +

      k8s:get-pod

      +
    • +
    • +

      k8s:delete-pod

      +
    • +
    • +

      k8s:list-services

      +
    • +
    • +

      k8s:get-service

      +
    • +
    • +

      k8s:delete-service

      +
    • +
    • +

      k8s:list-namespaces

      +
    • +
    • +

      k8s:list-events

      +
    • +
    • +

      k8s:list-endpoints

      +
    • +
    • +

      k8s:list-nodes

      +
    • +
    • +

      k8s:list-replication-controllers

      +
    • +
    • +

      k8s:watch-pods

      +
    • +
    • +

      k8s:watch-services

      +
    • +
    • +

      k8s:watch-namespaces

      +
    • +
    • +

      k8s:watch-nodes

      +
    • +
    • +

      k8s:watch-replication-controllers

      +
    • +
    +
    +
    +

    We will discuss these commands in detail in the following sections.

    +
    +
    +
    +

    37.16. Kubernetes commands

    -

    Some managed bean attributes might also be settable for us. So we can define the attribute access as write operation by specifying a value in the send action payload.

    +

    The Citrus test may use Kubernetes commands that get run as test actions.

    Java
    @CitrusTest
    -public void jmxMessageTest() {
    -    $(send(jmxClient)
    -        .message(JmxMessage.invocation("java.lang:type=Memory")
    -            .attribute("Verbose", true))
    -    );
    +public void kubernetesTest() {
    +    kubernetes().info()
    +        .validate(new CommandResultCallback<InfoResult>() {
    +            @Override
    +            public void doWithCommandResult(InfoResult info, TestContext context) {
    +                Assert.assertEquals(info.getApiVersion(), "v1");
    +            }
    +    });
    +
    +    kubernetes().pods()
    +                .list()
    +                .withoutLabel("running")
    +                .label("app", "myApp");
     }
    -
    XML
    +
    Spring XML
    -
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <testcase name="KubernetesCommandIT">
         <actions>
    -        <send endpoint="jmxClient">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <mbean>java.lang:type=Memory</mbean>
    -                          <attribute name="Verbose" value="true" type="java.lang.Boolean"/>
    -                        </mbean-invocation>
    -                    </payload>
    -                </body>
    -            </message>
    -        </send>
    +      <k8s:info>
    +        <k8s:validate>
    +          <k8s:result>{
    +            "result": {
    +              "clientVersion": "1.4.27",
    +              "apiVersion": "v1",
    +              "kind":"Info",
    +              "masterUrl": "${masterUrl}",
    +              "namespace": "test"
    +            }
    +          }</k8s:result>
    +        </k8s:validate>
    +      </k8s:info>
    +
    +      <k8s:list-pods>
    +        <k8s:validate>
    +          <k8s:result>{
    +            "result": {
    +              "apiVersion":"v1",
    +              "kind":"PodList",
    +              "metadata":"@ignore@",
    +              "items":[]
    +            }
    +          }</k8s:result>
    +          <k8s:element path="$.result.items.size()" value="0"/>
    +        </k8s:validate>
    +      </k8s:list-pods>
         </actions>
    -</test>
    -
    -
    -
    -
    YAML
    -
    -
    name: JmxMessageTest
    -actions:
    -  - send:
    -      endpoint: "jmxClient"
    -      message:
    -        body: |
    -          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -              <mbean>java.lang:type=Memory</mbean>
    -              <attribute name="Verbose" value="true" type="java.lang.Boolean"/>
    -          </mbean-invocation>
    +</testcase>
    -
    -
    Spring XML
    -
    -
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    -              xmlns:spring="http://www.springframework.org/schema/beans">
    -    <testcase name="JmxMessageTest">
    -        <actions>
    -            <send endpoint="jmxClient">
    -                <message>
    -                    <payload>
    -                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <mbean>java.lang:type=Memory</mbean>
    -                          <attribute name="Verbose" value="true" type="java.lang.Boolean"/>
    -                        </mbean-invocation>
    -                    </payload>
    -                </message>
    -            </send>
    -        </actions>
    -    </testcase>
    -</spring:beans>
    +
    +

    In this very simple example we first ping the Kubernetes REST API to make sure we have connectivity up and running. +The info command connects the REST API and returns a list of status information of the Kubernetes client. +After that we get the list of available Kubernetes pods.

    +
    +

    As a tester we might be interested in validating the command results. +So we can specify an optional k8s:result which is usually in Json format. +With that we can apply the full Citrus Json validation power to the Kubernetes results. +As usual, we can use test variables here and ignore some values explicitly such as the metadata value. +Also, JsonPath expression validation and Json test message validation features in Citrus come in here to validate the results.

    -

    Now we have write access to the managed attribute Verbose . We do specify the value and its type java.lang.Boolean . This is how we can set attribute values on managed beans.

    +

    The Java DSL Kubernetes commands provide an optional CommandResultCallback that is automatically called with the unmarshalled command result object. +In the example above the InfoResult model object is passed as argument to the callback. +So the tester can access the command result and validate its properties with assertions.

    -

    Last not least we are able to access managed bean operations.

    +

    The option of Lamdba expressions allows us to use some syntactical sugar in Java when using the CommandResultCallback.

    -
    +
    Java
    @CitrusTest
    -public void jmxMessageTest() {
    -    $(send(jmxClient)
    -        .message(JmxMessage.invocation("org.citrusframework.jmx.mbean:type=HelloBean")
    -            .operation("sayHello")
    -            .parameter("Hello JMX!"))
    -    );
    +public void kubernetesTest() {
    +    kubernetes().info()
    +                .validate((info, context) -> Assert.assertEquals(info.getApiVersion(), "v1"));
    +}
    +
    +
    +
    + + + + + +
    + + +By default, Citrus tries to find a Kubernetes client component within the Citrus Spring application context. +If not present Citrus will instantiate a default kubernetes client with all default settings. +You can also explicitly set the kubernetes client instance when using the Java DSL Kubernetes command actions: +
    +
    +
    +
    Java
    +
    +
    @Autowired
    +private KubernetesClient k8sClient;
    +
    +@CitrusTest
    +public void kubernetesTest() {
    +    kubernetes().client(k8sClient)
    +                .info()
    +                .validate((info, context) -> Assert.assertEquals(info.getApiVersion(), "v1"));
     }
    -
    XML
    +
    Spring XML
    -
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +
    <testcase name="KubernetesCommandIT">
         <actions>
    -        <send endpoint="jmxClient">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    -                          <operation name="sayHello">
    -                            >parameter>
    -                              >param type="java.lang.String" value="Hello JMX!"/>
    -                            >/parameter>
    -                          >/operation>
    -                        </mbean-invocation>
    -                    </payload>
    -                </body>
    -            </message>
    -        </send>
    +      <k8s:info client="k8sClient">
    +        <k8s:validate>
    +          <k8s:result>{
    +            "result": {
    +              "clientVersion": "1.4.27",
    +              "apiVersion": "v1",
    +              "kind":"Info",
    +              "masterUrl": "${masterUrl}",
    +              "namespace": "test"
    +            }
    +          }</k8s:result>
    +        </k8s:validate>
    +      </k8s:info>
         </actions>
    -</test>
    +</testcase>
    -
    -
    YAML
    +
    +

    37.16.1. Info command

    +
    +

    The info command just gets the client connection settings and provides them as a Json result to the action.

    +
    +
    +
    Java
    -
    name: JmxMessageTest
    -actions:
    -  - send:
    -      endpoint: "jmxClient"
    -      message:
    -        body: |
    -          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -              <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    -              <operation name="sayHello">
    -                >parameter>
    -                  >param type="java.lang.String" value="Hello JMX!"/>
    -                >/parameter>
    -              >/operation>
    -          </mbean-invocation>
    +
    @CitrusTest
    +public void infoTest() {
    +    kubernetes().info()
    +                .validate((info, context) -> Assert.assertEquals(info.getApiVersion(), "v1"));
    +}
    Spring XML
    -
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    -              xmlns:spring="http://www.springframework.org/schema/beans">
    -    <testcase name="JmxMessageTest">
    -        <actions>
    -            <send endpoint="jmxClient">
    -                <message>
    -                    <payload>
    -                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    -                          <operation name="sayHello">
    -                            >parameter>
    -                              >param type="java.lang.String" value="Hello JMX!"/>
    -                            >/parameter>
    -                          >/operation>
    -                        </mbean-invocation>
    -                    </payload>
    -                </message>
    -            </send>
    -        </actions>
    -    </testcase>
    -</spring:beans>
    +
    <k8s:info client="myK8sClient">
    +  <k8s:validate>
    +    <k8s:result>{
    +      "result": {
    +        "clientVersion": "1.4.27",
    +        "apiVersion": "v1",
    +        "kind":"Info",
    +        "masterUrl": "${masterUrl}",
    +        "namespace": "test"
    +      }
    +    }</k8s:result>
    +  </k8s:validate>
    +</k8s:info>
    -
    -

    In the example above we access a custom managed bean and invoke its operation sayHello . We are also using operation parameters for the invocation. This should call the managed bean operation and return its result if any as usual.

    +
    +

    37.16.2. List resources

    -

    This completes the basic JMX managed bean access as client. Now we also want to discuss the server side were Citrus is able to provide managed beans for others

    +

    We can list Kubernetes resources such as pods, services, endpoints and replication controllers. +The list can be filtered by several properties such as

    +
    +
      +
    • +

      label

      +
    • +
    • +

      namespace

      +
    • +
    -
    -

    30.2. JMX server

    -

    The server side is always a little bit more tricky because we need to simulate custom managed bean access as a server. First of all Citrus provides a server component that specifies the connection properties for clients such as transport protocols, ports and mbean object names. Let’s create a new server that accepts incoming requests via RMI on a remote registry localhost:1099 .

    +

    The test action is able to define respective filters to the list, so we get only pods the match the given attributes:

    -
    +
    +
    Java
    -
    <citrus-jmx:server id="jmxServer"
    -      server-url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi">
    -    <citrus-jmx:mbeans>
    -        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.HelloBean"/>
    -        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.NewsBean" objectDomain="org.citrusframework.news" objectName="name=News"/>
    -    </citrus-jmx:mbeans>
    -</citrus-jmx:server>
    -
    -
    -
    -

    As usual we define a server-url that controls the JMX connector access to the mbean server. In this example above we open a JMX RMI connector for clients using the registry localhost:1099 and the service name jmxrmi By default Citrus will not attempt to create this registry automatically so the registry has to be present before the server start up. With the optional server property create-registry set to true you can auto create the registry when the server starts up. These properties do only apply when using a remote JMX connector server.

    +
    @CitrusTest
    +public void listPodsTest() {
    +    kubernetes()
    +        .client(k8sClient)
    +        .pods()
    +        .list()
    +        .label("app=todo")
    +        .validate("$..status.phase", "Running")
    +        .validate((pods, context) -> {
    +            Assert.assertFalse(CollectionUtils.isEmpty(pods.getResult().getItems()));
    +        });
    +}
    -
    -

    Besides using the whole server-url as property we can also construct the connection by host, port, protocol and binding properties.

    -
    +
    +
    Spring XML
    -
    <citrus-jmx:server id="jmxServer"
    -      host="localhost"
    -      port="1099"
    -      protocol="rmi"
    -      binding="jmxrmi">
    -    <citrus-jmx:mbeans>
    -        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.HelloBean"/>
    -        <citrus-jmx:mbean type="org.citrusframework.jmx.mbean.NewsBean" objectDomain="org.citrusframework.news" objectName="name=News"/>
    -    </citrus-jmx:mbeans>
    -</citrus-jmx:server>
    +
    <k8s:list-pods label="app=todo">
    +    <k8s:validate>
    +      <k8s:result>{
    +        "result": {
    +          "apiVersion":"${apiVersion}",
    +          "kind":"PodList",
    +          "metadata":"@ignore@",
    +          "items":"@ignore@"
    +        }
    +      }</k8s:result>
    +      <k8s:element path="$.result.items.size()" value="1"/>
    +      <k8s:element path="$..status.phase" value="Running"/>
    +    </k8s:validate>
    +</k8s:list-pods>
    -

    On last thing to mention is that we could have also used platform as server-url in order to use the JVM platform mbean server instead.

    +

    As you can see we are able to give the pod label that is searched for in list of all pods. +The list returned is validated either by giving an expected Json message or by adding JsonPath expressions with expected values to check.

    -

    Now that we clarified the connectivity we need to talk about how to define the managed beans that are available on our JMX mbean server. This is done as nested mbean configuration elements. Here the managed bean definitions describe the managed bean with its objectDomain, objectName, operations and attributes. The most convenient way of defining such managed bean definitions is to give a bean type which is the fully qualified class name of the managed bean. Citrus will use the package name and class name for proper objectDomain and objectName construction.

    +

    In Java DSL we can add a validation result callback that is provided with the unmarshalled result object for validation. Besides label filtering we can also specify the namespace +and the pod name to search for.

    -

    Let’s have a closer look at the first mbean definition in the example above. So the first managed bean is defined by its class name org.citrusframework.jmx.mbean.HelloBean and therefore is accessible using the objectName org.citrusframework.jmx.mbean:type=HelloBean . In addition to that Citrus will read the class information such as available methods, getters and setters for constructing a proper MBeanInfo. In the second managed bean definition in our example we have used additional custom objectDomain and objectName values. So the NewsBean will be accessible with org.citrusframework.news:name=News on the managed bean server.

    +

    You can also define multiple labels as comma delimited list:

    -
    -

    This is how we can define the bindings of managed beans and what clients need to search for when finding and accessing the managed beans on the server. When clients try to find the managed beans they have to use proper objectNames accordingly. ObjectNames that are not defined on the server will be rejected with managed bean not found error.

    +
    +
    Java
    +
    +
    @CitrusTest
    +public void listServicesTest() {
    +    kubernetes()
    +        .client(k8sClient)
    +        .services()
    +        .list()
    +        .label("stage!=test,provider=fabric8")
    +        .namespace("default");
    +}
    -
    -

    Right now we have to use the qualified class name of the managed bean in the definition. What happens if we do not have access to that mbean class or if there is not managed bean interface available at all? Citrus provides a generic managed bean that is able to handle any managed bean interaction. The generic bean implementation needs to know the managed operations and attributes though. So let’s define a new generic managed bean on our server:

    -
    +
    +
    Spring XML
    -
    <citrus-jmx:server id="jmxServer"
    -server-url="service:jmx:rmi:///jndi/rmi://localhost:1099/jmxrmi">
    -    <citrus-jmx:mbeans>
    -        <citrus-jmx:mbean name="fooBean" objectDomain="foo.object.domain" objectName="type=FooBean">
    -            <citrus-jmx:operations>
    -                <citrus-jmx:operation name="fooOperation">
    -                    <citrus-jmx:parameter>
    -                        <citrus-jmx:param type="java.lang.String"/>
    -                        <citrus-jmx:param type="java.lang.Integer"/>
    -                    </citrus-jmx:parameter>
    -                </citrus-jmx:operation>
    -                <citrus-jmx:operation name="barOperation"/>
    -            </citrus-jmx:operations>
    -            <citrus-jmx:attributes>
    -                <citrus-jmx:attribute name="fooAttribute" type="java.lang.String"/>
    -                <citrus-jmx:attribute name="barAttribute" type="java.lang.Boolean"/>
    -            </citrus-jmx:attributes>
    -        </citrus-jmx:mbean>
    -    </citrus-jmx:mbeans>
    -</citrus-jmx:server>
    +
    <k8s:list-services label="stage!=test,provider=fabric8" namespace="default"/>
    -

    The generic bean definition needs to define all operations and attributes that are available for access. Up to now we are restricted to using Java base types when defining operation parameter and attribute return types. There is actually no way to define more complex return types. Nevertheless Citrus is now able to expose the managed bean for client access without having to know the actual managed bean implementation.

    +

    As you can see we have combined to label filters stage!=test and provider=fabric8 on pods in namespace default. +The first label filter is negated so the label stage should not be test here.

    +
    +
    +

    37.16.3. List nodes and namespaces

    -

    Now we can use the server component in a test case to receive some incoming managed bean access.

    +

    Nodes and namespaces are special resources that are not filtered by their namespace as they are more global resources. The rest is pretty similar to listing pods or services. We can +add filters such as name and label.

    Java
    @CitrusTest
    -public void jmxMessageTest() {
    -    $(receive(jmxServer)
    -        .message(JmxMessage.invocation("org.citrusframework.jmx.mbean:type=HelloBean")
    -            .operation("sayHello")
    -            .parameter("Hello JMX!"))
    -    );
    +public void listPodsTest() {
    +    kubernetes()
    +        .client(k8sClient)
    +        .namespaces()
    +        .list()
    +        .label("provider=citrus")
    +        .validate((pods, context) -> {
    +            Assert.assertFalse(CollectionUtils.isEmpty(pods.getResult().getItems()));
    +        });
     }
    -
    XML
    +
    Spring XML
    -
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    -    <actions>
    -        <receive endpoint="jmxServer">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    -                          <operation name="sayHello">
    -                            >parameter>
    -                              >param type="java.lang.String" value="Hello JMX!"/>
    -                            >/parameter>
    -                          </operation>
    -                        </mbean-invocation>
    -                    </payload>
    -                </body>
    -            </message>
    -        </receive>
    -    </actions>
    -</test>
    +
    <k8s:list-namespaces label="provider=citrus">
    +    <k8s:validate>
    +      <k8s:element path="$.result.items.size()" value="1"/>
    +    </k8s:validate>
    +</k8s:list-namespaces>
    -
    -
    YAML
    +
    +
    +

    37.16.4. Get resources

    +
    +

    We can get a very special Kubernetes resource such as a pod or service for detailed validation of that resource. +We need to specify a resource name in order to select the resource from list of available resources in Kubernetes.

    +
    +
    +
    Java
    -
    name: JmxMessageTest
    -actions:
    -  - receive:
    -      endpoint: "jmxServer"
    -      message:
    -        body: |
    -          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -              <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    -              <operation name="sayHello">
    -                >parameter>
    -                  >param type="java.lang.String" value="Hello JMX!"/>
    -                >/parameter>
    -              </operation>
    -          </mbean-invocation>
    +
    @CitrusTest
    +public void getPodsTest() {
    +    kubernetes()
    +        .client(k8sClient)
    +        .pods()
    +        .get("citrus_pod")
    +        .validate("$..status.phase", "Running")
    +        .validate((pod, context) -> {
    +            Assert.assertEquals(pods.getResult().getStatus().getPhase(), "Running");
    +        });
    +}
    Spring XML
    -
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    -              xmlns:spring="http://www.springframework.org/schema/beans">
    -    <testcase name="JmxMessageTest">
    -        <actions>
    -            <receive endpoint="jmxServer">
    -                <message>
    -                    <payload>
    -                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <mbean>org.citrusframework.jmx.mbean:type=HelloBean</mbean>
    -                          <operation name="sayHello">
    -                            >parameter>
    -                              >param type="java.lang.String" value="Hello JMX!"/>
    -                            >/parameter>
    -                          </operation>
    -                        </mbean-invocation>
    -                    </payload>
    -                </message>
    -            </receive>
    -        </actions>
    -    </testcase>
    -</spring:beans>
    +
    <k8s:get-pod name="citrus_pod">
    +    <k8s:validate>
    +      <k8s:result>{
    +      "result": {
    +        "apiVersion":"${apiVersion}",
    +        "kind":"Pod",
    +        "metadata": {
    +            "annotations":"@ignore@",
    +            "creationTimestamp":"@ignore@",
    +            "finalizers":[],
    +            "generateName":"@startsWith('hello-minikube-')@",
    +            "labels":{
    +              "pod-template-hash":"@ignore@",
    +              "run":"hello-minikube"
    +            },
    +            "name":"${podName}",
    +            "namespace":"default",
    +            "ownerReferences":"@ignore@",
    +            "resourceVersion":"@ignore@",
    +            "selfLink":"/api/${apiVersion}/namespaces/default/pods/${podName}",
    +            "uid":"@ignore@"
    +        },
    +        "spec": {
    +          "containers": [{
    +            "args":[],
    +            "command":[],
    +            "env":[],
    +            "image":"gcr.io/google_containers/echoserver:1.4",
    +            "imagePullPolicy":"IfNotPresent",
    +            "name":"hello-minikube",
    +            "ports":[{
    +              "containerPort":8080,
    +              "protocol":"TCP"
    +            }],
    +            "resources":{},
    +            "terminationMessagePath":"/dev/termination-log",
    +            "volumeMounts":"@ignore@"
    +          }],
    +          "dnsPolicy":"ClusterFirst",
    +          "imagePullSecrets":"@ignore@",
    +          "nodeName":"minikube",
    +          "restartPolicy":"Always",
    +          "securityContext":"@ignore@",
    +          "serviceAccount":"default",
    +          "serviceAccountName":"default",
    +          "terminationGracePeriodSeconds":30,
    +          "volumes":"@ignore@"
    +        },
    +        "status": "@ignore@"
    +      }
    +      }</k8s:result>
    +      <k8s:element path="$..status.phase" value="Running"/>
    +    </k8s:validate>
    +</k8s:get-pod>
    +
    +
    +

    As you can see we are able to get the complete pod information from Kubernetes. +The result is validated with Json message validator in Citrus. +This means we can use @ignore@ as well as test variables and JsonPath expressions.

    +
    +
    +
    +

    37.16.5. Create resources

    +
    +

    We can create new Kubernetes resources within a Citrus test. +This is very important in case we need to set up new pods or services for the test run. +You can create new resources by giving a .yaml file holding all information how to create the new resource. +See the following sample YAML for a new pod and service:

    +
    +
    +
    pod.yaml
    +
    +
    kind: Pod
    +apiVersion: v1
    +metadata:
    +  name: hello-netty-${randomId}
    +  namespace: default
    +  labels:
    +    server: hello-netty
    +spec:
    +  containers:
    +    - name: hello-netty
    +      image: netty
    +      imagePullPolicy: IfNotPresent
    +      ports:
    +        - containerPort: 8080
    +          protocol: TCP
    +  restartPolicy: Always
    +  terminationGracePeriodSeconds: 30
    +  dnsPolicy: ClusterFirst
    +  serviceAccountName: default
    +  serviceAccount: default
    +  nodeName: minikube
    +
    +
    +
    +

    This YAML file specifies a new resource of kind Pod. +We define the metadata as well as all containers that are part of this pod. +The container is build from jetty:9.3 Docker image that should be pulled automatically from Docker Hub registry. +We also expose port 8080 as containerPort so the upcoming service configuration can provide this port to clients as Kubernetes service.

    +
    +
    +
    service.yaml
    +
    +
    kind: Service
    +apiVersion: v1
    +metadata:
    +  name: hello-netty
    +  namespace: default
    +  labels:
    +    service: hello-netty
    +spec:
    +  ports:
    +    - protocol: TCP
    +      port: 8080
    +      targetPort: 8080
    +      nodePort: 31123
    +  selector:
    +    server: hello-netty
    +  type: NodePort
    +  sessionAffinity: None
    +
    +
    +
    +

    The service resource maps the port 8080 and selects all pods with label server=hello-netty. +This makes the jetty container available to clients. +The service type is NodePort which means that clients outside of Kubernetes are also able to access the service by using the port nodePort=31123. +We can use Citrus functions such as randomNumber in the YAML files.

    -

    In this very first example we expect a managed bean access to the bean org.citrusframework.jmx.mbean:type=HelloBean . We further expect the operation sayHello to be called with respective parameter values. Now we have to define the operation result that will be returned to the calling client as operation result.

    +

    In the test case we can use these YAML files to create the resources in Kubernetes:

    Java
    @CitrusTest
    -public void jmxMessageTest() {
    -    $(send(jmxServer)
    -        .message(JmxMessage.result("Hello from JMX!"))
    -    );
    +public void createPodsTest() {
    +    kubernetes()
    +        .pods()
    +        .create(new ClassPathResource("templates/hello-netty-pod.yml"))
    +        .namespace("default");
    +
    +    kubernetes()
    +        .services()
    +        .create(new ClassPathResource("templates/hello-service.yml"))
    +        .namespace("default");
     }
    -
    XML
    +
    Spring XML
    -
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    -    <actions>
    -        <send endpoint="jmxServer">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                            <object type="java.lang.String" value="Hello from JMX!"/>
    -                        </mbean-result>
    -                    </payload>
    -                </body>
    -            </message>
    -        </send>
    -    </actions>
    -</test>
    -
    +
    <testcase name="KubernetesIT">
    +  <actions>
    +    <k8s:create-pod namespace="default">
    +      <k8s:template file="classpath:templates/hello-netty-pod.yml"/>
    +    </k8s:create-pod>
    +
    +    <k8s:create-service namespace="default">
    +      <k8s:template file="classpath:templates/hello-service.yml"/>
    +    </k8s:create-service>
    +  </actions>
    +</testcase>
    -
    -
    YAML
    -
    -
    name: JmxMessageTest
    -actions:
    -  - send:
    -      endpoint: "jmxServer"
    -      message:
    -        body: |
    -          <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    -            <object type="java.lang.String" value="Hello from JMX!"/>
    -          </mbean-result>
    +
    +

    Creating new resources may take some time to finish. +Kubernetes will have to pull images, build containers and start up everything. +The create action is not waiting synchronously for all that to have happened. +Therefore, we might add a list-pods action that waits for the new resources to appear.

    Spring XML
    -
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    -              xmlns:spring="http://www.springframework.org/schema/beans">
    -    <testcase name="JmxMessageTest">
    -        <actions>
    -            <send endpoint="jmxServer">
    -                <message>
    -                    <payload>
    -                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                            <object type="java.lang.String" value="Hello from JMX!"/>
    -                        </mbean-result>
    -                    </payload>
    -                </message>
    -            </send>
    -        </actions>
    -    </testcase>
    -</spring:beans>
    +
    <repeat-onerror-until-true condition="@assertThat(greaterThan(9))@" auto-sleep="1000">
    +  <k8s:list-pods label="server=hello-netty">
    +    <k8s:validate>
    +      <k8s:element path="$.result.items.size()" value="1"/>
    +      <k8s:element path="$..status.phase" value="Running"/>
    +    </k8s:validate>
    +  </k8s:list-pods>
    +</repeat-onerror-until-true>
    -

    The operation returns a String Hello from JMX! . This is how we can expect operation calls on managed beans. Now we already have seen that managed beans also expose attributes. The next example is handling incoming attribute read access.

    +

    With this repeat on error action we wait for the new server=hello-netty labeled pod to be in state Running.

    +
    +
    +
    +

    37.16.6. Delete resources

    +
    +

    With that command we are able to delete a resource in Kubernetes. +Up to now deletion of pods and services is supported. +We have to give a name of the resource that we want to delete.

    Java
    @CitrusTest
    -public void jmxMessageTest() {
    -    $(receive(jmxServer)
    -        .message(JmxMessage.invocation("org.citrusframework.news:name=News")
    -            .attribute("newsCount"))
    -    );
    -
    -    $(send(jmxServer)
    -        .message(JmxMessage.result(100))
    -    );
    +public void deletePodsTest() {
    +    kubernetes()
    +        .pods()
    +        .delete("citrus_pod")
    +        .validate((result, context) -> Assert.assertTrue(result.getResult().getSuccess()));
     }
    -
    XML
    -
    -
    <test name="JmxMessageTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    -    <actions>
    -        <receive endpoint="jmxServer">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <mbean>org.citrusframework.news:name=News</mbean>
    -                            >attribute name="newsCount"/>
    -                        </mbean-invocation>
    -                    </payload>
    -                </body>
    -            </message>
    -        </receive>
    -        <send endpoint="jmxServer">
    -            <message>
    -                <body>
    -                    <payload>
    -                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                            <object type="java.lang.Integer" value="100"/>
    -                        </mbean-result>
    -                    </payload>
    -                </body>
    -            </message>
    -        </send>
    -    </actions>
    -</test>
    -
    -
    -
    -
    YAML
    -
    -
    name: JmxMessageTest
    -actions:
    -  - receive:
    -      endpoint: "jmxServer"
    -      message:
    -        body: |
    -          <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -              <mbean>org.citrusframework.news:name=News</mbean>
    -                >attribute name="newsCount"/>
    -          </mbean-invocation>
    -  - send:
    -      endpoint: "jmxServer"
    -      message:
    -        body: |
    -          <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    -            <object type="java.lang.Integer" value="100"/>
    -          </mbean-result>
    -
    -
    -
    Spring XML
    -
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    -              xmlns:spring="http://www.springframework.org/schema/beans">
    -    <testcase name="JmxMessageTest">
    -        <actions>
    -            <receive endpoint="jmxServer">
    -                <message>
    -                    <payload>
    -                        <mbean-invocation xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                          <mbean>org.citrusframework.news:name=News</mbean>
    -                            >attribute name="newsCount"/>
    -                        </mbean-invocation>
    -                    </payload>
    -                </message>
    -            </receive>
    -
    -            <send endpoint="jmxServer">
    -                <message>
    -                    <payload>
    -                        <mbean-result xmlns="http://www.citrusframework.org/schema/jmx/message">
    -                            <object type="java.lang.Integer" value="100"/>
    -                        </mbean-result>
    -                    </payload>
    -                </message>
    -            </send>
    -        </actions>
    -    </testcase>
    -</spring:beans>
    -
    -
    -
    -

    The receive action expects read access to the NewsBean attribute newsCount and returns a result object of type java.lang.Integer . This way we can expect all attribute access to our managed beans. Write operations will have an attribute value specified.

    -
    -
    -

    This completes the JMX server capabilities with managed bean access on operations and attributes.

    -
    -
    +
    <k8s:delete-pod name="citrus_pod">
    +    <k8s:validate>
    +      <k8s:element path="$.result.success" value="true"/>
    +    </k8s:validate>
    +</k8s:delete-pod>
    -
    -

    31. Zookeeper support

    -
    -
    -

    Citrus provides configuration components and test actions for interacting with Zookeeper. The Citrus Zookeeper client component executes commands like create-node, check node-exists, delete-node, get node-data or set node-data. As a user you can execute Zookeeper commands as part of a Citrus test and validate possible command results.

    +
    +

    37.16.7. Watch resources

    @@ -32630,265 +35852,197 @@

    -The Zookeeper test components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +The watch operation is still in experimental state and may face severe adjustments and improvements in near future.
    -
    -
    -
    <dependency>
    -      <groupId>org.citrusframework</groupId>
    -      <artifactId>citrus-zookeeper</artifactId>
    -      <version>${citrus.version}</version>
    -      </dependency>
    -
    -
    -

    Citrus provides a "citrus-zookeeper" configuration namespace and schema definition for Zookeeper related components and actions. Include this namespace into your Spring configuration in order to use the Citrus zookeeper configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows.

    +

    When using a watch command we add a subscription to change events on a Kubernetes resources. +So we can watch resources such as pods, services for future changes. +Each change on that resource triggers a new watch event result that we can expect and validate.

    -
    +
    +
    Java
    -
    <beans xmlns="http://www.springframework.org/schema/beans"
    -      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    -      xmlns:citrus-zookeeper="http://www.citrusframework.org/schema/zookeeper/config"
    -      xsi:schemaLocation="
    -      http://www.springframework.org/schema/beans
    -      http://www.springframework.org/schema/beans/spring-beans.xsd
    -      http://www.citrusframework.org/schema/zookeeper/config
    -      http://www.citrusframework.org/schema/zookeeper/config/citrus-zookeeper-config.xsd">
    -
    -      [...]
    -
    -      </beans>
    -
    -
    -
    -

    After that you are able to use customized Citrus XML elements in order to define the Spring beans.

    +
    @CitrusTest
    +public void listPodsTest() {
    +    kubernetes()
    +        .pods()
    +        .watch()
    +        .label("provider=citrus")
    +        .validate((watchEvent, context) -> {
    +            Assert.assertFalse(watchEvent.hasError());
    +            Assert.assertEquals(((WatchEventResult) watchEvent).getAction(), Watcher.Action.DELETED);
    +        });
    +}
    -
    -

    31.1. Zookeeper client

    -
    -

    Before you can interact with a Zookeeper server you have to configure the Zookeeper client. A sample configuration is provided below describing the configuration options available:

    -
    +
    +
    Spring XML
    -
    <citrus-zookeeper:client id="zookeeperClient"
    -                               url="http://localhost:21118"
    -                               timeout="2000"/>
    +
    <k8s:watch-pods label="provider=citrus">
    +    <k8s:validate>
    +      <k8s:element path="$.action" value="DELETED"/>
    +    </k8s:validate>
    +</k8s:watch-pods>
    -
    -

    This is a typical client configuration for connecting to a Zookeeper server. Now you are able to execute several commands. These commands will be sent to the Zookeeper server for execution.

    +
    + + + + + +
    + + +The watch command may be triggered several times for multiple changes on the respective Kubernetes resource. +The watch action will always handle one single event result. +The first event trigger is forwarded to the action validation. +All further watch events on that same resource are ignored. +This means that you may need multiple watch actions in your test case in case you expect multiple watch events to be triggered. +
    +
    -

    31.2. Zookeeper commands

    +

    37.17. Kubernetes command bus

    -

    See below all available Zookeeper commands that a Citrus client is able to execute.

    -
    -
    -
    -
    info: Retrieves the current state of the client connection
    -create: Creates a znode in a specified path of the ZooKeeper namespace
    -delete: Deletes a znode from a specified path of the ZooKeeper namespace
    -exists: Checks if a znode exists in the path
    -children: Gets a list of children of a znode
    -get: Gets the data associated with a znode
    -set: Sets/writes data into the data field of a znode
    -
    +

    We have seen how to access the Kubernetes remote REST API by using special Citrus test actions in a test. +As an alternative to that we can also use more generic send/receive actions in Citrus for accessing the Kubernetes API.

    -

    Before we see some of these commands in action we have to add a new test namespace to our test case when using the XML DSL.

    +

    The next example shows this in action:

    -
    +
    +
    Java
    -
    <beans xmlns="http://www.springframework.org/schema/beans"
    -      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    -      xmlns:zookeeper="http://www.citrusframework.org/schema/zookeeper/testcase"
    -      xsi:schemaLocation="
    -      http://www.springframework.org/schema/beans
    -      http://www.springframework.org/schema/beans/spring-beans.xsd
    -      http://www.citrusframework.org/schema/zookeeper/testcase
    -      http://www.citrusframework.org/schema/zookeeper/testcase/citrus-zookeeper-testcase.xsd">
    -
    -      [...]
    +
    @CitrusTest
    +public void kubernetesSendReceiveTest() {
    +    send(k8sClient)
    +        .message()
    +        .body("""
    +        { "command": "info" }
    +        """);
     
    -      </beans>
    -
    -
    -
    -

    We added the Zookeeper namespace with prefix zookeeper: so now we can start to add special test actions to the test case:

    -
    -
    -
    XML DSL
    -
    -
    <zookeeper:create zookeeper-client="zookeeperClient" path="/${randomString}" acl="OPEN_ACL_UNSAFE" mode="PERSISTENT">
    -  <zookeeper:data>foo</zookeeper:data>
    -  <zookeeper:expect>
    -    <zookeeper:result>
    -      <![CDATA[
    +    receive(k8sClient)
    +        .message()
    +        .body("""
             {
    -          "responseData":{
    -              "path":"/${randomString}"
    +          "command": "info",
    +          "result": {
    +            "clientVersion": "1.4.27",
    +            "apiVersion": "v1",
    +            "kind":"Info",
    +            "masterUrl": "${masterUrl}",
    +            "namespace": "test"
               }
             }
    -      ]]>
    -    </zookeeper:result>
    -  </zookeeper:expect>
    -</zookeeper:create>
    -
    -<zookeeper:get zookeeper-client="zookeeperClient" path="/${randomString}">
    -  <zookeeper:expect>
    -    <zookeeper:result>
    -      <![CDATA[
    -      {
    -        "responseData":{
    -          "data":"foo"
    -        }
    -      }
    -      ]]>
    -    </zookeeper:result>
    -  </zookeeper:expect>
    -</zookeeper:getData>
    -
    -<zookeeper:set zookeeper-client="zookeeperClient" path="/${randomString}">
    -  <zookeeper:data>bar</zookeeper:data>
    -</zookeeper:setData>
    -
    -
    -
    -

    When using the Java DSL we can directly configure the commands with a fluent API.

    -
    -
    -
    Java DSL
    -
    -
    @CitrusTest
    -public void testZookeeper() {
    -    variable("randomString", "citrus:randomString(10)");
    -
    -    zookeeper()
    -        .create("/${randomString}", "foo")
    -        .acl("OPEN_ACL_UNSAFE")
    -        .mode("PERSISTENT")
    -        .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    -            @Override
    -            public void doWithCommandResult(ZooResponse result, TestContext context) {
    -                Assert.assertEquals(result.getResponseData().get("path"), context.replaceDynamicContentInString("/${randomString}"));
    -            }
    -        });
    +        """);
     
    -    zookeeper()
    -        .get("/${randomString}")
    -        .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    -            @Override
    -            public void doWithCommandResult(ZooResponse result, TestContext context) {
    -                Assert.assertEquals(result.getResponseData().get("version"), 0);
    -            }
    -        });
    +    send(k8sClient)
    +        .message()
    +        .body("""
    +        { "command": "list-pods" }
    +        """);
     
    -    zookeeper()
    -        .set("/${randomString}", "bar");
    +    receive(k8sClient)
    +        .message()
    +        .body("""
    +        {
    +          "command": "list-pods",
    +          "result": {
    +            "apiVersion":"v1",
    +            "kind":"PodList",
    +            "metadata":"@ignore@",
    +            "items":[]
    +          }
    +        }
    +        """)
    +        .validate(json().expression("$.result.items.size()", 0));
     }
    -
    -

    The examples above create a new znode in Zookeeper using a randomString as path. We can get and set the data with expecting and validating the result of the Zookeeper server. This is basically the idea of integrating Zookepper operations to a Citrus test. This opens the gate to manage Zookeeper related entities within a Citrus test. We can manipulate and validate the znodes on the Zookeeper instance.

    -
    -
    -

    Zookeeper keeps its nodes in a hierarchical storage. This means a znode can have children and we can add and remove those. In Citrus you can get all children of a znode and manage those within the test:

    -
    -
    -
    XML DSL
    +
    +
    Spring XML
    -
    <zookeeper:create zookeeper-client="zookeeperClient" path="/${randomString}/child1" acl="OPEN_ACL_UNSAFE" mode="EPHEMERAL">
    -  <zookeeper:data></zookeeper:data>
    -  <zookeeper:expect>
    -    <zookeeper:result>
    -      <![CDATA[
    -        {
    -          "responseData":{
    -              "path":"/${randomString}/child1"
    -          }
    -        }
    -      ]]>
    -    </zookeeper:result>
    -  </zookeeper:expect>
    -</zookeeper:create>
    +
    <testcase name="KubernetesSendReceiveIT">
    +    <actions>
    +      <send endpoint="k8sClient">
    +        <message>
    +          <data>
    +            { "command": "info" }
    +          </data>
    +        </message>
    +      </send>
     
    -<zookeeper:create zookeeper-client="zookeeperClient" path="/${randomString}/child2" acl="OPEN_ACL_UNSAFE" mode="EPHEMERAL">
    -  <zookeeper:data></zookeeper:data>
    -  <zookeeper:expect>
    -    <zookeeper:result>
    -      <![CDATA[
    -        {
    -          "responseData":{
    -              "path":"/${randomString}/child2"
    +      <receive endpoint="k8sClient">
    +        <message type="json">
    +          <data>
    +          {
    +            "command": "info",
    +            "result": {
    +                "clientVersion": "1.4.27",
    +                "apiVersion": "v1",
    +                "kind":"Info",
    +                "masterUrl": "${masterUrl}",
    +                "namespace": "test"
    +            }
               }
    -        }
    -      ]]>
    -    </zookeeper:result>
    -  </zookeeper:expect>
    -</zookeeper:create>
    +          </data>
    +        </message>
    +      </receive>
     
    -<zookeeper:children zookeeper-client="zookeeperClient" path="/${randomString}">
    -  <zookeeper:expect>
    -    <zookeeper:result>
    -      <![CDATA[
    -        {
    -          "responseData":{
    -              "children":["child1","child2"]
    -          }
    -        }
    -      ]]>
    -    </zookeeper:result>
    -  </zookeeper:expect>
    -</zookeeper:children>
    -
    -
    -
    -
    Java DSL
    -
    -
    zookeeper()
    -    .create("/${randomString}/child1", "")
    -    .acl("OPEN_ACL_UNSAFE")
    -    .mode("PERSISTENT")
    -    .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    -        @Override
    -        public void doWithCommandResult(ZooResponse result, TestContext context) {
    -            Assert.assertEquals(result.getResponseData().get("path"), context.replaceDynamicContentInString("/${randomString}/child1"));
    -        }
    -    });
    +      <echo>
    +        <message>List all pods</message>
    +      </echo>
     
    -zookeeper()
    -    .create("/${randomString}/child2", "")
    -    .acl("OPEN_ACL_UNSAFE")
    -    .mode("PERSISTENT")
    -    .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    -        @Override
    -        public void doWithCommandResult(ZooResponse result, TestContext context) {
    -            Assert.assertEquals(result.getResponseData().get("path"), context.replaceDynamicContentInString("/${randomString}/child2"));
    -        }
    -    });
    +      <send endpoint="k8sClient">
    +        <message>
    +          <data>
    +            { "command": "list-pods" }
    +          </data>
    +        </message>
    +      </send>
     
    -zookeeper()
    -    .children("/${randomString}")
    -    .validateCommandResult(new CommandResultCallback<ZooResponse>() {
    -        @Override
    -        public void doWithCommandResult(ZooResponse result, TestContext context) {
    -            Assert.assertEquals(result.getResponseData().get("children").toString(), "[child1, child2]");
    -        }
    -    });
    + <receive endpoint="k8sClient"> + <message type="json"> + <data> + { + "command": "list-pods", + "result": { + "apiVersion":"v1", + "kind":"PodList", + "metadata":"@ignore@", + "items":[] + } + } + </data> + <validate path="$.result.items.size()" value="0"/> + </message> + </receive> + </actions> +</testcase>
    +
    +
    +

    As you can see we can use the send/receive actions to call Kubernetes API commands and receive the respective results in Json format, too. +This gives us the well known Json validation mechanism in Citrus in order to validate the results from Kubernetes. +This way you can load Kubernetes resources verifying its state and properties. +Of course JsonPath expressions also come in here in order to validate Json elements explicitly.

    -

    32. Spring Restdocs support

    +

    38. Knative support

    -

    Spring Restdocs project helps to easily generate API documentation for RESTful services. While messages are exchanged the Restdocs library generates request/response snippets and API documentation. You can add the Spring Restdocs documentation to the Citrus client components for Http and SOAP endpoints.

    +

    Knative lets you build Serverless and Event Driven applications on the cloud. The project knows the two main components Knative Serving and Knative Eventing.

    +
    +
    +

    Citrus as a test framework is able to interact with Knative to manage and leverage Serving and Eventing resources on a Kubernetes cluster.

    @@ -32897,7 +36051,7 @@

    -The Spring Restdocs support components in Citrus are kept in a separate Maven module. If not already done, you have to include the module as Maven dependency to your project +The Knative support in Citrus is enabled by adding a separate Maven module as a dependency to your project
    @@ -32906,656 +36060,668 @@

    <dependency>
       <groupId>org.citrusframework</groupId>
    -  <artifactId>citrus-restdocs</artifactId>
    +  <artifactId>citrus-knative</artifactId>
       <version>${citrus.version}</version>
     </dependency>

    +
    +

    38.1. Knative client

    -

    For easy configuration Citrus has created a separate namespace and schema definition for Spring Restdocs related documentation. Include this namespace into your Spring configuration in order to use the Citrus Restdocs configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows.

    +

    Citrus interacts with Knative resources on the Kubernetes cluster. +This means we need to connect as a client to a Kubernetes cluster as part of the test. +Citrus uses the Fabric8 Knative client implementation for this connection. +You can create and configure the client once and reuse the client instance in multiple test cases.

    -
    +
    +
    Citrus Bean
    -
    <spring:beans xmlns:spring="http://www.springframework.org/schema/beans"
    -     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    -     xmlns="http://www.citrusframework.org/schema/cucumber/testcase"
    -     xsi:schemaLocation="
    -     http://www.springframework.org/schema/beans
    -     http://www.springframework.org/schema/beans/spring-beans.xsd
    -     http://www.citrusframework.org/schema/restdocs/config
    -     http://www.citrusframework.org/schema/restdocs/config/citrus-restdocs-config.xsd">
    +
    @BindToRegistry
    +public KubernetesClient kubernetesClient() {
    +    return new KubernetesClientBuilder().build();
    +}
     
    -    [...]
    +@BindToRegistry
    +public KnativeClient knativeClient() {
    +    return kubernetesClient().adapt(KnativeClient.class);
    +}
    +
    +
    +
    +
    Spring Bean
    +
    +
    @Bean
    +public KubernetesClient kubernetesClient() {
    +    return new KubernetesClientBuilder().build();
    +}
     
    -</spring:beans>
    +@Bean +public KnativeClient knativeClient() { + return kubernetesClient().adapt(KnativeClient.class); +}
    -

    After that you are able to use customized Citrus XML elements in order to define the Spring beans.

    +

    The Fabric8 Knative client is based on the Kubernetes client implementation. +You can bind the client instances as beans to the Citrus bean registry. +You may then reference and inject the client to your tests using the @CitrusResource annotation. +Spring beans may be autowired to the test case as usual with @Autowired.

    +
    -

    32.1. Spring Restdocs using Http

    +

    38.2. Knative broker

    -

    First of all we concentrate on adding the Spring Restdocs feature to Http client communication. The next sample configuration uses the new Spring Restdocs components in Citrus:

    +

    Citrus is able to create Knative Eventing broker resources as part of the test.

    -
    +
    +
    Java
    -
    <citrus-restdocs:documentation id="restDocumentation"
    -                                              output-directory="target/citrus-docs/generated-snippets"
    -                                              identifier="rest-docs/{method-name}"/>
    -
    +
    @CitrusTest
    +public void knativeBrokerTest() {
    +    given(knative()
    +            .client(knativeClient)
    +            .brokers()
    +            .create("my-broker")
    +            .inNamespace("my-namespace"));
    +}
    -
    -

    The above component adds a new documentation configuration. Behind the scenes the component creates a new restdocs configurer and a client interceptor. We can reference the new restdocs component in citrus-http client components like this:

    -
    +
    +
    XML
    -
    <citrus-http:client id="httpClient"
    -          request-url="http://localhost:8080/test"
    -          request-method="POST"
    -          interceptors="restDocumentation"/>
    -
    +
    <test name="KnativeBrokerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <knative client="knativeClient" namespace="test">
    +          <create-broker name="my-broker"/>
    +        </knative>
    +    </actions>
    +</test>
    -
    -

    The Spring Restdocs documentation component acts as a client interceptor. Every time the client component is used to send and receive a message the restdocs interceptor will automatically create its API documentation. The configuration identifier attribute describes the output format rest-docs/{method-name} which results in a folder layout like this:

    -
    +
    +
    YAML
    -
    target/citrus-docs
    -  |- rest-docs
    -    |- test-a
    -      |- curl-request.adoc
    -      |- http-request.adoc
    -      |- http-response.adoc
    -    |- test-b
    -      |- curl-request.adoc
    -      |- http-request.adoc
    -      |- http-response.adoc
    -    |- test-c
    -      |- curl-request.adoc
    -      |- http-request.adoc
    -      |- http-response.adoc
    -
    +
    name: KnativeBrokerTest
    +actions:
    +  - knative:
    +      client: "knativeClient"
    +      namespace: "test"
    +      createBroker:
    +        name: "my-broker"
    -
    -

    The example above is the result of three test cases each of them performing a client Http request/response communication. Each test message exchange is documented with separate files:

    -
    -
    curl-request.adoc
    +
    +
    Spring XML
    -
    $ curl 'http://localhost:8080/test' -i -X POST -H 'Accept: application/xml' -H 'CustomHeaderId: 123456789' -H 'Content-Type: application/xml;charset=UTF-8' -H 'Accept-Charset: utf-8' -d '<testRequestMessage>
    -    <text>Hello HttpServer>/text>
    -</testRequestMessage>'
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -

    The curl file represents the client request as curl command and can be seen as a sample to reproduce the request.

    -
    -
    -
    http-request.adoc
    -
    -
    POST /test HTTP/1.1
    -Accept: application/xml
    -CustomHeaderId: 123456789
    -Content-Type: application/xml;charset=UTF-8
    -Content-Length: 118
    -Accept-Charset: utf-8
    -Host: localhost
    -
    -<testRequestMessage>
    -    <text>Hello HttpServer>/text>
    -</testRequestMessage>
    +

    The test above creates a new Knative broker resource in the given namespace. +In the following you can connect to the broker to produce and consume events.

    +
    + + + + + +
    + + +Citrus automatically removes the created Knative resources after the test. This is the default behavior that makes Citrus delete resources such as the Knative broker even when the test has finished in failure state. However, you can disable the auto removal by setting this system property or environment variable: citrus.knative.auto.remove.resources=false or CITRUS_KNATIVE_AUTO_REMOVE_RESOURCES=false +
    -

    The http-request.adoc file represents the sent message data for the client request. The respective http-response.adoc represents the response that was sent to the client.

    +

    You can also disable the auto removal of the Knative broker on the test action, too:

    -
    -
    http-response.adoc
    +
    +
    Java
    -
    HTTP/1.1 200 OK
    -Date: Tue, 07 Jun 2016 12:10:46 GMT
    -Content-Type: application/xml;charset=UTF-8
    -Accept-Charset: utf-8
    -Content-Length: 122
    -Server: Jetty(9.2.15.v20160210)
    -
    -<testResponseMessage>
    -    <text>Hello Citrus!>/text>
    -</testResponseMessage>
    +
    @CitrusTest
    +public void knativeBrokerTest() {
    +    given(knative()
    +            .client(knativeClient)
    +            .brokers()
    +            .create("my-broker")
    +            .autoRemoveResources(false)
    +            .inNamespace("my-namespace"));
    +}
    +
    +
    +

    38.3. Verify broker status

    -

    Nice work! We have automatically created snippets for the RESTful API by just adding the interceptor to the Citrus client component. Spring Restdocs components can be combined manually. See the next configuration that uses this approach.

    +

    The test may also verify that a broker is running and ready on a given Kubernetes namespace.

    -
    +
    +
    Java
    -
    <citrus-restdocs:configurer id="restDocConfigurer" output-directory="target/citrus-docs/generated-snippets"/>
    -<citrus-restdocs:client-interceptor id="restDocClientInterceptor" identifier="rest-docs/{method-name}"/>
    -
    -<util:list id="restDocInterceptors">
    -    <ref bean="restDocConfigurer"/>
    -    <ref bean="restDocClientInterceptor"/>
    -</util:list>
    +
    @CitrusTest
    +public void knativeBrokerTest() {
    +    given(knative()
    +            .client(knativeClient)
    +            .brokers()
    +            .verify("my-broker")
    +            .inNamespace("my-namespace"));
    +}
    -
    +
    +
    XML
    -
    <citrus-http:client id="httpClient"
    -          request-url="http://localhost:8080/test"
    -          request-method="POST"
    -          interceptors="restDocInterceptors"/>
    -
    -
    -
    -

    What exactly is the difference to the citrus-restdocs:documentation that we have used before? In general there is no difference. Both configurations are identical in its outcome. Why should someone use the second approach then? It is more verbose as we need to also define a list of interceptors. The answer is easy. If you want to combine the restdocs interceptors with other client interceptors in a list then you should use the manual combination approach. We can add basic authentication interceptors for instance to the list of interceptors then. The more comfortable citrus-restdocs:documentation component only supports exclusive restdocs interceptors.

    +
    <test name="KnativeBrokerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <knative client="knativeClient" namespace="test">
    +          <verify-broker name="my-broker"/>
    +        </knative>
    +    </actions>
    +</test>
    -
    -

    32.2. Spring Restdocs using SOAP

    -
    -

    You can use the Spring Restdocs features also for SOAP clients in Citrus. This is a controversy idea as SOAP endpoints are different to RESTful concepts. But at the end SOAP Http communication is Http communication with request and response messages. Why should we miss out the fantastic documentation feature here just because of ideology reasons.

    +
    +
    YAML
    +
    +
    name: KnativeBrokerTest
    +actions:
    +  - knative:
    +      client: "knativeClient"
    +      namespace: "test"
    +      verifyBroker:
    +        name: "my-broker"
    -
    -

    The concept of adding the Spring Restdocs documentation as interceptor to the client is still the same.

    -
    +
    +
    Spring XML
    -
    <citrus-restdocs:documentation id="soapDocumentation"
    -                                              type="soap"
    -                                              output-directory="target/citrus-docs/generated-snippets"
    -                                              identifier="soap-docs/{method-name}"/>
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    +
    +
    +

    38.4. Send events

    -

    We have added a type setting with value soap . And that is basically all we need to do. Now Citrus knows that we would like to add documentation for a SOAP client:

    +

    Once a Knative broker is available we can start to produce some events with a Citrus test. +Knative uses the CloudEvent data format out of the box. +The test is able to set the CloudEvent attributes as well as the event data when pushing the event to the broker.

    -
    +
    +
    Java
    -
    <citrus-ws:client id="soapClient"
    -      request-url="http://localhost:8080/test"
    -      interceptors="soapDocumentation"/>
    -
    +
    @CitrusTest
    +public void produceEventTest() {
    +    when(knative()
    +            .event()
    +            .send()
    +            .brokerUrl("http://my-cluster.svc.cluster.local/my-namespace/my-broker")
    +            .eventData("""
    +            { "message": "Hello Knative event!" }
    +            """));
    +}
    -
    -

    Following from that the soapClient is enabled to generate Spring Restdocs documentation for each request/response. The generated snippets then do represent the SOAP request and response messages.

    -
    -
    http-request.adoc
    +
    +
    XML
    -
    POST /test HTTP/1.1
    -SOAPAction: "test"
    -Accept: application/xml
    -CustomHeaderId: 123456789
    -Content-Type: application/xml;charset=UTF-8
    -Content-Length: 529
    -Accept-Charset: utf-8
    -Host: localhost
    -
    -<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    -  <SOAP-ENV:Header>
    -    <Operation xmlns="http://citrusframework.org/test">sayHello>/Operation>
    -  </SOAP-ENV:Header>
    -  <SOAP-ENV:Body>
    -    <testRequestMessage>
    -      <text>Hello HttpServer>/text>
    -    </testRequestMessage>
    -  </SOAP-ENV:Body>
    -</SOAP-ENV:Envelope>
    +
    <test name="ProduceEventTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <knative namespace="test">
    +          <send-event broker="http://my-cluster.svc.cluster.local/my-namespace/my-broker">
    +            <event>
    +              <data>{ "message": "Hello Knative event!" }</data>
    +            </event>
    +          </send-event>
    +        </knative>
    +    </actions>
    +</test>
    -
    -
    http-response.adoc
    +
    +
    YAML
    -
    HTTP/1.1 200 OK
    -Date: Tue, 07 Jun 2016 12:10:46 GMT
    -Content-Type: application/xml;charset=UTF-8
    -Accept-Charset: utf-8
    -Content-Length: 612
    -Server: Jetty(9.2.15.v20160210)
    -
    -<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
    -  <SOAP-ENV:Header>
    -    >Operation xmlns="http://citrusframework.org/test">sayHello>/Operation>
    -  </SOAP-ENV:Header>
    -  <SOAP-ENV:Body>
    -    <testResponseMessage>
    -      <text>Hello Citrus!>/text>
    -    </testResponseMessage>
    -  </SOAP-ENV:Body>
    -</SOAP-ENV:Envelope>
    +
    name: ProduceEventTest
    +actions:
    +    - knative:
    +      namespace: "test"
    +      sendEvent:
    +        broker: "my-broker"
    +        event:
    +          data: |
    +            { "message": "Hello Knative event!" }
    -
    -

    The file names are still using http-request and http-response but the content is clearly the SOAP request/response message data.

    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -
    -

    32.3. Spring Restdocs in Java DSL

    -

    How can we use Spring Restdocs in Java DSL? Of course we have special support in Citrus Java DSL for the Spring Restdocs configuration, too.

    +

    This action produces a new Knative event with some CloudEvent attributes default values set. +The Http request to the Knative broker looks like this:

    -
    Java DSL
    -
    public class RestDocConfigurationIT extends TestNGCitrusTestDesigner {
    -
    -    @Autowired
    -    private TestListeners testListeners;
    -
    -    private HttpClient httpClient;
    -
    -    @BeforeClass
    -    public void setup() {
    -        CitrusRestDocConfigurer restDocConfigurer = CitrusRestDocsSupport.restDocsConfigurer(new ManualRestDocumentation("target/generated-snippets"));
    -        RestDocClientInterceptor restDocInterceptor = CitrusRestDocsSupport.restDocsInterceptor("rest-docs/{method-name}");
    -
    -        httpClient = CitrusEndpoints.http()
    -            .client()
    -            .requestUrl("http://localhost:8073/test")
    -            .requestMethod(HttpMethod.POST)
    -            .contentType("text/xml")
    -            .interceptors(Arrays.asList(restDocConfigurer, restDocInterceptor))
    -            .build();
    -
    -        testListeners.addTestListener(restDocConfigurer);
    -    }
    -
    -    @Test
    -    @CitrusTest
    -    public void testRestDocs() {
    -        http().client(httpClient)
    -            .send()
    -            .post()
    -            .payload("<testRequestMessage>" +
    -                      "<text>Hello HttpServer</text>" +
    -                  "</testRequestMessage>");
    +
    POST http://my-cluster.svc.cluster.local/my-namespace/my-broker
    +Accept:text/plain, application/json, application/*+json, */*
    +Host:broker-ingress.knative-eventing.svc.cluster.local
    +Content-Type:application/json
    +Ce-Id:2818d613-bc75-4b25-b570-b825bbe33378
    +Ce-Type:org.citrusframework.event.test
    +Ce-Specversion:1.0
    +Ce-Source:citrus-test
    +Content-Length:54
     
    -        http().client(httpClient)
    -            .receive()
    -            .response(HttpStatus.OK)
    -            .payload("<testResponseMessage>" +
    -                      "<text>Hello TestFramework</text>" +
    -                  "</testResponseMessage>");
    -    }
    -}
    +{ "message": "Hello Knative event!" }
    -

    The mechanism is quite similar to the XML configuration. We add the Restdocs configurer and interceptor to the list of interceptors for the Http client. If we do this all client communication is automatically documented. The Citrus Java DSL provides some convenient configuration methods in class CitrusRestDocsSupport for creating the configurer and interceptor objects.

    +

    You can see the CloudEvent attributes set with Ce-* headers. +You can customize these attributes on the send event test action.

    -
    - - - - - -
    - - -The configurer must be added to the list of test listeners. This is a mandatory step in order to enable the configurer for documentation preparations before each test. Otherwise we would not be able to generate proper documentation. If you are using the XML configuration this is done automatically for you. -
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void produceEventTest() {
    +    when(knative()
    +            .event()
    +            .send()
    +            .brokerUrl("http://my-cluster.svc.cluster.local/my-namespace/my-broker")
    +            .attribute("ce-type", "org.citrusframework.knative.event")
    +            .eventData("""
    +            { "message": "Hello Knative event!" }
    +            """));
    +}
    +
    +
    XML
    +
    +
    <test name="ProduceEventTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <knative namespace="test">
    +          <send-event broker="http://my-cluster.svc.cluster.local/my-namespace/my-broker">
    +            <event>
    +              <ce-attributes>
    +                <ce-attribute name="ce-type" value="org.citrusframework.knative.event"/>
    +              </ce-attributes>
    +              <data>{ "message": "Hello Knative event!" }</data>
    +            </event>
    +          </send-event>
    +        </knative>
    +    </actions>
    +</test>
    -
    -

    33. Dynamic endpoint components

    -
    -
    -

    Endpoints represent the central components in Citrus to send or receive a message on some destination. Usually endpoints get defined in the basic Citrus Spring application context configuration as Spring bean components. In some cases this might be over engineering as the tester just wants to send or receive a message. In particular this is done when doing sanity checks in server endpoints while debugging a certain scenario.

    +
    +
    YAML
    +
    +
    name: ProduceEventTest
    +actions:
    +    - knative:
    +      namespace: "test"
    +      sendEvent:
    +        broker: "my-broker"
    +        event:
    +          data: |
    +            { "message": "Hello Knative event!" }
    +          attributes:
    +            - name: ce-type
    +              value: "org.citrusframework.knative.event"
    -
    -

    With endpoint components you are able to create the Citrus endpoint for sending and receiving a message at test runtime. There is no additional configuration or Spring bean component needed. You just use the endpoint uri in a special naming convention and Citrus will create the endpoint for you. Let us see a first example of this scenario:

    -
    +
    +
    Spring XML
    -
    <testcase name="DynamicEndpointTest">
    -    <actions>
    -        <send endpoint="jms:Hello.Queue?timeout=10000">
    -            <message>
    -                <payload>
    -                [...]
    -                </payload>
    -            </message>
    -        </send>
    -
    -        <receive endpoint="jms:Hello.Response.Queue?timeout=5000">
    -            <message>
    -                <payload>
    -                [...]
    -                </payload>
    -            </message>
    -        </receive>
    -    </actions>
    -</testcase>
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -
    -

    As you can see the endpoint uri just goes into the test case action in substitution to the usual endpoint reference name. Instead of referencing a bean id that points to the previously configured Citrus endpoint we use the endpoint uri directly. The endpoint uri should give all information to create the endpoint at runtime. In the example above we use a keyword jms: which tells Citrus that we need to create a JMS message endpoint. Secondly we give the JMS destination name Hello.Queue which is a mandatory part of the endpoint uri when using the JMS component. The optional timeout parameter completed the uri. Citrus is able to create the JMS endpoint at runtime sending the message to the defined destination via JMS.

    +
    +

    38.5. Receive events

    -

    Of course this mechanism is not limited to JMS endpoints. We can use all default Citrus message transports in the endpoint uri. Just pick the right keyword that defines the message transport to use. Here is a list of supported keywords:

    +

    The Knative broker dispatches events by invoking services. +Usually this service is an arbitrary Kubernetes Service resource or any addressable resource on the Kubernetes cluster. +The events that should be consumed by a service gets specified in a Knative Trigger resource.

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -jms - -

    Creates a JMS endpoint for sending and receiving message to a queue or topic

    -
    -channel - -

    Creates a channel endpoint for sending and receiving messages using an in memory Spring Integration message channel

    -
    -http - -

    Creates an HTTP client for sending a request to some server URL synchronously waiting for the response message

    -
    -ws - -

    Creates a Web Socket client for sending messages to or receiving messages from a Web Socket server

    -
    -soap - -

    Creates a SOAP WebService client that send a proper SOAP message to the server URL and waits for the synchronous response to arrive

    -
    -ssh - -

    Creates a new ssh client for publishing a command to the server

    -
    -mail - -

    or smtp: Creates a new mail client for sending a mail mime message to an SMTP server

    -
    -camel - -

    Creates a new Apache Camel endpoint for sending and receiving Camel exchanges both to and from Camel routes.

    -
    -vertx - -

    or eventbus: Creates a new Vert.x instance sending and receiving messages with the network event bus

    -
    -rmi - -

    Creates a new RMI client instance sending and receiving messages for method invocation on remote interfaces

    -
    -jmx - -

    Creates a new JMX client instance sending and receiving messages to and from a managed bean server.

    -
    +
    +

    This means we need to consume Knative events with a Kubernetes service resource. +Citrus provides special Kubernetes support that enables you to create a Kubernetes service resource on the cluster. +Read more about it in chapter Kubernetes support.

    -

    Depending on the message transport we have to add mandatory parameters to the endpoint uri. In the JMS example we had to specify the destination name. The mandatory parameters are always part of the endpoint uri. Optional parameters can be added as key value pairs to the endpoint uri. The available parameters depend on the endpoint keyword that you have chosen. See these example endpoint uri expressions:

    +

    You can create the Kubernetes service as follows:

    -
    +
    +
    Java
    -
        jms:queuename?connectionFactory=specialConnectionFactory&timeout=10000
    -    jms:topic:topicname?connectionFactory=topicConnectionFactory
    -    jms:sync:queuename?connectionFactory=specialConnectionFactory&pollingInterval=100&replyDestination=myReplyDestination
    -
    -    channel:channelName
    -    channel:sync:channelName
    -    channel:channelName?timeout=10000&channelResolver=myChannelResolver
    -
    -    http:localhost:8088/test
    -    http://localhost:8088/test
    -    http:localhost:8088?requestMethod=GET&timeout=10000&errorHandlingStrategy=throwsException&requestFactory=myRequestFactory
    -    http://localhost:8088/test?requestMethod=DELETE&customParam=foo
    -
    -    websocket:localhost:8088/test
    -    websocket://localhost:8088/test
    -    ws:localhost:8088/test
    -    ws://localhost:8088/test
    -
    -    soap:localhost:8088/test
    -    soap:localhost:8088?timeout=10000&errorHandlingStrategy=propagateError&messageFactory=myMessageFactory
    -
    -    mail:localhost:25000
    -    smtp://localhost:25000
    -    smtp://localhost?timeout=10000&username=foo&password=1234&mailMessageMapper=myMapper
    -
    -    ssh:localhost:2200
    -    ssh://localhost:2200?timeout=10000&strictHostChecking=true&user=foo&password=12345678
    -
    -    rmi://localhost:1099/someService
    -    rmi:localhost/someService&timeout=10000
    -
    -    jmx:rmi:///jndi/rmi://localhost:1099/someService
    -    jmx:platform&timeout=10000
    -
    -    camel:direct:address
    -    camel:seda:address
    -    camel:jms:queue:someQueue?connectionFactory=myConnectionFactory
    -    camel:activemq:queue:someQueue?concurrentConsumers=5&destination.consumer.prefetchSize=50
    -    camel:controlbus:route?routeId=myRoute&action=status
    -
    -    vertx:addressName
    -    vertx:addressName?port=10105&timeout=10000&pubSubDomain=true
    -    vertx:addressName?vertxInstanceFactory=vertxFactory
    +
    @CitrusTest
    +public void createServiceTest() {
    +    given(kubernetes()
    +            .client(k8sClient)
    +            .service()
    +            .create("my-service")
    +            .portMapping(80, 8080)
    +            .inNamespace("my-namespace"));
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="CreateServiceTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <kubernetes client="k8sClient" namespace="my-namespace">
    +          <create-service name="my-service">
    +            <ports>
    +              <port-mapping port="80" target-port="8080"/>
    +            </ports>
    +          </create-service>
    +        </kubernetes>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: CreateServiceTest
    +actions:
    +  - kubernetes:
    +      client: "k8sClient"
    +      namespace: "my-namespace"
    +      createService:
    +        name: "my-service"
    +        ports:
    +          - port: "80"
    +            targetPort: "8080"
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -

    The optional parameters get directly set as endpoint configuration. You can use primitive values as well as Spring bean id references. Citrus will automatically detect the target parameter type and resolve the value to a Spring bean in the application context if necessary. If you use some unknown parameter Citrus will raise an exception at runtime as the endpoint could not be created properly.

    +

    This creates the Kubernetes service named my-service in the namespace my-namespace.

    +
    +
    + + + + + +
    + + +The test requires a local HttServer instance to actually receive the requests on the given port mapping. +Citrus automatically creates this local HttpServer instance. +Please make sure to choose a free port on your host machine when defining the port mapping. +
    +
    +
    + + + + + +
    + + +Before creating the HttpServer instance as part of the Kubernetes test action Citrus tries to resolve the HttpServer instance from the Citrus bean registry. This means you can also predefine the HttpServer instance as a usual bean in the registry. +Just give the server name as an additional attribute to the Kubernetes service create test action so Citrus knows which server instance should be resolved via the bean registry. +
    -

    In synchronous communication we have to reuse endpoint components in order to receive synchronous messages on reply destinations. This is a problem when using dynamic endpoints as the endpoints get created at runtime. Citrus uses a caching of endpoints that get created at runtime. Following from that we have to use the exact same endpoint uri in your test case in order to get the cached endpoint instance. With this little trick synchronous communication will work just as it is done with static endpoint components. Have a look at this sample test:

    +

    This creates a proper Kubernetes service and binds it to the local port where the local HttpServer instance is listening for incoming requests. +Before we can start to actually consume events we need to create a Knative Trigger resource. +You can create the Trigger resource as part of the test, too:

    -
    +
    +
    Java
    -
    <testcase name="DynamicEndpointTest">
    +
    @CitrusTest
    +public void createTriggerTest() {
    +    given(knative()
    +            .client(knativeClient)
    +            .trigger()
    +            .create("my-trigger")
    +            .broker("my-broker")
    +            .service("my-service")
    +            .inNamespace("my-namespace"));
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="CreateTriggerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <send endpoint="jms:sync:Hello.Sync.Queue">
    -            <message>
    -                <payload>
    -                [...]
    -                </payload>
    -            </message>
    -        </send>
    -
    -        <receive endpoint="jms:sync:Hello.Sync.Queue">
    -            <message>
    -                <payload>
    -                [...]
    -                </payload>
    -            </message>
    -        </receive>
    +      <knative client="knativeClient" namespace="my-namespace">
    +        <create-trigger name="my-trigger" broker="my-broker" service="my-service"/>
    +      </knative>
         </actions>
    -</testcase>
    +</test>
    -
    -

    As you can see we used the exact dynamic endpoint uri in both send and receive actions. Citrus is then able to reuse the same dynamic endpoint and the synchronous reply will be received as expected. However the reuse of exactly the same endpoint uri might get annoying as we also have to copy endpoint uri parameters and so on.

    +
    +
    YAML
    +
    +
    name: CreateTriggerTest
    +actions:
    +  - knative:
    +      client: "knativeClient"
    +      namespace: "my-namespace"
    +      createTrigger:
    +        name: "my-trigger"
    +        broker: "my-broker"
    +        service: "my-service"
    -
    +
    +
    +
    Spring XML
    -
    <testcase name="DynamicEndpointTest">
    -    <actions>
    -        <send endpoint="http://localhost:8080/HelloService?user=1234567">
    -            <message>
    -                <payload>
    -                [...]
    -                </payload>
    -            </message>
    -        </send>
    -
    -        <receive endpoint="http://localhost:8080/HelloService?user=1234567">
    -            <message>
    -                <payload>
    -                [...]
    -                </payload>
    -            </message>
    -        </receive>
    -    </actions>
    -</testcase>
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -

    We have to use the exact same endpoint uri when receiving the synchronous service response. This is not very straight forward. This is why Citrus also supports dynamic endpoint names. With a special endpoint uri parameter called endpointName you can name the dynamic endpoint. In a corresponding receive action you just use the endpoint name as reference which makes life easier:

    +

    The Trigger resource receives the broker name that should be used as a source of events and the service name as a subject to being invoked when an event gets dispatched. +The trigger name and the namespace defines where the Trigger resource is created on the Kubernetes cluster.

    -
    +
    +

    You add a filter to the Trigger resource to filter events on CloudEvent attributes.

    +
    +
    +
    Java
    -
    <testcase name="DynamicEndpointTest">
    +
    @CitrusTest
    +public void createTriggerTest() {
    +    given(knative()
    +            .client(knativeClient)
    +            .trigger()
    +            .create("my-trigger")
    +            .broker("my-broker")
    +            .service("my-service")
    +            .filter("type", "my.very.specific.event.type")
    +            .inNamespace("my-namespace"));
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="CreateTriggerTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <send endpoint="http://localhost:8080/HelloService?endpointName=myHttpClient">
    -            <message>
    -                <payload>
    -                [...]
    -                </payload>
    -            </message>
    -        </send>
    -
    -        <receive endpoint="http://localhost?endpointName=myHttpClient">
    -            <message>
    -                <payload>
    -                [...]
    -                </payload>
    -            </message>
    -        </receive>
    +      <knative client="knativeClient" namespace="my-namespace">
    +        <create-trigger name="my-trigger" broker="my-broker" service="my-service">
    +          <filter>
    +            <attribute name="type" value="my.very.specific.event.type"/>
    +          </filter>
    +        </create-trigger>
    +      </knative>
         </actions>
    -</testcase>
    +</test>
    -
    -

    So we can reference the dynamic endpoint with the given name. The internal endpointName uri parameter is automatically removed before sending out messages. Once again the dynamic endpoint uri mechanism provides a fast way to write test cases in Citrus with less configuration. But you should consider to use the static endpoint components defined in the basic Spring bean application context for endpoints that are heavily reused in multiple test cases.

    +
    +
    YAML
    +
    +
    name: CreateTriggerTest
    +actions:
    +  - knative:
    +      client: "knativeClient"
    +      namespace: "my-namespace"
    +      createTrigger:
    +        name: "my-trigger"
    +        broker: "my-broker"
    +        service: "my-service"
    +        filter:
    +          attributes:
    +            - name: type
    +              value: "my.very.specific.event.type"
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -
    -

    34. Endpoint adapter

    -
    -
    -

    Endpoint adapter help to customize the behavior of a Citrus server such as HTTP or SOAP web servers. As the servers get started with the Citrus context they are ready to receive incoming client requests. Now there are different ways to process these incoming requests and to provide a proper response message. By default the server will forward the incoming request to an in-memory message channel where a test can receive the message and provide a synchronous response. This message channel handling is done automatically behind the scenes so the tester does not care about these things. The tester just uses the server directly as endpoint reference in the test case. This is the default behaviour. In addition to that you can define custom endpoint adapters on the Citrus server in order to change this default behavior.

    -

    You set the custom endpoint adapter directly on the server configuration as follows:

    +

    The filter is set on the CloudeEvent type attribute so the trigger will only dispatch events with this specific type. +The created Trigger resource looks like follows:

    +
    Knative Trigger
    -
    <citrus-http:server id="helloHttpServer"
    -    port="8080"
    -    auto-start="true"
    -    endpoint-adapter="emptyResponseEndpointAdapter"
    -    resource-base="src/it/resources"/>
    -
    -    <citrus:empty-response-adapter id="emptyResponseEndpointAdapter"/>
    +
    apiVersion: eventing.knative.dev/v1
    +kind: Trigger
    +metadata:
    +  name: my-trigger
    +spec:
    +  broker: default
    +  filter:
    +    attributes:
    +      type: my.very.specific.event.type
    +  subscriber:
    +    ref:
    +      apiVersion: v1
    +      kind: Service
    +      name: my-service
    -

    Now let us have a closer look at the provided endpoint adapter implementations.

    +

    This completes all resources that we need to consume events from the Knative eventing broker. +The following test action receives and verifies a Knative event with an expected CloudEvent message holding expected attributes and event data.

    -
    -

    34.1. Empty response endpoint adapter

    -
    -

    This is the simplest endpoint adapter you can think of. It simply provides an empty success response using the HTTP response code 200 . The adapter does not need any configurations or properties as it simply responds with an empty HTTP response.

    +
    +
    Java
    +
    +
    @CitrusTest
    +public void consumeEventTest() {
    +    when(knative()
    +            .event()
    +            .receive()
    +            .serviceName("my-service")
    +            .attribute("ce-type", "org.citrusframework.knative.event")
    +            .eventData("""
    +            {
    +                "message": "Hello Knative event!"
    +            }
    +            """));
    +}
    -
    +
    +
    +
    XML
    -
    <citrus:empty-response-adapter id="emptyResponseEndpointAdapter"/>
    +
    <test name="ConsumeEventTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <knative namespace="my-namespace">
    +          <receive-event service="my-service">
    +            <event>
    +              <ce-attributes>
    +                <ce-attribute name="ce-type" value="org.citrusframework.knative.event"/>
    +              </ce-attributes>
    +              <data>{ "message": "Hello Knative event!" }</data>
    +            </event>
    +          </receive-event>
    +        </knative>
    +    </actions>
    +</test>
    +
    +
    YAML
    +
    +
    name: ConsumeEventTest
    +actions:
    +    - knative:
    +      namespace: "my-namespace"
    +      receiveEvent:
    +        service: "my-service"
    +        event:
    +          data: |
    +            { "message": "Hello Knative event!" }
    +          attributes:
    +            - name: ce-type
    +              value: "org.citrusframework.knative.event"
    -
    -

    34.2. Static response endpoint adapter

    -
    -

    The next more complex endpoint adapter will always return a static response message.

    -
    +
    +
    Spring XML
    -
    <citrus:static-response-adapter id="endpointAdapter">
    -    <citrus:payload>
    -        <![CDATA[
    -          <HelloResponse
    -            xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
    -              <MessageId>123456789</MessageId>
    -              <CorrelationId>Cx1x123456789</CorrelationId>
    -              <Text>Hello User</Text>
    -          </HelloResponse>
    -        ]]>
    -    </citrus:payload>
    -    <citrus:header>
    -        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:Operation"
    -                  value="sayHello"/>
    -        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:MessageId"
    -                  value="123456789"/>
    -    </citrus:header>
    - </citrus:static-response-adapter>
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    +
    +
    +

    38.6. Knative channels

    -

    The endpoint adapter is configured with a static message payload and static response header values. The response to the client is therefore always the same. You can add dynamic -values by using Citrus functions such as randomString or randomNumber. Also we are able to use values of the actual request message that has triggered the -response adapter. The request is available via the local message store. In combination with Xpath or JsonPath functions we can map values from the actual request.

    +

    TODO

    -
    -
    -
    <citrus:static-response-adapter id="endpointAdapter">
    -    <citrus:payload>
    -        <![CDATA[
    -          <HelloResponse
    -            xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
    -              <MessageId>citrus:randomNumber(10)</MessageId>
    -              <CorrelationId>citrus:xpath(citrus:message(request.body()), '/hello:HelloRequest/hello:CorrelationId')</CorrelationId>
    -              <Text>Hello User</Text>
    -          </HelloResponse>
    -        ]]>
    -    </citrus:payload>
    -    <citrus:header>
    -        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:Operation"
    -                  value="sayHello"/>
    -        <citrus:element name="{http://citrusframework.org/schemas/samples}h1:MessageId"
    -                  value="citrus:randomNumber(10)"/>
    -    </citrus:header>
    - </citrus:static-response-adapter>
    +
    + +
    +
    +
    +

    39. Testcontainers support

    +
    -

    The example above maps the CorrelationId of the HelloRequest message to the response with Xpath function. The local message store automatically has the message named -request stored so we can access the payload with this message name.

    +

    Testcontainers leverage Docker containers in your tests to provide lightweight infrastructure instances such +as databases, message brokers and web browsers. Anything that you can run in a Docker container is subject to be managed by Testcontainers in your test. Citrus as a framework is able to start/stop your Testcontainers instances as part of the test.

    @@ -33564,140 +36730,383 @@

    -XML is namespace specific so we need to use the namespace prefix hello in the Xpath expression. The namespace prefix should evaluate to a global namespace entry in the global -Citrus xpath-namespace. +The Testcontainers support is enabled by adding a separate Maven module as a project dependency
    +
    +
    +
    <dependency>
    +  <groupId>org.citrusframework</groupId>
    +  <artifactId>citrus-testcontainers</artifactId>
    +  <version>${citrus.version}</version>
    +</dependency>
    +
    -

    34.3. Request dispatching endpoint adapter

    +

    39.1. Start and stop Testcontainers

    -

    The idea behind the request dispatching endpoint adapter is that the incoming requests are dispatched to several other endpoint adapters. The decision which endpoint adapter should handle the actual request is done depending on some adapter mapping. The mapping is done based on the payload or header data of the incoming request. A mapping strategy evaluates a mapping key using the incoming request. You can think of an XPath expression that evaluates to the mapping key for instance. The endpoint adapter that maps to the mapping key is then called to handle the request.

    +

    The Testcontainers test action runs a container and exposes its connection settings as test variables. +You can start any Docker container image as a Testcontainers instance. +The Testcontainers project provides many modules that represent different test infrastructure technologies.

    -

    So the request dispatching endpoint adapter is able to dynamically call several other endpoint adapters based on the incoming request message at runtime. This is very powerful. The next example uses the request dispatching endpoint adapter with a XPath mapping key extractor.

    +

    Each of those modules can be started in Citrus with a special test action:

    -
    +
    +
    Java
    -
    <citrus:dispatching-endpoint-adapter id="dispatchingEndpointAdapter"
    -         mapping-key-extractor="mappingKeyExtractor"
    -         mapping-strategy="mappingStrategy"/>
    -
    -<bean id="mappingStrategy"
    -  class="org.citrusframework.endpoint.adapter.mapping.SimpleMappingStrategy">
    -    <property name="adapterMappings">
    -      <map>
    -          <entry key="sayHello" ref="helloEndpointAdapter"/>
    -      </map>
    -    </property>
    -</bean>
    -
    -<bean id="mappingKeyExtractor"
    -  class="org.citrusframework.endpoint.adapter.mapping.XPathPayloadMappingKeyExtractor">
    -    <property name="xpathExpression" value="//TestMessage/Operation/*"/>
    -</bean>
    -
    -<citrus:static-response-adapter id="helloEndpointAdapter">
    -    <citrus:payload>
    -        <![CDATA[
    -            <HelloResponse
    -                xmlns="http://citrusframework.org/schemas/samples/sayHello.xsd">
    -                <MessageId>123456789</MessageId>
    -                <Text>Hello User</Text>
    -            </HelloResponse>
    -        ]]>
    -    </citrus:payload>
    -</citrus:static-response-adapter>
    +
    @CitrusTest
    +public void testcontainersTest() {
    +    given(testcontainers()
    +            .start()
    +            .image("busybox:latest")
    +            .containerName("busybox-container")
    +            .withCommand("echo", "Hello", "World")
    +            .withLabel("app", "citrus"));
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <testcontainers>
    +          <start>
    +            <container name="busybox-container" image="busybox:latest" command="echo Hello World">
    +              <labels>
    +                <label name="app" value="citrus"/>
    +              </labels>
    +            </container>
    +          </start>
    +        </testcontainers>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: TestcontainersTest
    +actions:
    +  - testcontainers:
    +      start:
    +        container:
    +          name: "busybox-container"
    +          image: "busybox:latest"
    +          command: "echo Hello World"
    +          labels:
    +            - name: app
    +              value: citrus
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -

    The XPath mapping key extractor expression decides for each request which mapping key to use in order to find a proper endpoint adapter through the mapping strategy. The endpoint adapters available in the application context are mapped via their bean id. For instance an incoming request with a matching element //TestMessage/Operation/sayHello would be handled by the endpoint adapter bean that is registered in the mapping strategy as "sayHello" key. The available endpoint adapters are configured in the same Spring application context.

    +

    In the test example uses the Docker image name busybox:latest to start the Testcontainer instance. +You can set labels, annotations as well as the command that is run as entry point when starting the container.

    -

    Citrus provides several default mapping key extractor implementations.

    +

    You can also leverage the Testcontainers API to specify the container details:

    -
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void testcontainersTest() {
    +    GenericContainer<?> busyBox = new GenericContainer("busybox:latest")
    +                .withCommand("echo", "Hello World");
    +
    +    given(testcontainers()
    +            .start()
    +            .container("my-container", busyBox));
    +}
    +
    +
    +
    - - - - - - - - - -
    -HeaderMappingKeyExtractor - -

    Reads a special header entry and uses its value as mapping key

    -
    -SoapActionMappingKeyExtractor - -

    Uses the soap action header entry as mapping key

    -
    -XPathPayloadMappingKeyExtractor + + -

    Evaluates a XPath expression on the request payload and uses the result as mapping key

    +
    +The Citrus test automatically exposes connection details of the running Testcontainers instance. +The connection settings get exposed in the form of test variables.
    -

    In addition to that we need a mapping strategy. Citrus provides following default implementations.

    +

    These are the test variables that get exposed representing connection settings for the Testcontainers instance.

    -
    - +
    +++ + - - + + + - - + - + + + + + + + + + + + +
    -SimpleMappingStrategy - -

    Simple key value map with endpoint adapter references

    -
    Variable
    -BeanNameMappingStrategy - -

    Loads the endpoint adapter Spring bean with the given id matching the mapping key

    -

    CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_HOST

    -ContextLoadingMappingStrategy +

    CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_PORT

    CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_CONTAINER_IP

    CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_CONTAINER_ID

    CITRUS_TESTCONTAINERS_<CONTAINER_NAME>_CONTAINER_NAME

    +
    +

    You can use these test variables in the test to access the details of the running Testcontainers instance. +Special containers may expose additional connection settings such as user credentials, endpoint URLs, managed ports and so on. +Read about this in the individual supported Testcontainers module sections that follow in this guide.

    +
    +
    + + + -
    + -

    Same as BeanNameMappingStrategy but loads a separate application context defined by external file resource

    +
    +Each Testcontainers instance that is started from Citrus is automatically removed after the test. This is the default behavior. However, you can disable the auto removal by setting this system property or environment variable: citrus.testcontainers.auto.remove.resources=false or CITRUS_TESTCONTAINERS_AUTO_REMOVE_RESOURCES=false
    +
    +

    You can also disable the auto removal of the started Testcontainers started by Citrus:

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void testcontainersTest() {
    +    GenericContainer<?> busyBox = new GenericContainer("busybox:latest")
    +                .withCommand("echo", "Hello World");
    +
    +    given(testcontainers()
    +            .start()
    +            .autoRemove(false)
    +            .container("my-container", busyBox));
    +}
    +
    -
    -

    34.4. Channel endpoint adapter

    -

    The channel connecting endpoint adapter is the default adapter used in all Citrus server components. Indeed this adapter also provides the most flexibility. This adapter forwards incoming requests to a channel destination. The adapter is waiting for a proper response on a reply destination synchronously. With the channel endpoint components you can read the requests on the channel and provide a proper response on the reply destination.

    +

    This keeps the started Testcontainers instance running even after the test has finished. +When the whole test suite is finished the Testcontainers library may automatically stop and remove the container.

    -
    +
    +

    You can explicitly stop a running Testcontainers instance by its name with this test action:

    +
    +
    +
    Java
    -
    <citrus-si:channel-endpoint-adapter id="channelEndpointAdapter"
    -              channel-name="inbound.channel"
    -              timeout="2500"/>
    +
    @CitrusTest
    +public void testcontainersTest() {
    +    given(testcontainers()
    +            .stop()
    +            .containerName("busybox-container"));
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <testcontainers>
    +          <stop name="busybox-container"/>
    +        </testcontainers>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: TestcontainersTest
    +actions:
    +  - testcontainers:
    +      stop:
    +        name: "busybox-container"
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    +
    +
    +
    +

    This is how you can manage any Docker image as a Testcontainers instance. +Citrus also provides special support for test infrastructure Testcontainers modules such as:

    +
    +
    +
      +
    • +

      PostgreSQL

      +
    • +
    • +

      MongoDB

      +
    • +
    • +

      LocalStack

      +
    • +
    • +

      Kafka

      +
    • +
    • +

      Redpanda

      +
    • +
    +
    +

    The following sections deal with these special Testcontainers modules.

    -

    34.5. JMS endpoint adapter

    +

    39.2. PostgreSQL

    -

    Another powerful endpoint adapter is the JMS connecting adapter implementation. This adapter forwards incoming requests to a JMS destination and waits for a proper response on a reply destination. A JMS endpoint can access the requests internally and provide a proper response on the reply destination. So this adapter is very flexible to provide proper response messages.

    +

    You can start a PostgreSQL instance with the following test action.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void testcontainersTest() {
    +    given(testcontainers()
    +            .postgreSQL()
    +            .start()
    +            .initScript(Resources.create("db.init.sql")));
    +}
    +
    +
    +
    +
    XML
    +
    +
    <test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <testcontainers>
    +          <start>
    +            <postgresql>
    +              <init-script file="classpath:db.init.sql"/>
    +            </postgresql>
    +          </start>
    +        </testcontainers>
    +    </actions>
    +</test>
    +
    +
    +
    +
    YAML
    +
    +
    name: TestcontainersTest
    +actions:
    +  - testcontainers:
    +      start:
    +        postgresql:
    +          initScript:
    +            file: "db.init.sql"
    +
    +
    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    +
    -

    This special adapter comes with the citrus-jms module. So you have to add the module and the special XML namespace for this module to your configuration files. The Maven module for citrus-jms goes to the Maven POM file as normal project dependency. The citrus-jms namespace goes to the Spring bean XML configuration file as follows:

    +

    In the test example the PostgreSQL Testcontainers module is started. +The given init script is used to initialize the database on startup.

    +
    +
    +

    Citrus exposes special test variables that represent connection settings for the PostgreSQL container:

    +
    + +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Variable

    CITRUS_TESTCONTAINERS_POSTGRESQL_HOST

    CITRUS_TESTCONTAINERS_POSTGRESQL_CONTAINER_IP

    CITRUS_TESTCONTAINERS_POSTGRESQL_CONTAINER_ID

    CITRUS_TESTCONTAINERS_POSTGRESQL_CONTAINER_NAME

    CITRUS_TESTCONTAINERS_POSTGRESQL_SERVICE_PORT

    CITRUS_TESTCONTAINERS_POSTGRESQL_PORT

    CITRUS_TESTCONTAINERS_POSTGRESQL_LOCAL_URL

    CITRUS_TESTCONTAINERS_POSTGRESQL_SERVICE_LOCAL_URL

    CITRUS_TESTCONTAINERS_POSTGRESQL_SERVICE_NAME

    CITRUS_TESTCONTAINERS_POSTGRESQL_SERVICE_URL

    CITRUS_TESTCONTAINERS_POSTGRESQL_URL

    CITRUS_TESTCONTAINERS_POSTGRESQL_DRIVER

    CITRUS_TESTCONTAINERS_POSTGRESQL_DB_NAME

    CITRUS_TESTCONTAINERS_POSTGRESQL_USERNAME

    CITRUS_TESTCONTAINERS_POSTGRESQL_PASSWORD

    +
    +

    In addition to that the Citrus test action exposes a DataSource that connects to the PostgreSQL database and binds it as abean to the Citrus registry. +This means that you can resolve the data source bean via the test context reference resolver.

    @@ -33706,231 +37115,312 @@

    -Citrus provides a "citrus-jms" configuration namespace and schema definition for JMS related components and features. Include this namespace into your Spring configuration in order to use the Citrus JMS configuration elements. The namespace URI and schema location are added to the Spring configuration XML file as follows. +You can set the name of the exposed data source bean on each Citrus Testcontainers test action for PostgreSQL. +By default, Citrus exposed the data source bean with the name postgreSQL.
    -
    -
    -
    <beans xmlns="http://www.springframework.org/schema/beans"
    -        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    -        xmlns:citrus-jms="http://www.citrusframework.org/schema/jms/config"
    -        xsi:schemaLocation="
    -        http://www.springframework.org/schema/beans
    -        http://www.springframework.org/schema/beans/spring-beans.xsd
    -        http://www.citrusframework.org/schema/jms/config
    -        http://www.citrusframework.org/schema/jms/config/citrus-jms-config.xsd">
    -
    -    [...]
    -
    -</beans>
    -
    +
    +

    39.3. MongoDB

    -

    After that you are able to use the adapter implementation in the Spring bean configuration.

    +

    You can start a MongoDB instance with the following test action.

    -
    +
    +
    Java
    -
    <citrus-jms:endpoint-adapter id="jmsEndpointAdapter"
    -              destination-name="JMS.Queue.Requests.In"
    -              reply-destination-name="JMS.Queue.Response.Out"
    -              connection-factory="jmsConnectionFactory"
    -              timeout="2500"/>
    -
    -<bean id="jmsConnectionFactory" class="org.apache.activemq.artemis.jms.client.ActiveMQConnectionFactory">
    -  <property name="brokerURL" value="tcp://localhost:61616"/>
    -</bean>
    +
    @CitrusTest
    +public void testcontainersTest() {
    +    given(testcontainers()
    +            .mongodb()
    +            .start());
    +}
    +
    +
    XML
    +
    +
    <test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <testcontainers>
    +          <start>
    +            <mongodb/>
    +          </start>
    +        </testcontainers>
    +    </actions>
    +</test>
    +
    +
    YAML
    +
    +
    name: TestcontainersTest
    +actions:
    +  - testcontainers:
    +      start:
    +        mongodb: {}
    -
    -

    35. Connectors

    -
    -
    -

    Connectors generally are quite similar to endpoints. -These modules connect Citrus to a certain technology or framework rather than implementing a message transport (client and server) like endpoints usually do.

    -
    -

    Connectors typically provide a client side only implementation that enable Citrus to interact with a service or framework (e.g. Docker deamon, Selenium web driver, OpenAPI specification).

    +
    +
    Spring XML
    +
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    +
    -
    -

    35.1. OpenAPI support

    -

    OpenAPI is a popular specification language to describe HTTP APIs and its exposure to clients. -Citrus is able to leverage the specification to auto generate client and server request/response message data. -The generated message data follows the rules of a given operation in the specification. -In particular, the message body is generated from the given Json schema rules in that specification. -This way users may do contract-driven testing where the client and the server ensure the conformity with the contract to obey to the same specification rules.

    +

    In the test example the MongoDB Testcontainers module is started. +Citrus exposes special test variables that represent connection settings for the MongoDB container:

    -
    - +
    +++ + - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    - - -The OpenAPI support in Citrus get enabled by adding a separate Maven module as dependency to your project -Variable

    CITRUS_TESTCONTAINERS_MONGODB_HOST

    CITRUS_TESTCONTAINERS_MONGODB_CONTAINER_IP

    CITRUS_TESTCONTAINERS_MONGODB_CONTAINER_ID

    CITRUS_TESTCONTAINERS_MONGODB_CONTAINER_NAME

    CITRUS_TESTCONTAINERS_MONGODB_LOCAL_URL

    CITRUS_TESTCONTAINERS_MONGODB_SERVICE_PORT

    CITRUS_TESTCONTAINERS_MONGODB_PORT

    CITRUS_TESTCONTAINERS_MONGODB_SERVICE_LOCAL_URL

    CITRUS_TESTCONTAINERS_MONGODB_SERVICE_NAME

    CITRUS_TESTCONTAINERS_MONGODB_SERVICE_URL

    CITRUS_TESTCONTAINERS_MONGODB_URL

    CITRUS_TESTCONTAINERS_MONGODB_CONNECTION_STRING

    -
    -
    -
    -
    <dependency>
    -  <groupId>org.citrusframework</groupId>
    -  <artifactId>citrus-openapi</artifactId>
    -  <version>${citrus.version}</version>
    -</dependency>
    +
    +

    You can use these test variables to connect to the MongoDB Testcontainers instance.

    -
    -

    35.1.1. OpenAPI specification

    +
    +

    39.4. LocalStack

    -

    The OpenAPI test actions in Citrus uses a specification which usually is a json or yaml document shared between the components.

    +

    The LocalStack Testcontainers module allows you to start lightweight Amazon WebServices such as AWS S3, AWS SQS, AWS SNS or AWS Kinesis. +You can start a LocslStack instance with the following test action.

    -
    -

    Sometimes the specification gets exposed by a server application via HTTP endpoint. -You can directly load the specification from the HTTP URL. -Or you may just point the OpenAPI components to a local specification file.

    +
    +
    Java
    +
    +
    @CitrusTest
    +public void testcontainersTest() {
    +    given(testcontainers()
    +            .localstack()
    +            .start()
    +            .withService(LocalStackContainer.Service.S3));
    +}
    -
    -

    Citrus supports OpenAPI on both client and server components so the next sections will describe the usage for each of those.

    +
    +
    XML
    +
    +
    <test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    +    <actions>
    +        <testcontainers>
    +          <start>
    +            <localstack services="S3"/>
    +          </start>
    +        </testcontainers>
    +    </actions>
    +</test>
    -
    -

    35.1.2. OpenAPI client

    -
    -

    On the client side Citrus uses the OpenAPI specification to generate a proper HTTP request that is sent to the server. -The user just gives a valid operationId from the specification every thing else is automatically generated. -The Citrus client message will use the proper request path (e.g. /petstore/v3/pet) and Content-Type (e.g. applicaiton/json) according to the specification rules.

    -
    -

    Of course, you can also validate the HTTP response message with auto generated validation. -The user just gives the expected HTTP status code that is also described in the specification (e.g. 200 OK). -The response data used as expected message content is then also generated from the specification.

    +
    +
    YAML
    +
    +
    name: TestcontainersTest
    +actions:
    +  - testcontainers:
    +      start:
    +        localstack:
    +          services:
    +            - "S3"
    -
    -

    As an example the following OpenAPI specification defines the operation getPetById.

    -
    -
    petstore-v3.yaml
    +
    +
    Spring XML
    -
    openapi: 3.0.2
    -info:
    -  title: Petstore
    -  version: 1.0.1
    -servers:
    -  - url: 'http://localhost/petstore/v3/'
    -paths:
    -  '/pet/{petId}':
    -    get:
    -      operationId: getPetById
    -      parameters:
    -        - name: petId
    -          description: ID of pet to return
    -          schema:
    -            format: int64
    -            type: integer
    -          in: path
    -          required: true
    -      responses:
    -        '200':
    -          content:
    -            application/json:
    -              schema:
    -                $ref: '#/components/schemas/Pet'
    -        '404':
    -          description: Pet not found
    -      summary: Find pet by ID
    -      description: Returns a single pet
    -# ...
    +
    <spring:beans xmlns="http://www.citrusframework.org/schema/testcase"
    +              xmlns:spring="http://www.springframework.org/schema/beans">
    +    <!-- NOT SUPPORTED -->
    +</spring:beans>
    -

    The operation defines the HTTP GET request on /pet/{petId} and the response 200 OK that delivers the #/components/schemas/Pet Json object to the calling client as a response.

    +

    Each LocalStack instance receives a list of enables services. +In the example above the AWS S3 service is enabled.

    -

    The Json schema for the pet defines all properties on the object.

    -
    -
    -
    Pet Json schema
    -
    -
    Pet:
    -  required:
    -    - category
    -    - name
    -    - status
    -  type: object
    -  properties:
    -    id:
    -      format: int64
    -      type: integer
    -    category:
    -      $ref: '#/components/schemas/Category'
    -    name:
    -      type: string
    -      example: doggie
    -    photoUrls:
    -      type: array
    -      items:
    -        type: string
    -    tags:
    -      type: array
    -      items:
    -        $ref: '#/components/schemas/Tag'
    -    status:
    -      description: pet status in the store
    -      enum:
    -        - available
    -        - pending
    -        - sold
    -      type: string
    -# ...
    +

    Citrus exposes special test variables that represent connection settings for the LocalStack container:

    + +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Variable

    CITRUS_TESTCONTAINERS_LOCALSTACK_HOST

    CITRUS_TESTCONTAINERS_LOCALSTACK_CONTAINER_IP

    CITRUS_TESTCONTAINERS_LOCALSTACK_CONTAINER_ID

    CITRUS_TESTCONTAINERS_LOCALSTACK_CONTAINER_NAME

    CITRUS_TESTCONTAINERS_LOCALSTACK_REGION

    CITRUS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY

    CITRUS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY

    CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_PORT

    CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_LOCAL_URL

    CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_NAME

    CITRUS_TESTCONTAINERS_LOCALSTACK_SERVICE_URL

    +
    +

    For each enabled service on the LocalStack instance these variables are exposed:

    + +++ + + + + + + + + + + + + + + + + +
    Variable

    CITRUS_TESTCONTAINERS_LOCALSTACK_<SERVICE_NAME>_URL

    CITRUS_TESTCONTAINERS_LOCALSTACK_<SERVICE_NAME>_LOCAL_URL

    CITRUS_TESTCONTAINERS_LOCALSTACK_<SERVICE_NAME>_PORT

    -

    In a testcase Citrus is able to leverage this information in order to send a proper request and validate the response based on the OpenAPI specification.

    +

    You can use these test variables to connect to the LocalStack Testcontainers instance. +As an example this S3 client connects to the LocalStack Testcontainers instance and creates a test bucket:

    Java
    -
    private final HttpClient httpClient = new HttpClientBuilder()
    -            .requestUrl("http://localhost:%d".formatted(port))
    +
    private S3Client createS3Client(TestContext context) {
    +    S3Client s3 = S3Client
    +            .builder()
    +            .endpointOverride(URI.create(context.getVariable("${CITRUS_TESTCONTAINERS_LOCALSTACK_S3_URL}")))
    +            .credentialsProvider(StaticCredentialsProvider.create(
    +                    AwsBasicCredentials.create(
    +                            context.getVariable("${CITRUS_TESTCONTAINERS_LOCALSTACK_ACCESS_KEY}"),
    +                            context.getVariable("${CITRUS_TESTCONTAINERS_LOCALSTACK_SECRET_KEY}"))
    +            ))
    +            .forcePathStyle(true)
    +            .region(Region.of(context.getVariable("${CITRUS_TESTCONTAINERS_LOCALSTACK_REGION}")))
                 .build();
     
    -private final OpenApiSpecification petstoreSpec = OpenApiSpecification.from(
    -            Resources.create("classpath:org/citrusframework/openapi/petstore/petstore-v3.json"));
    -
    -@CitrusTest
    -public void openApiClientTest() {
    -    when(openapi(petstoreSpec)
    -                .client(httpClient)
    -                .send("getPetById"));
    +    s3.createBucket(b -> b.bucket(context.getVariable("${aws.s3.bucketNameOrArn}")));
     
    -    then(openapi(petstoreSpec)
    -                .client(httpClient)
    -                .receive("getPetById", HttpStatus.OK));
    +    return s3;
    +}
    +
    +
    +
    + + + + + +
    + + +You can access the Citrus TesContext via @CitrusResource injection in your test class or method. +
    +
    +
    +
    +

    39.5. Kafka

    +
    +

    You can start a Kafka instance with the following test action.

    +
    +
    +
    Java
    +
    +
    @CitrusTest
    +public void testcontainersTest() {
    +    given(testcontainers()
    +            .kafka()
    +            .start());
     }
    XML
    -
    <test name="OpenApiClientTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    -    <variables>
    -        <variable name="petstoreSpec" value="classpath:org/citrusframework/openapi/petstore/petstore-v3.json"/>
    -    </variables>
    +
    <test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <openapi specification="${petstoreSpec}" client="httpClient">
    -          <send-request operation="getPetById"/>
    -        </openapi>
    -
    -        <openapi specification="${petstoreSpec}" client="httpClient">
    -          <receive-response operation="getPetById" status="200"/>
    -        </openapi>
    +        <testcontainers>
    +          <start>
    +            <kafka/>
    +          </start>
    +        </testcontainers>
         </actions>
     </test>
    @@ -33938,22 +37428,11 @@

    YAML
    -
    name: OpenApiClientTest
    -variables:
    -  - name: petstoreSpec
    -    value: classpath:org/citrusframework/openapi/petstore/petstore-v3.yaml
    +
    name: TestcontainersTest
     actions:
    -  - openapi:
    -      specification: ${petstoreSpec}
    -      client: "httpClient"
    -      sendRequest:
    -        operation: getPetById
    -  - openapi:
    -      specification: ${petstoreSpec}
    -      client: "httpClient"
    -      receiveResponse:
    -        operation: getPetById
    -        status: 200
    + - testcontainers: + start: + kafka: {}

    -
    -

    The resulting HTTP response from the server is verified on the client by giving the operationId and the expected status 200. -The OpenAPI client generates the expected control message from the given Json schema in the OpenAPI specification.

    -
    -
    -

    The generated control message contains validation matchers and expressions as follows.

    -
    -
    -
    Generated control message body
    -
    -
    {
    -  "id": "@isNumber()@",
    -  "name": "@notEmpty()@",
    -  "category": {
    -    "id": "@isNumber()@",
    -    "name": "@notEmpty()@"
    -  },
    -  "photoUrls": "@notEmpty()@",
    -  "tags":  "@ignore@",
    -  "status": "@matches(sold|pending|available)@"
    -}
    -
    -
    -
    -

    This control message meets the rules defined by the OpenAPI Json schema specification for the pet object. -For instance the enum field status is validated with a matching expression. -In case the OpenAPI specification changes the generated control message will change accordingly.

    +

    In the test example the Kafka Testcontainers module is started. +Citrus exposes special test variables that represent connection settings for the Kafka container:

    + +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Variable

    CITRUS_TESTCONTAINERS_KAFKA_HOST

    CITRUS_TESTCONTAINERS_KAFKA_CONTAINER_IP

    CITRUS_TESTCONTAINERS_KAFKA_CONTAINER_ID

    CITRUS_TESTCONTAINERS_KAFKA_CONTAINER_NAME

    CITRUS_TESTCONTAINERS_KAFKA_LOCAL_BOOTSTRAP_SERVERS

    CITRUS_TESTCONTAINERS_KAFKA_SERVICE_PORT

    CITRUS_TESTCONTAINERS_KAFKA_PORT

    CITRUS_TESTCONTAINERS_KAFKA_SERVICE_LOCAL_BOOTSTRAP_SERVERS

    CITRUS_TESTCONTAINERS_KAFKA_SERVICE_NAME

    CITRUS_TESTCONTAINERS_KAFKA_SERVICE_BOOTSTRAP_SERVERS

    CITRUS_TESTCONTAINERS_KAFKA_BOOTSTRAP_SERVERS

    -

    This completes the client side OpenAPI support. -Now let’s have a closer look at the server side OpenAPI support in the next section.

    +

    You can use these test variables to connect to the Kafka Testcontainers instance.

    -
    -

    35.1.3. OpenAPI server

    +
    +

    39.6. Redpanda

    -

    On the server side Citrus is able to verify incoming requests based on the OpenAPI specification. -The expected request message content as well as the expected resource URL path and the Content-Type are automatically validated.

    +

    You can start a Redpanda instance with the following test action.

    Java
    -
    private final HttpServer httpServer = new HttpServerBuilder()
    -            .port(port)
    -            .timeout(5000L)
    -            .autoStart(true)
    -            .defaultStatus(HttpStatus.NO_CONTENT)
    -            .build();
    -
    -private final OpenApiSpecification petstoreSpec = OpenApiSpecification.from(
    -            Resources.create("classpath:org/citrusframework/openapi/petstore/petstore-v3.json"));
    -
    -@CitrusTest
    -public void openApiClientTest() {
    -    when(openapi(petstoreSpec)
    -                .server(httpServer)
    -                .receive("addPet"));
    -
    -    then(openapi(petstoreSpec)
    -                .server(httpServer)
    -                .send("addPet", HttpStatus.CREATED));
    +
    @CitrusTest
    +public void testcontainersTest() {
    +    given(testcontainers()
    +            .redpanda()
    +            .start());
     }
    XML
    -
    <test name="OpenApiClientTest" xmlns="http://citrusframework.org/schema/xml/testcase">
    -    <variables>
    -        <variable name="petstoreSpec" value="classpath:org/citrusframework/openapi/petstore/petstore-v3.json"/>
    -    </variables>
    +
    <test name="TestcontainersTest" xmlns="http://citrusframework.org/schema/xml/testcase">
         <actions>
    -        <openapi specification="${petstoreSpec}" server="httpServer">
    -          <receive-request operation="addPet"/>
    -        </openapi>
    -
    -        <openapi specification="${petstoreSpec}" server="httpServer">
    -          <send-response operation="addPet" status="200"/>
    -        </openapi>
    +        <testcontainers>
    +          <start>
    +            <redpanda/>
    +          </start>
    +        </testcontainers>
         </actions>
     </test>
    @@ -34055,22 +37530,11 @@

    YAML
    -
    name: OpenApiClientTest
    -variables:
    -  - name: petstoreSpec
    -    value: classpath:org/citrusframework/openapi/petstore/petstore-v3.yaml
    +
    name: TestcontainersTest
     actions:
    -  - openapi:
    -      specification: ${petstoreSpec}
    -      server: "httpServer"
    -      receiveRequest:
    -        operation: addPet
    -  - openapi:
    -      specification: ${petstoreSpec}
    -      server: "httpServer"
    -      sendResponse:
    -        operation: addPet
    -        status: 200
    + - testcontainers: + start: + redpanda: {}

    + +++ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    Variable

    CITRUS_TESTCONTAINERS_REDPANDA_HOST

    CITRUS_TESTCONTAINERS_REDPANDA_CONTAINER_IP

    CITRUS_TESTCONTAINERS_REDPANDA_CONTAINER_ID

    CITRUS_TESTCONTAINERS_REDPANDA_CONTAINER_NAME

    CITRUS_TESTCONTAINERS_REDPANDA_LOCAL_BOOTSTRAP_SERVERS

    CITRUS_TESTCONTAINERS_REDPANDA_SERVICE_PORT

    CITRUS_TESTCONTAINERS_REDPANDA_PORT

    CITRUS_TESTCONTAINERS_REDPANDA_SERVICE_LOCAL_BOOTSTRAP_SERVERS

    CITRUS_TESTCONTAINERS_REDPANDA_SERVICE_NAME

    CITRUS_TESTCONTAINERS_REDPANDA_SERVICE_BOOTSTRAP_SERVERS

    CITRUS_TESTCONTAINERS_REDPANDA_BOOTSTRAP_SERVERS

    -

    The given HTTP status code defines the response that should be sent by the server. -The server will generate a proper response according to the OpenAPI specification. -This also includes a potential response message body (e.g. pet object).

    -
    +

    You can use these test variables to connect to the Redpanda Testcontainers instance.

    -

    36. Functions

    +

    40. Functions

    The test framework will offer several functions that are useful throughout the test execution. The functions will always return a string value that is ready for use as variable value or directly inside a text message.

    @@ -34143,7 +37646,7 @@

    -

    36.1. concat()

    +

    40.1. concat()

    The function will combine several string tokens to a single string value. This means that you can combine a static text value with a variable value for instance. A first example should clarify the usage:

    @@ -34189,7 +37692,7 @@

    -

    36.2. substring()

    +

    40.2. substring()

    The function will have three parameters.

    @@ -34234,7 +37737,7 @@

    <

    -

    36.3. stringLength()

    +

    40.3. stringLength()

    The function will calculate the number of characters in a string representation and return the number.

    @@ -34253,7 +37756,7 @@

    -

    36.4. translate()

    +

    40.4. translate()

    This function will replace regular expression matching values inside a string representation with a specified replacement string.

    @@ -34277,7 +37780,7 @@

    <

    -

    36.5. substringBefore()

    +

    40.5. substringBefore()

    The function will search for the first occurrence of a specified string and will return the substring before that occurrence. Let us have a closer look in a simple example:

    @@ -34301,7 +37804,7 @@

    -

    36.6. substringAfter()

    +

    40.6. substringAfter()

    The function will search for the first occurrence of a specified string and will return the substring after that occurrence. Let us clarify this with a simple example:

    @@ -34325,7 +37828,7 @@

    -

    36.7. round()

    +

    40.7. round()

    This is a simple mathematical function that will round decimal numbers representations to their nearest non-decimal number.

    @@ -34344,7 +37847,7 @@

    -

    36.8. floor()

    +

    40.8. floor()

    This function will round down decimal number values.

    @@ -34363,7 +37866,7 @@

    -

    36.9. ceiling()

    +

    40.9. ceiling()

    Similar to floor function, but now the function will round up the decimal number values.

    @@ -34382,7 +37885,7 @@

    -

    36.10. randomNumber()

    +

    40.10. randomNumber()

    The random number function will provide you the opportunity to generate random number strings containing positive number letters. There is a singular Boolean parameter for that function describing whether the generated number should have exactly the amount of digits. Default value for this padding flag will be true.

    @@ -34412,7 +37915,7 @@

    -

    36.11. randomString()

    +

    40.11. randomString()

    This function will generate a random string representation with a defined length. A second parameter for this function will define the case of the generated letters (UPPERCASE, LOWERCASE, MIXED). The last parameter allows also digit characters in the generated string. By default digit characters are not allowed.

    @@ -34442,7 +37945,7 @@

    -

    36.12. randomEnumValue()

    +

    40.12. randomEnumValue()

    This function returns one of its supplied arguments. Furthermore you can specify a custom function with a configured list of values (the enumeration). The function will randomly return an entry when called without arguments. This promotes code reuse and facilitates refactoring.

    @@ -34484,7 +37987,7 @@

    -

    36.13. currentDate()

    +

    40.13. currentDate()

    This function will definitely help you when accessing the current date. Some examples will show the usage in detail:

    @@ -34519,7 +38022,7 @@

    -

    36.14. upperCase()

    +

    40.14. upperCase()

    This function converts any string to upper case letters.

    @@ -34538,7 +38041,7 @@

    <

    -

    36.15. lowerCase()

    +

    40.15. lowerCase()

    This function converts any string to lower case letters.

    @@ -34557,7 +38060,7 @@

    <

    -

    36.16. average()

    +

    40.16. average()

    The function will sum up all specified number values and divide the result through the number of values.

    @@ -34571,7 +38074,7 @@

    -

    36.17. minimum()

    +

    40.17. minimum()

    This function returns the minimum value in a set of number values.

    @@ -34585,7 +38088,7 @@

    -

    36.18. maximum()

    +

    40.18. maximum()

    This function returns the maximum value in a set of number values.

    @@ -34599,7 +38102,7 @@

    -

    36.19. sum()

    +

    40.19. sum()

    The function will sum up all number values. The number values can also be negative.

    @@ -34613,7 +38116,7 @@

    -

    36.20. absolute()

    +

    40.20. absolute()

    The function will return the absolute number value.

    @@ -34627,7 +38130,7 @@

    -

    36.21. mapValue()

    +

    40.21. mapValue()

    This function implementation maps string keys to string values. This is very helpful when the used key is randomly chosen at runtime and the corresponding value is not defined during the design time.

    @@ -34661,7 +38164,7 @@

    <

    -

    36.22. randomUUID()

    +

    40.22. randomUUID()

    The function will generate a random Java UUID.

    @@ -34675,7 +38178,7 @@

    <

    -

    36.23. encodeBase64()

    +

    40.23. encodeBase64()

    The function will encode a string to binary data using base64 hexadecimal encoding.

    @@ -34697,7 +38200,7 @@

    -

    36.24. decodeBase64()

    +

    40.24. decodeBase64()

    The function will decode binary data to a character sequence using base64 hexadecimal decoding.

    @@ -34719,7 +38222,7 @@

    -

    36.25. escapeXml()

    +

    40.25. escapeXml()

    If you want to deal with escaped XML in your test case you may want to use this function. It automatically escapes all XML special characters.

    @@ -34739,7 +38242,7 @@

    -

    36.26. cdataSection()

    +

    40.26. cdataSection()

    Usually we use CDATA sections to define message payload data inside a testcase. We might run into problems when the payload itself contains CDATA sections as nested CDATA sections are prohibited by XML nature. In this case the next function ships very usefull.

    @@ -34753,7 +38256,7 @@

    -

    36.27. digestAuthHeader()

    +

    40.27. digestAuthHeader()

    Digest authentication is a commonly used security algorithm, especially in Http communication and SOAP WebServices. Citrus offers a function to generate a digest authentication principle used in the Http header section of a message.

    @@ -34790,7 +38293,7 @@

    -

    36.28. localHostAddress()

    +

    40.28. localHostAddress()

    Test cases may use the local host address for some reason (e.g. used as authentication principle). As the tests may run on different machines at the same time we can not use static host addresses. The provided function localHostAddress() reads the local host name dynamically at runtime.

    @@ -34807,7 +38310,7 @@

    -

    36.29. changeDate()

    +

    40.29. changeDate()

    This function works with date values and manipulates those at runtime by adding or removing a date value offset. You can manipulate several date fields such as: year, month, day, hour, minute or second.

    @@ -34856,7 +38359,7 @@

    <

    -

    36.30. readFile()

    +

    40.30. readFile()

    The readFile function reads a file resource from given file path and loads the complete file content as function result. The file path can be a system file path as well as a classpath file resource. The file path can have test variables as part of the path or file name. In addition to that the file content can also have test variable values and other functions.

    @@ -34905,7 +38408,7 @@

    <

    -

    36.31. message()

    +

    40.31. message()

    When messages are exchanged in Citrus the content is automatically saved to an in memory storage for further access in the test case. That means that functions and test actions can access the messages that have been sent or received within the test case. The message function loads a message content from that message store. The message is identified by its name. Receive and send actions usually define @@ -34962,7 +38465,7 @@

    -

    36.32. xpath()

    +

    40.32. xpath()

    The xpath function evaluates a Xpath expressions on some XML source and returns the expression result as String.

    @@ -35000,7 +38503,7 @@

    -

    36.33. jsonPath()

    +

    40.33. jsonPath()

    The jsonPath function evaluates a JsonPath expressions on some JSON source and returns the expression result as String.

    @@ -35053,7 +38556,7 @@

    -

    36.34. urlEncode()/urlDecode()

    +

    40.34. urlEncode()/urlDecode()

    The urlEncode function takes a String and performs proper URL encoding. The result is a URL encoded String that is using proper character escaping for Http.

    @@ -35082,7 +38585,7 @@

    -

    36.35. systemProperty()

    +

    40.35. systemProperty()

    The systemProperty function resolves a System property expression at test runtime. The resulting value is returned as function result. In case the System property is not available in the JVM an optional default value is used. In case no default value is given the function will fail with errors.

    @@ -35096,7 +38599,7 @@

    -

    36.36. env()

    +

    40.36. env()

    The env function can be used to access an environment specific property at test runtime. The environment property can be a variable set on the underlying operating system. Also the env() function is able to access the Spring environment settings (see org.springframework.core.env.Environment).

    @@ -35116,7 +38619,7 @@

    -

    36.37. unixTimestamp()

    +

    40.37. unixTimestamp()

    unixTimestamp is a parameterless function that simply returns the current epoch timestamp as seconds.

    @@ -35131,7 +38634,7 @@

    -

    37. Validation matcher

    +

    41. Validation Matchers

    Message validation in Citrus is essential. The framework offers several validation mechanisms for different message types and formats. With test variables we are able to check for simple value equality. We ensure that message entries are equal to predefined expected values. Validation matcher add powerful assertion functionality on top of that. You just can use the predefined validation matcher functionalities in order to perform more complex assertions like contains or isNumber in your validation statements.

    @@ -35215,7 +38718,7 @@

    -

    37.1. ignore()

    +

    41.1. ignore()

    The ignore validation matcher is a special matcher that ignores the value and is always positive in its outcome. You should use the ignore validation matcher when only validating the pure existence of an element. The value is ignored but the element has to be present in the message payload.

    @@ -35250,7 +38753,7 @@

    -

    37.2. matchesXml()

    +

    41.2. matchesXml()

    The XML validation matcher implementation is the possibly most exciting one, as we can validate nested XML with full validation power (e.g. ignoring elements, variable support). The matcher checks a nested XML fragment to compare against expected XML. For instance we receive the following XML message payload for validation:

    @@ -35310,7 +38813,7 @@

    <

    -

    37.3. equalsIgnoreCase()

    +

    41.3. equalsIgnoreCase()

    This matcher implementation checks for equality without any case spelling considerations. The matcher expects a single parameter as the expected character sequence to check for.

    @@ -35321,7 +38824,7 @@

    -

    37.4. contains()

    +

    41.4. contains()

    This matcher searches for a character sequence inside the actual value. If the character sequence is not found somewhere the matcher starts complaining.

    @@ -35340,7 +38843,7 @@

    -

    37.5. startsWith()

    +

    41.5. startsWith()

    The matcher implementation asserts that the given value starts with a character sequence otherwise the matcher will arise some error.

    @@ -35351,7 +38854,7 @@

    -

    37.6. endsWith()

    +

    41.6. endsWith()

    Ends with matcher validates a value to end with a given character sequence.

    @@ -35362,7 +38865,7 @@

    -

    37.7. matches()

    +

    41.7. matches()

    You can check a value to meet a regular expression with this validation matcher. This is for instance very useful for email address validation.

    @@ -35373,7 +38876,7 @@

    -

    37.8. matchesDatePattern()

    +

    41.8. matchesDatePattern()

    Date values are always difficult to check for equality. Especially when you have millisecond timestamps to deal with. Therefore the date pattern validation matcher should have some improvement for you. You simply validate the date format pattern instead of checking for total equality.

    @@ -35387,7 +38890,7 @@

    -

    37.9. isNumber()

    +

    41.9. isNumber()

    Checking on values to be of numeric nature is essential. The actual value must be a numeric number otherwise the matcher raises errors. The matcher implementation does not evaluate any parameters.

    @@ -35398,7 +38901,7 @@

    -

    37.10. lowerThan()

    +

    41.10. lowerThan()

    This matcher checks a number to be lower than a given threshold value.

    @@ -35409,7 +38912,7 @@

    -

    37.11. greaterThan()

    +

    41.11. greaterThan()

    The matcher implementation will check on numeric values to be greater than a minimum value.

    @@ -35420,7 +38923,7 @@

    <

    -

    37.12. isWeekday()

    +

    41.12. isWeekday()

    The matcher works on date values and checks that a given date evaluates to the expected day of the week. The user defines the expected day by its name in uppercase characters. The matcher fails in case the given date is another week day than expected.

    @@ -35445,7 +38948,7 @@

    -

    37.13. variable()

    +

    41.13. variable()

    This is a very special validation matcher. Instead of performing a validation logic you can save the actual value passed to the validation matcher as new test variable. This comes very handy as you can use the matcher wherever you want: JSON message payloads, XML message payloads, headers and so on.

    @@ -35467,7 +38970,7 @@

    -

    37.14. dateRange()

    +

    41.14. dateRange()

    The matcher works on date values and checks that a given date is within the expected date range. The user defines the expected date range by specifying a from-date, a to-date and optionally a date format. The matcher fails when the given date lies outside the expected date range.

    @@ -35489,7 +38992,7 @@

    -

    37.15. assertThat()

    +

    41.15. assertThat()

    Hamcrest is a very powerful matcher library with extraordinary matcher implementations. You can use Hamcrest matchers also as Citrus validation matchers.

    @@ -35540,7 +39043,7 @@

    <

    -

    37.16. ignoreNewLine()

    +

    41.16. ignoreNewLine()

    This matcher implementation checks for equality with prior normalization of all new line characters. This includes new line types CR, LF and CRLF as well as multiple new lines in value and control value. So when using this validation matcher all new line characters are removed prior to checking for equality.

    @@ -35570,7 +39073,7 @@

    -

    37.17. trim()

    +

    41.17. trim()

    This trim matcher will remove leading and trailing whitespaces before checking for equality.

    @@ -35593,7 +39096,7 @@

    -

    37.18. trimAllWhitespaces()

    +

    41.18. trimAllWhitespaces()

    Sometimes it is necessary to check equality of some value without caring for whitespaces at all. The matcher implementation will remove all whitespaces before checking for equality.

    @@ -35611,10 +39114,41 @@

    +

    41.19. isUUIDv4()

    +
    +

    This validation matcher checks if a valid UUID version 4 is present. +Given the <variable name="validUuid" value="653ce6fd-dca4-4672-bbc0-16e2b74b8b81"/>, usage is as following.

    +
    +
    +
    Example isUUIDv4() validation
    +
    +
    <actions>
    +    <send endpoint="helloEndpoint">
    +        <message>
    +            <data>Hello Citrus!</data>
    +        </message>
    +        <header>
    +            <element name="message-id" value="${validUuid}"/>
    +        </header>
    +    </send>
    +
    +    <receive endpoint="helloEndpoint">
    +        <message type="plaintext">
    +            <data>Hello Citrus!</data>
    +        </message>
    +        <header>
    +            <element name="message-id" value="@isUUIDv4()@"/>
    +        </header>
    +    </receive>
    +</actions>
    +
    +
    +

    -

    38. Data dictionaries

    +

    42. Data dictionaries

    Data dictionaries in Citrus provide a new way to manipulate message payload data before a message is sent or received. The dictionary defines a set of keys and respective values. Just like every other dictionary it is used to translate things. In our case we translate message data elements.

    @@ -35623,7 +39157,7 @@

    You can translate common message elements that are used widely throughout your domain model. As Citrus deals with different types of message data (e.g. XML, JSON) we have different dictionary implementations that are described in the next sections.

    -

    38.1. XML data dictionaries

    +

    42.1. XML data dictionaries

    As you would expect XML data dictionaries can be used together with XML formatted message payloads. To do so a dictionary has to be added to the basic Citrus Spring application context which will make the dictionary visible to all test cases:

    @@ -35712,7 +39246,7 @@

    <

    -

    38.2. JSON data dictionaries

    +

    42.2. JSON data dictionaries

    JSON data dictionaries complement with XML data dictionaries. As usual we have to add the JSON data dictionary to the basic Spring application context first. Once this is done the data dictionary automatically applies for all JSON message payloads in Citrus. This means that all JSON messages sent and received get translated with the JSON data dictionary implementation.

    @@ -35786,7 +39320,7 @@

    -

    38.3. Dictionary scopes

    +

    42.3. Dictionary scopes

    Now that we have learned how to add data dictionaries to Citrus we need to discuss some advanced topics. Data dictionary scopes do define the boundaries where the dictionary may apply. By default data dictionaries are global scope dictionaries. This means that the data dictionary applies to all messages sent and received with Citrus. Of course message types are considered so XML data dictionaries do only apply to XML message types. However global scope dictionaries will be activated throughout all test cases and actions.

    @@ -35874,7 +39408,7 @@

    -

    38.4. Path mapping strategies

    +

    42.4. Path mapping strategies

    Another advanced topic about data dictionaries is the path mapping strategy. When using simple path expressions the default strategy is always EXACT . This means that the path expression has to evaluate exactly to a message element within the payload data. And only this exact message element is translated.

    @@ -35944,7 +39478,7 @@

    -

    39. Test actors

    +

    43. Test actors

    The concept of test actors came to our mind when reusing Citrus test cases in end-to-end test scenarios. Usually Citrus simulates all interface partners within a test case which is great for continuous integration testing. In end-to-end integration test scenarios some of our interface partners may be real and alive. Some other interface partners still require Citrus simulation logic.

    @@ -35956,7 +39490,7 @@

    With test actors we have the opportunity to link test actions, in particular send/receive message actions, to a test actor. The test actor can be disabled in configuration very easy and following from that all linked send/receive actions are disabled, too. One Citrus test case is runnable with different test setup scenarios where different partner applications on the one hand are available as real life applications and on the other hand require simulation.

    -

    39.1. Define test actors

    +

    43.1. Define test actors

    First thing to do is to define one or more test actors in Citrus configuration. A test actor represents a participating party (e.g. interface partner, backend application). We write the test actors into the central Spring application context. We can use a special Citrus Spring XML schema so definitions are quite easy:

    @@ -35972,7 +39506,7 @@

    - +

    We need to link the test actors to message send and receive actions in our test cases. We can do this in two different ways. First we can set a test actor reference on a message sender and message receiver.

    @@ -36006,7 +39540,7 @@
    -

    39.3. Disable test actors

    +

    43.3. Disable test actors

    Usually both airline applications are simulated in our integration tests. But this time we want to change this by introducing a royal airline application which is online as a real application instance. So we need to skip all simulated message interactions for the royal airline application in our Citrus tests. This is easy as we have linked all send/receive actions to one of our test actors. So we can disable the royal airline test actor in our configuration:

    @@ -36034,7 +39568,7 @@

    <

    -

    40. Test suite actions

    +

    44. Test suite actions

    A test framework should also provide the functionality to do some work before and after the test run. You could think of preparing/deleting the data in a database or starting/stopping a server in this section before/after a test run. These tasks fit best into the initialization and cleanup phases of Citrus.

    @@ -36069,7 +39603,7 @@

    -

    40.1. Before suite

    +

    44.1. Before suite

    You can influence the behavior of a test run in the initialization phase actually before the tests are executed. See the next code example to find out how it works with actions that take place before the first test is executed:

    @@ -36215,7 +39749,7 @@

    -

    40.2. After suite

    +

    44.2. After suite

    A test run may require the test environment to be clean. Therefore it is a good idea to purge all JMS destinations or clean up the database after the test run in order to avoid errors in follow-up test runs. Just like we prepared some data in actions before suite we can clean up the test run in actions after the tests are finished. The Spring bean syntax here is not significantly different to those in before suite section:

    @@ -36352,7 +39886,7 @@

    -

    40.3. Before test

    +

    44.3. Before test

    Before each test is executed it also might sound reasonable to purge all JMS queues for instance. In case a previous test fails some messages might be left in the JMS queues. Also the database might be in dirty state. The follow-up test then will be confronted with these invalid messages and data. Purging all JMS destinations before a test is therefore a good idea. Just like we prepared some data in actions before suite we can clean up the data before a test starts to execute.

    @@ -36468,7 +40002,7 @@

    -

    40.4. After test

    +

    44.4. After test

    The same logic that applies to the before-test configuration component can be done after each test. The after-test configuration component defines test actions executed after each test. Just like we prepared some data in actions before a test we can clean up the data after a test has finished execution.

    @@ -36587,7 +40121,7 @@

    -

    41. Customize meta information

    +

    45. Customize meta information

    Test cases in Citrus are usually provided with some meta information like the author’s name or the date of creation. In Citrus you are able to extend this test case meta information with your own very specific criteria.

    @@ -36698,7 +40232,7 @@

    -

    42. Tracing incoming/outgoing messages

    +

    46. Tracing incoming/outgoing messages

    As we deal with message based interfaces Citrus will send and receive a lot of messages during a test run. Now we may want to see these messages in chronological order as they were processed by Citrus. We can enable message tracing in Citrus in order to save messages to the file system for further investigations.

    @@ -36812,7 +40346,7 @@

    -

    43. Reporting and Test Results

    +

    47. Reporting and Test Results

    The framework generates different reports and results after a test run for you. @@ -36857,7 +40391,7 @@

    -

    43.1. Console logging

    +

    47.1. Console logging

    During the test run the framework will provide a huge amount of information that is printed out to the console. This includes current test progress, validation results and error information. This enables the user to quickly supervise the test run progress. Failures in tests will be printed to the console just the time the error occurred. The detailed stack trace information and the detailed error messages are helpful to get the idea what went wrong.

    @@ -36897,7 +40431,7 @@

    -

    43.2. JUnit reports

    +

    47.2. JUnit reports

    As tests are executed as TestNG test cases, the framework will also generate JUnit compliant XML and HTML reports. JUnit test reports are very popular and find support in many build management and development tools. In general the Citrus test reports give you an overall picture of all tests and tell you which of them were failing.

    @@ -36906,7 +40440,7 @@

    -

    43.3. HTML reports

    +

    47.3. HTML reports

    Citrus creates HTML reports after each test run. The report provides detailed information on the test run with a summary of all test results. You can find the report after a test run in the directory ${project.build.directory}/citrus-reports .

    @@ -36990,7 +40524,7 @@

    -

    44. XML tests

    +

    48. XML tests

    As an alternative to using the Citrus Java DSL users can use pure XML as a test definition file. The XML file holds all @@ -37018,13 +40552,13 @@

    Generate test files via Maven plugin
    -
    mvn citrus:create-test
    +
    mvn citrus:create-test

    Interactive test creation
    -
    Enter test name:: MyFirstCitrus_IT
    +
    Enter test name:: MyFirstCitrus_IT
     Enter test author: Unknown::
     Enter test description:: Sample XML test
     Enter test package: org.citrusframework::
    @@ -37110,7 +40644,7 @@ 

    -

    44.1. @CitrusTestSource annotation

    +

    48.1. @CitrusTestSource annotation

    Each XML test in Citrus defines the @CitrusTestSource annotation in the Java class. This annotation makes Citrus search for the XML file that represents the Citrus test within your classpath.

    @@ -37312,7 +40846,7 @@

    <

    -

    44.2. Test meta information

    +

    48.2. Test meta information

    The user is able to provide some additional information about the test case. The meta-info section at the very beginning of the test case holds information like author, status or creation date.

    @@ -37395,7 +40929,7 @@

    -

    44.3. Finally block

    +

    48.3. Finally block

    Java developers might be familiar with the concept of try-catch-finally blocks. The finally section contains a list of test actions that will be executed guaranteed at the very end of the test case even if errors did occur during the execution before.

    @@ -37455,7 +40989,7 @@

    -

    44.4. Variables with CDATA sections

    +

    48.4. Variables with CDATA sections

    When using the XML test definition you must obey the XML rules for variable values. First of all you need to escape XML reserved characters such as <, & or " with <, & or ". Other values such as XML snippets would @@ -37491,7 +41025,7 @@

    -

    44.5. Variables with Groovy

    +

    48.5. Variables with Groovy

    You can also use a script to create variable values. This is extremely handy when you have very complex variable values. Just code a small Groovy script for instance in order to define the variable value. A small sample should give you the @@ -37534,7 +41068,7 @@

    -

    44.6. Templates

    +

    48.6. Templates

    Templates group action sequences to a logical unit. You can think of templates as reusable components that are used in several XML tests. The maintenance is much more efficient because you need to apply changes only on the templates and all referenced @@ -37721,7 +41255,7 @@

    -

    45. Configuration options

    +

    49. Configuration options

    You have several options to customize your Citrus project. Citrus uses default settings that can be overwritten to some @@ -37730,7 +41264,7 @@

    -

    45.1. Environment settings

    +

    49.1. Environment settings

    Citrus as an application reads general settings from system properties and environment variables. The Citrus framework settings initialize on the startup and evaluate environment settings in favor of using default values.

    @@ -37846,7 +41380,7 @@

    -

    45.2. Spring configuration settings

    +

    49.2. Spring configuration settings

    When spring framework is enabled in Citrus you can set specific settings regarding the Spring application context.

    @@ -37899,7 +41433,7 @@

    -

    45.3. Property file settings

    +

    49.3. Property file settings

    As mentioned in the previous section Citrus as a framework references some basic settings from system environment properties or variables. You can overwrite these settings in a central property file which is loaded at the very beginning of the @@ -37928,7 +41462,7 @@

    -
    CITRUS_APPLICATION_PROPERTIES=file:/custom/path/to/citrus-application.properties
    +
    CITRUS_APPLICATION_PROPERTIES=file:/custom/path/to/citrus-application.properties

    @@ -37947,7 +41481,7 @@

    -

    46. Spring support

    +

    50. Spring support

    The Spring framework provides an awesome set of projects, libraries and tools and is a wide spread and well appreciated @@ -37961,7 +41495,7 @@

    -

    46.1. Spring XML application context

    +

    50.1. Spring XML application context

    Citrus supports the Spring framework as IoC container in order to load all components as Spring beans in a central application context. By default, Citrus loads basic components as Spring beans in a Spring Java config class.

    @@ -37983,7 +41517,7 @@

    Custom Spring XML bean definition context.
    -
    CITRUS_SPRING_APPLICATION_CONTEXT=file:/custom/path/to/custom-beans.xml
    +
    CITRUS_SPRING_APPLICATION_CONTEXT=file:/custom/path/to/custom-beans.xml

    -

    46.2. Spring Java config

    +

    50.2. Spring Java config

    You can also use pure Java code to load Spring beans as a configuration. Citrus is able to load the Spring beans from a configuration class. Please define the configuration class with the System property citrus.spring.java.config or with @@ -38038,7 +41572,7 @@

    Custom Spring Java configuration class.
    -
    CITRUS_SPRING_JAVA_CONFIG=custom.package.to.MyCustomConfig
    +
    CITRUS_SPRING_JAVA_CONFIG=custom.package.to.MyCustomConfig

    -

    47. Samples

    +

    51. Samples

    This chapter gives some samples where you can see Citrus in action.

    -

    47.1. The FlightBooking sample

    +

    51.1. The FlightBooking sample

    A simple project example should give you the idea how Citrus works. The system under test is a flight booking service that handles travel requests from a travel agency. A travel request consists of a complete travel route including several flights. The FlightBookingService application will split the complete travel booking into separate flight bookings that are sent to the respective airlines in charge. The booking and customer data is persisted in a database.

    @@ -38125,7 +41659,7 @@

    <

    In our example two different airlines are connected to the FlightBookingService application: the SmartAriline over JMS and the RoyalAirline over Http.

    -

    47.1.1. The use case

    +

    51.1.1. The use case

    The use case that we would like to test is quite simple. The test should handle a simple travel booking and expect a positive processing to the end. The test case neither simulates business errors nor technical problems. Next picture shows the use case as a sequence diagram.

    @@ -38137,7 +41671,7 @@

    -

    47.1.2. Configure the simulated systems

    +

    51.1.2. Configure the simulated systems

    Citrus simulates all surrounding applications in their behavior during the test. The simulated applications are: TravelAgency, SmartAirline and RoyalAirline. The simulated systems have to be configured in the Citrus configuration first. The configuration is done in Spring XML configuration files, as Citrus uses Spring to glue all its services together.

    @@ -38223,7 +41757,7 @@

    -

    47.1.3. Configure the Http adapter

    +

    51.1.3. Configure the Http adapter

    The RoyalAirline is connected to our system using Http request/response communication. This means we have to simulate a Http server in the test that accepts client requests and provides proper responses. Citrus offers a Http server implementation that will listen on a port for client requests. The adapter forwards incoming request to the test engine over JMS and receives a proper response that is forwarded as a Http response to the client. The next picture shows this mechanism in detail.

    @@ -38257,7 +41791,7 @@

    -

    47.1.4. The test case

    +

    51.1.4. The test case

    The test case definition is also a Spring configuration file. Citrus offers a customized XML syntax to define a test case. This XML test defining language is supposed to be easy to understand and more specific to the domain we are dealing with. Next listing shows the whole test case definition. Keep in mind that a test case defines every step in the use case. So we define sending and receiving actions of the use case as described in the sequence diagram we saw earlier.

    @@ -38521,7 +42055,7 @@

    -

    48. Appendix

    +

    52. Appendix

    Maven archetype

    @@ -38596,8 +42130,8 @@