From 3d4c4f073fdcdb2d8cd6cdc36e01ae5f1efd8c7d Mon Sep 17 00:00:00 2001
From: felmer <franz-josef.elmer@id.ethz.ch>
Date: Wed, 11 Apr 2018 11:04:33 +0200
Subject: [PATCH] SSDM-6205: GeneralImportTest improved

---
 .../systemtest/api/v3/GeneralImportTest.java  |   2 +-
 .../materials_excel_97_2003.xls               | Bin 28160 -> 20992 bytes
 .../generic/server/task/UserManagerTest.java  | 295 ------------------
 3 files changed, 1 insertion(+), 296 deletions(-)
 delete mode 100644 openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/task/UserManagerTest.java

diff --git a/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/dss/systemtest/api/v3/GeneralImportTest.java b/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/dss/systemtest/api/v3/GeneralImportTest.java
index 262d1f3c5f8..8fa63d6701d 100644
--- a/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/dss/systemtest/api/v3/GeneralImportTest.java
+++ b/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/dss/systemtest/api/v3/GeneralImportTest.java
@@ -84,7 +84,7 @@ public class GeneralImportTest extends ObjectsImportTest
             assertEquals("imported description 1", material1.getProperty("DESCRIPTION"));
 
             material2 = getObject(sessionToken, materialPermId2, timestamp, DEFAULT_TIMEOUT);
