/** * Copyright (c) 2009--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.action.kickstart.test; import com.redhat.rhn.common.security.SessionSwap; import com.redhat.rhn.domain.channel.Channel; 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.KickstartIpRange; import com.redhat.rhn.domain.kickstart.KickstartSession; import com.redhat.rhn.domain.kickstart.test.KickstartDataTest; import com.redhat.rhn.domain.kickstart.test.KickstartSessionTest; import com.redhat.rhn.domain.role.RoleFactory; import com.redhat.rhn.domain.user.UserFactory; import com.redhat.rhn.frontend.action.kickstart.KickstartHelper; import com.redhat.rhn.frontend.servlets.RhnHttpServletRequest; import com.redhat.rhn.frontend.struts.RequestContext; import com.redhat.rhn.manager.rhnpackage.test.PackageManagerTest; import com.redhat.rhn.testing.BaseTestCaseWithUser; import com.redhat.rhn.testing.ChannelTestUtils; import com.redhat.rhn.testing.RhnMockHttpServletRequest; import java.util.Map; public class KickstartHelperTest extends BaseTestCaseWithUser { private KickstartHelper helper; private KickstartData ksdata; private RhnHttpServletRequest request; private RhnMockHttpServletRequest mockRequest; /** * {@inheritDoc} */ public void setUp() throws Exception { super.setUp(); user.addPermanentRole(RoleFactory.ORG_ADMIN); UserFactory.save(user); ksdata = KickstartDataTest.createKickstartWithOptions(user.getOrg()); // ksdata = KickstartDataTest.createKickstartWithChannel(user.getOrg()); mockRequest = new RhnMockHttpServletRequest(); mockRequest.setupGetRemoteAddr("127.0.0.1"); request = new RhnHttpServletRequest(mockRequest); helper = new KickstartHelper(request); } public void testKsPathparse() { // URL: String url = "http://rhn.redhat.com/ks/cfg/org/" + user.getOrg().getId().toString() + "/label/" + ksdata.getLabel(); request.setAttribute(RequestContext.REQUESTED_URI, url); Map<String, Object> options = helper.parseKickstartUrl(url); assertNotNull(options); assertNotNull(options.get("org_id")); assertNotNull(options.get("label")); assertNotNull(options.get("ksdata")); assertNotNull(options.get("host")); } public void testKsViewLabel() { // URL: String url = "http://rhn.redhat.com/ks/cfg/org/" + user.getOrg().getId().toString() + "/view_label/" + ksdata.getLabel(); request.setAttribute(RequestContext.REQUESTED_URI, url); Map<String, Object> options = helper.parseKickstartUrl(url); assertNotNull(options.get("ksdata")); // This is the key test assertNull(options.get("session")); } public void testIpRangeLabel() throws Exception { KickstartIpRange range = new KickstartIpRange(); range.setMaxString("127.0.0.2"); range.setMinString("127.0.0.1"); range.setKsdata(ksdata); range.setOrg(user.getOrg()); ksdata.getIps().add(range); // URL: String url = "http://rhn.redhat.com/ks/cfg/org/" + user.getOrg().getId().toString() + "/mode/ip_range"; request.setAttribute(RequestContext.REQUESTED_URI, url); helper = new KickstartHelper(request); Map<String, Object> options = helper.parseKickstartUrl(url); assertEquals(ksdata, options.get("ksdata")); } public void testValidateKickstartChannel() throws Exception { Channel base = ChannelTestUtils.createBaseChannel(user); Channel tools = ChannelTestUtils.createChildChannel(user, base); ksdata.getTree().setChannel(base); ksdata.getTree().setInstallType(KickstartFactory. lookupKickstartInstallTypeByLabel(KickstartInstallType.RHEL_4)); assertFalse(ksdata.isRhel5()); assertFalse(helper.verifyKickstartChannel(ksdata, user)); PackageManagerTest.addPackageToChannel("rhn-kickstart", tools); assertFalse(helper.verifyKickstartChannel(ksdata, user)); ksdata.getTree().setInstallType(KickstartFactory. lookupKickstartInstallTypeByLabel(KickstartInstallType.RHEL_5)); assertTrue(helper.verifyKickstartChannel(ksdata, user, false)); } public void testKsSessionPathparse() throws Exception { user.addPermanentRole(RoleFactory.ORG_ADMIN); KickstartSession session = KickstartSessionTest.createKickstartSession(ksdata, user); KickstartFactory.saveKickstartSession(session); session = (KickstartSession) reload(session); assertNotSame(session.getState(), KickstartFactory.SESSION_STATE_CONFIG_ACCESSED); String encodedSession = SessionSwap.encodeData(session.getId().toString()); // URL: /kickstart/ks/session/2xb7d56e8958b0425e762cc74e8705d8e7 String url = "http://rhn.redhat.com/session/ks/session/" + encodedSession; request.setAttribute(RequestContext.REQUESTED_URI, url); Map<String, Object> options = helper.parseKickstartUrl(url); assertNotNull(options); assertNotNull(options.get("org_id")); assertNotNull(options.get("ksdata")); assertNotNull(options.get("session")); assertNotNull(options.get("host")); assertEquals(session.getState(), KickstartFactory.SESSION_STATE_CONFIG_ACCESSED); } public void testKsNoOrg() { String url = "http://somesat.redhat.com/ks/cfg/label/" + ksdata.getLabel(); request.setAttribute(RequestContext.REQUESTED_URI, url); Map<String, Object> options = helper.parseKickstartUrl(url); assertNotNull(options); } public void testProxyFetch() throws Exception { String proxyheader = "1006681409::1151513167.96:21600.0:VV/xFNEmCYOuHx" + "EBAs7BEw==:fjs-0-08.rhndev.redhat.com,1006681408::1151513034." + "3:21600.0:w2lm+XWSFJMVCGBK1dZXXQ==:fjs-0-11.rhndev.redhat.com" + ",1006678487::1152567362.02:21600.0:t15lgsaTRKpX6AxkUFQ11A==:f" + "js-0-12.rhndev.redhat.com"; // mockRequest.setupAddHeader(KickstartHelper.XRHNPROXYAUTH, proxyheader); mockRequest.setupGetHeader(KickstartHelper.XRHNPROXYAUTH, proxyheader); helper = new KickstartHelper(request); assertEquals("fjs-0-08.rhndev.redhat.com", helper.getKickstartHost()); } }