modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/translation/GroupSearchTranslator.java | 29 ++- modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LargeGroupCriteriaTest.java | 74 +++++++++- 2 files changed, 91 insertions(+), 12 deletions(-)
New commits: commit d9f41878fbfff7659e62a82a7f7195142e11693d Author: John Mazzitelli mazz@redhat.com Date: Fri May 25 12:38:25 2012 -0400
[BZ 820716] unit tests to test the search bar queries when using the availability keyword
Conflicts:
modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LargeGroupCriteriaTest.java
diff --git a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LargeGroupCriteriaTest.java b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LargeGroupCriteriaTest.java index cf39135..d5ad66b 100644 --- a/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LargeGroupCriteriaTest.java +++ b/modules/enterprise/server/jar/src/test/java/org/rhq/enterprise/server/resource/group/test/LargeGroupCriteriaTest.java @@ -63,8 +63,9 @@ public class LargeGroupCriteriaTest extends LargeGroupTestBase { * Remove the group and all its members. */ @AfterMethod(alwaysRun = true) - public void afterMethod() throws Exception { + public void tearDownGroups() throws Exception { if (env != null) { + System.out.println("Tearing down groups..."); Iterator<LargeGroupEnvironment> iter = env.iterator(); while (iter.hasNext()) { LargeGroupEnvironment doomed = iter.next(); @@ -75,6 +76,50 @@ public class LargeGroupCriteriaTest extends LargeGroupTestBase { } }
+ public void testSearchBarAvailabilityQueryUP() throws Exception { + GroupAvailCounts gac = new GroupAvailCounts(5, 0, 0, 0); + PageList<ResourceGroupComposite> pageList = testGroupQueriesWithSearchBar(gac, "availability=up"); + assert pageList.size() == 1; + + tearDownGroups(); + pageList = testGroupQueriesWithSearchBar(gac, "availability != up"); + assert pageList.size() == 0; + } + + public void testSearchBarAvailabilityQueryDOWN() throws Exception { + GroupAvailCounts gac = new GroupAvailCounts(0, 5, 0, 0); + PageList<ResourceGroupComposite> pageList = testGroupQueriesWithSearchBar(gac, "availability=down"); + assert pageList.size() == 1; + + tearDownGroups(); + pageList = testGroupQueriesWithSearchBar(gac, "availability != down"); + assert pageList.size() == 0; + } + + public void testSearchBarAvailabilityQueryDISABLED() throws Exception { + GroupAvailCounts gac = new GroupAvailCounts(0, 0, 0, 5); + PageList<ResourceGroupComposite> pageList = testGroupQueriesWithSearchBar(gac, "availability=disabled"); + assert pageList.size() == 1; + + tearDownGroups(); + pageList = testGroupQueriesWithSearchBar(gac, "availability != disabled"); + assert pageList.size() == 0; + } + + public void testSearchBarAvailabilityQueryMIXED() throws Exception { + // when a group has a mix of up/down/disabled resources, it will not be returned with the avail search expression + GroupAvailCounts gac = new GroupAvailCounts(2, 2, 0, 2); + PageList<ResourceGroupComposite> pageList = testGroupQueriesWithSearchBar(gac, "availability=up"); + assert pageList.size() == 0; + + tearDownGroups(); + pageList = testGroupQueriesWithSearchBar(gac, "availability=down"); + assert pageList.size() == 0; + + tearDownGroups(); + pageList = testGroupQueriesWithSearchBar(gac, "availability=disabled"); + assert pageList.size() == 0; + }
public void testSmallGroups() throws Exception { ArrayList<GroupAvailCounts> gacs = new ArrayList<LargeGroupCriteriaTest.GroupAvailCounts>(); @@ -107,6 +152,30 @@ public class LargeGroupCriteriaTest extends LargeGroupTestBase { testGroupQueries(gacs); }
+ private PageList<ResourceGroupComposite> testGroupQueriesWithSearchBar(GroupAvailCounts gac, String searchExpression) + throws Exception { + ResourceGroupManagerLocal groupManager = LookupUtil.getResourceGroupManager(); + + env = new ArrayList<LargeGroupEnvironment>(1); + + LargeGroupEnvironment lgeWithTypes = null; + env.add(createLargeGroupWithNormalUserRoleAccessWithInventoryStatus(lgeWithTypes, gac.total, gac.down, + gac.unknown, gac.disabled, Permission.CONFIGURE_READ)); + + ResourceGroupCriteria criteria; + PageList<ResourceGroupComposite> pageList; + long start; + + // test findResourceGroupCompositesByCriteria where the criteria will use the search bar feature + SessionTestHelper.simulateLogin(env.get(0).normalSubject); + criteria = new ResourceGroupCriteria(); + criteria.setSearchExpression(searchExpression); + start = System.currentTimeMillis(); + pageList = groupManager.findResourceGroupCompositesByCriteria(env.get(0).normalSubject, criteria); + System.out.println("criteria with search==>" + (System.currentTimeMillis() - start) + "ms"); + return pageList; + } + private void testGroupQueries(ArrayList<GroupAvailCounts> groupAvailCounts) throws Exception { ResourceGroupManagerLocal groupManager = LookupUtil.getResourceGroupManager();
@@ -133,7 +202,8 @@ public class LargeGroupCriteriaTest extends LargeGroupTestBase { criteria = new ResourceGroupCriteria(); start = System.currentTimeMillis(); pageList = groupManager.findResourceGroupCompositesByCriteria(lge.normalSubject, criteria); - System.out.println("findResourceGroupCompositesByCriteria #" + i + "==>" + (System.currentTimeMillis() - start) + "ms"); + System.out.println("findResourceGroupCompositesByCriteria #" + i + "==>" + + (System.currentTimeMillis() - start) + "ms"); assert pageList.size() == 1 : "the query should only have selected the one group for our user"; groupComp = pageList.get(0); System.out.println("-->" + groupComp);
commit 310e054924f52685904ab841d557c2f1b58aed24 Author: John Mazzitelli mazz@redhat.com Date: Tue May 15 12:03:50 2012 -0400
[BZ 820716] fix search bar group availability query
diff --git a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/translation/GroupSearchTranslator.java b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/translation/GroupSearchTranslator.java index 9512ecf..b3499a2 100644 --- a/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/translation/GroupSearchTranslator.java +++ b/modules/enterprise/server/jar/src/main/java/org/rhq/enterprise/server/search/translation/GroupSearchTranslator.java @@ -21,6 +21,7 @@ package org.rhq.enterprise.server.search.translation; import static org.rhq.enterprise.server.search.common.SearchQueryGenerationUtility.getJPQLForString;
import org.rhq.core.domain.auth.Subject; +import org.rhq.core.domain.measurement.AvailabilityType; import org.rhq.core.domain.resource.ResourceCategory; import org.rhq.core.domain.resource.group.GroupCategory; import org.rhq.enterprise.server.search.SearchExpressionException; @@ -49,26 +50,34 @@ public class GroupSearchTranslator extends AbstractSearchTranslator { return new SearchFragment(SearchFragment.Type.WHERE_CLAUSE, "true"); }
- String numericAvailabilityFragment = null; + String comparator = null; if (op == RHQLComparisonOperator.EQUALS || op == RHQLComparisonOperator.EQUALS_STRICT) { - numericAvailabilityFragment = " = "; + comparator = " = "; } else { - numericAvailabilityFragment = " != "; + comparator = " != "; }
+ String numericAvailType = null; if (filter.equalsIgnoreCase("up")) { - numericAvailabilityFragment += "1"; - } else { - numericAvailabilityFragment += "0"; + numericAvailType = String.valueOf(AvailabilityType.UP.ordinal()); + } else if (filter.equalsIgnoreCase("down")) { + numericAvailType = String.valueOf(AvailabilityType.DOWN.ordinal()); + } else if (filter.equalsIgnoreCase("disabled")) { + numericAvailType = String.valueOf(AvailabilityType.DISABLED.ordinal()); + } else { // unknown + numericAvailType = String.valueOf(AvailabilityType.UNKNOWN.ordinal()); }
return new SearchFragment( // SearchFragment.Type.PRIMARY_KEY_SUBQUERY, "SELECT rg.id" // + " FROM ResourceGroup rg " // - + " WHERE ( SELECT AVG( iavail.availabilityType ) " // - + " FROM rg.explicitResources ires " // - + " JOIN ires.currentAvailability iavail ) " + numericAvailabilityFragment); - + + " WHERE " // + + " ( SELECT COUNT(eavail.availabilityType) " // + + " FROM rg.explicitResources eres " // + + " JOIN eres.currentAvailability eavail " // + + " WHERE eavail.availabilityType = '" + numericAvailType + "' ) " // + + comparator // + + " ( SELECT COUNT(eres) FROM rg.explicitResources eres ) "); } else if (path.equals("category")) { return new SearchFragment(SearchFragment.Type.WHERE_CLAUSE, // getJPQLForEnum(alias + ".resourceType.category", op, filter, ResourceCategory.class, false));
rhq-commits@lists.fedorahosted.org