-            assertEquals("imported description 2", material2.getProperty("DESCRIPTION"));
+            assertEquals("default imported description", material2.getProperty("DESCRIPTION"));
 
             if (async)
             {
diff --git a/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/dss/systemtest/api/v3/GeneralImportTestResources/materials_excel_97_2003.xls b/datastore_server/sourceTest/java/ch/ethz/sis/openbis/generic/dss/systemtest/api/v3/GeneralImportTestResources/materials_excel_97_2003.xls
index 3e18171654156d191bf5dd8f036f415cb1a003d4..f28e4bc61e5ff50507b38448768ead1206014c2f 100644
GIT binary patch
literal 20992
zcmeG^2Urxz(!EPsl7J$j2&`lkkR;%tARrtlNkGMih=e5w0wOASa-x_{eI^h^Fh>k{
zq9_K;@kB)w6(gAAndS7<{i|kJ*qsf+fB*ZwcmH>@U(Zh0R9973Ro8Ua^ltS<t@<@P
zyEG8S;Y#GlH@-4a6oRwh8Vhx35@G@uSpUZ7^JyR<aQV;iH`2gYkkt%~CkI6yiUJh0
zxe^o(6lEwXP*kC)K~aa&4vGd8Z~>wPr9G4mP_&_RgrWnb6BJ!2ouPDrq6eib6n!WL
zPz<4Pp>%^{1jQH%`Vkg$q3geqD*u+E27|8u%E1PY5p<jlgt#0$6LN$)6L0#f>D)aw
zKjqS8mMK(oXf!g6q>^-!M55t46~5bgv?pv9`mI2Q*0e{~b{;gQ0tq4G$r$)VfgD-H
zm!yz5N+yJ4kVLpnkwMe~_+t#j@q;qRKoz<5psA)n1^|Z`N(LTq%4nlJ&cI*L_tx@9
zeLZR7ugrl_tf)ZlL{urAfnF%W;BO#o@~iw&I1_RY$_SE%<KI6qBPu<bmzcpz=l;hJ
z4@!n87Rt~M&MZ<45G{x&2m!0ZxdV0HLE#*vG2u=<E0Zisc6M|I417L?vHMea|EA7H
z)VUp;S!6HO<^~0^g{X83@Hu25nv+eelvtkN0m<M2(cl@0<i8C=`MZ+33NVP|zOaZJ
zIf#mcA{hhYdy_t-VmN#Ug9XnJSzIh({5Z?RkpC{mEwH9+8fe?T-<8xsrX0wH^BoK}
zJo&z-F%_8@2@-lcrpX7Rn!T`{R2l~IT!_i=yfyOl@irR4HMTT1wsC2yjIg4r2J)ux
zl;<*V!h?CS5llogm<qr{T9}x%4U--~4CH%)a?HdrB~Yc%JxLGZN=PKPiF6NI(nzk0
z5U5FBQJ|5P5e4WU$u*F-Cf(r!WQ5!I;0ibF!4+vSh*;utNr(%j6A((2O%n+*I1qDl
zYZ1Va^aQK42q3_3mZ1f}Xz4`OLp);{gFMFYv4KF#B}QZt@n9Jd7pPeQRMI^Id3Uk_
z0+!UK;Ut*wNGyqvNyL+Egn5_{5o?e^wiMzR2J-%76D$S3Lq?iJk_b*Dn@JzSiiH06
z0F6l20p6u`^gSE_9V2LAB%))Q2A=y9JR8VQBqh>WM}lc0!8mj?G><rIQ5?iXoEFyN
z_XVtHkuAhsQm@5TBuxNmn4)61LD(1eG@2ToTSVFVJyAsaA+C!SQA9B%iz1Fgi&9Um
zDG2$%hgj8o9N{7yS1J_zz2L?_a9R`pJ3U}q7WiuO!Di6e-E>F(7g7B;!*@u5uaW|n
zMyEsyzBKyV+K4Yro>D1vq|x6+;lqTP_QPg9tds&@Aq7s$BTlD43jR(ha9Tg&bPh?u
z&yxa|CeL~)_|oK|`->R?YMeIfXFEj)vj-GBUrTGL>QYrAPxluy4KzG1?y%uuLn6PI
z!dD<$Y4{(2Kpg`AERh1=A_cx#A{?_AlHv(wKt$!=Ldk>K5DI>U1i>XFG-!D+Lm~u+
z?$B_|nl!<=a0v+%2K+rhse^_q!8L{7tRLFGn2l+oGYT#txkBS(Muvhn>v?&T-kRXW
zT3R})I-uvR6dbcV0{XO`Y5gm}e4T<b^sFtwXUK^epeA{u2yt!J17?IMxDftijy9Q$
zjGGTvGTEkIzif^b$rgbl0vobT+5}hDEUY#?B-%mbXNxyLlr}Y>7d~y^fP%D%1Fo~%
z)Bqo8ZEApHy-f|!soK;4jnbwDI9%G)0R6d54KP5osR54EHZ{N@+@=ONw%gPI2dm5m
z?u_w((Na$Oc#x+C3NH>_POxIg<}iuiP;CVfbVKPxFiy6D2)d?pA{ZQ6K?L1ZIuVRW
ztssIfES(5Go?1Z!-C8;k%y@s7NR^*#>tM>f6+~oPN4IrEWLpQ5_N|aawskP;-wGnK
zt%I)(T0um%b@07I3lXS@K1=AaV`nehI{4zE6+~oP2j6_Of{1ME;H#5X5Rq*iZtIB1
zwobR!5s_^jqt+0iUrtFMfcX08yE>uYZb>I%(mEottz+6cBC@Sx);c1xtz+IgBBIt=
z#CY!X1|mw-a|h>3Zf+C!BJ(gDJ9vX%Rmc}8R;dX#Wy%!3AYsB0g3-wkH<)J9Z4pn9
zR8bLv4J=&!dfDLYKe9PYq53d{a+567+qZAUgmQCp6B7zyOra3Q6bfN2LNOn%HXs!3
zf~XL9bs$-&Q?D*G3ne~_?FlVq&I_3HWXtb0V2bGo4O+zfoXrqZU?_eLOGr$n0eS!t
z+ADBUOdZ0rbAeZE*s!6Qh`=lUa|VDUtWXS~1QQktdxk*SVcxDaMEGv9iP*P>2=jr%
zw5$UVX>kRy?ugIsoSM0!0~YfbmK7L<|Gc=_DB?q_J2Y(>?_%yDAR=jK{ojpurYe3A
zQH6xX;1EXC>I)6zrO%ep7n!ag>>h%sB|biTHA{jz#vY4=L-7XvL>j>B;qNtYX>NcL
zGR@8sx0o}awTwkE<p?as=T|kGT`(5Q%F4uoA;Or!5Mj(<h_IGm$h4T1NH4^M64#UU
z_Zl$cm<6RBT)tD@P83BI+uZHbE#Wqg-5&O=z~au%#*}Ntb&rYRrDWJH=J=Dv_#|yQ
zSn>vZbz%oELQDx4lHy!Qg~z~$emhSG85Zn?QIhAy-FozfuYlK74+-BCa}&r$i^;}L
zoQ;tTHgp)G*eLMg-rl+?nN52p8+&m!W-{2&fr?_I$cuaa=8j}G9hht!#M$(a!3IN_
z93*i-QA)hH2X|jcW~0qy(_5U4wG1{mS7~Cy;l<tf{hees9hqz##o5@&U_(Dasop5_
z;=Vqulgvg3**M7dG(%wH&<anh@~fzNAel`kCL0N!W-Nn^u%}h|J*wC%nT;-!jRa3K
zm%&EZ)2jTgKR76vO=l(>37*zd1{+~dtMaQlaziqkE=)EOJgt`uHo~4(<+u0F6Ul7!
zm~13?n!OA*!k$*;_oa5XWHw!qjiYQ&;{qGUR(P77{gPeRXf`mKa7R&dOw(twk>F`2
zGS~=vnw|ZPf_%wr447;rc$$R_Ho~4}XMf^akz_W8Og0ic%~A#%VNbKO-?{p<WHwwT
z8ws9fBZG~wr`g#rK7UIxn{G@t5<Ja81{+~dv$Owvc!4A~YVaN#)~(IYO?Sp~Q=hLS
z^;t<s;M7XVM2%aBf=4llc4H6~_9A%o5#%qKs7VV^@E;~oQwC9CpCP2^z;MY#O<Rb9
zw=juzXAl+k5ZLe-yH+w$++fqBQ}7KYQ7Z;fVSgZG(6&>OiJG?%1y5iSwPg?$wmu<^
z1>TZ~a)<>^M?Ioq7jycETAroHmm?mq<c)290xRHD7v^3#JHqQ?n4mR95>42z137%p
zsN|UO$x#`JsVR#&Q$-1~b@-};-hPK$Ba=n8Vk%KH2_%ZE5CH>Rs!$9RVSh5-#K}1e
z)F52rh}4utYI$r8*sB3=BRms$F-crcUUKqc&J>1Ro%kvsR{~51V_>r?7p{3AT{3jL
zMJinNQj<dA04k6Qm%ob5QqeVmRCG-s6<y0?%afita{R>{uBa#qa=^qB_KwnfSAiEn
zT+19qz_noDD#A|w7F;d~hbKV<Hlf;B<;X)DGe#SEJ_p*2hrN&K)Z8})cE<`@Sm!7~
z3u{ITCBB+i3sGJjNiW<r?v<IA9F-E4k(!>x4drEKEav<uN{Zc^uSvW}CTu)K+ow?W
z$Bn{Spz}}=ClfZx;__HveKdBHdnrTTV0r#yYAQIYizr=I7rs3C5tNq7a8=C82xtK_
z0j+khvkUTLKD?;d#FTh0tQ8o7%4vdTeLx`e{X`Hn9t5P<2$T!JfHCyVrpcizDuHBl
zAk1U8gGGiAafp3P;#v}j)A3IValYH8!#IaW;`YMCAqFyux0gVij)PK&(^CUBMchG{
zIK)CmK#=PofjGuP+G0w=YRO}(klwhP$2TQyJh;MmQIoN?p+C4QI}LmhjovcQFzF~T
z8fGT{;_%mm2@=F5zr>UzUTo9&AH)zw7vhp1W#}X@daOtUkZbnF=2#?%KA25Y1jVTl
zCy<{6@WyAPM?rXD1ZGxO2+RRM7<-xyK81mWUeQqT6f!r0{uV=er^(^LrE&-iM|)9O
zSp--HfTyQZo7<68llEC~3DLQEyg1`{2}sT0E#^dv(qOB=ctIK&AQYz0an(bK0@(yX
zNW)A(OQ5A|f{;en1R;&C<*`*^j~!&u1IK4j7N5vq+7U<xQaTW~xp2tG2q|K71hhy(
z*94N#HGw2_4Fl#6ISQaV6HyTq6u=Nc(C75#g+HncUDX9$H8e3J8MI|9+Dc9X%o7UU
zkpYH7eTjQJ3rX~)NTg<<2QYFEa-As>sBqf)@|07F<QGuyf;d9=R!~D1(<1%AMr2r2
zdJ2XtI=s4x3d&Z6NIeWVq{FxpL@h~S6(8c1hUas_$b6wB$wKIz7JNd1NHo>k5D+<w
zy7Gs<V=%;@RoH<R6UhY1gIX|f1jWNsGy_7VBUubTGQcDj@Pgk@+~z0}!@b&2yF$La
zQy_0S(+S!7j37r6i*K+Ol7(Y`fE~OW!0&U&kt0XoD~A*o@=2k69MGsDRX`^WK74?a
zIH*@aM+giO{NN>=a;Oi20SDmFh-y~_?fLvdQV4Z^A+!a$5NL>f9G}=%RRJ8Zu@pjy
z1M+c&q@bXH00OZu1OUWPdnkoe0hm3s1;7Z+b~t@PUX%!gjACKtY6ff=k9R}32Jw%A
z-&Q0>C6D6{^$i{pvYew!mJ2Bzk?=s!I{4kjI>x<uL>>kxiyUQfpb%2)%qCX>@2U_U
zviw4(V)({L1TBbX-~ca(djq^eJcE6MLVW`RU^yA;6%uOY>mL*t9BO6DsN3lfk~k(U
zH9Z63WGru7OnPD(PUE<?Ks9`Tm$&;6zt9MH>l(|8iyEJt!Igx}hp86G1&=fERuaR}
zfdUsz2XLScHYtJ*6baqI;583m^MqiCTEHn#D`3Ea2Fb~5L!?1)H&XN@E$|Cmbp;)C
zfbVe6)RYX!07iyprSZl^SZ9t&-nQu6=;Jn;UX3%p<yP;xp1$8=!}SYm7epA&eJ`h&
zl|1*laW{XDw~hKP*7@z(Gg9Phswx|+Hjgko<^Iyv>~TrW)`Qh5XFs1BJnZSk^MfYr
z7!ti&Q86&=sj*pQ>5d)0owpqoymn*g)0KVt>gFXcFkXL4$)ser>-;0>|6ZXyYH#(L
zeO7Z^V*1&(kMEoHWdG!2Iuqo!KF;mC%4a}n?fsI}Ia?g2+c>LQu8!NXeAoWjp8L7C
zLf*}_4nLDV_`;)-iQR5nD!(dQ{-jH&q2?!b?*<!7&wCf&b@cI``-%6+{?ef_D^8xe
zdE4UonfUuBUj&k^{9nFZaCmq3Y9y$F5A%0XWo@{+>G2V`;|Tf&=OB^kyyS7ctnoa3
z!9`G#+N@VIDswMo53V_`YdWFVhJ~KJ)@73hizx|4dN=i+-wZshsB(Zaef_J(l78Px
z=YDF)f6UcczD4o)Jx{lD2@Mna9iB4n?2PrBOgZ71X*1XTbhAA2V9=#?eb3wKZSdJ+
zv!uPo?7F~%!KEItm(FU|4D`C`5N$GL)1tAF*9@1f>|F2Yclm=(@HMAVr3*Hn<?lLf
zQ?)Yi=#(9n55445obvq=A4IR&-0OZw<-*OpEmsVx%PT%z{R&+X?`Tq1fle-Ta1IpQ
zD3FoB8^h}*boPgtYCJC;-9xR)U*$MgvwuVOnu!bRoMH}Gctw|;D?RX$couhYKfStU
z)y-=U@8>#QxT{@TG)R58WwDa_9Nu~B*?V74w%nw*`G!x|la|R1r#n7+nyGts_rE*b
z^*u9gaJF&n!WrAkZ*#Af_pI&q%JTNeeI}#(&HZuMlgo|W?|D7%X{N$<mMpxD#_S|5
z7{+&CcLEL>A+hN$*rM1kh6kqVd1)UuexvXGQ)-O)gf2gh-*SCtc*14xo#9vRXZHIT
zV1HoO^3LXO)XRS~F&W@KVqwMD{{1%$y%+52znU}W%8nyNg||Nh^i3&l-@pI3gvwoq
z8y{8P{nLKR$7kjDm#y(MGI{80zj<V-{A`nMhBdLb)PDbXV5uY9q+`I$WpAcC<aS?l
zw0!%-yZh!i4H*zUt-tG{qKeJ~25u<o+0$-%lx44X`6jPZPI%4h*musG--7CmtMzs*
zsU676Ha+E_95gK^=%;vxwcXsax7%I+ZOKI4zGefTO<nlQ%Ax*Um2>qCLVJ4z@QRc(
zW)HW|$(s3PbKv|TIl2WZBOP+*d{P~{r?j;Gyx;5+g)-B9rJv3{u$$U&bW35#Jf)NC
zYg4w5<!!1?C4T4c|F9z9K#0}*&ZM2^>nk^cuMU5n5*ohmLi;n{im%-+z0$LHr^uSa
zj`8Ex)sC*!E3_I~!m3+U-sg)quX0c2vwHP2_nwdY<6lV!ZjYS!S~2zwRDNG_YSQ_W
zdO;@=(rsp4WxbqW|573LM4fuC$#V62OVnIF-5s^-Hf+*;Gr;P%a$UFjwW>rtHtdpo
zN#a0n=joOy_cOT`S3A`EPaBl_BFN(L%=aUFW=`9<rSrj6(VJ%%9vXJ>aQ25U-6wtc
za`x=;cyo;@&ROrDJZNYfy3{yR&isB^{ka`(pT3^cxRe@rc+#go?A=Bdym6b-cq!2B
z=VwYD3g;~+z4??Exw2o@o0F#x|NQQ{++Cf_pqY({ekS|<=U2NfIO^m%FR4%G+3$Sc
z8~f=icb%HD;Mx2+UF%<Vk8>R{x8lL=4%K}pA9<dqG=F=gkDvC3s>$|q^y{r3Z#y|-
zX-?6k()P!{`r3UAv^L}2ay>Qc(7v0_V?AybuCMO>Zhb~Y>W?RE$1P|W&|vF3+vBso
z8~4Qh+t~y4M@~$%sCZyJ<M)s&$F2<WUDd95z;fl=t8Gv4p1ter@iJ}KPa5UU@3JaA
z+eMgY%f}hq|8sgDhmof{%!pa_o9q1Hg|EZIyj+cc3ehSUt6##ci8<!{OzoF^*FqQe
z7b}IYW;1_&sQ#yQ(JAX-i%IpDvsA~8^#1*I?u6<0ugrRR$)rcj-8`j*Yjt0aeVF?y
zeXqxR`x7j4)#KR<+MC~scbaw}<Ha(EL7HFVjQZ|87*LUSxU#!mRP=te-5HxgPCH~p
z+>F!yyk|wjn42kzH-DY|Y0l$QC2^IU#$L&nTrwBG(Aqrblj*ZDvwpt0CYL{X*2vIv
zo$fA;->$oV_nn2;EBDl8omO?aWBglKpnvCmrswa3A7eYbIJUaLepWzm*Aq3IpPvn!
zsoeEe*eK&%`C*1Z9X}WqA3IdpCBZbNu*6_ce!B8wFZ&m@+u!`!IPBx@;nyB(-t1#C
z^uXkVS=ZjD{d~*fitg4^kNk=PcW>-y=~8!NiC_0WKAPnXDIYxO;?Uk33pYNg8d|Zf
zyW`{Z)d$nm6;&Oh;&Vs2$y@F?zB4jV{jq-4nV@$mG5NDj4rth+Jor)hc#~tE(Vh>~
zmR{es{QAT04v$w&xcKPIr|Xtsay1tmkF7s>@5}JT4@MlF7pvJf!r!v{HJw4#gY6Tp
z413N}8GA#`JFRBMs<A5Wd6Rn0uG1}@>tULFb>;B68-3ypoW2YnGUMD_1%><hV|%Q>
zan!EN)?r6k(9QuDV_!yYzm`!JF;8w~Tv>6)B)x@3{AC?AM?39~bue1fL+OCS+I_ng
z3^#w!!D~RTE(U8@MYFTj8k7Rc-8_3V96P4H`{$gSz0dE-die3`w#)gicB@^OA5-A%
z{Jh}v1hXB^s!m_m|9Z6Vk}A2o2lwbbzVK>J=^t~`Hx!@Z+Yfu6PMkPNp88WYttTpY
z?+;$i>eS<2^^BU?Gb32f4?WdiXqD!vx?}3(ifBi^YWimW-rn)!mzB-TU43IyjERM%
zd5`wfU$}?c)lHmPHhRzduqBouv36TxOZ~Rj$))>*MK&H8e>+!B+kHz>%HncXuFHxk
zzmFU0p1bqTy8P$opT?f7NldDLb*JKbwBn|Km!=ut9)0O#rnB|W<PW>vdiRYqJ~#hK
zr(F@jRy$PU-y}JdmE5VG&eN%{`B#$5)#B4zKiqPjeed9Do3I!0!4*m#pAEzKn>mGF
zN3Q8~#r5v2J9Fya<v!GK9~xN`p>F5n<nw0|`P0B9A<uVf*_AjK!}I?-6c+i~yL?%r
zcHNCK-o5OAvbp~GE-OOjcJiHY>eu7t`r$sk2Yk%<<yf_a+pJ|rmT5#hOdUM=HDOoE
z?fupv?r^|a?UjD|>wh{Hdo4#}Q(d6h%V|lw0#-#iEH?c!cKVao&Tdn*{jRq!i}ZPG
zRpy>#yCPvm{qk4U^(t|hR-=cV^T_;=+~9GnO3mtkremkkt_rWSEt772PEg9c8N2=3
z{)+UCVQ=Ft!jEOT@$TeZEX%LUy_Y2SK{3DN{<V+-TZISb%?&0uXzR`&+3)g{s7pHw
zQ-UWv$6dGLGXV8V3s>!dJ9;obFlRhO>1hx3SQVNFG);s2RgT$cPj8$yk&~KwdB5f&
zv)i+)w_lN){-C$IqnpX#7cbRIEjiY+q7D@%9$32KY=;=TJGKd1x^RAYx@7F~qhl&w
z%<mtp6Yxu&OYE<srp-@vdf734(I5+dGm~HoYujb%?aT+}6<5y*{ghMcyl%nJ2S)2Q
zx}P~v?bA3ud-a<l*5s2WmC>3%)soHyLCg8OzB+gLCBB!TPQ<st?&IoaC|ImLRaI|X
zw8c;UxA6V@Puy+pI*V-uFU_S*iUCdNkT69K8YD`9IZ<qBZ3X%inl>^UGACXw4Rv6G
zE;f@9Qa_Uta~9M>>9QnB)SQS(gXsh<G;|>)EG&%-mk1i9pok3>;1dD8?|?IB>hCk?
zpV@1Q{LEgJjjLSxz-A%+30dThf3bl-PFI6-EUXFfS_{tjcN-k?rQ}VGe{_&rBn9t5
z!Fy8YX%r-fTI<j>O(DAhf5O3<3U`jeI*9&rj$8_RI(0S!>^SOp<Yq2(ZP85SiCcG}
z>oxEKNExKUMJ5X<gn?MFwuR%eo8X&8hQJ*al1;7aV0qn61DuUb)v;Ah$Cf%YXVr4(
zz3>E5mUvJKq@?4pAyo_q8~Q+9urvt5u)>6)ewZ*^Z8Kr05he`sIU=yHl*Mp8j(4zz
z95tvjU1LEF<-{6tZox#J*dO{HrtVtWA#b!NeGixF8o2zXs30c|DnD=y?EDdGv5@8I
zN|mm}6?T;Dp%l{}?%=&xIG^EYLBV=|JkfU2M>2|(tSpcbu2_Y@vz8OjfjooI`WXBQ
z-|or{fOj*H`!5!{MNtzv^@UUheZWxo=lFl60eUcDmYM$l9dtzWG|Ua*fAL_R2*3Y1
z{(oxV8)QD^ROt8$rfxnEQa@wW+fRWBnp+ofNKf-!bv6Lo4F!Dz@Arp-0n7&qhK~_Y
z+Cxc$f=Ru6D3CfNtD#`RZ5tE}f0{7M!e2rlPFm9Vw3ta*NpRT=6Z)eW3WjMJ|HPQ|
z)N!eC8C?IUn8cKf)Nu)1ugn-;GTiGAg`C~s+OO&|3$K68h@t*x2z~l{hphgyYtPpf
zTkC1&ErtGDek#TOS3tqOV*jz<_@kX5DEOoggQ5v#6cp@l0u;>3pgvF!nNS3J5$J)I
zu^rVOZcF_(0K&)<=`+&AL=AvQ4|R%i3`<Q<8kfN1WsIYSH8zuau$tZrr@<SSXfj$V
zp0peIPdvgSLmHki9Q7A14ET%JZRP(L*@-p(JM(8jbjK+s_JR4|T_(`emT^aoHf|p$
p*g0!wW8=VW_A=`E;Oy<|ffG0i%Q^(T&zgRzBc`r@0RKfA_#a_3A+!Jh

literal 28160
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
E7h3*wfB*mh

diff --git a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/task/UserManagerTest.java b/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/task/UserManagerTest.java
deleted file mode 100644
index e0fe3386b39..00000000000
--- a/openbis/sourceTest/java/ch/systemsx/cisd/openbis/generic/server/task/UserManagerTest.java
+++ /dev/null
@@ -1,295 +0,0 @@
-/*
- * Copyright 2018 ETH Zuerich, SIS
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- *      http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package ch.systemsx.cisd.openbis.generic.server.task;
-
-import static org.testng.Assert.assertEquals;
-
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.LinkedHashMap;
-import java.util.List;
-import java.util.Map;
-import java.util.TreeMap;
-import java.util.function.Function;
-import java.util.stream.Collectors;
-
-import org.jmock.Expectations;
-import org.jmock.Mockery;
-import org.testng.annotations.AfterMethod;
-import org.testng.annotations.BeforeMethod;
-import org.testng.annotations.Test;
-
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.authorizationgroup.AuthorizationGroup;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.authorizationgroup.fetchoptions.AuthorizationGroupFetchOptions;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.authorizationgroup.id.AuthorizationGroupPermId;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.authorizationgroup.id.IAuthorizationGroupId;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.Person;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.fetchoptions.PersonFetchOptions;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.id.IPersonId;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.person.id.PersonPermId;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.Role;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.RoleAssignment;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.RoleLevel;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.roleassignment.fetchoptions.RoleAssignmentFetchOptions;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.Space;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.fetchoptions.SpaceFetchOptions;
-import ch.ethz.sis.openbis.generic.asapi.v3.dto.space.id.SpacePermId;
-import ch.ethz.sis.openbis.generic.server.asapi.v3.IApplicationServerInternalApi;
-import ch.systemsx.cisd.authentication.Principal;
-import ch.systemsx.cisd.common.logging.MockLogger;
-import ch.systemsx.cisd.common.test.RecordingMatcher;
-import ch.systemsx.cisd.common.test.ToStringMatcher;
-
-/**
- * @author Franz-Josef Elmer
- */
-public class UserManagerTest
-{
-    private static final String SESSION_TOKEN = "session-123";
-
-    private static final Principal U1 = new Principal("u1", "Albert", "Einstein", "a.e@abc.de");
-
-    private static final Principal U2 = new Principal("u2", "Isaac", "Newton", "i.n@abc.de");
-
-    private static final Principal U3 = new Principal("u3", "Alan", "Turing", "a.t@abc.de");
-
-    private Mockery context;
-
-    private IApplicationServerInternalApi service;
-
-    private UserManager userManager;
-
-    private MockLogger logger;
-
-    @BeforeMethod
-    public void setUp()
-    {
-        context = new Mockery();
-        service = context.mock(IApplicationServerInternalApi.class);
-        context.checking(new Expectations()
-            {
-                {
-                    one(service).loginAsSystem();
-                    will(returnValue(SESSION_TOKEN));
-
-                    one(service).logout(SESSION_TOKEN);
-                }
-            });
-        logger = new MockLogger();
-        userManager = new UserManager(service, logger);
-    }
-
-    @AfterMethod
-    public void tearDown()
-    {
-        // To following line of code should also be called at the end of each test method.
-        // Otherwise one does not known which test failed.
-        context.assertIsSatisfied();
-    }
-
-    @Test
-    public void testAddNewNormalUser()
-    {
-        // Given
-        RecordingMatcher<List<IPersonId>> personsMatcher = prepareGetUsersWithRoleAssigments(new PersonBuilder(U1).get());
-        RecordingMatcher<List<AuthorizationGroupPermId>> groupsMatcher = prepareGetAuthorizationGroups();
-
-        userManager.addGroup("G1", new Group(), principals(U2, U1));
-
-        // When
-        userManager.manageUsers();
-
-        // Then
-        assertEquals(personsMatcher.recordedObject().toString(), "[u1, u2]");
-        assertEquals(groupsMatcher.recordedObject().toString(), "[G1]");
-        context.assertIsSatisfied();
-    }
-
-    // @Test
-    public void test2()
-    {
-        // Given
-
-        // When
-        userManager.manageUsers();
-
-        // Then
-        context.assertIsSatisfied();
-    }
-
-    // @Test
-    public void test3()
-    {
-        // Given
-
-        // When
-        userManager.manageUsers();
-
-        // Then
-        context.assertIsSatisfied();
-    }
-
-    private RecordingMatcher<List<IPersonId>> prepareGetUsersWithRoleAssigments(Person... persons)
-    {
-        Map<IPersonId, Person> result = new LinkedHashMap<>();
-        for (Person person : persons)
-        {
-            result.put(person.getPermId(), person);
-        }
-        RecordingMatcher<List<IPersonId>> matcher = new RecordingMatcher<>();
-        context.checking(new Expectations()
-            {
-                {
-                    PersonFetchOptions fetchOptions = new PersonFetchOptions();
-                    fetchOptions.withRoleAssignments().withSpace();
-                    one(service).getPersons(with(SESSION_TOKEN), with(matcher), with(new ToStringMatcher<>(fetchOptions)));
-                    will(returnValue(result));
-                }
-            });
-        return matcher;
-    }
-
-    private RecordingMatcher<List<AuthorizationGroupPermId>> prepareGetAuthorizationGroups(AuthorizationGroup... authorizationGroups)
-    {
-        Map<IAuthorizationGroupId, AuthorizationGroup> result = new LinkedHashMap<>();
-        for (AuthorizationGroup authorizationGroup : authorizationGroups)
-        {
-            result.put(authorizationGroup.getPermId(), authorizationGroup);
-        }
-        RecordingMatcher<List<AuthorizationGroupPermId>> matcher = new RecordingMatcher<>();
-        context.checking(new Expectations()
-            {
-                {
-                    AuthorizationGroupFetchOptions fetchOptions = new AuthorizationGroupFetchOptions();
-                    fetchOptions.withUsers();
-                    one(service).getAuthorizationGroups(with(SESSION_TOKEN), with(matcher), with(new ToStringMatcher<>(fetchOptions)));
-                    will(returnValue(result));
-                }
-            });
-        return matcher;
-    }
-
-    private Map<String, Principal> principals(Principal... principals)
-    {
-        Map<String, Principal> map = new TreeMap<>();
-        for (Principal principal : principals)
-        {
-            map.put(principal.getUserId(), principal);
-        }
-        return map;
-    }
-
-    private RoleAssignment ra(Role role)
-    {
-        return ra(role, null);
-    }
-
-    private RoleAssignment ra(Role role, String spaceCodeOrNull)
-    {
-        RoleAssignment roleAssignment = new RoleAssignment();
-        RoleAssignmentFetchOptions fetchOptions = new RoleAssignmentFetchOptions();
-        fetchOptions.withSpace();
-        roleAssignment.setFetchOptions(fetchOptions);
-        roleAssignment.setRole(role);
-        roleAssignment.setRoleLevel(RoleLevel.INSTANCE);
-        if (spaceCodeOrNull != null)
-        {
-            Space space = new Space();
-            space.setCode(spaceCodeOrNull);
-            space.setPermId(new SpacePermId(spaceCodeOrNull));
-            space.setFetchOptions(new SpaceFetchOptions());
-            roleAssignment.setSpace(space);
-            roleAssignment.setRoleLevel(RoleLevel.SPACE);
-        }
-        return roleAssignment;
-    }
-
-    private static Person createPerson(Principal principal, PersonFetchOptions fetchOptions)
-    {
-        Person person = new Person();
-        person.setFetchOptions(fetchOptions);
-        person.setUserId(principal.getUserId());
-        person.setPermId(new PersonPermId(principal.getUserId()));
-        person.setEmail(principal.getEmail());
-        person.setFirstName(principal.getFirstName());
-        person.setLastName(principal.getLastName());
-        person.setRoleAssignments(new ArrayList<RoleAssignment>());
-        person.setActive(true);
-        return person;
-    }
-
-    private static final class PersonBuilder
-    {
-        private Person person;
-
-        PersonBuilder(Principal principal)
-        {
-            PersonFetchOptions fetchOptions = new PersonFetchOptions();
-            fetchOptions.withRoleAssignments().withSpace();
-            person = createPerson(principal, fetchOptions);
-        }
-
-        Person get()
-        {
-            return person;
-        }
-
-        PersonBuilder roleAssignments(RoleAssignment... roleAssignments)
-        {
-            for (RoleAssignment roleAssignment : roleAssignments)
-            {
-                person.getRoleAssignments().add(roleAssignment);
-            }
-            return this;
-        }
-
-        PersonBuilder deactive()
-        {
-            person.setActive(false);
-            return this;
-        }
-    }
-
-    private static final class AuthorizationGroupBuilder
-    {
-        private AuthorizationGroup authorizationGroup;
-
-        AuthorizationGroupBuilder(String code)
-        {
-            authorizationGroup = new AuthorizationGroup();
-            AuthorizationGroupFetchOptions fetchOptions = new AuthorizationGroupFetchOptions();
-            fetchOptions.withUsers();
-            authorizationGroup.setFetchOptions(fetchOptions);
-            authorizationGroup.setCode(code);
-            authorizationGroup.setPermId(new AuthorizationGroupPermId(code));
-            authorizationGroup.setUsers(new ArrayList<>());
-        }
-
-        public AuthorizationGroupBuilder users(Principal... principals)
-        {
-            PersonFetchOptions personFetchOptions = new PersonFetchOptions();
-            Function<Principal, Person> mapper = p -> createPerson(p, personFetchOptions);
-            authorizationGroup.getUsers().addAll(Arrays.asList(principals).stream().map(mapper).collect(Collectors.toList()));
-            return this;
-        }
-
-        AuthorizationGroup get()
-        {
-            return authorizationGroup;
-        }
-    }
-}
-- 
GitLab