/**
* Copyright (c) 2013--2014 Red Hat, Inc.
*
* This software is licensed to you under the GNU General Public License,
* version 2 (GPLv2). There is NO WARRANTY for this software, express or
* implied, including the implied warranties of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. You should have received a copy of GPLv2
* along with this software; if not, see
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt.
*
* Red Hat trademarks are not licensed under GPLv2. No permission is
* granted to use or replicate Red Hat trademarks that are incorporated
* in this software or its documentation.
*/
package com.redhat.rhn.frontend.xmlrpc.sync.slave.test;
import java.util.ArrayList;
import java.util.List;
import com.redhat.rhn.domain.iss.IssFactory;
import com.redhat.rhn.domain.iss.IssSlave;
import com.redhat.rhn.domain.org.Org;
import com.redhat.rhn.domain.org.OrgFactory;
import com.redhat.rhn.domain.role.RoleFactory;
import com.redhat.rhn.frontend.xmlrpc.PermissionCheckFailureException;
import com.redhat.rhn.frontend.xmlrpc.sync.slave.SlaveHandler;
import com.redhat.rhn.frontend.xmlrpc.test.BaseHandlerTestCase;
import com.redhat.rhn.testing.TestUtils;
public class SlaveHandlerTest extends BaseHandlerTestCase {
private SlaveHandler handler = new SlaveHandler();
private String slaveName;
public void setUp() throws Exception {
super.setUp();
admin.addPermanentRole(RoleFactory.SAT_ADMIN);
slaveName = "testSlave" + TestUtils.randomString();
}
public void testCreate() {
// Make sure that non-sat-admin users cannot access
try {
IssSlave slave = handler.create(regular, slaveName, true, true);
fail();
}
catch (PermissionCheckFailureException e) {
//success
}
// Make sure satellite-admin can
try {
IssSlave slave = handler.create(admin, slaveName, true, true);
assertEquals(slaveName, slave.getSlave());
assertTrue("Y".equals(slave.getEnabled()));
assertTrue("Y".equals(slave.getAllowAllOrgs()));
}
catch (PermissionCheckFailureException e) {
fail();
}
}
public void testUpdate() {
IssSlave slave = handler.create(admin, slaveName, true, true);
// Make sure that non-sat-admin users cannot access
try {
IssSlave updSlave = handler.update(regular,
slave.getId().intValue(),
"new_" + slaveName,
false,
false);
fail();
}
catch (PermissionCheckFailureException e) {
//success
}
// Make sure satellite-admin can
try {
IssSlave updSlave = handler.update(admin, slave.getId().intValue(),
"new_" + slaveName, false, false);
assertEquals("new_" + slaveName, updSlave.getSlave());
assertEquals(slave.getId(), updSlave.getId());
assertTrue("N".equals(slave.getEnabled()));
assertTrue("N".equals(slave.getAllowAllOrgs()));
}
catch (PermissionCheckFailureException e) {
fail();
}
}
public void testDelete() {
IssSlave slave = handler.create(admin, slaveName, true, true);
Long slaveId = slave.getId();
// Make sure that non-sat-admin users cannot access
try {
int rmvd = handler.delete(regular, slave.getId().intValue());
fail();
}
catch (PermissionCheckFailureException e) {
//success
}
// Make sure satellite-admin can
try {
int rmvd = handler.delete(admin, slave.getId().intValue());
assertEquals(1, rmvd);
}
catch (PermissionCheckFailureException e) {
fail();
}
// Make sure it's actually gone
IssSlave mstr = IssFactory.lookupSlaveById(slaveId);
assertNull(mstr);
}
public void testGetSlave() {
IssSlave slave = handler.create(admin, slaveName, true, true);
Integer slaveId = slave.getId().intValue();
// Make sure that non-sat-admin users cannot access
try {
IssSlave gotSlave = handler.getSlave(regular, slaveId);
fail();
}
catch (PermissionCheckFailureException e) {
//success
}
// Make sure satellite-admin can
try {
IssSlave gotSlave = handler.getSlave(admin, slaveId);
assertEquals(slaveId.intValue(), gotSlave.getId().intValue());
}
catch (PermissionCheckFailureException e) {
fail();
}
}
public void testGetAllowedOrgs() {
IssSlave slave = handler.create(admin, slaveName, true, false);
// Make sure that non-sat-admin users cannot access
try {
List<Integer> orgs = handler.getAllowedOrgs(regular,
slave.getId().intValue());
fail();
}
catch (PermissionCheckFailureException e) {
//success
}
// Make sure satellite-admin can
try {
List<Integer> orgs = handler.getAllowedOrgs(admin,
slave.getId().intValue());
assertNotNull(orgs);
assertEquals(0, orgs.size());
}
catch (PermissionCheckFailureException e) {
fail();
}
}
public void testSetAllowedOrgs() {
IssSlave slave = handler.create(admin, slaveName, true, false);
List<Integer> orgs = getBareOrgs();
// Make sure that non-sat-admin users cannot access
try {
IssSlave m = handler.getSlave(admin, slave.getId().intValue());
assertNotNull(m);
orgs = handler.getAllowedOrgs(regular, slave.getId().intValue());
fail();
}
catch (PermissionCheckFailureException e) {
//success
}
// Make sure satellite-admin can
try {
IssSlave m = handler.getSlave(admin, slave.getId().intValue());
assertNotNull(m);
assertEquals(0, m.getAllowedOrgs().size());
int rc = handler.setAllowedOrgs(admin, m.getId().intValue(), orgs);
assertEquals(1, rc);
IssSlave m2 = handler.getSlave(admin, slave.getId().intValue());
assertEquals(orgs.size(), m2.getAllowedOrgs().size());
}
catch (PermissionCheckFailureException e) {
fail();
}
orgs.clear();
orgs.add(1);
// Make sure setting to one-new-one, really sets to one
IssSlave m3 = handler.getSlave(admin, slave.getId().intValue());
int rc = handler.setAllowedOrgs(admin,
m3.getId().intValue(),
orgs);
assertEquals(1, rc);
orgs = handler.getAllowedOrgs(admin,
slave.getId().intValue());
assertNotNull(orgs);
assertEquals(1, orgs.size());
// Make sure resetting to "empty" works
IssSlave m4 = handler.getSlave(admin, slave.getId().intValue());
rc = handler.setAllowedOrgs(admin,
m4.getId().intValue(),
new ArrayList<Integer>());
assertEquals(1, rc);
orgs = handler.getAllowedOrgs(admin, slave.getId().intValue());
assertNotNull(orgs);
assertEquals(0, orgs.size());
}
// Add half of any existing Orgs to this list
private List<Integer> getBareOrgs() {
List<Integer> orgs = new ArrayList();
int i = 0;
for (Org o : OrgFactory.lookupAllOrgs()) {
if (i++ % 2 == 0) {
orgs.add(o.getId().intValue());
}
}
return orgs;
}
}