/** * Copyright (c) 2009--2012 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.action.kickstart.tree.test; import com.redhat.rhn.common.conf.ConfigDefaults; import com.redhat.rhn.domain.channel.Channel; import com.redhat.rhn.domain.channel.test.ChannelFactoryTest; import com.redhat.rhn.domain.kickstart.KickstartData; import com.redhat.rhn.domain.kickstart.KickstartFactory; import com.redhat.rhn.domain.kickstart.KickstartInstallType; import com.redhat.rhn.domain.kickstart.KickstartableTree; import com.redhat.rhn.domain.kickstart.test.KickstartDataTest; import com.redhat.rhn.domain.kickstart.test.KickstartableTreeTest; import com.redhat.rhn.domain.role.RoleFactory; import com.redhat.rhn.frontend.action.BaseEditAction; import com.redhat.rhn.frontend.action.kickstart.tree.TreeCreateAction; import com.redhat.rhn.frontend.action.kickstart.tree.TreeEditAction; import com.redhat.rhn.frontend.struts.RequestContext; import com.redhat.rhn.frontend.struts.RhnAction; import com.redhat.rhn.frontend.struts.RhnHelper; import com.redhat.rhn.manager.rhnpackage.test.PackageManagerTest; import com.redhat.rhn.testing.ChannelTestUtils; import com.redhat.rhn.testing.RhnPostMockStrutsTestCase; import com.redhat.rhn.testing.TestUtils; import com.redhat.rhn.testing.UserTestUtils; import org.apache.struts.util.LabelValueBean; import java.util.Iterator; import java.util.List; /** * TreeCreateTest */ public class TreeActionTest extends RhnPostMockStrutsTestCase { public void testCreateNonSubmit() throws Exception { UserTestUtils.addUserRole(user, RoleFactory.CONFIG_ADMIN); ChannelFactoryTest.createTestChannel(user); executeNonSubmit("/kickstart/TreeCreate"); } public void testCreateSubmit() throws Exception { UserTestUtils.addUserRole(user, RoleFactory.CONFIG_ADMIN); Channel c = ChannelFactoryTest.createTestChannel(user); executeSubmit("/kickstart/TreeCreate", c); verifyActionMessage("tree.create.success"); } public void testCreateRefresh() throws Exception { UserTestUtils.addUserRole(user, RoleFactory.CONFIG_ADMIN); Channel rhel5BaseChan = createRhel5Channels(); Channel rhel4BaseChan = createRhel4Channels(); // Execute a non-submit to load the page initially: executeNonSubmit("/kickstart/TreeCreate"); // Make sure the base channels we created are appearing in the dropdown list: assertNotNull(request.getAttribute(TreeCreateAction.CHANNELS)); List channelLabels = (List)request.getAttribute(TreeCreateAction.CHANNELS); boolean foundRhel4BaseChan = false; boolean foundRhel5BaseChan = false; for (Iterator it = channelLabels.iterator(); it.hasNext();) { LabelValueBean chan = (LabelValueBean)it.next(); if (chan.getLabel().equals(rhel4BaseChan.getName())) { foundRhel4BaseChan = true; } else if (chan.getLabel().equals(rhel5BaseChan.getName())) { foundRhel5BaseChan = true; } } assertTrue(channelLabels.size() >= 2); assertTrue(foundRhel4BaseChan); assertTrue(foundRhel5BaseChan); // Set fields on the form to verify values are saved after a refresh: String ksDistLabel = "somelabel" + TestUtils.randomString(); addRequestParameter(TreeCreateAction.LABEL, ksDistLabel); addRequestParameter(TreeCreateAction.BASE_PATH, KickstartableTreeTest.KICKSTART_TREE_PATH.getAbsolutePath()); // Choose the RHEL 5 base channel so we can verify the package list is updated: addRequestParameter(TreeCreateAction.CHANNEL_ID, rhel5BaseChan.getId().toString()); executeRefresh("/kickstart/TreeCreate"); // Verify that things are as they should be after a refresh: verifyFormValue(TreeCreateAction.LABEL, ksDistLabel); verifyFormValue(TreeCreateAction.BASE_PATH, KickstartableTreeTest.KICKSTART_TREE_PATH.getAbsolutePath()); verifyFormValue(TreeCreateAction.CHANNEL_ID, rhel5BaseChan.getId()); } /** * Create a fake RHEL 5 base channel and associated fake RHN tools channel. * The tools channel should contain a single rhn-kickstart package providing * the kickstart capability. * @param kickstartCapability * @return The RHEL 5 base channel. * @throws Exception */ private Channel createRhel5Channels() throws Exception { Channel rhel5BaseChan = ChannelTestUtils.createTestChannel(user); Channel rhel5ToolsChan = ChannelTestUtils.createChildChannel(user, rhel5BaseChan); PackageManagerTest.addKickstartPackageToChannel( ConfigDefaults.get().getKickstartPackageName(), rhel5ToolsChan); return rhel5BaseChan; } /** * Create a fake RHEL 4 base channel and associated fake RHN tools channel. * The tools channel should contain several autokickstart packages. * @return The RHEL 4 base channel. * @throws Exception */ private Channel createRhel4Channels() throws Exception { Channel rhel4BaseChan = ChannelTestUtils.createTestChannel(user); Channel rhel4ToolsChan = ChannelTestUtils.createChildChannel(user, rhel4BaseChan); PackageManagerTest.addKickstartPackageToChannel( KickstartData.LEGACY_KICKSTART_PACKAGE_NAME + "ks-rh-i386-desktop-4", rhel4ToolsChan); PackageManagerTest.addKickstartPackageToChannel( KickstartData.LEGACY_KICKSTART_PACKAGE_NAME + "ks-rh-i386-desktop-4-u1", rhel4ToolsChan); PackageManagerTest.addKickstartPackageToChannel( KickstartData.LEGACY_KICKSTART_PACKAGE_NAME + "ks-rh-i386-desktop-4-u2", rhel4ToolsChan); return rhel4BaseChan; } public void testEditSubmit() throws Exception { Channel c = ChannelFactoryTest.createTestChannel(user); KickstartableTree t = KickstartableTreeTest.createTestKickstartableTree(c); addRequestParameter(RequestContext.KSTREE_ID, t.getId().toString()); String newLabel = executeSubmit("/kickstart/TreeEdit", c); verifyFormValue(TreeEditAction.BASE_PATH, t.getBasePath()); verifyFormValue(TreeEditAction.CHANNEL_ID, t.getChannel().getId()); verifyFormValue(TreeEditAction.LABEL, t.getLabel()); assertEquals(newLabel, t.getLabel()); verifyActionMessage("tree.edit.success"); } public void testEditNonSubmit() throws Exception { Channel c = ChannelFactoryTest.createTestChannel(user); KickstartableTree t = KickstartableTreeTest.createTestKickstartableTree(c); addRequestParameter(RequestContext.KSTREE_ID, t.getId().toString()); executeNonSubmit("/kickstart/TreeEdit"); verifyFormValue(TreeEditAction.BASE_PATH, t.getBasePath()); verifyFormValue(TreeEditAction.CHANNEL_ID, t.getChannel().getId()); verifyFormValue(TreeEditAction.LABEL, t.getLabel()); assertNotNull(request.getAttribute(RequestContext.KSTREE)); } public void executeNonSubmit(String path) { addRequestParameter(RhnAction.SUBMITTED, Boolean.FALSE.toString()); execute(path); } public void executeRefresh(String path) { addRequestParameter(BaseEditAction.REFRESH, Boolean.TRUE.toString()); execute(path); } private void execute(String path) { setRequestPathInfo(path); actionPerform(); verifyNoActionErrors(); assertNotNull(request.getAttribute(TreeCreateAction.CHANNELS)); if (request.getAttribute(TreeCreateAction.INSTALLTYPES) == null) { assertNotNull(request.getAttribute(TreeCreateAction.HIDE_SUBMIT)); assertNotNull(request.getAttribute(TreeCreateAction.NOINSTALLTYPES)); } else { assertNotNull(request.getAttribute(TreeCreateAction.INSTALLTYPES)); } } public String executeSubmit(String path, Channel c) throws Exception { String newLabel = "somelabel" + TestUtils.randomString(); //KickstartableTree tree = KickstartableTreeTest.createTestKickstartableTree(); //tree.setLabel(newLabel); addRequestParameter(RhnAction.SUBMITTED, Boolean.TRUE.toString()); setRequestPathInfo(path); addRequestParameter(TreeCreateAction.BASE_PATH, KickstartableTreeTest.KICKSTART_TREE_PATH.getAbsolutePath()); addRequestParameter(TreeCreateAction.CHANNEL_ID, c.getId().toString()); addRequestParameter(TreeCreateAction.LABEL, newLabel); KickstartInstallType installtype = (KickstartInstallType) TestUtils.lookupFromCacheById(1L, "KickstartInstallType.findById"); addRequestParameter(TreeCreateAction.INSTALL_TYPE, installtype.getLabel()); actionPerform(); verifyNoActionErrors(); return newLabel; } public void testDeleteConfirm() throws Exception { Channel c = ChannelFactoryTest.createTestChannel(user); KickstartableTree t = KickstartableTreeTest.createTestKickstartableTree(c); KickstartData ksdata = KickstartDataTest.createKickstartWithOptions(user.getOrg()); ksdata.getKickstartDefaults().setKstree(t); KickstartFactory.saveKickstartData(ksdata); TestUtils.flushAndEvict(ksdata); assertNotNull(t); addRequestParameter(RequestContext.KSTREE_ID, t.getId().toString()); addRequestParameter(TreeEditAction.BASE_PATH, t.getBasePath()); addRequestParameter(TreeEditAction.CHANNEL_ID, c.getId().toString()); addRequestParameter(TreeEditAction.LABEL, t.getLabel()); addRequestParameter(RhnAction.SUBMITTED, Boolean.FALSE.toString()); setRequestPathInfo("/kickstart/TreeDelete"); actionPerform(); verifyNoActionErrors(); verifyForward(RhnHelper.DEFAULT_FORWARD); assertNotNull(request.getAttribute(RequestContext.PAGE_LIST)); verifyPageList(KickstartData.class); } public void testDeleteSubmit() throws Exception { Channel c = ChannelFactoryTest.createTestChannel(user); KickstartableTree t = KickstartableTreeTest.createTestKickstartableTree(c); assertNotNull(t); KickstartFactory.saveKickstartableTree(t); assertNotNull(KickstartFactory. lookupKickstartTreeByIdAndOrg(t.getId(), user.getOrg())); addRequestParameter(RequestContext.KSTREE_ID, t.getId().toString()); addRequestParameter(TreeEditAction.BASE_PATH, t.getBasePath()); addRequestParameter(TreeEditAction.CHANNEL_ID, c.getId().toString()); addRequestParameter(TreeEditAction.LABEL, t.getLabel()); addRequestParameter(RhnAction.SUBMITTED, Boolean.TRUE.toString()); setRequestPathInfo("/kickstart/TreeDelete"); actionPerform(); verifyNoActionErrors(); verifyForward("success"); verifyActionMessage("tree.delete.success"); } }