Author: mic...@jb... Date: 2006-01-17 03:02:15 -0500 (Tue, 17 Jan 2006) New Revision: 2113 Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/MetaData.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetVersionInfo.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/Tag.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/HibernateUtil.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepoProxyHandler.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/StoreEventListener.java trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/IntegrationTest.java trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RulePersistenceTest.java trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java Log: More integration tests and fixes that follow it Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/MetaData.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/MetaData.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/MetaData.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -29,6 +29,22 @@ private String coverage; private String rights; + public MetaData() { + } + + public MetaData(String title, + String creator, + String subject, + String description, + String format) { + super(); + this.title = title; + this.creator = creator; + this.subject = subject; + this.description = description; + this.format = format; + } + public String getContributor(){ return contributor; } @@ -156,4 +172,6 @@ return copy; } + + } Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleDef.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -28,7 +28,6 @@ /** * Use tagging to aid with searching and sorting of large numbers of rules. - * Tags should not effect the versioning of the rules. */ public RuleDef addTag(String tag) { this.tags.add( new Tag( tag ) ); @@ -39,6 +38,20 @@ this.tags.add( tag ); return this; } + + public void removeTag(Tag tag) { + this.tags.remove(tag); + } + + public void removeTag(String tagVal) { + for ( Iterator iter = this.tags.iterator(); iter.hasNext(); ) { + Tag tag = (Tag) iter.next(); + if (tag.getTag().equals(tagVal)) { + iter.remove(); + return; + } + } + } RuleDef() { } @@ -177,7 +190,8 @@ Set newTags = new HashSet(); for ( Iterator iter = this.getTags().iterator(); iter.hasNext(); ) { Tag tag = (Tag) iter.next(); - newTags.add( new Tag( tag.getTag() ) ); + newTags.add( new Tag( tag.getTag() ) ); + } return newTags; } @@ -203,7 +217,7 @@ } public String toString() { - return "{ id = " + this.getId() + " name = (" + this.name + ") version = " + this.getVersionNumber() + " }"; + return "{ id = " + this.getId() + " name = '" + this.name + "' version = " + this.getVersionNumber() + " }"; } public Long getHistoricalId() { Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetDef.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -96,13 +96,24 @@ this.applicationData ); } + /** Find the current working version info. */ + public RuleSetVersionInfo getCurrentVersionInfo() { + for ( Iterator iter = this.versionHistory.iterator(); iter.hasNext(); ) { + RuleSetVersionInfo info = (RuleSetVersionInfo) iter.next(); + if (info.getVersionNumber() == this.getWorkingVersionNumber()) { + return info; + } + } + return null; + } + /** * Removes a rule from the current ruleset. This * DOES NOT delete the rule, and DOES NOT effect any other versions * of the ruleset. * * Note that assets are removed by setting their version number to - * IVersionable.NO_VERSION (-1) so that the do not show up. + * IVersionable.NO_VERSION (-1) so that they do not show up. * This may be changed so they are archived in future, and deleted. * * The repository API has a delete(RuleDef rule) method @@ -255,7 +266,7 @@ * so on without effecting any previous versions of rules and the ruleset. * * Previous rules can be retrieved by changing the value of - * workingVersionNumber. + * workingVersionNumber when loading the ruleset. * * Note that further to this, rules themselves will be versioned on save * (think of that versioning as "minor" versions, and this sort of ruleset @@ -263,13 +274,12 @@ * * Ideally once a new version is created, the RuleSet should be stored and * then loaded fresh, which will hide the non working versions of the rules. - * */ public void createNewVersion(String comment, String newStatus) { this.workingVersionNumber++; - addNewVersionHistory( newStatus ); + addNewVersionHistory( newStatus, comment ); createAndAddNewVersions( this.rules, comment, @@ -294,10 +304,11 @@ } - private void addNewVersionHistory(String newStatus) { + private void addNewVersionHistory(String newStatus, String comment) { RuleSetVersionInfo newVersion = new RuleSetVersionInfo(); newVersion.setStatus( newStatus ); newVersion.setVersionNumber( this.workingVersionNumber ); + newVersion.setVersionComment( comment ); this.versionHistory.add( newVersion ); } Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetVersionInfo.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetVersionInfo.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/RuleSetVersionInfo.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -74,6 +74,9 @@ return 0; } + public String toString() { + return "{ versionComment=" + this.versionComment + " versionNumber=" + this.versionNumber + " }"; + } Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/Tag.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/Tag.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/Tag.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -5,7 +5,7 @@ * This represents a users tag for a rule, ruleset. * This aids with classification of rules in an ad-hoc fashion. * - * A tag it its own entity as tags should be shared as much as possible. + * A tag is its own entity as tags should be shared as much as possible. * * @author <a href="mailto:mic...@gm..."> Michael Neale</a> * Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/HibernateUtil.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/HibernateUtil.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/HibernateUtil.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -20,17 +20,11 @@ */ public class HibernateUtil { - private static final SessionFactory sessionFactory; + private static SessionFactory sessionFactory; static { try { - - Configuration cfg = new Configuration(); - cfg.setInterceptor( new StoreEventListener() ); - registerPersistentClasses( cfg ); - cfg.configure("drools-repository-db.cfg.xml"); - - sessionFactory = cfg.buildSessionFactory(); + configureSessionFactory(); } catch ( Throwable ex ) { // Make sure you log the exception, as it might be swallowed @@ -40,6 +34,22 @@ } /** + * This will setup the session factory with paramaters + * that are available. + * May be called again to re-establish the factory if needed. + */ + public static void configureSessionFactory() { + Configuration cfg = new Configuration(); + cfg.setInterceptor( new StoreEventListener() ); + registerPersistentClasses( cfg ); +// cfg.setProperty("connection.username", "sa"); +// cfg.setProperty("connection.password", ""); + cfg.configure("drools-repository-db.cfg.xml"); + + sessionFactory = cfg.buildSessionFactory(); + } + + /** * Use class based registration for refactor-friendly goodness. */ private static void registerPersistentClasses(Configuration cfg) { Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepoProxyHandler.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepoProxyHandler.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepoProxyHandler.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -14,6 +14,10 @@ * This is the glue between the actual implementation and the interface. * Kind of like poor mans aspects. But I couldn't justify AOP for this little thing. * + * This provides the stateful and stateless behaviour. + * It can also be extended to provide user context to the implementation class + * (for auditing, access control and locking for instance). + * * @author <a href="mailto:mic...@gm..."> Michael Neale</a> */ public class RepoProxyHandler @@ -32,6 +36,7 @@ * work with the current session. */ public RepoProxyHandler() { + this(false); } /** @@ -39,9 +44,9 @@ * @param stateful True if stateful operation is desired. */ public RepoProxyHandler(boolean stateful) { + this.stateful = stateful; if (stateful) { this.session = HibernateUtil.getSessionFactory().openSession(); - this.stateful = true; } } @@ -58,6 +63,7 @@ if (this.stateful && method.getName().equals("close")) { session.close(); + StoreEventListener.setCurrentConnection(null); return null; } @@ -68,6 +74,10 @@ Object result = method.invoke(repoImpl, args); session.flush(); tx.commit(); + + if (!stateful) { + this.repoImpl.injectSession(null); //not really needed, but to prove it is stateless ! + } return result; } catch (InvocationTargetException e) { Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/RepositoryImpl.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -72,7 +72,7 @@ * @see org.drools.repository.db.RepositoryManager#findRulesByTag(java.lang.String) */ public List findRulesByTag(String tag) { - List result = session.createQuery( "from RuleDef as rule " + + List result = session.createQuery( "select rule from RuleDef as rule " + "join rule.tags as tags " + "where tags.tag = :tag" ).setString( "tag", tag ).list(); return result; @@ -90,9 +90,9 @@ */ public RuleSetDef loadRuleSet(String ruleSetName, long workingVersionNumber) { + session.clear(); //to make sure latest is loaded up, not stale enableWorkingVersionFilter( workingVersionNumber, - session ); - + session ); RuleSetDef def = loadRuleSetByName( ruleSetName, session ); def.setWorkingVersionNumber( workingVersionNumber ); Modified: trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/StoreEventListener.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/StoreEventListener.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/java/org/drools/repository/db/StoreEventListener.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -2,7 +2,6 @@ import java.io.Serializable; import java.sql.Connection; -import java.util.Iterator; import org.drools.repository.ISaveHistory; import org.hibernate.EmptyInterceptor; @@ -44,34 +43,21 @@ Session session = getSessionFactory().openSession( (Connection) currentConnection.get() ); - - System.out.println( "POSSIBLY SAVING COPY" ); - ISaveHistory prev = (ISaveHistory) session.load( entity.getClass(), versionable.getId(), LockMode.NONE ); if ( versionable.isStateChanged( prev ) ) { - ISaveHistory copy = (ISaveHistory) versionable.copy(); - copy.setHistoricalId( prev.getId() ); + ISaveHistory copy = (ISaveHistory) prev.copy(); + copy.setHistoricalId( versionable.getId() ); copy.setHistoricalRecord( true ); session.save( copy ); session.flush(); - //session.close(); + session.close(); System.out.println( "SAVING HISTORY COPY" ); } - else { - System.out.println( "NOPE, not saving." ); - } } - public void postFlush(Iterator entities) { - for ( Iterator iter = entities; iter.hasNext(); ) { - Object element = (Object) iter.next(); - - } - } - /** * Used to set the current session so the interceptor can access it. * @param session @@ -80,49 +66,6 @@ currentConnection.set(conn); } - // public boolean onFlushDirty(Object entity, - // Serializable id, - // Object[] currentState, - // Object[] previousState, - // String[] propertyNames, - // Type[] types) { - // if (entity instanceof IVersionable) { - // handleVersionable( entity ); - // } - // return false; - // } - // - // - // private void handleVersionable(Object entity) { - // IVersionable versionable = (IVersionable) entity; - // if (versionable instanceof RuleDef) { - // handleRuleDef( versionable ); - // } - // } - // - // - // private void handleRuleDef(IVersionable versionable) { - // RuleDef def = (RuleDef) versionable; - // Session current = getSessionFactory().getCurrentSession(); - // Session session = getSessionFactory().openSession(current.connection()); - // - // System.out.println("POSSIBLY SAVING COPY"); - // - // RuleDef prev = (RuleDef) session.load(RuleDef.class, def.getId(), - // LockMode.NONE); - // if (!prev.getContent().equals(def.getContent()) ){ - // RuleDef copy = (RuleDef) def.copy(); - // copy.setHistoricalId(prev.getId()); - // copy.setHistoricalRecord(true); - // session.save(copy); - // session.flush(); - // System.out.println("SAVING RULE HISTORY COPY"); - // } else { - // System.out.println("NOPE, not saving."); - // } - // } - // - private SessionFactory getSessionFactory() { return HibernateUtil.getSessionFactory(); } Modified: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleDef.hbm.xml 2006-01-17 08:02:15 UTC (rev 2113) @@ -15,7 +15,7 @@ <property name="name"/> <property name="versionNumber" /> - <property name="content" /> + <property name="content" type="text" /> <property name="status" /> <property name="checkedOut" /> <property name="checkedOutBy" /> Modified: trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml =================================================================== --- trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/main/resources/org/drools/repository/RuleSetDef.hbm.xml 2006-01-17 08:02:15 UTC (rev 2113) @@ -55,7 +55,7 @@ <filter name="workingVersionFilter" condition=":filteredVersionNumber = versionNumber" /> </set> - <set name="imports" lazy="false" cascade="all" optimistic-lock="false"> + <set name="imports" lazy="false" table="RULESET_IMPORS" cascade="all" optimistic-lock="false"> <key column="RULESET_ID"/> <one-to-many class="org.drools.repository.ImportDef"/> <filter name="workingVersionFilter" condition=":filteredVersionNumber = versionNumber" /> Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/IntegrationTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/IntegrationTest.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/IntegrationTest.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -1,27 +1,169 @@ package org.drools.repository; +import java.util.Iterator; +import java.util.List; + import junit.framework.TestCase; +/** + * This integration test aims to do a full suite of scenarios. + * Including concurrent editing of rules, simulating multiple rules in parallel. + * + * Note that I am using stateful repository instances as it makes it easier to test. + * I can control when the session is closed etc in a single threaded test run. + * + * + * @author <a href="mailto:mic...@gm..."> Michael Neale</a> + */ public class IntegrationTest extends TestCase { - public void testStateful() { - RepositoryManager repo1 = RepositoryFactory.getStatefulRepository(); - RepositoryManager repo2 = RepositoryFactory.getStatefulRepository(); + + /** + * This will all execute as one JUnit test. + * Any failure will cause the test to stop, but this is not a unit test, + * so that is acceptable. + */ + public void testBootstrap() { + RepositoryManager repo = RepositoryFactory.getStatefulRepository(); - RuleDef rule1 = new RuleDef("repo1", "Dsadsadsadsa"); - repo1.save(rule1); - repo1.close(); - repo2.save(rule1); + // In the beginning there was a rule + RuleDef rule = new RuleDef("Integration rule 1", "rule { when bob likes cheese then print 'yeah' }"); + rule.setDocumentation("This is an initial rule"); + rule.addTag("CHEESE RULE"); + rule.setMetaData(new MetaData("a rule", "michael", "cheese", "something", "drl")); + repo.save(rule); -// RuleDef rule2 = repo2.loadRule("repo1", 1); -// rule2.setContent("ABNBNBN"); -// repo2.save(rule2); -// -// rule1.setContent("bnmbmnbmn"); -// repo1.save(rule1); + //now lets load that rule back + List list = repo.findRulesByTag("CHEESE RULE"); + assertEquals(1, list.size()); + rule = (RuleDef) list.get(0); + assertEquals("This is an initial rule", rule.getDocumentation()); + + // lets create a ruleset + MetaData meta = new MetaData(); + meta.setContributor("Michael"); + meta.setDescription("A test ruleset"); + RuleSetDef ruleSet = new RuleSetDef("Integration ruleset 1", meta); + RuleSetVersionInfo info = ruleSet.getCurrentVersionInfo(); + info.setStatus("draft"); + + //time to save it + repo.save(ruleSet); + + //now lets finish this session + repo.close(); + + //check we can load it up + repo = RepositoryFactory.getStatefulRepository(); + assertTrue(repo.listRuleSets().size() > 0); + ruleSet = repo.loadRuleSet("Integration ruleset 1", 1); + assertEquals("draft", ruleSet.getCurrentVersionInfo().getStatus()); + + //now lets work "disconnected" for a while + repo.close(); + + + //lets add the rule to it that we loaded before, and some other goodies + ruleSet.addRule(rule); + ruleSet.addRule(new RuleDef("Integration rule 2", "Some content")); + ruleSet.addFunction(new FunctionDef("this is a function", "blah blah blah")); + ruleSet.addApplicationData(new ApplicationDataDef("blah", "String")); + ruleSet.addImport(new ImportDef("java.lang.String")); + + repo = RepositoryFactory.getStatefulRepository(); + repo.save(ruleSet); + repo.close(); + + //now lets load it again, and work on it disconnected + repo = RepositoryFactory.getStatefulRepository(); + ruleSet = repo.loadRuleSet("Integration ruleset 1", 1); + repo.close(); + + //check its OK first + assertEquals("this is a function", ((FunctionDef) ruleSet.getFunctions().iterator().next()).getFunctionContent()); + assertEquals(2, ruleSet.getRules().size()); + + //now lets go and modify some rules + for ( Iterator iter = ruleSet.getRules().iterator(); iter.hasNext(); ) { + RuleDef myRule = (RuleDef) iter.next(); + myRule.setContent("CHANGED RULE TEXT"); + //this should cause us to have some rule history saved. + //this has nothing to do with ruleset versioning. + } + + //connect and save + repo = RepositoryFactory.getStatefulRepository(); + repo.save(ruleSet); + ruleSet = repo.loadRuleSet("Integration ruleset 1", 1); + + + //just to prove the save history, lets check the history of a rule + rule = ruleSet.findRuleByName("Integration rule 2"); + List history = repo.listRuleSaveHistory(rule); + assertEquals(1, history.size()); + RuleDef historicalRule = (RuleDef) history.get(0); + String oldContent = historicalRule.getContent(); + assertTrue(! oldContent.equals(rule.getContent())); + + //lets also check that the correct number of rules are on the ruleset, history is seperate + assertEquals(2, ruleSet.getRules().size()); + + //now lets create a new major version of the ruleset. + ruleSet.createNewVersion("New version", "pending"); + repo.save(ruleSet); + repo.close(); + + //now we will have 2 versions of the ruleset, lets load up the latest. + repo = RepositoryFactory.getStatefulRepository(); + ruleSet = repo.loadRuleSet("Integration ruleset 1", 2); + assertEquals(2, ruleSet.getVersionHistory().size()); + assertEquals("New version", ruleSet.getCurrentVersionInfo().getVersionComment()); + assertEquals("pending", ruleSet.getCurrentVersionInfo().getStatus()); + + + //lets add a rule to it (making 3 rules in total) + ruleSet.addRule(new RuleDef("Integration rule 3", "content")); + repo.save(ruleSet); + + //lets load up the old version, check that there is still only 2 rules + ruleSet = repo.loadRuleSet("Integration ruleset 1", 1); + assertEquals(2, ruleSet.getRules().size()); + assertEquals("draft", ruleSet.getCurrentVersionInfo().getStatus()); + + + repo.close(); + + + } + + /** + * Lets create 3 rulesets, each with 500 rules. + * Each RuleSet will have several functions, applicationdata, imports and so on. + * Rules will also have tags, a + * */ + public void initialDataSetup() { + create500CheeseRules(); + + + } + + + private void create500CheeseRules() { + RepositoryManager repo = RepositoryFactory.getStatefulRepository(); + + //lets build some rules, stand alone + for (int i = 0; i < 500; i ++) { + RuleDef rule = new RuleDef("cheese-rule-" + i, "The rule body here " + i); + rule.addTag("FIRST").addTag("NUM" + i); + repo.save(rule); + } + + repo.close(); + } + } Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RulePersistenceTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RulePersistenceTest.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RulePersistenceTest.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -26,30 +26,35 @@ def.setContent("new content"); repo.save(def); - def = repo.loadRule("myRule3", 1); assertEquals(id, def.getId()); assertEquals("new content", def.getContent()); + def.removeTag("tag1"); + repo.save(def); + def = repo.loadRule("myRule3", 1); + assertEquals(2, def.getTags().size()); } public void testRetreieveRuleWithTags() { RepositoryManager repo = getRepo(); - RuleDef newRule = new RuleDef("my rule", "content"); - newRule.addTag("HR").addTag("SALARY"); + RuleDef newRule = new RuleDef("my rule RWT", "content"); + newRule.addTag("RWT").addTag("RWT2"); repo.save(newRule); - RuleDef rule = repo.loadRule("my rule", 1); + RuleDef rule = repo.loadRule("my rule RWT", 1); assertNotNull(rule); - assertEquals("my rule", rule.getName()); + assertEquals("my rule RWT", rule.getName()); Set tags = rule.getTags(); assertEquals(2, tags.size()); String[] tagList = rule.listTags(); - assertTrue(tagList[0].equals("HR") || tagList[0].equals("SALARY")); + assertTrue(tagList[0].equals("RWT") || tagList[0].equals("RWT2")); - List rules = repo.findRulesByTag("HR"); - assertTrue(rules.size() > 0); + List rules = repo.findRulesByTag("RWT"); + assertEquals(1, rules.size()); + rule = (RuleDef) rules.get(0); + assertEquals("my rule RWT", rule.getName()); } public void testRuleCopy() { Modified: trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java =================================================================== --- trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-17 02:46:13 UTC (rev 2112) +++ trunk/labs/jbossrules/drools-repository/src/test/java/org/drools/repository/RuleSetPersistenceTest.java 2006-01-17 08:02:15 UTC (rev 2113) @@ -321,8 +321,15 @@ assertEquals("search rule tags in set", ((RuleDef) list.get(0)).getName()); } + public void testFindWorkingVersionInfo() { + RuleSetDef ruleset = new RuleSetDef("nothing", null); + RuleSetVersionInfo info = ruleset.getCurrentVersionInfo(); + assertNotNull(info); + assertEquals(1, info.getVersionNumber()); + } + // public void testLargeNumbers() { // RuleSetDef large = new RuleSetDef("Large1", null); // |