/drools-compiler/src/test/java/org/drools/compiler/integrationtests/SerializedPackageMergeTest.java

https://github.com/esteban-aliverti/drools · Java · 101 lines · 82 code · 17 blank · 2 comment · 4 complexity · e2c0352853f6b88b4e669522c0cf0656 MD5 · raw file

  1. package org.drools.compiler.integrationtests;
  2. import static org.junit.Assert.assertEquals;
  3. import static org.junit.Assert.assertFalse;
  4. import static org.junit.Assert.fail;
  5. import java.text.DateFormat;
  6. import java.text.ParseException;
  7. import java.text.SimpleDateFormat;
  8. import java.util.ArrayList;
  9. import java.util.Collection;
  10. import java.util.List;
  11. import java.util.Locale;
  12. import org.drools.compiler.Message;
  13. import org.junit.Test;
  14. import org.kie.internal.KnowledgeBase;
  15. import org.kie.internal.KnowledgeBaseFactory;
  16. import org.kie.internal.builder.KnowledgeBuilder;
  17. import org.kie.internal.builder.KnowledgeBuilderFactory;
  18. import org.kie.internal.definition.KnowledgePackage;
  19. import org.kie.internal.io.ResourceFactory;
  20. import org.kie.api.io.ResourceType;
  21. import org.kie.internal.runtime.StatelessKnowledgeSession;
  22. public class SerializedPackageMergeTest {
  23. private static final DateFormat DF = new SimpleDateFormat( "dd-MMM-yyyy", Locale.UK );
  24. private static final String[] DRLs = {"HelloWorld.drl","test_Serialization1.drl"};
  25. @Test
  26. public void testRuleExecutionWithoutSerialization() {
  27. try {
  28. // without serialization, it works.
  29. testRuleExecution( getSession( false ) );
  30. } catch ( Exception e ) {
  31. e.printStackTrace();
  32. fail( "Should not have raised any exception. Message: " + e.getMessage() );
  33. }
  34. }
  35. @Test
  36. public void testRuleExecutionWithSerialization() throws Exception {
  37. try {
  38. // with serialized packages, NullPointerException
  39. testRuleExecution( getSession( true ) );
  40. } catch ( Exception e ) {
  41. e.printStackTrace();
  42. fail( "Should not have raised any exception. Message: " + e.getMessage() );
  43. }
  44. }
  45. private void testRuleExecution(StatelessKnowledgeSession session) throws Exception {
  46. List<Object> list = new ArrayList<Object>();
  47. session.setGlobal( "list",
  48. list );
  49. session.execute( getObject() );
  50. assertEquals( 2,
  51. list.size() );
  52. }
  53. private Message getObject() throws ParseException {
  54. Message message = new Message();
  55. message.setMessage( "hola" );
  56. message.setNumber( 50 );
  57. message.getList().add( "hello" );
  58. message.setBirthday( DF.parse( "10-Jul-1976" ) );
  59. return message;
  60. }
  61. private StatelessKnowledgeSession getSession(boolean serialize) throws Exception {
  62. KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
  63. for ( String drl : DRLs ) {
  64. KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
  65. kbuilder.add( ResourceFactory.newInputStreamResource(getClass().getResourceAsStream(drl)),
  66. ResourceType.DRL );
  67. assertFalse( kbuilder.getErrors().toString(),
  68. kbuilder.hasErrors() );
  69. Collection<KnowledgePackage> kpkgs = kbuilder.getKnowledgePackages();
  70. Collection<KnowledgePackage> newCollection = null;
  71. if ( serialize ) {
  72. newCollection = new ArrayList<KnowledgePackage>();
  73. for( KnowledgePackage kpkg : kpkgs) {
  74. kpkg = SerializationHelper.serializeObject(kpkg);
  75. newCollection.add( kpkg );
  76. }
  77. } else {
  78. newCollection = kpkgs;
  79. }
  80. kbase.addKnowledgePackages( newCollection );
  81. }
  82. return kbase.newStatelessKnowledgeSession();
  83. }
  84. }