[jboss-svn-commits] JBL Code SVN: r22693 - in labs/jbossrules/trunk/drools-guvnor/src: main/java/org/drools/guvnor/server and 2 other directories.

jboss-svn-commits at lists.jboss.org jboss-svn-commits at lists.jboss.org
Thu Sep 11 19:15:58 EDT 2008


Author: michael.neale at jboss.com
Date: 2008-09-11 19:15:58 -0400 (Thu, 11 Sep 2008)
New Revision: 22693

Modified:
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/CategoryManager.java
   labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
   labs/jbossrules/trunk/drools-guvnor/src/main/resources/selectors.properties
   labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
Log:
small fixes for running scenarios in bulk

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/CategoryManager.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/CategoryManager.java	2008-09-11 21:20:51 UTC (rev 22692)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/client/admin/CategoryManager.java	2008-09-11 23:15:58 UTC (rev 22693)
@@ -75,14 +75,7 @@
 
         HorizontalPanel actions = new HorizontalPanel();
 
-        Button refresh = new Button( "Refresh view" );
-        refresh.setTitle( "Refresh categories" );
-        refresh.addClickListener( new ClickListener() {
-            public void onClick(Widget w) {
-                explorer.refresh();
-            }
-        } );
-        actions.add(refresh);
+
         form.addAttribute("", actions);
 
         Button newCat = new Button( "New category" );

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2008-09-11 21:20:51 UTC (rev 22692)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/java/org/drools/guvnor/server/ServiceImplementation.java	2008-09-11 23:15:58 UTC (rev 22693)
@@ -1573,6 +1573,10 @@
 					RoleTypes.PACKAGE_DEVELOPER);
 		}
 
+		return runScenario(packageName, scenario, null);
+	}
+
+	private ScenarioRunResult runScenario(String packageName, Scenario scenario, RuleCoverageListener coverage) throws SerializableException {
 		PackageItem item = this.repository.loadPackage(packageName);
 
 		// nasty classloader needed to make sure we use the same tree the whole
@@ -1585,9 +1589,6 @@
 			if (item.isBinaryUpToDate()
 					&& this.ruleBaseCache.containsKey(item.getUUID())) {
 				rb = this.ruleBaseCache.get(item.getUUID());
-				AbstractRuleBase arb = (AbstractRuleBase) rb;
-				// load up the existing class loader from before
-
 			} else {
 				// load up the classloader we are going to use
 				List<JarInputStream> jars = BRMSPackageBuilder.getJars(item);
@@ -1611,7 +1612,7 @@
 
 			ClassLoader cl = ((InternalRuleBase)this.ruleBaseCache.get(item.getUUID())).getRootClassLoader();
 			Thread.currentThread().setContextClassLoader(cl);
-			return runScenario(scenario, item, cl, rb);
+			return runScenario(scenario, item, cl, rb, coverage);
 
 		} finally {
 			Thread.currentThread().setContextClassLoader(originalCL);
@@ -1640,7 +1641,7 @@
 	}
 
 	private ScenarioRunResult runScenario(Scenario scenario, PackageItem item,
-			ClassLoader cl, RuleBase rb) throws DetailedSerializableException {
+			ClassLoader cl, RuleBase rb, RuleCoverageListener coverage) throws DetailedSerializableException {
 
 		// RuleBase rb = ruleBaseCache.get(item.getUUID());
 		Package bin = rb.getPackages()[0];
@@ -1661,12 +1662,7 @@
 		sessionConfiguration.setKeepReference(false);
 		InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb
 				.newStatefulSession(sessionConfiguration);
-		return runScenario(scenario, res, workingMemory);
-	}
-
-	private ScenarioRunResult runScenario(Scenario scenario,
-			ClassTypeResolver res, InternalWorkingMemory workingMemory)
-			throws DetailedSerializableException {
+		if (coverage != null) workingMemory.addEventListener(coverage);
 		try {
 			new ScenarioRunner(scenario, res, workingMemory);
 			return new ScenarioRunResult(null, scenario);
@@ -1674,9 +1670,12 @@
 			log.error(e);
 			throw new DetailedSerializableException(
 					"Unable to load a required class.", e.getMessage());
+		} finally {
+
 		}
 	}
 
+
 	@WebRemote
 	@Restrict("#{identity.loggedIn}")
 	public BulkTestRunResult runScenariosInPackage(String packageUUID)
@@ -1721,34 +1720,19 @@
 				}
 			}
 
