/**
* Copyright (C) 2010 eXo Platform SAS.
*
* This is free software; you can redistribute it and/or modify it
* under the terms of the GNU Lesser General Public License as
* published by the Free Software Foundation; either version 2.1 of
* the License, or (at your option) any later version.
*
* This software 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
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this software; if not, write to the Free
* Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA
* 02110-1301 USA, or see the FSF site: http://www.fsf.org.
*/
package org.exoplatform.services.jcr.impl.core.security;
import org.exoplatform.services.jcr.config.WorkspaceEntry;
import org.exoplatform.services.jcr.core.CredentialsImpl;
import org.exoplatform.services.jcr.core.ManageableRepository;
import org.exoplatform.services.jcr.impl.dataflow.serialization.TesterItemsPersistenceListener;
import org.exoplatform.services.security.IdentityConstants;
import java.security.AccessControlException;
import java.security.PrivilegedExceptionAction;
/**
* @author <a href="mailto:andrew00x@gmail.com">Andrey Parfonov</a>
* @version $Id: TestGetSystemSession.java 2521 2010-06-09 11:50:54Z nzamosenchuk $
*/
public class TestSecurityRepositoryManagment extends BaseSecurityTest
{
public void testGetSystemSessionSuccess()
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.getSystemSession();
return null;
}
};
try
{
doPrivilegedActionStaticPermissions(action);
}
catch (AccessControlException ace)
{
fail("Must be able get system session. We are under static permissions");
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testGetSystemSessionFail()
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.getSystemSession();
return null;
}
};
try
{
doPrivilegedAction(action);
fail("Must not be able get system session.");
}
catch (AccessControlException ace)
{
// OK
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testGetSystemSessionFail2()
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.login(new CredentialsImpl(IdentityConstants.SYSTEM, "".toCharArray()), repository.getSystemWorkspaceName());
return null;
}
};
try
{
doPrivilegedAction(action);
fail("Must not be able get system session.");
}
catch (AccessControlException ace)
{
// OK
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testAddItemPersistenceListenerSuccess()
{
final TesterItemsPersistenceListener listener = new TesterItemsPersistenceListener(session, false);
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.addItemPersistenceListener(workspace.getName(), listener);
return null;
}
};
try
{
doPrivilegedActionStaticPermissions(action);
}
catch (AccessControlException ace)
{
fail("Must be able add listener. We are under static permissions");
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
finally
{
// unregister the listener to avoid keeping ItemData into the memory for nothing
listener.pushChanges();
}
}
public void testAddItemPersistenceListenerFail()
{
final TesterItemsPersistenceListener listener = new TesterItemsPersistenceListener(session, false);
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.addItemPersistenceListener(workspace.getName(), listener);
return null;
}
};
try
{
doPrivilegedAction(action);
fail("Must not be able add listener.");
}
catch (AccessControlException ace)
{
// OK
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
finally
{
// unregister the listener to avoid keeping ItemData into the memory for nothing
listener.pushChanges();
}
}
public void testConfigWorkspaceSuccess() throws Exception
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
WorkspaceEntry defConfig =
(WorkspaceEntry)session.getContainer().getComponentInstanceOfType(WorkspaceEntry.class);
WorkspaceEntry wsConfig = new WorkspaceEntry();
wsConfig.setName("testCWS");
wsConfig.setAccessManager(defConfig.getAccessManager());
wsConfig.setCache(defConfig.getCache());
wsConfig.setContainer(defConfig.getContainer());
wsConfig.setLockManager(defConfig.getLockManager());
repository.configWorkspace(wsConfig);
return null;
}
};
try
{
doPrivilegedActionStaticPermissions(action);
}
catch (AccessControlException ace)
{
fail("Must be able config workspace. We are under static permissions");
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
// remove configured workspace
repository.createWorkspace("testCWS");
repository.internalRemoveWorkspace("testCWS");
return null;
}
};
try
{
doPrivilegedActionStaticPermissions(action);
}
catch (AccessControlException ace)
{
fail("Must be able config workspace. We are under static permissions");
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testConfigWorkspaceFail() throws Exception
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
WorkspaceEntry defConfig =
(WorkspaceEntry)session.getContainer().getComponentInstanceOfType(WorkspaceEntry.class);
WorkspaceEntry wsConfig = new WorkspaceEntry();
wsConfig.setName("testConfigWorkspaceFail");
wsConfig.setAccessManager(defConfig.getAccessManager());
wsConfig.setCache(defConfig.getCache());
wsConfig.setContainer(defConfig.getContainer());
wsConfig.setLockManager(defConfig.getLockManager());
repository.configWorkspace(wsConfig);
return null;
}
};
try
{
doPrivilegedAction(action);
fail("Must not be able config workspace.");
}
catch (AccessControlException ace)
{
// OK
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testCreateWorkspaceSuccess() throws Exception
{
// configures workspace for creation
WorkspaceEntry defConfig =
(WorkspaceEntry)session.getContainer().getComponentInstanceOfType(WorkspaceEntry.class);
final WorkspaceEntry wsConfig = new WorkspaceEntry();
wsConfig.setName("testCWS");
wsConfig.setAccessManager(defConfig.getAccessManager());
wsConfig.setCache(defConfig.getCache());
wsConfig.setContainer(defConfig.getContainer());
wsConfig.setLockManager(defConfig.getLockManager());
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.configWorkspace(wsConfig);
repository.createWorkspace("testCWS");
return null;
}
};
try
{
doPrivilegedActionStaticPermissions(action);
}
catch (AccessControlException ace)
{
fail("Must be able create workspace. We are under static permissions");
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
// remove configured workspace
repository.internalRemoveWorkspace("testCWS");
return null;
}
};
try
{
doPrivilegedActionStaticPermissions(action);
}
catch (AccessControlException ace)
{
fail("Must be able config workspace. We are under static permissions");
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testCreateWorkspaceFail()
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.createWorkspace("testCreateWorkspaceFail");
return null;
}
};
try
{
doPrivilegedAction(action);
fail("Must not be able create workspace.");
}
catch (AccessControlException ace)
{
// OK
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testInternalRemoveWorkspaceSuccess() throws Exception
{
// configures and create workspace
WorkspaceEntry defConfig =
(WorkspaceEntry)session.getContainer().getComponentInstanceOfType(WorkspaceEntry.class);
final WorkspaceEntry wsConfig = new WorkspaceEntry();
wsConfig.setName("testIRWS");
wsConfig.setAccessManager(defConfig.getAccessManager());
wsConfig.setCache(defConfig.getCache());
wsConfig.setContainer(defConfig.getContainer());
wsConfig.setLockManager(defConfig.getLockManager());
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.configWorkspace(wsConfig);
repository.createWorkspace("testIRWS");
repository.internalRemoveWorkspace("testIRWS");
return null;
}
};
try
{
doPrivilegedActionStaticPermissions(action);
}
catch (AccessControlException ace)
{
fail("Must be able remove workspace. We are under static permissions");
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testInternalRemoveWorkspaceFail()
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.internalRemoveWorkspace("testInternalRemoveWorkspaceFail");
return null;
}
};
try
{
doPrivilegedAction(action);
fail("Must not be able remove workspace.");
}
catch (AccessControlException ace)
{
// OK
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testSetStateeSuccess()
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.setState(ManageableRepository.OFFLINE);
repository.setState(ManageableRepository.ONLINE);
return null;
}
};
try
{
doPrivilegedActionStaticPermissions(action);
}
catch (AccessControlException ace)
{
fail("Must be able set state. We are under static permissions");
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testSetStateFail()
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.setState(ManageableRepository.OFFLINE);
repository.setState(ManageableRepository.ONLINE);
return null;
}
};
try
{
doPrivilegedAction(action);
fail("Must not be able set state.");
}
catch (AccessControlException ace)
{
// OK
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testGetConfigurationSuccess()
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.getConfiguration();
return null;
}
};
try
{
doPrivilegedActionStaticPermissions(action);
}
catch (AccessControlException ace)
{
fail("Must be able get configuration. We are under static permissions");
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
public void testGetConfigurationFail()
{
PrivilegedExceptionAction<Object> action = new PrivilegedExceptionAction<Object>()
{
public Object run() throws Exception
{
repository.getConfiguration();
return null;
}
};
try
{
doPrivilegedAction(action);
fail("Must not be able get configuration.");
}
catch (AccessControlException ace)
{
// OK
}
catch (Throwable t)
{
t.printStackTrace();
fail();
}
}
}