/*
* RHQ Management Platform
* Copyright 2013, Red Hat Middleware LLC, and individual contributors
* as indicated by the @author tags. See the copyright.txt file in the
* distribution for a full listing of individual contributors.
*
* 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., 675 Mass Ave, Cambridge, MA 02139, USA.
*/
package org.rhq.enterprise.server.search;
import org.testng.annotations.Test;
import org.rhq.core.domain.auth.Subject;
import org.rhq.core.domain.authz.Permission;
import org.rhq.core.domain.authz.Role;
import org.rhq.core.domain.criteria.SavedSearchCriteria;
import org.rhq.core.domain.search.SavedSearch;
import org.rhq.core.domain.search.SearchSubsystem;
import org.rhq.core.domain.util.PageList;
import org.rhq.enterprise.server.authz.PermissionException;
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 SavedSearchManagerBeanTest extends AbstractEJB3Test {
private SavedSearchManagerLocal savedSearchManager;
@Override
protected void beforeMethod() throws Exception {
savedSearchManager = LookupUtil.getSavedSearchManager();
}
@Test
public void testCRUD() {
executeInTransaction(new TransactionCallback() {
@Override
public void execute() throws Exception {
Subject subject = SessionTestHelper.createNewSubject(em, "fake subject");
int entityId = savedSearchManager.createSavedSearch(subject, new SavedSearch(SearchSubsystem.GROUP,
"fake saved search", "pipo", subject));
SavedSearch entity = savedSearchManager.getSavedSearchById(subject, entityId);
assertNotNull(entity);
SavedSearch modifiedEntity = new SavedSearch(SearchSubsystem.RESOURCE, "fake saved search modified",
"molo", subject);
modifiedEntity.setId(entityId);
boolean updateSuccess = savedSearchManager.updateSavedSearch(subject, modifiedEntity);
assertTrue("Update save searched failed", updateSuccess);
savedSearchManager.deleteSavedSearch(subject, entityId);
assertNull(em.find(SavedSearch.class, entityId));
}
});
}
@Test
public void testgetSavedSearchByIdPermission() {
executeInTransaction(new TransactionCallback() {
@Override
public void execute() throws Exception {
Subject subject1 = SessionTestHelper.createNewSubject(em, "fake subject 1");
SavedSearch savedSearch = new SavedSearch(SearchSubsystem.GROUP, "fake saved search", "pipo", subject1);
int entityId = savedSearchManager.createSavedSearch(subject1, savedSearch);
Subject subject2 = SessionTestHelper.createNewSubject(em, "fake subject 2");
try {
savedSearchManager.getSavedSearchById(subject2, entityId);
fail("Expected " + PermissionException.class.getSimpleName());
} catch (PermissionException e) {
assertTrue(e.getMessage().contains("view"));
}
}
});
}
@Test
public void testCreateSavedSearchPermission() {
executeInTransaction(new TransactionCallback() {
@Override
public void execute() throws Exception {
final Subject subject1 = SessionTestHelper.createNewSubject(em, "fake subject 1");
final Subject subject2 = SessionTestHelper.createNewSubject(em, "fake subject 2");
assertManipulatePermissionExceptionThrown(new Runnable() {
@Override
public void run() {
savedSearchManager.createSavedSearch(subject2, new SavedSearch(SearchSubsystem.GROUP,
"fake saved search 2", "molo", subject1));
}
});
}
});
}
@Test
public void testDeleteSavedSearchPermission() {
executeInTransaction(new TransactionCallback() {
@Override
public void execute() throws Exception {
final Subject subject1 = SessionTestHelper.createNewSubject(em, "fake subject 1");
final int entityId = savedSearchManager.createSavedSearch(subject1, new SavedSearch(
SearchSubsystem.GROUP, "fake saved search", "pipo", subject1));
final Subject subject2 = SessionTestHelper.createNewSubject(em, "fake subject 2");
assertManipulatePermissionExceptionThrown(new Runnable() {
@Override
public void run() {
savedSearchManager.deleteSavedSearch(subject2, entityId);
}
});
}
});
}
@Test
public void testUpdateSavedSearchPermission() {
executeInTransaction(new TransactionCallback() {
@Override
public void execute() throws Exception {
final Subject subject1 = SessionTestHelper.createNewSubject(em, "fake subject 1");
final int entityId = savedSearchManager.createSavedSearch(subject1, new SavedSearch(
SearchSubsystem.GROUP, "fake saved search", "pipo", subject1));
final Subject subject2 = SessionTestHelper.createNewSubject(em, "fake subject 2");
assertManipulatePermissionExceptionThrown(new Runnable() {
@Override
public void run() {
SavedSearch modifiedEntity = new SavedSearch(SearchSubsystem.GROUP, "fake saved search 2",
"molo", subject1);
modifiedEntity.setId(entityId);
savedSearchManager.updateSavedSearch(subject2, modifiedEntity);
}
});
}
});
}
private void assertManipulatePermissionExceptionThrown(Runnable runnable) {
try {
runnable.run();
fail("Expected " + PermissionException.class.getSimpleName());
} catch (PermissionException e) {
assertTrue(e.getMessage().contains("manipulate"));
}
}
@Test
public void testFindSavedSearchesByCriteria() {
executeInTransaction(new TransactionCallback() {
@Override
public void execute() throws Exception {
Subject subject1 = SessionTestHelper.createNewSubject(em, "fake subject 1");
Subject subject2 = SessionTestHelper.createNewSubject(em, "fake subject 2");
Role inventoryManagerRole = SessionTestHelper.createNewRoleForSubject(em, subject2,
"inventory manager role", Permission.MANAGE_INVENTORY);
for (int i = 0; i < 1000; i++) {
String iStr = String.valueOf(i);
savedSearchManager.createSavedSearch(subject1, new SavedSearch(SearchSubsystem.GROUP,
"fake saved search " + iStr, "pipo " + iStr, subject1));
savedSearchManager.createSavedSearch(subject2, new SavedSearch(SearchSubsystem.GROUP,
"fake saved search " + iStr, "molo " + iStr, subject2));
}
SavedSearchCriteria criteria = new SavedSearchCriteria();
criteria.addFilterName("fake saved search");
criteria.clearPaging();
PageList<SavedSearch> foundEntities = savedSearchManager
.findSavedSearchesByCriteria(subject2, criteria);
assertTrue("User with manage inventory should see all saved searches", 2000 == foundEntities.size());
foundEntities = savedSearchManager.findSavedSearchesByCriteria(subject1, criteria);
assertTrue("User without manage inventory should see only its own saved searches",
1000 == foundEntities.size());
}
});
}
}