* rules, then take a snapshot, and check that it reports errors.
*/
@Test
public void testBinaryPackageCompileAndExecute() throws Exception {
RulesRepository repo = rulesRepository;
// create our package
ModuleItem pkg = repo.createModule( "testBinaryPackageCompile",
"" );
DroolsHeader.updateDroolsHeader( "global java.util.List ls \n import org.drools.Person",
pkg );
AssetItem rule1 = pkg.addAsset( "rule_1",
"" );
rule1.updateFormat( AssetFormats.DRL );
rule1.updateContent( "rule 'rule1' \n when \np : Person() \n then \np.setAge(42); \n end" );
rule1.checkin( "" );
repo.save();
BuilderResult result = repositoryPackageService.buildPackage( pkg.getUUID(),
true );
List<BuilderResultLine> lines = result.getLines();
assertFalse( result.hasLines() );
pkg = repo.loadModule( "testBinaryPackageCompile" );
byte[] binPackage = pkg.getCompiledBinaryBytes();
assertNotNull( binPackage );
Package[] binPkgs = (Package[]) DroolsStreamUtils.streamIn( binPackage );
assertNotNull( binPkgs );
assertEquals( 1,
binPkgs.length );
Package binPkg = binPkgs[0];
assertNotNull( binPkg );
assertTrue( binPkg.isValid() );
Person p = new Person();
KnowledgeBuilder kb = KnowledgeBuilderFactory.newKnowledgeBuilder();
kb.add( new InputStreamResource( new ByteArrayInputStream( binPackage ) ),
ResourceType.PKG );
KnowledgeBase kbase = kb.newKnowledgeBase();
StatelessKnowledgeSession sess = kbase.newStatelessKnowledgeSession();
sess.setGlobal( "ls",
new ArrayList<String>() );
sess.execute( p );
assertEquals( 42,
p.getAge() );
repositoryPackageService.createModuleSnapshot( "testBinaryPackageCompile",
"SNAP1",
false,
"" ,false,"","","",false,"","",false,"");
rule1.updateContent( "rule 'rule1' \n when p:PersonX() \n then System.err.println(42); \n end" );
rule1.checkin( "" );
result = repositoryPackageService.buildPackage( pkg.getUUID(),
true );
assertNotNull( result );
assertEquals( 1,
result.getLines().size() );
assertEquals( rule1.getName(),
result.getLines().get( 0 ).getAssetName() );
assertEquals( AssetFormats.DRL,
result.getLines().get( 0 ).getAssetFormat() );
assertNotNull( result.getLines().get( 0 ).getMessage() );
assertEquals( rule1.getUUID(),
result.getLines().get( 0 ).getUuid() );
pkg = repo.loadModuleSnapshot( "testBinaryPackageCompile",
"SNAP1" );
result = repositoryPackageService.buildPackage( pkg.getUUID(),
true );
assertFalse( result.hasLines() );