package com.rhc.drools.reference; import org.drools.KnowledgeBase; import org.junit.Assert; import org.junit.Before; import org.junit.Test; public class ComponentManagerTest { @Before public void shouldClearComponentMangerState() { ComponentManager.reset(); } @Test public void shouldCacheKBase() { StatelessDroolsComponent component = new StatelessDroolsComponent(); KnowledgeBaseBuilder kbaseBuilder = new ClasspathKnowledgeBaseBuilder(); component.setKnowledgeBaseBuilder( kbaseBuilder ); ComponentManager.rebuildAllKnowledgeBases(); KnowledgeBase originalKBase = kbaseBuilder.getKnowledgeBase(); KnowledgeBase cacheKBase = kbaseBuilder.getKnowledgeBase(); Assert.assertTrue( originalKBase == cacheKBase ); } @Test public void shouldUsesNewKBaseAfterRebuild() { StatelessDroolsComponent component = new StatelessDroolsComponent(); KnowledgeBaseBuilder kbaseBuilder = new ClasspathKnowledgeBaseBuilder(); component.setKnowledgeBaseBuilder( kbaseBuilder ); ComponentManager.rebuildAllKnowledgeBases(); KnowledgeBase originalKBase = kbaseBuilder.getKnowledgeBase(); ComponentManager.rebuildAllKnowledgeBases(); KnowledgeBase newKBase = kbaseBuilder.getKnowledgeBase(); Assert.assertFalse( originalKBase == newKBase ); } @Test public void shouldChangeNameWhenSetNameIsCalledAndStillUsedCachedKBase() { StatelessDroolsComponent component = new StatelessDroolsComponent(); KnowledgeBaseBuilder kbaseBuilder = new ClasspathKnowledgeBaseBuilder(); component.setKnowledgeBaseBuilder( kbaseBuilder ); ComponentManager.rebuildAllKnowledgeBases(); KnowledgeBase originalKBase = kbaseBuilder.getKnowledgeBase(); component.setName( "Change" ); StatelessDroolsComponent sameComponent = ComponentManager.getComponent( "Change" ); KnowledgeBase cacheKBase = sameComponent.getKnowledgeBaseBuilder().getKnowledgeBase(); Assert.assertTrue( originalKBase == cacheKBase ); } }