/*******************************************************************************
* Copyright (c) 2007, 2014 compeople AG and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* compeople AG - initial API and implementation
*******************************************************************************/
package org.eclipse.riena.internal.security.common.authorization;
import org.eclipse.riena.core.cache.GenericObjectCache;
import org.eclipse.riena.core.test.RienaTestCase;
import org.eclipse.riena.core.test.collect.NonUITestCase;
import org.eclipse.riena.core.util.ContainerModel;
import org.eclipse.riena.core.util.ReflectionUtils;
/**
* Test the {@code PermissionCache}.
*/
@NonUITestCase
public class PermissionCacheTest extends RienaTestCase {
public void testConfigurationServer() {
setContainerType(ContainerType.SERVER);
final PermissionCache cache = new PermissionCache();
assertEquals(100, getCache(cache).getMinimumSize());
assertEquals(360000, getCache(cache).getTimeout());
}
public void testConfigurationClient() {
setContainerType(ContainerType.CLIENT);
final PermissionCache cache = new PermissionCache();
assertEquals(1, getCache(cache).getMinimumSize());
assertEquals(999999000, getCache(cache).getTimeout());
}
public void testConfigurationClientNoExtension() {
setContainerType(ContainerType.CLIENT);
final PermissionCache cache = new PermissionCache();
cache.update(null);
assertEquals(1, getCache(cache).getMinimumSize());
assertEquals(999999000, getCache(cache).getTimeout());
}
public void testConfigurationServerNoExtension() {
setContainerType(ContainerType.SERVER);
final PermissionCache cache = new PermissionCache();
cache.update(null);
assertEquals(100, getCache(cache).getMinimumSize());
assertEquals(360000, getCache(cache).getTimeout());
}
public void testConfigurationClientOneExtensionTimeoutMinusOne() {
setContainerType(ContainerType.CLIENT);
final PermissionCache cache = new PermissionCache();
cache.update(new PermissionCacheExtension(5, -1));
assertEquals(5, getCache(cache).getMinimumSize());
assertEquals(Integer.MAX_VALUE, getCache(cache).getTimeout());
}
public void testConfigurationClientOneExtension() {
setContainerType(ContainerType.CLIENT);
final PermissionCache cache = new PermissionCache();
cache.update(new PermissionCacheExtension(5, 360));
assertEquals(5, getCache(cache).getMinimumSize());
assertEquals(360, getCache(cache).getTimeout());
}
public void testConfigurationServerOneExtensionTimeoutMinusOne() {
setContainerType(ContainerType.SERVER);
final PermissionCache cache = new PermissionCache();
cache.update(new PermissionCacheExtension(5, -1));
assertEquals(5, getCache(cache).getMinimumSize());
assertEquals(Integer.MAX_VALUE, getCache(cache).getTimeout());
}
public void testConfigurationServerOneExtension() {
setContainerType(ContainerType.SERVER);
final PermissionCache cache = new PermissionCache();
cache.update(new PermissionCacheExtension(5, 360));
assertEquals(5, getCache(cache).getMinimumSize());
assertEquals(360, getCache(cache).getTimeout());
}
private enum ContainerType {
SERVER, CLIENT
};
private void setContainerType(final ContainerType containerType) {
System.setProperty(ContainerModel.RIENA_CONTAINER_TYPE, containerType == ContainerType.SERVER ? "server"
: "client");
ReflectionUtils.invokeHidden(ContainerModel.class, "initialize");
}
private GenericObjectCache getCache(final PermissionCache permissionCache) {
return ReflectionUtils.getHidden(permissionCache, "permCache");
}
private static class PermissionCacheExtension implements IPermissionCacheExtension {
private final int minimumSize;
private final int timeout;
public PermissionCacheExtension(final int minimumSize, final int timeout) {
this.minimumSize = minimumSize;
this.timeout = timeout;
}
public int getMinimumSize() {
return minimumSize;
}
public int getTimeout() {
return timeout;
}
}
}