Testing Fuse Fabric
with
Pax Exam
Brought to you by Henryk Konsek / @hekonsek
This talk
1. Our goals
2. Pax Exam
3. Case studies
1. Our goals
Our problems

OSGi ;)
it works on my computer aka responsibility ping-pong
creating repeatable middleware proof of concepts is difficult
going production without proper testing
Our goals
repeatable tests of middleware - infracoding
OSGi issues detected and fixed as soon as possible
educated customers sending us runnable and repeatable
examples
2. Pax Exam
What is Pax Exam

JUnit friendly framework for running tests in real Karaf
containers
Exam deploys JUnit test case as a bundle
if the bundle can be successfully tested with the Exam, then
it can be successfully deployed to Karaf
Exam hello world!
Project structure

m-r jc
ypo e t
m -r jc -e v cs
y p oe ts ri e
m -r jc -o t s
y p oe tr ue
..
.
m -r jc -u d e
y p oe tb nl
m -r jc -t s
y p oe ti et
Exam hello world!
JUnit class

@ uW t( aE a.l s)
R ni h Px xmca s
p bi c as MK rf et e tn sA sr {
u lc l s ya a Ts x ed se t
@n et
Ij c
MO gS ri em O gS ri e
ys i ev c ys ie v c;
@o fg rt o
Cn i ua in
pb i Ot o[ c ni ua in ) {
ul c pi n] o fg r to (
..
.
}
@ et
Ts
p bi v i s o lR tr Rs o s( {
u l c o d hu de u ne pn e)
..
.
}
}
Exam hello world!
Karaf configuration

