/** * Copyright (c) 2013 SUSE LLC * * 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.action.kickstart.test; import com.redhat.rhn.common.util.Asserts; import com.redhat.rhn.domain.server.NetworkInterface; import com.redhat.rhn.domain.server.Server; import com.redhat.rhn.domain.server.ServerNetAddress4; import com.redhat.rhn.domain.server.test.ServerFactoryTest; import com.redhat.rhn.frontend.action.kickstart.PowerManagementAction; import com.redhat.rhn.frontend.struts.RequestContext; import com.redhat.rhn.manager.kickstart.cobbler.CobblerXMLRPCHelper; import com.redhat.rhn.testing.RhnMockStrutsTestCase; import org.cobbler.CobblerConnection; import org.cobbler.SystemRecord; import org.cobbler.test.MockConnection; import servletunit.HttpServletRequestSimulator; import java.util.Map; /** * Tests the Power Management action. */ public class PowerManagementActionTest extends RhnMockStrutsTestCase { // poor-man fixture /** Expected power management type. */ public static final String EXPECTED_TYPE = "ipmilan"; /** Expected power management address. */ public static final String EXPECTED_ADDRESS = "192.123.23.21"; /** Expected power management username. */ public static final String EXPECTED_USERNAME = "power management test username"; /** Expected power management password. */ public static final String EXPECTED_PASSWORD = "power management test password"; /** Expected power management ID. */ public static final String EXPECTED_ID = "123"; /** Alternative expected power management address. */ public static final String EXPECTED_ADDRESS_2 = "192.123.23.22"; /** Alternative expected power management address. */ public static final String EXPECTED_USERNAME_2 = "power management test username 2"; /** Alternative expected power management password. */ public static final String EXPECTED_PASSWORD_2 = "power management test password 2"; /** Alternative expected power management ID. */ public static final String EXPECTED_ID_2 = "122"; /** * Sets up action path and mocked Cobbler connection. * @throws Exception if something goes wrong */ @Override public void setUp() throws Exception { super.setUp(); MockConnection.clear(); setRequestPathInfo("/systems/details/kickstart/PowerManagement"); } /** * Tests that action returns correct default parameters for a system without * a profile. * @throws Exception if something goes wrong */ @SuppressWarnings("unchecked") public void testExecuteNewSystemsDefault() throws Exception { Server server = ServerFactoryTest.createTestServer(user, true); NetworkInterface networkInterface = server.getNetworkInterfaces().iterator().next(); networkInterface.setSa4(new ServerNetAddress4() { { setAddress(EXPECTED_ADDRESS); } }); addRequestParameter(RequestContext.SID, server.getId().toString()); actionPerform(); Map<String, String> types = (Map<String, String>) request .getAttribute(PowerManagementAction.TYPES); Asserts.assertContains(types.values(), EXPECTED_TYPE); assertEquals(EXPECTED_TYPE, request.getAttribute(PowerManagementAction.POWER_TYPE)); assertNull(request.getAttribute(PowerManagementAction.POWER_ADDRESS)); assertNull(request.getAttribute(PowerManagementAction.POWER_USERNAME)); assertNull(request.getAttribute(PowerManagementAction.POWER_PASSWORD)); assertNull(request.getAttribute(PowerManagementAction.POWER_ID)); verifyNoActionErrors(); verifyNoActionMessages(); } /** * Tests saving the configuration of a new system. * @throws Exception if something goes wrong */ @SuppressWarnings("unchecked") public void testExecuteSaveNewSystem() throws Exception { Server server = ServerFactoryTest.createTestServer(user, true); addRequestParameter(RequestContext.SID, server.getId().toString()); request.setMethod(HttpServletRequestSimulator.POST); addSubmitted(); addDispatchCall("kickstart.powermanagement.jsp.save_only"); request.addParameter(PowerManagementAction.POWER_TYPE, EXPECTED_TYPE); request.addParameter(PowerManagementAction.POWER_ADDRESS, EXPECTED_ADDRESS); request.addParameter(PowerManagementAction.POWER_USERNAME, EXPECTED_USERNAME); request.addParameter(PowerManagementAction.POWER_PASSWORD, EXPECTED_PASSWORD); request.addParameter(PowerManagementAction.POWER_ID, EXPECTED_ID); actionPerform(); Map<String, String> types = (Map<String, String>) request .getAttribute(PowerManagementAction.TYPES); Asserts.assertContains(types.values(), EXPECTED_TYPE); assertEquals(EXPECTED_TYPE, request.getAttribute(PowerManagementAction.POWER_TYPE)); assertEquals(EXPECTED_ADDRESS, request.getAttribute(PowerManagementAction.POWER_ADDRESS)); assertEquals(EXPECTED_USERNAME, request.getAttribute(PowerManagementAction.POWER_USERNAME)); assertEquals(EXPECTED_PASSWORD, request.getAttribute(PowerManagementAction.POWER_PASSWORD)); assertEquals(EXPECTED_ID, request.getAttribute(PowerManagementAction.POWER_ID)); verifyNoActionErrors(); verifyActionMessage("kickstart.powermanagement.saved"); CobblerConnection connection = CobblerXMLRPCHelper.getConnection(user); SystemRecord record = SystemRecord.lookupById(connection, server.getCobblerId()); assertEquals(EXPECTED_TYPE, record.getPowerType()); assertEquals(EXPECTED_ADDRESS, record.getPowerAddress()); assertEquals(EXPECTED_USERNAME, record.getPowerUsername()); assertEquals(EXPECTED_PASSWORD, record.getPowerPassword()); assertEquals(EXPECTED_ID, record.getPowerId()); } /** * Tests reading the configuration of a system that has already been * configured. * @throws Exception if something goes wrong */ @SuppressWarnings("unchecked") public void testExecuteReadSavedSystem() throws Exception { Server server = ServerFactoryTest.createTestServer(user, true); addRequestParameter(RequestContext.SID, server.getId().toString()); request.setMethod(HttpServletRequestSimulator.POST); addSubmitted(); addDispatchCall("kickstart.powermanagement.jsp.save_only"); request.addParameter(PowerManagementAction.POWER_TYPE, EXPECTED_TYPE); request.addParameter(PowerManagementAction.POWER_ADDRESS, EXPECTED_ADDRESS); request.addParameter(PowerManagementAction.POWER_USERNAME, EXPECTED_USERNAME); request.addParameter(PowerManagementAction.POWER_PASSWORD, EXPECTED_PASSWORD); request.addParameter(PowerManagementAction.POWER_ID, EXPECTED_ID); actionPerform(); clearRequestParameters(); addRequestParameter(RequestContext.SID, server.getId().toString()); request.setMethod(HttpServletRequestSimulator.GET); actionPerform(); Map<String, String> types = (Map<String, String>) request .getAttribute(PowerManagementAction.TYPES); Asserts.assertContains(types.values(), EXPECTED_TYPE); assertEquals(EXPECTED_TYPE, request.getAttribute(PowerManagementAction.POWER_TYPE)); assertEquals(EXPECTED_ADDRESS, request.getAttribute(PowerManagementAction.POWER_ADDRESS)); assertEquals(EXPECTED_USERNAME, request.getAttribute(PowerManagementAction.POWER_USERNAME)); assertEquals(EXPECTED_PASSWORD, request.getAttribute(PowerManagementAction.POWER_PASSWORD)); assertEquals(EXPECTED_ID, request.getAttribute(PowerManagementAction.POWER_ID)); verifyNoActionErrors(); } /** * Tests overwriting the configuration of an existing system. * @throws Exception if something goes wrong */ public void testExecuteOverwriteExistingSystem() throws Exception { Server server = ServerFactoryTest.createTestServer(user, true); addRequestParameter(RequestContext.SID, server.getId().toString()); request.setMethod(HttpServletRequestSimulator.POST); addSubmitted(); addDispatchCall("kickstart.powermanagement.jsp.save_only"); request.addParameter(PowerManagementAction.POWER_TYPE, EXPECTED_TYPE); request.addParameter(PowerManagementAction.POWER_ADDRESS, EXPECTED_ADDRESS); request.addParameter(PowerManagementAction.POWER_USERNAME, EXPECTED_USERNAME); request.addParameter(PowerManagementAction.POWER_PASSWORD, EXPECTED_PASSWORD); request.addParameter(PowerManagementAction.POWER_ID, EXPECTED_ID); actionPerform(); request.addParameter(PowerManagementAction.POWER_TYPE, EXPECTED_TYPE); request.addParameter(PowerManagementAction.POWER_ADDRESS, EXPECTED_ADDRESS_2); request.addParameter(PowerManagementAction.POWER_USERNAME, EXPECTED_USERNAME_2); request.addParameter(PowerManagementAction.POWER_PASSWORD, EXPECTED_PASSWORD_2); request.addParameter(PowerManagementAction.POWER_ID, EXPECTED_ID_2); actionPerform(); assertEquals(EXPECTED_ADDRESS_2, request.getAttribute(PowerManagementAction.POWER_ADDRESS)); assertEquals(EXPECTED_USERNAME_2, request.getAttribute(PowerManagementAction.POWER_USERNAME)); assertEquals(EXPECTED_PASSWORD_2, request.getAttribute(PowerManagementAction.POWER_PASSWORD)); assertEquals(EXPECTED_ID_2, request.getAttribute(PowerManagementAction.POWER_ID)); CobblerConnection connection = CobblerXMLRPCHelper.getConnection(user); SystemRecord record = SystemRecord.lookupById(connection, server.getCobblerId()); assertEquals(EXPECTED_ADDRESS_2, record.getPowerAddress()); assertEquals(EXPECTED_USERNAME_2, record.getPowerUsername()); assertEquals(EXPECTED_PASSWORD_2, record.getPowerPassword()); assertEquals(EXPECTED_ID_2, record.getPowerId()); verifyNoActionErrors(); } /** * Tests powering on a system. * @throws Exception if something goes wrong */ public void testPowerOn() throws Exception { Server server = ServerFactoryTest.createTestServer(user, true); addRequestParameter(RequestContext.SID, server.getId().toString()); request.setMethod(HttpServletRequestSimulator.POST); addSubmitted(); addDispatchCall("kickstart.powermanagement.jsp.power_on"); request.addParameter(PowerManagementAction.POWER_TYPE, EXPECTED_TYPE); request.addParameter(PowerManagementAction.POWER_ADDRESS, EXPECTED_ADDRESS); request.addParameter(PowerManagementAction.POWER_USERNAME, EXPECTED_USERNAME); request.addParameter(PowerManagementAction.POWER_PASSWORD, EXPECTED_PASSWORD); request.addParameter(PowerManagementAction.POWER_ID, EXPECTED_ID); actionPerform(); verifyNoActionErrors(); assertEquals("power_system on " + server.getCobblerId(), MockConnection.getLatestPowerCommand()); } /** * Tests powering off a system. * @throws Exception if something goes wrong */ public void testPowerOff() throws Exception { Server server = ServerFactoryTest.createTestServer(user, true); addRequestParameter(RequestContext.SID, server.getId().toString()); request.setMethod(HttpServletRequestSimulator.POST); addSubmitted(); addDispatchCall("kickstart.powermanagement.jsp.power_off"); request.addParameter(PowerManagementAction.POWER_TYPE, EXPECTED_TYPE); request.addParameter(PowerManagementAction.POWER_ADDRESS, EXPECTED_ADDRESS); request.addParameter(PowerManagementAction.POWER_USERNAME, EXPECTED_USERNAME); request.addParameter(PowerManagementAction.POWER_PASSWORD, EXPECTED_PASSWORD); request.addParameter(PowerManagementAction.POWER_ID, EXPECTED_ID); actionPerform(); verifyNoActionErrors(); assertEquals("power_system off " + server.getCobblerId(), MockConnection.getLatestPowerCommand()); } /** * Tests powering off and on a system. * @throws Exception if something goes wrong */ public void testReboot() throws Exception { Server server = ServerFactoryTest.createTestServer(user, true); addRequestParameter(RequestContext.SID, server.getId().toString()); request.setMethod(HttpServletRequestSimulator.POST); addSubmitted(); addDispatchCall("kickstart.powermanagement.jsp.reboot"); request.addParameter(PowerManagementAction.POWER_TYPE, EXPECTED_TYPE); request.addParameter(PowerManagementAction.POWER_ADDRESS, EXPECTED_ADDRESS); request.addParameter(PowerManagementAction.POWER_USERNAME, EXPECTED_USERNAME); request.addParameter(PowerManagementAction.POWER_PASSWORD, EXPECTED_PASSWORD); request.addParameter(PowerManagementAction.POWER_ID, EXPECTED_ID); actionPerform(); verifyNoActionErrors(); assertEquals("power_system reboot " + server.getCobblerId(), MockConnection.getLatestPowerCommand()); } /** * Tests retrieving the status of a system. * @throws Exception if something goes wrong */ public void testGetStatus() throws Exception { Server server = ServerFactoryTest.createTestServer(user, true); addRequestParameter(RequestContext.SID, server.getId().toString()); request.setMethod(HttpServletRequestSimulator.POST); addSubmitted(); addDispatchCall("kickstart.powermanagement.jsp.get_status"); request.addParameter(PowerManagementAction.POWER_TYPE, EXPECTED_TYPE); request.addParameter(PowerManagementAction.POWER_ADDRESS, EXPECTED_ADDRESS); request.addParameter(PowerManagementAction.POWER_USERNAME, EXPECTED_USERNAME); request.addParameter(PowerManagementAction.POWER_PASSWORD, EXPECTED_PASSWORD); request.addParameter(PowerManagementAction.POWER_ID, EXPECTED_ID); actionPerform(); verifyNoActionErrors(); assertEquals(true, request.getAttribute(PowerManagementAction.POWER_STATUS_ON)); assertEquals("power_system status " + server.getCobblerId(), MockConnection.getLatestPowerCommand()); } }