/*******************************************************************************
* Copyright 2002-2014, OpenNebula Project (OpenNebula.org), C12G Labs
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
******************************************************************************/
import static org.junit.Assert.assertTrue;
import javax.xml.xpath.XPath;
import javax.xml.xpath.XPathExpressionException;
import javax.xml.xpath.XPathFactory;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import org.opennebula.client.Client;
import org.opennebula.client.OneResponse;
import org.opennebula.client.OneSystem;
import org.opennebula.client.group.Group;
import org.opennebula.client.group.GroupPool;
import org.w3c.dom.Node;
public class GroupTest
{
private static Group group;
private static GroupPool groupPool;
private static Client client;
private static OneResponse res;
private static String group_name = "test_group";
/**
* @throws java.lang.Exception
*/
@BeforeClass
public static void setUpBeforeClass() throws Exception
{
client = new Client();
groupPool = new GroupPool(client);
}
/**
* @throws java.lang.Exception
*/
@AfterClass
public static void tearDownAfterClass() throws Exception
{
}
/**
* @throws java.lang.Exception
*/
@Before
public void setUp() throws Exception
{
res = Group.allocate(client, group_name);
int group_id = res.isError() ? -1 : Integer.parseInt(res.getMessage());
group = new Group(group_id, client);
}
/**
* @throws java.lang.Exception
*/
@After
public void tearDown() throws Exception
{
group.delete();
}
@Test
public void allocate()
{
group.delete();
res = Group.allocate(client, group_name);
assertTrue( res.getErrorMessage(), !res.isError() );
int group_id = res.isError() ? -1 : Integer.parseInt(res.getMessage());
group = new Group(group_id, client);
groupPool.info();
boolean found = false;
for(Group img : groupPool)
{
found = found || img.getName().equals(group_name);
}
assertTrue( found );
}
@Test
public void info()
{
res = group.info();
assertTrue( res.getErrorMessage(), !res.isError() );
assertTrue( group.id() >= 100 );
assertTrue( group.getName().equals(group_name) );
}
@Test
public void delete()
{
res = group.delete();
assertTrue( res.getErrorMessage(), !res.isError() );
res = group.info();
assertTrue( res.isError() );
res = groupPool.info();
assertTrue( res.getErrorMessage(), !res.isError() );
boolean found = false;
for(Group g : groupPool)
{
found = found || g.getName().equals(group_name);
}
assertTrue( !found );
}
@Test
public void defaultqutoas()
{
OneSystem system = new OneSystem(client);
res = system.getGroupQuotas();
assertTrue( res.getErrorMessage(), !res.isError() );
res = system.setGroupQuotas("VM = [ VMS = 7, MEMORY = 0, CPU = 3, VOLATILE_SIZE = 1 ]");
assertTrue( res.getErrorMessage(), !res.isError() );
Node node = system.getGroupQuotasXML();
XPathFactory factory = XPathFactory.newInstance();
XPath xpath = factory.newXPath();
try
{
assertTrue( xpath.evaluate("VM_QUOTA/VM/VMS", node).equals("7") );
} catch (XPathExpressionException e)
{
assertTrue(e.getMessage(), false);
}
}
// Commented out, secondary groups do not exist any more
/*
@Test
public void userGroupRelations()
{
Hashtable<String, User> users = new Hashtable<String, User>();
Hashtable<String, Group> groups = new Hashtable<String, Group>();
// Create all users and groups. Add user_* to corresponding group_*
String[] names = {"a", "b", "c", "d"};
for(String name : names)
{
res = User.allocate(client, "user_"+name, "password");
assertTrue( res.getErrorMessage(), !res.isError() );
users.put( name,
new User(Integer.parseInt(res.getMessage()), client )
);
res = Group.allocate(client, "group_"+name);
assertTrue( res.getErrorMessage(), !res.isError() );
groups.put( name,
new Group(Integer.parseInt(res.getMessage()), client )
);
users.get(name).addgroup( groups.get(name).id() );
}
// Add all users to group_b
for( User u : users.values() )
{
u.addgroup( groups.get("b").id() );
}
// Change user_c & _d main group
users.get("c").chgrp( groups.get("d").id() );
users.get("d").chgrp( groups.get("c").id() );
// Check cross-references so far
for( User u : users.values() )
{
assertTrue( !u.info().isError() );
}
for( Group g : groups.values() )
{
assertTrue( !g.info().isError() );
}
assertTrue( users.get("a").isPartOf( groups.get("a").id() ) );
assertTrue( users.get("a").isPartOf( groups.get("b").id() ) );
assertFalse( users.get("a").isPartOf( groups.get("c").id() ) );
assertFalse( users.get("a").isPartOf( groups.get("d").id() ) );
assertFalse( users.get("b").isPartOf( groups.get("a").id() ) );
assertTrue( users.get("b").isPartOf( groups.get("b").id() ) );
assertFalse( users.get("b").isPartOf( groups.get("c").id() ) );
assertFalse( users.get("b").isPartOf( groups.get("d").id() ) );
assertFalse( users.get("c").isPartOf( groups.get("a").id() ) );
assertTrue( users.get("c").isPartOf( groups.get("b").id() ) );
assertTrue( users.get("c").isPartOf( groups.get("c").id() ) );
assertTrue( users.get("c").isPartOf( groups.get("d").id() ) );
assertFalse( users.get("d").isPartOf( groups.get("a").id() ) );
assertTrue( users.get("d").isPartOf( groups.get("b").id() ) );
assertTrue( users.get("d").isPartOf( groups.get("c").id() ) );
assertTrue( users.get("d").isPartOf( groups.get("d").id() ) );
assertTrue( groups.get("a").contains( users.get("a").id() ) );
assertFalse( groups.get("a").contains( users.get("b").id() ) );
assertFalse( groups.get("a").contains( users.get("c").id() ) );
assertFalse( groups.get("a").contains( users.get("d").id() ) );
assertTrue( groups.get("b").contains( users.get("a").id() ) );
assertTrue( groups.get("b").contains( users.get("b").id() ) );
assertTrue( groups.get("b").contains( users.get("c").id() ) );
assertTrue( groups.get("b").contains( users.get("d").id() ) );
assertFalse( groups.get("c").contains( users.get("a").id() ) );
assertFalse( groups.get("c").contains( users.get("b").id() ) );
assertTrue( groups.get("c").contains( users.get("c").id() ) );
assertTrue( groups.get("c").contains( users.get("d").id() ) );
assertFalse( groups.get("d").contains( users.get("a").id() ) );
assertFalse( groups.get("d").contains( users.get("b").id() ) );
assertTrue( groups.get("d").contains( users.get("c").id() ) );
assertTrue( groups.get("d").contains( users.get("d").id() ) );
}
*/
}