@ of gr to
C ni u ai n
p bi O to [ c n iu ai n) {
u lc p in ] of gr t o(
rt r nw Ot o[ {
eu n e pi n ]
k rf it iu i no fg rt o (
a a Ds rb to Cn i ua in )
.r mw rU l
f ae ok r (
m vn )g o pd"r .p c ek rf )a tf c I( aa h- aa "
ae (. ru I(o ga ah .a a" . ri at d" p ce kr f)
.y e " i ". es o ( 2 33 ).
t p( zp)v r in". ." )
kr fe s o( 23 3)n m( Aa h Kr f)
a aV ri n" . .".a e " pc e aa "
. na ki e tr(e F l( tr e/ a ")
up cD rc oyn w i e "a gt px )
. sD po F le(a s) k eR ni e od r)
ue el yo drf le , ep ut mF le ( ,
c ni ue os l ( . go eo a Cn oe )i nr R mt Se l )
o f gr Cn oe )i n rL cl os l(. go ee oe h l( ,
m vn ud e) g op d " o. x ml ". ri at d"y po et bn l ".
a e Bn l( .r uI ( cm ea pe )a t fc I(m- r jc -u de )
vr in sn r jc (}
e so AI Po et );
}
Exam hello world!
Testing OSGi service

@ uW t( aE a.l s)
R ni h Px xmca s
p bi c as MK rf et e tn sA sr {
u lc l s ya a Ts x ed se t
@ ne t
Ijc
M Og Sr ie m Og Sr ie
y s ie vc y si e vc ;
@ of gr to
C n iu ai n
p bi O to [ cn iu ai n ){
u l c p in ] of g rt o(
..
.
}
@ et
Ts
p bi v i s o lR tr Rs o s( {
u l c o d hu de u ne pn e)
as rE ul ( Hl o" m Og Sr ie h lo ol ()
s et qa s" el !, y s ie vc .e lW r d) ;
}
}
Exam hello world!
Testing OSGi Camel service

@ uW t( aE a.l s)
R ni h Px xmca s
p bi c as MD po eC m le t e tn sA s r {
u lc l s ye l yd ae Ts xe d se t
@n et
Ij c
Cm lo tx c ml ot x ;
ae C ne t a e Cn et
@o fg rt o
Cn i ua in
pb i Ot o[ c ni ua in ) {. }
ul c pi n] o fg r to ( ..
@e t
Ts
pb i vi so l Rt rR so s ( {
ul c od h ud eu n ep ne )
S rn r so s =c ml ot x .r ae rd cr e pa e)
t i g e pn e
a e Cn et ce tP o ue Tm lt ( .
rq et oy " m: uu " "s " Sr n.ls )
e us Bd (j sq e e, m g, ti gca s;
a sr Eu l(H lo " rs os )
s e tq as "e l ! , ep n e ;
}
}
3. Case studies
Case #1: Hello world!
Arm your POM

< eo io is
r ps t re >
<e oi oy
rp s tr >
< dj os fs - a/ d
i > bs -u ee <i >
< r>tp :/ e oi oy jo s og nx sc ne t go p/ a/ r>
u lht s/ rp st r .b s. r/ eu / ot n/ ru s e< ul
<r ps tr >
/e o io y
< rp st re >
/ eo i oi s

Engineering guys deploy here.
< rp ri s
p oe t e>
<a rc vr in 1 00 rd a- 4<f bi -e so >
fb i -e so >. .. e ht 30/a rc v ri n
< po et e>
/ rp r is

Pick up some bleeding edge yet stable version of Fabric test
API.
Case #1: Hello world!
Arm your POM

< ee dn y
d pn e c>
<r ui > o fb i 8/ ru i>
go p di .a rc <g o pd
<r ia td fb i 8k rf /r i at d
at f ci >a rc -a a <a tf ci >
<e so >{ ar c vr in <v r in
vr i n $ fb i- es o }/ es o>
<y e z p/ ye
tp > i< tp >
< dp ne c>
/ ee d ny

Download Fabric distribution.
< ee dn y
d pn e c>
<r ui >o fb i 8i et <g o pd
go p d i .a rc .t s s/ ru i>
<r ia td fb i -t ss cm o <a tf ci >
at f ci >a rc ie t -o mn /r ia t d
<e so >{ ar c vr in <v r in
vr i n $ fb i- es o }/ es o>
< dp ne c>
/ ee d ny

Include Fabric test API (and nothing more!).
Case #1: Hello world!
Tested Camel route

p bi c as Nt yt po t et n sR ue ul e {
u lc l s et H tR ue x ed o tB i dr
@ vr ie
O e rd
p bi v i c n iu e) tr w Ec pi n {
u l c o d of gr ( h os x et o
fo (n ty h t: tp /l c lo t1 00 ".
r m" et -t ph t :/ oa hs :8 8 /)
s to y) c nt n(Hl o wr d" ;
eB d( .o sa t"e l ol ! )
}
}
Case #1: Hello world!
Base test class

i pr i .a rc .t ss p xx ms po tF b iT sS po t
m ot o fb i8 i et .a ea . up r. ar ce t up r;
..
.
@ uW t( Ui 4e t un rc as
R ni h Jn tT sR ne . ls)
@ xm ec oS rt g(l Cn ie S ae Ra tr at r .l s)
E aR a tr ta ey Al o fn dt gd ec o Fc oy ca s
p bi c as Sm lF bi T s e t nsFb iT sS p ot {
u lc l s ip e ar ce t xe d ar c et up r
@o fg rt o
Cn i ua in
pb i Ot o[ c ni ( {
ul c pi n] o fg )
r tr n wO to [{
e u n e p i n]
nw Df ut o ps tO to ( ar ci ti ui n of gr to ()
e e al Cm oi e pi nf bi Ds r bt oC ni u ai n) ,
m vn ud e "o mn -o ,"o mn -o )v r in sn rj c(
ae Bn l( cm o si " cm os i ". es oA I Po et )
}
;
}
..
.
}

almost no config? Buy Ioannis a beer for creating the
FabricTestSupport ;)
yeah, this is the old and ugly Pax Exam 2.x API...
you need to configure everything you use in the test bundle
Case #1: Hello world!
Deploying Camel route

i pr s ai jv . ag Ss e. r;
m ot t tc a al n. y tm er
@ et
Ts
p bi v i s ol C et Cm lo t r) tr w Ec pi n{
u lc o d hu dr ae a eR ue ( ho s xe t o
er pi tnee u eo mn (f b i: ra e- ")
r. r nl(x ct Cm a d" ar cc et n);
er pi tn ee u eo mn ( f b i: rf l- ra e "+
r. r nl(x ct Cm a d" ar cp oi e ce t
" -a et f au ec m ln ty ht -e v r);
- p rn s e t r- ae e t -t ps re ")
er pi tnee u eo mn (f b i: rf l- dt " +
r. r nl(x ct Cm a d" ar cp oi e ei
" -e tr sc m ln ty ht n ty ht - ev r);
- f au e ae -e t -t p et -t ps re " )
er pi tnee u eo mn (f b i: rf l- dt - bn ls "+
r. r nl(x ct Cm a d" ar cp oi e ei - ud e
" v: o. xm l /y po et b nl /. -N PH T nt yh t- ev r);
m n cm ea pe m- r jc -u de 10 S AS O et - tp sr e")
Cn an ru le . ra e)
ot i eB id rc et ( .
w tN m( ru e -o ti e" . ih rf ls "e t -t ps re ".
i h ae "o tr cn a nr )w tP oi e (n ty ht - ev r)
a sr Po ii n nR sl ( . u l( ;
s e tr vs oi ge u t) bi d)
/ . . as ri n
/ . se to s
}

String output = executeCommand("some:karafCommand");
assertProvisioningResult == block until container is ready
Case #1: Hello world!
Testing deployed route

@ et
Ts
p bi v i s ol C et Cm lo t r) tr w Ec pi n{
u lc o d hu dr ae a eR ue ( ho s xe t o
/ . . ce tn c na nr
/ . ra ig o ti e
Ip tt em ip t te m=
nu S ra n uS ra
n wU L" tp / lc lo t1 0 0" .p nt em )
e R( ht :/ oa h s: 88 /) oe S ra (;
Sr n rs os = IU is tS r n( nu Sr a)
ti g ep ne
Ot l .o ti gi pt t em ;
as rE ul (H l ow rd " rs os )
se t qa s" el o l !, e pn e;
}

a poor-man's HTTP client
Case #1: Hello world!
User friendly output

f bi :r ae a rc c et n
U ig se ii dz o ep rp sw r :d i
s n p cf e ok ee as od am n
f bi :r fl -r a e- pr ns f au ec ml nt y ht -e vr
a rc p oi ec et - a et e tr -a e e t- tp s re
f bi :r fl -d t -f au e cm ln ty h t n t yh t- ev r
a rc p oi ee i -e t rs a e- et -t p et -t p sr e
A dn f au ec ml nt y ht t po ie n ty ht -e v rv ri n1 0
d ig e tr :a e -e t- tp o r fl :e t- t ps re e so : .
f bi :r fl -d t -b nl s. . nt yh t- ev r
a rc p oi ee i -u d e . et -t p sr e
A dn b nl :v :. t p oi en ty ht - ev rv ri n 10
d ig u de mn . . o r fl : et -t ps re es o: .
W ii gf rc na n r: [r ue - ot ie 1] t sc es u l p oi i n
a tn o ot ie s
ot rc na nr
o u cs fl y rv so
C na nr ru e- o ti e1 Ai e fl eS au :S H UL nl
o ti e :o tr cn an r l v: as t t s S R: u l
C na nr ru e- o ti e1 Ai e tu Sa u :n lz n SH UL ..
o ti e :o tr cn an r l v: re t ts aa y ig S R :.
C na nr ru e- o ti e1 Ai e tu Sa u :o no dn S HU L. .
o ti e :o tr cn an r l v: re t ts dw l ai g S R: .
C na nr ru e- o ti e1 Ai e tu Sa u :i ai ig S HU L. .
o ti e :o tr cn an r l v: re t ts fn l zn S R :.
C na nr ru e- o ti e1 Ai e tu Sa u :u cs S HU L. .
o ti e :o tr cn an r l v: re t ts sc e s S R: .

output partially omitted (SSH address!)
very similar to the output from the real Karaf session
Case #2: Hacking child
containers with SSH
C na nr cn an r =( ot ie ) ce t( .i ha e "o tr cn an r )
o ti e o ti e
C n an r ra e) w tN m(ru e -o ti e" .
wt Po ie (n t yh t- ev r)
ih r fl s" et -t p sr e".
as rP oi in n Rs l( .u l (. tr tr)n x(;
se t rv so ig eu t )b id ) i ea o ( . et )
S rn [ cn an rs Ul = cn an rg ts U l) sl t" ";
t ig ] ot ie S hr
ot i e. eS hr ( . p i( :)
S rn c na nr ot =c n an rs Ul 0;
t ig o ti eH s
ot ie S hr []
S rn c na nr ot =c n an rs Ul 1;
t ig o ti eP r
ot ie S hr []
S rn b nl sn ot ie = ee u eo mn (o mt
t ig u de OC n an r
x ct Cm ad f ra (
"s - % - % - % % og : it ,
sh l s P s p s s s il s"
"d i" " di " cn an ro t cn an r ot
am n , a mn , ot i eP r, o ti eH s
);
)
a sr Tu (u de O Cn an rc n an(c ml nt y ht ")
s et r eb nl sn ot i e. ot is "a e -e t- tp );

running Karaf container can be accessed via SSH client
we can execute any remote Karaf command via ssh
Case #3: Fabric Master
component test

many customers request singleton Camel route in the
clustered environment
Fabric Master FTW!
it is difficult to provide proof of concept for the customer
Pax Exam + Fabric Master = no brainer demo
Case #3: Fabric Master
component test
p bi c as Ms eR ue e tn sR ue ul e {
u lc l s at r ot x ed ot Bi dr
@v ri e
Oe r d
pb i vi cn i ue ) t rw E cp in {
ul c od o fg r( ho s xe to
f o(ms e: e t- at rn t yh t: tp /l c lo t1 01 " .
r m"a tr nt ym s e: et -t ph t :/ oa hs : 88 / )
st oy )c n tn (m se " ;
e Bd (. os at " at r)
}
}

the clustered route we want to test
only single Netty instance should handle requests at given
moment
Case #3: Fabric Master
component test
f bi :r ae a rc c et n
f bi :r fl -r a e- pr nsf au ec ml ms e -e t
a rc p oi ec et - a et e tr -a e a tr nt y
f bi :r fl -d t -f au e cm ln ty h t m s e- et
a rc p oi ee i -e t rs a e- et -t p at rn t y
f bi :r fl -d t
a rc p oi ee i
-b nl sm nc m ea pe m- r jc-u de 10 S AS O ms e- et
-u d e v: o. xm l /y po etbn l /. -N PH T at rn t y

Booooring...
Case #3: Fabric Master
component test
C na nr ms e =C na n ru le .r ae )
o ti e a tr
ot ie Bi d rc et (.
wt Nm (m se ".i hr fl s "a tr nt y )
ih a e" at r)wt P oi e (ms e- e t" .
as rP oi in n Rs l( .u l (;
se t rv so ig eu t )b id )
I pt te mi pt t em =
n uS r a nu Sr a
nw UL "t p/ l cl ot 10 1 ". pn te m)
e R (h t: /o ah s :8 8/ )o eS r a( ;
S rn r so s = I Ui st Sr n(n uS ra )
t ig e pn e
O tl . ot igip tt e m ;
a sr Eu l( ms e " r s os )
s et q as "a tr , ep ne ;

creating first Netty router container in the cluster
first router must be the master
Case #3: Fabric Master
component test
C na nr sa e= C na nr ul e.r ae )
o ti e l v
o ti e Bi drce t ( .
w tN m( sa e )w tP oi e (m se -e t" .
i h ae "l v" .i h rf ls "a tr n ty )
a sr Po ii n nR sl ( . u l( ;
s e tr vs oi ge u t) bi d)

no port conflicts? That's good - only the single master node is
running.
Case #3: Fabric Master
component test
C na nr ms e =. .
o ti e a tr
.;
..
.
m se .e to (;
a tr d sr y)
I pt te mi pt t em =
n uS r a nu Sr a
nw UL "t p/ l cl ot 10 1 ". pn te m)
e R (h t: /o ah s :8 8/ )o eS r a( ;
S rn r so s = I Ui st Sr n (n uS ra )
t ig e pn e
O tl . ot ig ip tt e m;
a sr Eu l( ms e " r s os )
s et q as "a tr , ep ne ;

we are still receiving correct response
slave has been nominated to the master
Examples
https://github.com/hekonsek/fuse-pocs/tree/master/fuse-pocsfabric
Many thanks!

Testing Fuse Fabric with Pax Exam

  • 1.
    Testing Fuse Fabric with PaxExam Brought to you by Henryk Konsek / @hekonsek
  • 2.
    This talk 1. Ourgoals 2. Pax Exam 3. Case studies
  • 3.
  • 4.
    Our problems OSGi ;) itworks on my computer aka responsibility ping-pong creating repeatable middleware proof of concepts is difficult going production without proper testing
  • 5.
    Our goals repeatable testsof middleware - infracoding OSGi issues detected and fixed as soon as possible educated customers sending us runnable and repeatable examples
  • 6.
  • 7.
    What is PaxExam JUnit friendly framework for running tests in real Karaf containers Exam deploys JUnit test case as a bundle if the bundle can be successfully tested with the Exam, then it can be successfully deployed to Karaf
  • 8.
    Exam hello world! Projectstructure m-r jc ypo e t m -r jc -e v cs y p oe ts ri e m -r jc -o t s y p oe tr ue .. . m -r jc -u d e y p oe tb nl m -r jc -t s y p oe ti et
  • 9.
    Exam hello world! JUnitclass @ uW t( aE a.l s) R ni h Px xmca s p bi c as MK rf et e tn sA sr { u lc l s ya a Ts x ed se t @n et Ij c MO gS ri em O gS ri e ys i ev c ys ie v c; @o fg rt o Cn i ua in pb i Ot o[ c ni ua in ) { ul c pi n] o fg r to ( .. . } @ et Ts p bi v i s o lR tr Rs o s( { u l c o d hu de u ne pn e) .. . } }
  • 10.
    Exam hello world! Karafconfiguration @ of gr to C ni u ai n p bi O to [ c n iu ai n) { u lc p in ] of gr t o( rt r nw Ot o[ { eu n e pi n ] k rf it iu i no fg rt o ( a a Ds rb to Cn i ua in ) .r mw rU l f ae ok r ( m vn )g o pd"r .p c ek rf )a tf c I( aa h- aa " ae (. ru I(o ga ah .a a" . ri at d" p ce kr f) .y e " i ". es o ( 2 33 ). t p( zp)v r in". ." ) kr fe s o( 23 3)n m( Aa h Kr f) a aV ri n" . .".a e " pc e aa " . na ki e tr(e F l( tr e/ a ") up cD rc oyn w i e "a gt px ) . sD po F le(a s) k eR ni e od r) ue el yo drf le , ep ut mF le ( , c ni ue os l ( . go eo a Cn oe )i nr R mt Se l ) o f gr Cn oe )i n rL cl os l(. go ee oe h l( , m vn ud e) g op d " o. x ml ". ri at d"y po et bn l ". a e Bn l( .r uI ( cm ea pe )a t fc I(m- r jc -u de ) vr in sn r jc (} e so AI Po et ); }
  • 11.
    Exam hello world! TestingOSGi service @ uW t( aE a.l s) R ni h Px xmca s p bi c as MK rf et e tn sA sr { u lc l s ya a Ts x ed se t @ ne t Ijc M Og Sr ie m Og Sr ie y s ie vc y si e vc ; @ of gr to C n iu ai n p bi O to [ cn iu ai n ){ u l c p in ] of g rt o( .. . } @ et Ts p bi v i s o lR tr Rs o s( { u l c o d hu de u ne pn e) as rE ul ( Hl o" m Og Sr ie h lo ol () s et qa s" el !, y s ie vc .e lW r d) ; } }
  • 12.
    Exam hello world! TestingOSGi Camel service @ uW t( aE a.l s) R ni h Px xmca s p bi c as MD po eC m le t e tn sA s r { u lc l s ye l yd ae Ts xe d se t @n et Ij c Cm lo tx c ml ot x ; ae C ne t a e Cn et @o fg rt o Cn i ua in pb i Ot o[ c ni ua in ) {. } ul c pi n] o fg r to ( .. @e t Ts pb i vi so l Rt rR so s ( { ul c od h ud eu n ep ne ) S rn r so s =c ml ot x .r ae rd cr e pa e) t i g e pn e a e Cn et ce tP o ue Tm lt ( . rq et oy " m: uu " "s " Sr n.ls ) e us Bd (j sq e e, m g, ti gca s; a sr Eu l(H lo " rs os ) s e tq as "e l ! , ep n e ; } }
  • 13.
  • 14.
    Case #1: Helloworld! Arm your POM < eo io is r ps t re > <e oi oy rp s tr > < dj os fs - a/ d i > bs -u ee <i > < r>tp :/ e oi oy jo s og nx sc ne t go p/ a/ r> u lht s/ rp st r .b s. r/ eu / ot n/ ru s e< ul <r ps tr > /e o io y < rp st re > / eo i oi s Engineering guys deploy here. < rp ri s p oe t e> <a rc vr in 1 00 rd a- 4<f bi -e so > fb i -e so >. .. e ht 30/a rc v ri n < po et e> / rp r is Pick up some bleeding edge yet stable version of Fabric test API.
  • 15.
    Case #1: Helloworld! Arm your POM < ee dn y d pn e c> <r ui > o fb i 8/ ru i> go p di .a rc <g o pd <r ia td fb i 8k rf /r i at d at f ci >a rc -a a <a tf ci > <e so >{ ar c vr in <v r in vr i n $ fb i- es o }/ es o> <y e z p/ ye tp > i< tp > < dp ne c> / ee d ny Download Fabric distribution. < ee dn y d pn e c> <r ui >o fb i 8i et <g o pd go p d i .a rc .t s s/ ru i> <r ia td fb i -t ss cm o <a tf ci > at f ci >a rc ie t -o mn /r ia t d <e so >{ ar c vr in <v r in vr i n $ fb i- es o }/ es o> < dp ne c> / ee d ny Include Fabric test API (and nothing more!).
  • 16.
    Case #1: Helloworld! Tested Camel route p bi c as Nt yt po t et n sR ue ul e { u lc l s et H tR ue x ed o tB i dr @ vr ie O e rd p bi v i c n iu e) tr w Ec pi n { u l c o d of gr ( h os x et o fo (n ty h t: tp /l c lo t1 00 ". r m" et -t ph t :/ oa hs :8 8 /) s to y) c nt n(Hl o wr d" ; eB d( .o sa t"e l ol ! ) } }
  • 17.
    Case #1: Helloworld! Base test class i pr i .a rc .t ss p xx ms po tF b iT sS po t m ot o fb i8 i et .a ea . up r. ar ce t up r; .. . @ uW t( Ui 4e t un rc as R ni h Jn tT sR ne . ls) @ xm ec oS rt g(l Cn ie S ae Ra tr at r .l s) E aR a tr ta ey Al o fn dt gd ec o Fc oy ca s p bi c as Sm lF bi T s e t nsFb iT sS p ot { u lc l s ip e ar ce t xe d ar c et up r @o fg rt o Cn i ua in pb i Ot o[ c ni ( { ul c pi n] o fg ) r tr n wO to [{ e u n e p i n] nw Df ut o ps tO to ( ar ci ti ui n of gr to () e e al Cm oi e pi nf bi Ds r bt oC ni u ai n) , m vn ud e "o mn -o ,"o mn -o )v r in sn rj c( ae Bn l( cm o si " cm os i ". es oA I Po et ) } ; } .. . } almost no config? Buy Ioannis a beer for creating the FabricTestSupport ;) yeah, this is the old and ugly Pax Exam 2.x API... you need to configure everything you use in the test bundle
  • 18.
    Case #1: Helloworld! Deploying Camel route i pr s ai jv . ag Ss e. r; m ot t tc a al n. y tm er @ et Ts p bi v i s ol C et Cm lo t r) tr w Ec pi n{ u lc o d hu dr ae a eR ue ( ho s xe t o er pi tnee u eo mn (f b i: ra e- ") r. r nl(x ct Cm a d" ar cc et n); er pi tn ee u eo mn ( f b i: rf l- ra e "+ r. r nl(x ct Cm a d" ar cp oi e ce t " -a et f au ec m ln ty ht -e v r); - p rn s e t r- ae e t -t ps re ") er pi tnee u eo mn (f b i: rf l- dt " + r. r nl(x ct Cm a d" ar cp oi e ei " -e tr sc m ln ty ht n ty ht - ev r); - f au e ae -e t -t p et -t ps re " ) er pi tnee u eo mn (f b i: rf l- dt - bn ls "+ r. r nl(x ct Cm a d" ar cp oi e ei - ud e " v: o. xm l /y po et b nl /. -N PH T nt yh t- ev r); m n cm ea pe m- r jc -u de 10 S AS O et - tp sr e") Cn an ru le . ra e) ot i eB id rc et ( . w tN m( ru e -o ti e" . ih rf ls "e t -t ps re ". i h ae "o tr cn a nr )w tP oi e (n ty ht - ev r) a sr Po ii n nR sl ( . u l( ; s e tr vs oi ge u t) bi d) / . . as ri n / . se to s } String output = executeCommand("some:karafCommand"); assertProvisioningResult == block until container is ready
  • 19.
    Case #1: Helloworld! Testing deployed route @ et Ts p bi v i s ol C et Cm lo t r) tr w Ec pi n{ u lc o d hu dr ae a eR ue ( ho s xe t o / . . ce tn c na nr / . ra ig o ti e Ip tt em ip t te m= nu S ra n uS ra n wU L" tp / lc lo t1 0 0" .p nt em ) e R( ht :/ oa h s: 88 /) oe S ra (; Sr n rs os = IU is tS r n( nu Sr a) ti g ep ne Ot l .o ti gi pt t em ; as rE ul (H l ow rd " rs os ) se t qa s" el o l !, e pn e; } a poor-man's HTTP client
  • 20.
    Case #1: Helloworld! User friendly output f bi :r ae a rc c et n U ig se ii dz o ep rp sw r :d i s n p cf e ok ee as od am n f bi :r fl -r a e- pr ns f au ec ml nt y ht -e vr a rc p oi ec et - a et e tr -a e e t- tp s re f bi :r fl -d t -f au e cm ln ty h t n t yh t- ev r a rc p oi ee i -e t rs a e- et -t p et -t p sr e A dn f au ec ml nt y ht t po ie n ty ht -e v rv ri n1 0 d ig e tr :a e -e t- tp o r fl :e t- t ps re e so : . f bi :r fl -d t -b nl s. . nt yh t- ev r a rc p oi ee i -u d e . et -t p sr e A dn b nl :v :. t p oi en ty ht - ev rv ri n 10 d ig u de mn . . o r fl : et -t ps re es o: . W ii gf rc na n r: [r ue - ot ie 1] t sc es u l p oi i n a tn o ot ie s ot rc na nr o u cs fl y rv so C na nr ru e- o ti e1 Ai e fl eS au :S H UL nl o ti e :o tr cn an r l v: as t t s S R: u l C na nr ru e- o ti e1 Ai e tu Sa u :n lz n SH UL .. o ti e :o tr cn an r l v: re t ts aa y ig S R :. C na nr ru e- o ti e1 Ai e tu Sa u :o no dn S HU L. . o ti e :o tr cn an r l v: re t ts dw l ai g S R: . C na nr ru e- o ti e1 Ai e tu Sa u :i ai ig S HU L. . o ti e :o tr cn an r l v: re t ts fn l zn S R :. C na nr ru e- o ti e1 Ai e tu Sa u :u cs S HU L. . o ti e :o tr cn an r l v: re t ts sc e s S R: . output partially omitted (SSH address!) very similar to the output from the real Karaf session
  • 21.
    Case #2: Hackingchild containers with SSH C na nr cn an r =( ot ie ) ce t( .i ha e "o tr cn an r ) o ti e o ti e C n an r ra e) w tN m(ru e -o ti e" . wt Po ie (n t yh t- ev r) ih r fl s" et -t p sr e". as rP oi in n Rs l( .u l (. tr tr)n x(; se t rv so ig eu t )b id ) i ea o ( . et ) S rn [ cn an rs Ul = cn an rg ts U l) sl t" "; t ig ] ot ie S hr ot i e. eS hr ( . p i( :) S rn c na nr ot =c n an rs Ul 0; t ig o ti eH s ot ie S hr [] S rn c na nr ot =c n an rs Ul 1; t ig o ti eP r ot ie S hr [] S rn b nl sn ot ie = ee u eo mn (o mt t ig u de OC n an r x ct Cm ad f ra ( "s - % - % - % % og : it , sh l s P s p s s s il s" "d i" " di " cn an ro t cn an r ot am n , a mn , ot i eP r, o ti eH s ); ) a sr Tu (u de O Cn an rc n an(c ml nt y ht ") s et r eb nl sn ot i e. ot is "a e -e t- tp ); running Karaf container can be accessed via SSH client we can execute any remote Karaf command via ssh
  • 22.
    Case #3: FabricMaster component test many customers request singleton Camel route in the clustered environment Fabric Master FTW! it is difficult to provide proof of concept for the customer Pax Exam + Fabric Master = no brainer demo
  • 23.
    Case #3: FabricMaster component test p bi c as Ms eR ue e tn sR ue ul e { u lc l s at r ot x ed ot Bi dr @v ri e Oe r d pb i vi cn i ue ) t rw E cp in { ul c od o fg r( ho s xe to f o(ms e: e t- at rn t yh t: tp /l c lo t1 01 " . r m"a tr nt ym s e: et -t ph t :/ oa hs : 88 / ) st oy )c n tn (m se " ; e Bd (. os at " at r) } } the clustered route we want to test only single Netty instance should handle requests at given moment
  • 24.
    Case #3: FabricMaster component test f bi :r ae a rc c et n f bi :r fl -r a e- pr nsf au ec ml ms e -e t a rc p oi ec et - a et e tr -a e a tr nt y f bi :r fl -d t -f au e cm ln ty h t m s e- et a rc p oi ee i -e t rs a e- et -t p at rn t y f bi :r fl -d t a rc p oi ee i -b nl sm nc m ea pe m- r jc-u de 10 S AS O ms e- et -u d e v: o. xm l /y po etbn l /. -N PH T at rn t y Booooring...
  • 25.
    Case #3: FabricMaster component test C na nr ms e =C na n ru le .r ae ) o ti e a tr ot ie Bi d rc et (. wt Nm (m se ".i hr fl s "a tr nt y ) ih a e" at r)wt P oi e (ms e- e t" . as rP oi in n Rs l( .u l (; se t rv so ig eu t )b id ) I pt te mi pt t em = n uS r a nu Sr a nw UL "t p/ l cl ot 10 1 ". pn te m) e R (h t: /o ah s :8 8/ )o eS r a( ; S rn r so s = I Ui st Sr n(n uS ra ) t ig e pn e O tl . ot igip tt e m ; a sr Eu l( ms e " r s os ) s et q as "a tr , ep ne ; creating first Netty router container in the cluster first router must be the master
  • 26.
    Case #3: FabricMaster component test C na nr sa e= C na nr ul e.r ae ) o ti e l v o ti e Bi drce t ( . w tN m( sa e )w tP oi e (m se -e t" . i h ae "l v" .i h rf ls "a tr n ty ) a sr Po ii n nR sl ( . u l( ; s e tr vs oi ge u t) bi d) no port conflicts? That's good - only the single master node is running.
  • 27.
    Case #3: FabricMaster component test C na nr ms e =. . o ti e a tr .; .. . m se .e to (; a tr d sr y) I pt te mi pt t em = n uS r a nu Sr a nw UL "t p/ l cl ot 10 1 ". pn te m) e R (h t: /o ah s :8 8/ )o eS r a( ; S rn r so s = I Ui st Sr n (n uS ra ) t ig e pn e O tl . ot ig ip tt e m; a sr Eu l( ms e " r s os ) s et q as "a tr , ep ne ; we are still receiving correct response slave has been nominated to the master
  • 28.
  • 29.