[jboss-svn-commits] JBL Code SVN: r32718 - labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/integrationtests.
jboss-svn-commits at lists.jboss.org
jboss-svn-commits at lists.jboss.org
Mon May 3 21:05:53 EDT 2010
Author: baunax
Date: 2010-05-03 21:05:53 -0400 (Mon, 03 May 2010)
New Revision: 32718
Added:
labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/integrationtests/SerializationHelper.java
Log:
JBRULES-2499 Create a new module to host IDE common behavior
- Added missing helper class for tests
Added: labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/integrationtests/SerializationHelper.java
===================================================================
--- labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/integrationtests/SerializationHelper.java (rev 0)
+++ labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/integrationtests/SerializationHelper.java 2010-05-04 01:05:53 UTC (rev 32718)
@@ -0,0 +1,157 @@
+package org.drools.integrationtests;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.IOException;
+import java.io.ObjectOutput;
+import java.io.ObjectOutputStream;
+
+import org.drools.RuleBase;
+import org.drools.SessionConfiguration;
+import org.drools.StatefulSession;
+import org.drools.core.util.DroolsStreamUtils;
+import org.drools.impl.EnvironmentFactory;
+import org.drools.impl.StatefulKnowledgeSessionImpl;
+import org.drools.marshalling.Marshaller;
+import org.drools.marshalling.MarshallerFactory;
+import org.drools.marshalling.ObjectMarshallingStrategy;
+import org.drools.runtime.StatefulKnowledgeSession;
+
+/**
+ * Marshalling helper class to perform serialize/de-serialize a given object
+ */
+public class SerializationHelper {
+ public static <T> T serializeObject(T obj) throws IOException,
+ ClassNotFoundException {
+ return serializeObject( obj,
+ null );
+ }
+
+ public static <T> T serializeObject(T obj,
+ ClassLoader classLoader) throws IOException,
+ ClassNotFoundException {
+ return (T) DroolsStreamUtils.streamIn( DroolsStreamUtils.streamOut( obj ),
+ classLoader );
+ }
+
+ public static StatefulSession getSerialisedStatefulSession(StatefulSession session) throws Exception {
+ return getSerialisedStatefulSession( session,
+ true );
+ }
+
+ public static StatefulSession getSerialisedStatefulSession(StatefulSession session,
+ RuleBase ruleBase) throws Exception {
+ return getSerialisedStatefulSession( session,
+ ruleBase,
+ true );
+ }
+
+ public static StatefulSession getSerialisedStatefulSession(StatefulSession session,
+ boolean dispose) throws Exception {
+ return getSerialisedStatefulSession( session,
+ session.getRuleBase(),
+ dispose );
+ }
+
+ public static StatefulSession getSerialisedStatefulSession(StatefulSession session,
+ RuleBase ruleBase,
+ boolean dispose) throws Exception {
+ // Serialize to a byte array
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ ObjectOutput out = new ObjectOutputStream( bos );
+ out.writeObject( session );
+ out.close();
+ bos.close();
+
+ // Get the bytes of the serialized object
+ final byte[] b1 = bos.toByteArray();
+
+ ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
+ StatefulSession session2 = ruleBase.newStatefulSession( bais );
+ bais.close();
+
+ bos = new ByteArrayOutputStream();
+ out = new ObjectOutputStream( bos );
+ out.writeObject( session2 );
+ out.close();
+ bos.close();
+
+ final byte[] b2 = bos.toByteArray();
+
+ // bytes should be the same.
+ if ( !areByteArraysEqual( b1,
+ b2 ) ) {
+
+ throw new IllegalArgumentException( "byte streams for serialisation test are not equal" );
+ }
+
+ session2.setGlobalResolver( session.getGlobalResolver() );
+
+ if ( dispose ) {
+ session.dispose();
+ }
+
+ return session2;
+ }
+
+ public static StatefulKnowledgeSession getSerialisedStatefulKnowledgeSession(StatefulKnowledgeSession ksession,
+ boolean dispose) throws Exception {
+
+ return getSerialisedStatefulKnowledgeSession( ksession, MarshallerFactory.newSerializeMarshallingStrategy(), dispose);
+ }
+
+ public static StatefulKnowledgeSession getSerialisedStatefulKnowledgeSession(StatefulKnowledgeSession ksession,
+ ObjectMarshallingStrategy strategy,
+ boolean dispose) throws Exception {
+
+ Marshaller marshaller = MarshallerFactory.newMarshaller( ksession.getKnowledgeBase(), new ObjectMarshallingStrategy[]{ strategy } );
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ marshaller.marshall( bos,
+ ksession );
+ final byte[] b1 = bos.toByteArray();
+ bos.close();
+
+ ByteArrayInputStream bais = new ByteArrayInputStream( b1 );
+ StatefulKnowledgeSession ksession2 = marshaller.unmarshall( bais,
+ new SessionConfiguration(),
+ EnvironmentFactory.newEnvironment() );
+ bais.close();
+
+ bos = new ByteArrayOutputStream();
+ marshaller.marshall( bos,
+ ksession2 );
+ final byte[] b2 = bos.toByteArray();
+ bos.close();
+
+ // bytes should be the same.
+ if ( !areByteArraysEqual( b1,
+ b2 ) ) {
+ throw new IllegalArgumentException( "byte streams for serialisation test are not equal" );
+ }
+
+ ((StatefulKnowledgeSessionImpl) ksession2).session.setGlobalResolver( ((StatefulKnowledgeSessionImpl) ksession).session.getGlobalResolver() );
+
+ if ( dispose ) {
+ ksession.dispose();
+ }
+
+ return ksession2;
+ }
+
+ public static boolean areByteArraysEqual(byte[] b1,
+ byte[] b2) {
+ if ( b1.length != b2.length ) {
+ return false;
+ }
+
+ for ( int i = 0, length = b1.length; i < length; i++ ) {
+ if ( b1[i] != b2[i] ) {
+ System.out.println("Difference at "+i+": ["+b1[i]+"] != ["+b2[i]+"]");
+ return false;
+ }
+ }
+
+ return true;
+ }
+}
Property changes on: labs/jbossrules/trunk/drools-ide-common/src/test/java/org/drools/integrationtests/SerializationHelper.java
___________________________________________________________________
Name: svn:keywords
+ Id Revision
Name: svn:eol-style
+ LF
More information about the jboss-svn-commits
mailing list