blob: f7d85c11a8a32637b24cf078d945c787356975ce [file] [log] [blame]
/*
*
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you 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.
*
*/
package org.apache.qpid.server.management;
import org.apache.qpid.management.common.mbeans.UserManagement;
import org.apache.qpid.server.security.auth.database.PlainPasswordFilePrincipalDatabase;
import org.apache.qpid.server.security.auth.management.AMQUserManagementMBean;
import org.apache.qpid.server.util.InternalBrokerBaseCase;
import javax.management.openmbean.CompositeData;
import javax.management.openmbean.TabularData;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;
/**
*
* Tests the AMQUserManagementMBean and its interaction with the PrincipalDatabase.
*
*/
public class AMQUserManagementMBeanTest extends InternalBrokerBaseCase
{
private PlainPasswordFilePrincipalDatabase _database;
private AMQUserManagementMBean _amqumMBean;
private File _passwordFile;
private static final String TEST_USERNAME = "testuser";
private static final String TEST_PASSWORD = "password";
@Override
public void setUp() throws Exception
{
super.setUp();
_database = new PlainPasswordFilePrincipalDatabase();
_amqumMBean = new AMQUserManagementMBean();
loadFreshTestPasswordFile();
}
@Override
public void tearDown() throws Exception
{
//clean up test password/access files
File _oldPasswordFile = new File(_passwordFile.getAbsolutePath() + ".old");
_oldPasswordFile.delete();
_passwordFile.delete();
super.tearDown();
}
public void testDeleteUser()
{
assertEquals("Unexpected number of users before test", 1,_amqumMBean.viewUsers().size());
assertTrue("Delete should return true to flag successful delete", _amqumMBean.deleteUser(TEST_USERNAME));
assertEquals("Unexpected number of users after test", 0,_amqumMBean.viewUsers().size());
}
public void testDeleteUserWhereUserDoesNotExist()
{
assertEquals("Unexpected number of users before test", 1,_amqumMBean.viewUsers().size());
assertFalse("Delete should return false to flag unsuccessful delete", _amqumMBean.deleteUser("made.up.username"));
assertEquals("Unexpected number of users after test", 1,_amqumMBean.viewUsers().size());
}
public void testCreateUser()
{
assertEquals("Unexpected number of users before test", 1,_amqumMBean.viewUsers().size());
assertTrue("Create should return true to flag successful create", _amqumMBean.createUser("newuser", "mypass"));
assertEquals("Unexpected number of users before test", 2,_amqumMBean.viewUsers().size());
}
public void testCreateUserWhereUserAlreadyExists()
{
assertEquals("Unexpected number of users before test", 1,_amqumMBean.viewUsers().size());
assertFalse("Create should return false to flag unsuccessful create", _amqumMBean.createUser(TEST_USERNAME, "mypass"));
assertEquals("Unexpected number of users before test", 1,_amqumMBean.viewUsers().size());
}
public void testSetPassword()
{
assertTrue("Set password should return true to flag successful change", _amqumMBean.setPassword(TEST_USERNAME, "newpassword"));
}
public void testSetPasswordWhereUserDoesNotExist()
{
assertFalse("Set password should return false to flag successful change", _amqumMBean.setPassword("made.up.username", "newpassword"));
}
public void testViewUsers()
{
TabularData userList = _amqumMBean.viewUsers();
assertNotNull(userList);
assertEquals("Unexpected number of users in user list", 1, userList.size());
assertTrue(userList.containsKey(new Object[]{TEST_USERNAME}));
// Check the deprecated read, write and admin items continue to exist but return false.
CompositeData userRec = userList.get(new Object[]{TEST_USERNAME});
assertTrue(userRec.containsKey(UserManagement.RIGHTS_READ_ONLY));
assertEquals(false, userRec.get(UserManagement.RIGHTS_READ_ONLY));
assertEquals(false, userRec.get(UserManagement.RIGHTS_READ_WRITE));
assertTrue(userRec.containsKey(UserManagement.RIGHTS_READ_WRITE));
assertTrue(userRec.containsKey(UserManagement.RIGHTS_ADMIN));
assertEquals(false, userRec.get(UserManagement.RIGHTS_ADMIN));
}
// ============================ Utility methods =========================
private void loadFreshTestPasswordFile()
{
try
{
if(_passwordFile == null)
{
_passwordFile = File.createTempFile(this.getClass().getName(),".password");
}
BufferedWriter passwordWriter = new BufferedWriter(new FileWriter(_passwordFile, false));
passwordWriter.write(TEST_USERNAME + ":" + TEST_PASSWORD);
passwordWriter.newLine();
passwordWriter.flush();
passwordWriter.close();
_database.setPasswordFile(_passwordFile.toString());
_amqumMBean.setPrincipalDatabase(_database);
}
catch (IOException e)
{
fail("Unable to create test password file: " + e.getMessage());
}
}
}