/*
* ProActive Parallel Suite(TM):
* The Open Source library for parallel and distributed
* Workflows & Scheduling, Orchestration, Cloud Automation
* and Big Data Analysis on Enterprise Grids & Clouds.
*
* Copyright (c) 2007 - 2017 ActiveEon
* Contact: contact@activeeon.com
*
* This library is free software: you can redistribute it and/or
* modify it under the terms of the GNU Affero General Public License
* as published by the Free Software Foundation: version 3 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 Affero General Public License for more details.
*
* You should have received a copy of the GNU Affero General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
* If needed, contact us to obtain a release under GPL Version 2 or 3
* or a different license than the AGPL.
*/
package functionaltests.permissions;
import static org.junit.Assert.assertEquals;
import java.util.ArrayList;
import java.util.List;
import org.junit.Test;
import org.objectweb.proactive.core.node.Node;
import org.ow2.proactive.resourcemanager.common.event.RMEventType;
import org.ow2.proactive.resourcemanager.frontend.ResourceManager;
import org.ow2.proactive.resourcemanager.nodesource.infrastructure.DefaultInfrastructureManager;
import org.ow2.proactive.resourcemanager.nodesource.policy.StaticPolicy;
import org.ow2.proactive.utils.Criteria;
import org.ow2.proactive.utils.NodeSet;
import functionaltests.utils.RMFunctionalTest;
import functionaltests.utils.RMTHelper;
import functionaltests.utils.TestNode;
import functionaltests.utils.TestUsers;
/**
* Checking node usage permissions defining by the following property in the NodeSourcePolicy
*
* @Configurable(description = "ME|users=name1,name2;groups=group1,group2;tokens=t1,t2|ALL")
* private AccessType userAccessType = AccessType.ALL;
*
*/
public class TestNSNodesPermissions extends RMFunctionalTest {
private List<Node> createNodes(String name, int number) throws Exception {
List<TestNode> nodePool = rmHelper.createNodes("node", 17);
testNodes.addAll(nodePool);
ArrayList<Node> answer = new ArrayList<>(nodePool.size());
for (TestNode tn : nodePool) {
answer.add(tn.getNode());
}
return answer;
}
@Test
public void action() throws Exception {
String nsName = "TestNSNodesPermissions";
RMTHelper.log("Test1 - node users = ME");
ResourceManager nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
nsadmin.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "ME", "ALL" })
.getBooleanValue();
List<Node> nodePool = createNodes("node", 2);
Node node = nodePool.remove(0);
Node node2 = nodePool.remove(0);
nsadmin.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
NodeSet nodes = nsadmin.getNodes(new Criteria(1));
//we eat free -> busy
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
assertEquals(1, nodes.size());
nsadmin.releaseNodes(nodes);
//busy -> free
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
ResourceManager user = rmHelper.getResourceManager(TestUsers.RADMIN);
nodes = user.getNodes(new Criteria(1));
assertEquals("User cannot get foreign node", 0, nodes.size());
user.addNode(node2.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForNodeEvent(RMEventType.NODE_STATE_CHANGED, node2.getNodeInformation().getURL());
nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
nodes = nsadmin.getNodes(new Criteria(2));
//we eat free -> busy * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
assertEquals("Did not get foreign node", 2, nodes.size());
nsadmin.releaseNodes(nodes);
//busy -> free * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test2 - node users = MY_GROUPS");
ResourceManager admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "MY_GROUPS", "ALL" })
.getBooleanValue();
nodePool = createNodes("node", 2);
node = nodePool.remove(0);
node2 = nodePool.remove(0);
System.out.println(System.currentTimeMillis());
admin.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user = rmHelper.getResourceManager(TestUsers.RADMIN);
nodes = user.getNodes(new Criteria(1));
assertEquals("User cannot get foreign node", 0, nodes.size());
user.addNode(node2.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForNodeEvent(RMEventType.NODE_ADDED, node2.getNodeInformation().getURL());
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
nodes = nsadmin.getNodes(new Criteria(2));
assertEquals(2, nodes.size());
//we eat free -> busy * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin.releaseNodes(nodes);
//busy -> free * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// removing the node source
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test3 - node users = PROVIDER");
user = rmHelper.getResourceManager(TestUsers.RADMIN);
user.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "PROVIDER", "ALL" })
.getBooleanValue();
nodePool = createNodes("node", 2);
node = nodePool.remove(0);
node2 = nodePool.remove(0);
user.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.addNode(node2.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// admin can get 2 nodes as it has AllPermissions
nodes = admin.getNodes(new Criteria(2));
assertEquals("Admin did not get foreign node", 2, nodes.size());
//we eat free -> busy * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
admin.releaseNodes(nodes);
//busy -> free * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user = rmHelper.getResourceManager(TestUsers.RADMIN);
nodes = user.getNodes(new Criteria(2));
assertEquals(1, nodes.size());
//we eat free -> busy
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user.releaseNodes(nodes);
//busy -> free
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
nodes = nsadmin.getNodes(new Criteria(2));
assertEquals("Have got a foreign node", 0, nodes.size());
nsadmin.releaseNodes(nodes);
// removing the node source
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test4 - node users = PROVIDER_GROUPS");
user = rmHelper.getResourceManager(TestUsers.RADMIN);
user.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "PROVIDER_GROUPS", "ALL" })
.getBooleanValue();
nodePool = createNodes("node", 2);
node = nodePool.remove(0);
node2 = nodePool.remove(0);
user.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.addNode(node2.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// admin can get 2 nodes as it has AllPermissions
nodes = admin.getNodes(new Criteria(2));
assertEquals("Admin did not get foreign node", 2, nodes.size());
//we eat free -> busy * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
admin.releaseNodes(nodes);
//we eat busy -> free * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user = rmHelper.getResourceManager(TestUsers.RADMIN);
nodes = user.getNodes(new Criteria(2));
assertEquals(1, nodes.size());
//we eat free -> busy
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user.releaseNodes(nodes);
//we eat busy -> free
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
nodes = nsadmin.getNodes(new Criteria(2));
assertEquals("Have not get an admin node", 1, nodes.size());
//we eat free -> busy
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin.releaseNodes(nodes);
//we eat busy -> free
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// removing the node source
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test5 - node users = ALL");
user = rmHelper.getResourceManager(TestUsers.RADMIN);
user.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "ALL", "ALL" })
.getBooleanValue();
nodePool = createNodes("node", 2);
node = nodePool.remove(0);
user.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
Criteria criteria = new Criteria(1);
nodes = nsadmin.getNodes(criteria);
assertEquals("Have got a foreign node", 1, nodes.size());
//we eat the free to busy
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin.releaseNodes(nodes);
//we eat the busy to free
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
criteria.setNodeAccessToken("non_existing_token");
nodes = nsadmin.getNodes(criteria);
assertEquals("Got a regular node while requesting a node with token", 0, nodes.size());
// removing the node source
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test6.1 - specific users");
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "users=nsadmin", "ALL" })
.getBooleanValue();
nodePool = createNodes("node", 2);
node = nodePool.remove(0);
node2 = nodePool.remove(0);
admin.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user = rmHelper.getResourceManager(TestUsers.RADMIN);
nodes = user.getNodes(new Criteria(1));
assertEquals("User cannot get foreign node", 0, nodes.size());
user.addNode(node2.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForNodeEvent(RMEventType.NODE_ADDED, node2.getNodeInformation().getURL());
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nodes = user.getNodes(new Criteria(1));
assertEquals("User cannot even your own node", 0, nodes.size());
nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
nodes = nsadmin.getNodes(new Criteria(2));
assertEquals(2, nodes.size());
//we eat free -> busy * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin.releaseNodes(nodes);
//busy -> free * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// removing the node source
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test6.2 - specific groups");
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "groups=nsadmins", "ALL" })
.getBooleanValue();
nodePool = createNodes("node", 2);
node = nodePool.remove(0);
node2 = nodePool.remove(0);
admin.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user = rmHelper.getResourceManager(TestUsers.RADMIN);
nodes = user.getNodes(new Criteria(1));
assertEquals("User cannot get foreign node", 0, nodes.size());
user.addNode(node2.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForNodeEvent(RMEventType.NODE_ADDED, node2.getNodeInformation().getURL());
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nodes = user.getNodes(new Criteria(1));
assertEquals("User cannot even your own node", 0, nodes.size());
nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
nodes = nsadmin.getNodes(new Criteria(2));
assertEquals(2, nodes.size());
//we eat free -> busy * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin.releaseNodes(nodes);
//busy -> free * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// removing the node source
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
nodes = admin.getNodes(new Criteria(2));
assertEquals(2, nodes.size());
//we eat free -> busy * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
admin.releaseNodes(nodes);
//busy -> free * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
admin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test6.3 - specific tokens");
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "tokens=token1,token2", "ALL" })
.getBooleanValue();
nodePool = createNodes("node", 2);
node = nodePool.remove(0);
admin.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
criteria = new Criteria(1);
criteria.setNodeAccessToken("token1");
nodes = admin.getNodes(criteria);
assertEquals(1, nodes.size());
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
admin.releaseNodes(nodes);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
criteria.setNodeAccessToken("token2");
nodes = admin.getNodes(criteria);
assertEquals(1, nodes.size());
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
admin.releaseNodes(nodes);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// admin also does not have the right to get the node
criteria.setNodeAccessToken("token3");
nodes = admin.getNodes(criteria);
assertEquals(0, nodes.size());
user = rmHelper.getResourceManager(TestUsers.RADMIN);
criteria = new Criteria(1);
nodes = user.getNodes(criteria);
assertEquals(0, nodes.size());
criteria.setNodeAccessToken("token1");
nodes = user.getNodes(criteria);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user.releaseNodes(nodes);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// removing the node source
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test6.4 - specific users and groups");
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "users=radmin;groups=nsadmins", "ALL" })
.getBooleanValue();
nodePool = createNodes("node", 2);
node = nodePool.remove(0);
node2 = nodePool.remove(0);
admin.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user = rmHelper.getResourceManager(TestUsers.RADMIN);
nodes = user.getNodes(new Criteria(1));
assertEquals("User did not get a node but had a right to get it", 1, nodes.size());
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user.releaseNodes(nodes);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user.addNode(node2.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForNodeEvent(RMEventType.NODE_ADDED, node2.getNodeInformation().getURL());
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nodes = user.getNodes(new Criteria(2));
assertEquals("User did not get nodes but had a right to get them", 2, nodes.size());
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user.releaseNodes(nodes);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
nodes = nsadmin.getNodes(new Criteria(2));
assertEquals(2, nodes.size());
//we eat free -> busy * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin.releaseNodes(nodes);
//busy -> free * 2
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// removing the node source
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
RMTHelper.log("Test6.5 - specific users and token");
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.createNodeSource(nsName,
DefaultInfrastructureManager.class.getName(),
null,
StaticPolicy.class.getName(),
new Object[] { "users=radmin;tokens=token1", "ALL" })
.getBooleanValue();
nodePool = createNodes("node", 2);
node = nodePool.remove(0);
admin.addNode(node.getNodeInformation().getURL(), nsName).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_ADDED);
//we eat the configuring to free nodeevent
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user = rmHelper.getResourceManager(TestUsers.RADMIN);
criteria = new Criteria(1);
criteria.setNodeAccessToken("token1");
nodes = user.getNodes(criteria);
assertEquals("User did not get a node but had a right to get it", 1, nodes.size());
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
user.releaseNodes(nodes);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
criteria.setNodeAccessToken("token2"); // will not get a node as don't have the token "token2"
nodes = user.getNodes(criteria);
assertEquals(0, nodes.size());
nsadmin = rmHelper.getResourceManager(TestUsers.NSADMIN);
criteria.setNodeAccessToken("token1");
nodes = nsadmin.getNodes(criteria);
assertEquals(1, nodes.size());
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
nsadmin.releaseNodes(nodes);
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_STATE_CHANGED);
// removing the node source
admin = rmHelper.getResourceManager(TestUsers.ADMIN);
admin.removeNodeSource(nsName, true).getBooleanValue();
rmHelper.waitForAnyNodeEvent(RMEventType.NODE_REMOVED);
rmHelper.waitForNodeSourceEvent(RMEventType.NODESOURCE_REMOVED, nsName);
}
}