/* * RHQ Management Platform * Copyright (C) 2005-2013 Red Hat, Inc. * All rights reserved. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation version 2 of the License. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software Foundation, Inc., * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA */ package org.rhq.enterprise.server.resource.test; import static org.rhq.core.domain.util.PageOrdering.ASC; import java.util.Arrays; import javax.ejb.EJBException; import org.testng.annotations.Test; import org.rhq.core.domain.auth.Subject; import org.rhq.core.domain.criteria.ResourceCriteria; import org.rhq.core.domain.resource.Resource; import org.rhq.core.domain.resource.ResourceType; import org.rhq.core.domain.util.PageControl; import org.rhq.core.domain.util.PageList; import org.rhq.enterprise.server.auth.SubjectManagerLocal; import org.rhq.enterprise.server.resource.ResourceManagerLocal; import org.rhq.enterprise.server.test.AbstractEJB3Test; import org.rhq.enterprise.server.test.TransactionCallback; import org.rhq.enterprise.server.util.LookupUtil; import org.rhq.enterprise.server.util.SessionTestHelper; /** * @author Thomas Segismont */ public class GroupMemberCandidateResourcesTest extends AbstractEJB3Test { private static final String GROUP_MEMBER_CANDIDATE_NAME_PREFIX = GroupMemberCandidateResourcesTest.class .getSimpleName() + "-"; private Subject overlord; private ResourceManagerLocal resourceManager; @Override protected void beforeMethod() throws Exception { SubjectManagerLocal subjectManager = LookupUtil.getSubjectManager(); overlord = subjectManager.getOverlord(); resourceManager = LookupUtil.getResourceManager(); } @Test public void testNoCandidates() { executeInTransaction(new TransactionCallback() { @Override public void execute() throws Exception { ResourceCriteria criteria = new ResourceCriteria(); criteria.setCaseSensitive(false); criteria.addFilterName(GROUP_MEMBER_CANDIDATE_NAME_PREFIX); PageList<Resource> groupMemberCandidateResources = resourceManager.findGroupMemberCandidateResources( overlord, criteria, new int[0]); assertEquals(0, groupMemberCandidateResources.getTotalSize()); assertEquals(0, groupMemberCandidateResources.size()); } }); } @Test public void testNoCandidatesWithExclusions() { executeInTransaction(new TransactionCallback() { @Override public void execute() throws Exception { ResourceCriteria criteria = new ResourceCriteria(); criteria.setCaseSensitive(false); criteria.addFilterName(GROUP_MEMBER_CANDIDATE_NAME_PREFIX); int[] alreadySelectedResourceIds = new int[100]; for (int i = 0; i < alreadySelectedResourceIds.length; i++) { alreadySelectedResourceIds[i] = i; } PageList<Resource> groupMemberCandidateResources = resourceManager.findGroupMemberCandidateResources( overlord, criteria, alreadySelectedResourceIds); assertEquals(0, groupMemberCandidateResources.getTotalSize()); assertEquals(0, groupMemberCandidateResources.size()); } }); } @Test public void testUnlimitedPageControl() { executeInTransaction(new TransactionCallback() { @Override public void execute() throws Exception { ResourceCriteria criteria = new ResourceCriteria(); criteria.setPageControl(PageControl.getUnlimitedInstance()); try { PageList<Resource> groupMemberCandidateResources = resourceManager .findGroupMemberCandidateResources(overlord, criteria, new int[0]); fail("findGroupMemberCandidateResources should throw UnsupportedOperationException"); } catch (EJBException e) { assertTrue(e.getCausedByException() instanceof UnsupportedOperationException); } } }); } @Test public void testPageControl() { executeInTransaction(new TransactionCallback() { @Override public void execute() throws Exception { int resourcesCount = 100; createTestResources(resourcesCount); ResourceCriteria criteria = new ResourceCriteria(); criteria.setCaseSensitive(false); criteria.addFilterName(GROUP_MEMBER_CANDIDATE_NAME_PREFIX); criteria.addSortName(ASC); int pageNumber = 5; int pageSize = 7; criteria.setPaging(pageNumber, pageSize); PageList<Resource> groupMemberCandidateResources = resourceManager.findGroupMemberCandidateResources( overlord, criteria, new int[0]); assertEquals(resourcesCount, groupMemberCandidateResources.getTotalSize()); assertEquals(pageSize, groupMemberCandidateResources.size()); for (Resource groupMemberCandidateResource : groupMemberCandidateResources) { assertTrue(groupMemberCandidateResource.getName().startsWith(GROUP_MEMBER_CANDIDATE_NAME_PREFIX)); } assertEquals(pageNumber, groupMemberCandidateResources.getPageControl().getPageNumber()); assertEquals(pageSize, groupMemberCandidateResources.getPageControl().getPageSize()); } }); } @Test public void testPageControlWithExclusions() { executeInTransaction(new TransactionCallback() { @Override public void execute() throws Exception { int resourcesCount = 100; int[] resourcesIds = createTestResources(resourcesCount); ResourceCriteria criteria = new ResourceCriteria(); criteria.setCaseSensitive(false); criteria.addFilterName(GROUP_MEMBER_CANDIDATE_NAME_PREFIX); criteria.addSortName(ASC); int pageNumber = 5; int pageSize = 7; criteria.setPaging(pageNumber, pageSize); int[] alreadySelectedResourceIds = Arrays.copyOfRange(resourcesIds, 13, 59); PageList<Resource> groupMemberCandidateResources = resourceManager.findGroupMemberCandidateResources( overlord, criteria, alreadySelectedResourceIds); assertEquals(resourcesCount, groupMemberCandidateResources.getTotalSize()); assertEquals(pageSize, groupMemberCandidateResources.size()); for (Resource groupMemberCandidateResource : groupMemberCandidateResources) { assertTrue(groupMemberCandidateResource.getName().startsWith(GROUP_MEMBER_CANDIDATE_NAME_PREFIX)); } assertEquals(pageNumber, groupMemberCandidateResources.getPageControl().getPageNumber()); assertEquals(pageSize, groupMemberCandidateResources.getPageControl().getPageSize()); } }); } private int[] createTestResources(int resourcesCount) { int[] resourcesIds = new int[resourcesCount]; ResourceType testResourceType = SessionTestHelper.createNewResourceType(em); for (int i = 0; i < resourcesCount; i++) { resourcesIds[i] = SessionTestHelper.createNewResource(em, GROUP_MEMBER_CANDIDATE_NAME_PREFIX + i, testResourceType).getId(); } return resourcesIds; } }