-			AssetItemIterator it = item
-					.listAssetsByFormat(new String[] { AssetFormats.TEST_SCENARIO });
+			AssetItemIterator it = item.listAssetsByFormat(new String[] { AssetFormats.TEST_SCENARIO });
 			List<ScenarioResultSummary> resultSummaries = new ArrayList<ScenarioResultSummary>();
 			RuleBase rb = ruleBaseCache.get(item.getUUID());
 			Package bin = rb.getPackages()[0];
 
-			ClassTypeResolver res = new ClassTypeResolver(bin.getImports()
-					.keySet(), cl);
-			SessionConfiguration sessionConfiguration = new SessionConfiguration();
-			sessionConfiguration.setKeepReference(false);
-			InternalWorkingMemory workingMemory = (InternalWorkingMemory) rb
-					.newStatefulSession(sessionConfiguration);
-
 			RuleCoverageListener coverage = new RuleCoverageListener(
 					expectedRules(bin));
-			workingMemory.addEventListener(coverage);
 
 			while (it.hasNext()) {
 				RuleAsset asset = loadAsset((AssetItem) it.next());
 				Scenario sc = (Scenario) asset.content;
-				sc = runScenario(sc, res, workingMemory).scenario;
+				runScenario(item.getName(), sc, coverage);//runScenario(sc, res, workingMemory).scenario;
 
-				// clean out WM
-				Iterator<FactHandle> fhs = workingMemory.iterateFactHandles();
-				while (fhs.hasNext()) {
-					workingMemory.retract(fhs.next());
-				}
-
 				int[] totals = sc.countFailuresTotal();
 				resultSummaries.add(new ScenarioResultSummary(totals[0],
 						totals[1], asset.metaData.name,

Modified: labs/jbossrules/trunk/drools-guvnor/src/main/resources/selectors.properties
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/main/resources/selectors.properties	2008-09-11 21:20:51 UTC (rev 22692)
+++ labs/jbossrules/trunk/drools-guvnor/src/main/resources/selectors.properties	2008-09-11 23:15:58 UTC (rev 22693)
@@ -1,7 +1,7 @@
 #############################################################################################
 #	SELECTOR CONFIGURATION FILE
 #
-# Selectors are used when building packages to filter assets based on arbitary criteria.
+# Selectors are used when building packages to filter assets based on arbitrary criteria.
 # Selectors can either be a class that implements the AssetSelector interface, or a path to a drl file with
 # rules as to what is to be included (the rule file must be on the class path as indicated by that path).
 #

Modified: labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java
===================================================================
--- labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2008-09-11 21:20:51 UTC (rev 22692)
+++ labs/jbossrules/trunk/drools-guvnor/src/test/java/org/drools/guvnor/server/ServiceImplementationTest.java	2008-09-11 23:15:58 UTC (rev 22693)
@@ -1916,7 +1916,11 @@
 		scenario2.updateContent(ScenarioXMLPersistence.getInstance().marshal(sc));
 		scenario2.checkin("");
 
+
+		//love you
+		long time = System.currentTimeMillis();
 		BulkTestRunResult result = impl.runScenariosInPackage(pkg.getUUID());
+		System.err.println("Time taken for runScenariosInPackage " + (System.currentTimeMillis() - time));
 		assertNull(result.errors);
 
 		assertEquals(50, result.percentCovered);
@@ -1938,6 +1942,92 @@
 		assertEquals(scenario2.getName(), s2.scenarioName);
 	}
 
+	public void testRunPackageScenariosWithDeclaredFacts() throws Exception {
+		ServiceImplementation impl = getService();
+		RulesRepository repo = impl.repository;
+
+		PackageItem pkg = repo.createPackage("testScenarioRunBulkWithDeclaredFacts", "");
+		ServiceImplementation.updateDroolsHeader("declare Wang \n age: Integer \n name: String \n end", pkg);
+		AssetItem rule1 = pkg.addAsset("rule_1", "");
+		rule1.updateFormat(AssetFormats.DRL);
+		rule1
+				.updateContent("rule 'rule1' \n when \np : Wang() \n then \np.setAge(42); \n end");
+		rule1.checkin("");
+
+		//this rule will never fire
+		AssetItem rule2 = pkg.addAsset("rule_2", "");
+		rule2.updateFormat(AssetFormats.DRL);
+		rule2.updateContent("rule 'rule2' \n when \np : Wang(age == 1000) \n then \np.setAge(46); \n end");
+		rule2.checkin("");
+		repo.save();
+
+
+
+		//first, the green scenario
+		Scenario sc = new Scenario();
+		FactData person = new FactData();
+		person.name = "p";
+		person.type = "Wang";
+		person.fieldData.add(new FieldData("age", "40"));
+		person.fieldData.add(new FieldData("name", "michael"));
+
+		sc.fixtures.add(person);
+		sc.fixtures.add(new ExecutionTrace());
+		VerifyRuleFired vr = new VerifyRuleFired("rule1", 1, null);
+		sc.fixtures.add(vr);
+
+		VerifyFact vf = new VerifyFact();
+		vf.name = "p";
+		vf.fieldValues.add(new VerifyField("name", "michael", "=="));
+		vf.fieldValues.add(new VerifyField("age", "42", "=="));
+		sc.fixtures.add(vf);
+
+		AssetItem scenario1 = pkg.addAsset("scen1", "");
+		scenario1.updateFormat(AssetFormats.TEST_SCENARIO);
+		scenario1.updateContent(ScenarioXMLPersistence.getInstance().marshal(sc));
+		scenario1.checkin("");
+
+		//now the bad scenario
+		sc = new Scenario();
+		person = new FactData();
+		person.name = "p";
+		person.type = "Wang";
+		person.fieldData.add(new FieldData("age", "40"));
+		person.fieldData.add(new FieldData("name", "michael"));
+
+		sc.fixtures.add(person);
+		sc.fixtures.add(new ExecutionTrace());
+		vr = new VerifyRuleFired("rule2", 1, null);
+		sc.fixtures.add(vr);
+
+
+		AssetItem scenario2 = pkg.addAsset("scen2", "");
+		scenario2.updateFormat(AssetFormats.TEST_SCENARIO);
+		scenario2.updateContent(ScenarioXMLPersistence.getInstance().marshal(sc));
+		scenario2.checkin("");
+
+		BulkTestRunResult result = impl.runScenariosInPackage(pkg.getUUID());
+		assertNull(result.errors);
+
+		assertEquals(50, result.percentCovered);
+		assertEquals(1, result.rulesNotCovered.length);
+		assertEquals("rule2", result.rulesNotCovered[0]);
+
+		assertEquals(2, result.results.length);
+
+		ScenarioResultSummary s1 = result.results[0];
+		assertEquals(0, s1.failures);
+		assertEquals(3, s1.total);
+		assertEquals(scenario1.getUUID(), s1.uuid);
+		assertEquals(scenario1.getName(), s1.scenarioName);
+
+		ScenarioResultSummary s2 = result.results[1];
+		assertEquals(1, s2.failures);
+		assertEquals(1, s2.total);
+		assertEquals(scenario2.getUUID(), s2.uuid);
+		assertEquals(scenario2.getName(), s2.scenarioName);
+	}
+
 	public void testVerifier() throws Exception {
 		ServiceImplementation impl = getService();
 		PackageItem pkg = impl.repository.createPackage("testVerifier", "");




More information about the jboss-svn-commits mailing list