From a04014f0b3c4cb348f49dc4fa2c34e5fdd4e903a Mon Sep 17 00:00:00 2001 From: Benjamin DANGLOT Date: Thu, 10 May 2018 09:20:02 +0200 Subject: [PATCH] Fix observe values (#422) * fix: add checks on serializable * test: update tests for check serializable * update script: remove old .class --- .../main/bash/update-classes-in-resources.sh | 3 --- .../fr/inria/diversify/compare/ObjectLog.java | 24 +++++++++++++----- .../main/resources/compare/ObjectLog.class | Bin 9515 -> 9785 bytes .../diversify/compare/ObjectLogTest.java | 16 +++++++++++- 4 files changed, 33 insertions(+), 10 deletions(-) diff --git a/dspot/src/main/bash/update-classes-in-resources.sh b/dspot/src/main/bash/update-classes-in-resources.sh index 725eedde8..c16abbcc2 100755 --- a/dspot/src/main/bash/update-classes-in-resources.sh +++ b/dspot/src/main/bash/update-classes-in-resources.sh @@ -6,7 +6,4 @@ # this is done to have matched version with sources and compiled resources rm -rf src/main/resources/compare/ -rm -rf src/main/resources/listener/ -mkdir --parent src/main/resources/listener/ cp -r target/classes/fr/inria/diversify/compare/ src/main/resources/compare/ -cp target/classes/fr/inria/stamp/test/listener/TestListener.class src/main/resources/listener/TestListener.class \ No newline at end of file diff --git a/dspot/src/main/java/fr/inria/diversify/compare/ObjectLog.java b/dspot/src/main/java/fr/inria/diversify/compare/ObjectLog.java index e701f9ad6..4f16506e7 100644 --- a/dspot/src/main/java/fr/inria/diversify/compare/ObjectLog.java +++ b/dspot/src/main/java/fr/inria/diversify/compare/ObjectLog.java @@ -1,9 +1,11 @@ package fr.inria.diversify.compare; +import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.lang.reflect.Method; @@ -65,10 +67,11 @@ private void _log(Object startingObject, int deep, List methodsToReachCurrentObject) { if (deep < maxDeep) { - if (objectToObserve == null || - Utils.isPrimitive(objectToObserve) || - Utils.isPrimitiveArray(objectToObserve) || - Utils.isPrimitiveCollectionOrMap(objectToObserve)) { + if (isSerializable(objectToObserve) && + (objectToObserve == null || + Utils.isPrimitive(objectToObserve) || + Utils.isPrimitiveArray(objectToObserve) || + Utils.isPrimitiveCollectionOrMap(objectToObserve))) { addObservation(id, observedObjectAsString, objectToObserve); } else if (!objectToObserve.getClass().getName().toLowerCase().contains("mock")) { observeNotNullObject( @@ -83,6 +86,15 @@ private void _log(Object startingObject, } } + private boolean isSerializable(Object candidate) { + try { + new ObjectOutputStream(new ByteArrayOutputStream()).writeObject(candidate); + return true; + } catch (IOException e) { + return false; + } + } + private void addObservation(String id, String observedObjectAsString, Object actualValue) { if (!observations.containsKey(id)) { observations.put(id, new Observation()); @@ -192,8 +204,8 @@ public static Map load() { } catch (Exception e) { throw new RuntimeException(e); } - } catch (Exception e){ - throw new RuntimeException(e); + } catch (Exception e) { + throw new RuntimeException(e); } } diff --git a/dspot/src/main/resources/compare/ObjectLog.class b/dspot/src/main/resources/compare/ObjectLog.class index fcbcbe7ba72b65ea9427afb316472c7ecee15a11..e5a330acfbf6784a997443f8e97a48670c0a5165 100644 GIT binary patch literal 9785 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 literal 9515 zcmcIp349#YdH=uF?#}LLY}t}!du@y{_>gs2#x@SD%wfwimaW5B!p1gW#?r`IyxI|a z_#g?CKp}0CHY9CRpd=hEqU7KRNHz+{l*Az^NqVGLnl?@EQun@6LZke@H?zAVSt$J4 zUlE>}_uluu_Z|Q5nAxxY=;c=dY*KfdxCL*-Vd85BzHXwz8~mn$H%&yn!8c_2n+CpR z^8SWgeoJ=!wt?R+54!!iopz=_?PL`iX4~C4g_zroA^YTZ#~D^o?Fvh~xAnB`-M6*3y}PUD@Sd%` zI}h(@?`S*RwY9TNq548e73Q>3<-DEA@3YedY8Ty-%B1qwC{)y~-KP+4b^AG6)sf0L zU4@||PPW%RlIBcxhudeT_t`Wq$NpqEKbWHZtfNl8r|gEhy0x?E6m-O#p1j?6j5hZf zMzT)M$y1oLdsN}7x_}1WwwAz5(fZnXL4SxMRj&4TuiLF%tu-hU`pgs-dSpIP|JIzx zR3Vh=r!@|1IfiDJ<3h<=({?WRoudT4XH2p)hZ{IAl20@u!B1&R;P7 z^ey!Q@WyE@g7K1d2GTsI*@Lx?hmZcRY%50vj(=AqOgHbW!f4am{j^*uWT#>9UC#-~ z;-f*BRoZ>|f&`6@w8edcb}G}JInF?m#M3?CN4LUe-w0(G%)s!%DJB8px;C)TcCybI z7UpzB^*}0Pr>8kM>bYNGNnqDBw~%d$0aOBthB1?7o9pF_E;rv*NT-WYcxZO0{vU&WWqxQ_GC&CyGe@ZJZEg9j z*{pp^XAS0YX3j#IA#CMzQ7Q_3dBE}|`dN)+sI}}~3{`Ka2DTFlcfJR`|K9?#inS#W zkaYQcmY3=Ex^wzmP{U%>&e|N5LSAR3aLztX#8c5PObkjwB|I*n<2Cde~1K$1j>L^uWsbfdI_9T6id zZ4Vvkw^zPfa#?w~!gWChP78ML3|&2E3yGh2%z6f9k6Xz0IU+1;n8%I%);e*Pg*1jN z9K|3VSoYpdJ2%McZ^6b9g|)MI$j_C2+hoDPfQ7@jO=0CMyGlY>$RcN{M%AQHQ$D{G z5f(mx4;pHnrJB`xOI`zYnHlF zQUBGm3Q_`?rLIy*OSPyimbzM9W2kE_b)DL(u)Hi+Ag7jdB+K(Q*UdA&?P1>>RZ+EV zo@(W7yQSLH4w_kA&x~oQovPhXyDYU^b;wzrMYXl3OBqz*@>zu5VW-li2CB4&Y1vX; zs$1CZQCO^{)@-Lji$dKXLhZFwkLtD5jRb(&r}kUwCUt;G#!?5>Axqt?T1Dzx#2B>q zNAWRB-6{)*#aD~U+`TZ~R!F7$rEeA`Z&NnIY3({*>d5bi_$E}xg+6(bBl^WLOUg|4 z7BczNkW*4dj&>|HzymRk7mDi45XB11*p)FGHTUO+-F&lGBfM9Lb#$(9V$bTGHDj(2 zib0FD^>#}g!_X9u^bTg-6Vh2*iUJk&_QeQJa)MXYl7syLNlC4 zX)i8&b_M`Y*+m)Wg!cwWAUk${5gQ8fGC1q*Vy|ebtRknWX7;Th-w~)^m~WtIg;rl~ zjbz>a%pmp5hqjV|L>V1-X^=}ms}hNH@P^m&NQ2hYS9pFDsI634V>4LriW>r~OK$a9QwZFR+8q@cYeI$m6~zCHREPZ4Y`G!pJ_zCy$)YMGQE7M zr7HIDu#;h2GzA6q<05ELZ^|!36epHN9X@&+68Ay-n;;vm~nzSq(j zsa)I8aGsf9O5Q4-O^_9Jlfn{gKlN+oi7bugxojGTq94g2(wBB6Ma^OC_Y{VQ`M!{I zsO@}TEWe^?d5WTPE>KJKk}2U`JS&>=UkzvaQgg@yPcZWYt>}wpsNmTQK0Ky!y~atS4SfbZ09mX@jMn&<7uaVeeTr#Y zJ79{0zTW&GEZ?eu2=8pA`4o~yoL`Ik^m9MQ?6dVVJ9plfAcfnxeoW8p!W>etvFA*N zGY9#JT=9NM{TTTA_!2_(@G;6q&c>eCyIo!v@@�jEfPcJPU9smg6!E zbJp^B;SMdCDGfYl z2qz-7(S$LEgoqi|dakBEKr64?X|*=gVh1k5_4LI~YTl0PunS%2)uQk9MDe{sp>P+K z5U+P@b;L8>xEnvERqVz+R7Z@^trZh*cjH6EQdB?Pi~FeDPxE=9wzcfM-`{yJ9^jgI zErN=yM&R5y^N;W8IsatcwbbFOg@_kpM#kQ zhexq)f72N>D~w=CGJfH7B0iCbJg4<&!g_|%jdb`uyqkCsPf@q0@U*^rP|EO!D&SVq zAExteBUK-hMnBbcDB&PE4A8ts83!qX>vnQW;{c=a810p#Gwx!T-$UcyOQU~;G!HUX ze~F>@D8cn44gD0ypXc~Rj$dKaNTL|#PgolW%b&x~6IKVX3LhtBj6A%#7*E+uPM@Ge zR};pc^x=25!Y^wJjN&13j%dJo=}C4zz?}lq z`(aK}!Ki_U4LoAtR}4IA;M077GVq!BI|!*shFR=F0nUPf_UB3v5@-$y|SAR_2%8%rG}F zl8-T#@8Rs+38TcGw`a^7=q(pHII->XU z2EM@m2~MK~H%l!$6lLr4>m2`1xC z0TPSqj*0qn*wJtfH7xmiN6^yQKq9i;;EfwP8#@{&k_M@kk*e04txm=oBmzih$V|cz zp1Xx71s7~uY)&M%?qT&`LGyX{T~xJ~1?dpS+t9%hEG^Lxk+p_?zn>W0!||Oot#|)4 z*Pq7c@GQp<5s@+mUc;A3@0Gc2Y=b~YS#;GRe356pNX{>ivlw}loL?jcUn0*ja(JE` z#<>3sIgGJ6KaFqVWsPeoi?x*OCGH7vM_gk#MC6R|?=;W&ia!VK(GOvPv;~OgD~UpT^UEam!7Dr%@a@i-XB<03(M+P@Rl4B_bt^ z913{*X1&@_T&1^fPK2K;fh{_nk$%aObN$@hp?xYvlY2x$s4gf08Bz zP8YGPe~I%UQWW7dpALJKdqFyH&V$pZP(4XCBL>dW=>}fY*Wd6ERUzOoweN|yGJ#$# zLd}@6G7U1snrze6xSbD0kTEOjdCGGk$`o-~Oj`3yt(>m5xQ4MOx!0_3sCWgpjN;aE z_KWI7DG^<4f2F7Tgz#r9Ne?4EpI6J*kSkx1Jp|)=pKDEhMX?=xH}-u2_BFcA5%x8H si7Bxs!*iSu;j8LS-c2ZVQhh+3LIQuwv2^EuN1C@-+}`q^{u^)o82yvJ$^ZZW diff --git a/dspot/src/test/java/fr/inria/diversify/compare/ObjectLogTest.java b/dspot/src/test/java/fr/inria/diversify/compare/ObjectLogTest.java index f7b9c944a..42c7b0c89 100644 --- a/dspot/src/test/java/fr/inria/diversify/compare/ObjectLogTest.java +++ b/dspot/src/test/java/fr/inria/diversify/compare/ObjectLogTest.java @@ -3,6 +3,8 @@ import org.junit.Before; import org.junit.Test; +import java.util.ArrayList; +import java.util.List; import java.util.Map; import java.util.Random; @@ -23,6 +25,14 @@ public void setUp() throws Exception { } private static class MyInternalClass { + private static final ArrayList list = new ArrayList<>(); + static { + list.add(1); + list.add(2); + list.add(3); + list.add(4); + list.add(5); + } private int a; private int b; private static Random random = new Random(); @@ -32,6 +42,10 @@ public MyInternalClass(int a, int b) { this.b = b; } + public List getObject() { + return list.subList(0, 2); + } + public int getA() { return a; } @@ -66,7 +80,7 @@ public void test() throws Exception { assertNotNull(add__0); assertEquals(1, add__0.getNotDeterministValues().size()); final Map observationValues = add__0.getObservationValues(); - assertEquals(4, observationValues.size()); + assertEquals(7, observationValues.size()); assertEquals(25, observationValues.get("((fr.inria.diversify.compare.ObjectLogTest.MyInternalClass)myInternalClass ).compute()")); assertEquals(3, observationValues.get("((fr.inria.diversify.compare.ObjectLogTest.MyInternalClass)myInternalClass ).getA()")); assertEquals(20, observationValues.get("((fr.inria.diversify.compare.ObjectLogTest.MyInternalClass)myInternalClass ).getB()"));