/** * Copyright (c) 2009--2015 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.domain.kickstart.test; import com.redhat.rhn.common.hibernate.HibernateFactory; import com.redhat.rhn.common.util.FileUtils; 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.KickstartTreeType; import com.redhat.rhn.domain.kickstart.KickstartableTree; import com.redhat.rhn.domain.org.Org; import com.redhat.rhn.domain.org.OrgFactory; import com.redhat.rhn.domain.user.User; import com.redhat.rhn.manager.kickstart.cobbler.CobblerXMLRPCHelper; import com.redhat.rhn.testing.BaseTestCaseWithUser; import com.redhat.rhn.testing.ChannelTestUtils; import com.redhat.rhn.testing.TestUtils; import com.redhat.rhn.testing.UserTestUtils; import org.apache.commons.lang.RandomStringUtils; import org.cobbler.Distro; import org.hibernate.Session; import java.io.File; import java.util.Date; import java.util.HashMap; import java.util.List; /** * KickstartableTreeTest * @version $Rev$ */ public class KickstartableTreeTest extends BaseTestCaseWithUser { public static final String TEST_BOOT_PATH = "test-boot-image-i186"; public static final File KICKSTART_TREE_PATH = new File("/tmp/kickstart/images"); public static void createKickstartTreeItems(User u) throws Exception { createKickstartTreeItems(KICKSTART_TREE_PATH, u); } public static void createKickstartTreeItems(File basePath, User u) throws Exception { //Alright setup things we need for trees createDirIfNotExists(basePath); KickstartableTree tree = new KickstartableTree(); tree.setChannel(ChannelTestUtils.createBaseChannel(u)); tree.setInstallType(KickstartFactory. lookupKickstartInstallTypeByLabel(KickstartInstallType.RHEL_5)); tree.setBasePath(basePath.getAbsolutePath()); tree.setOrg(u.getOrg()); createKickstartTreeItems(tree); } public static void createKickstartTreeItems(KickstartableTree tree) throws Exception { createDirIfNotExists(new File(tree.getDefaultKernelPath()).getParentFile()); createDirIfNotExists(new File(tree.getKernelXenPath()).getParentFile()); FileUtils.writeStringToFile("kernel", tree.getDefaultKernelPath()); FileUtils.writeStringToFile("kernel-xen", tree.getKernelXenPath()); createDirIfNotExists(new File(tree.getDefaultInitrdPath()[0]).getParentFile()); createDirIfNotExists(new File(tree.getInitrdXenPath()).getParentFile()); FileUtils.writeStringToFile("initrd-xen", tree.getInitrdXenPath()); FileUtils.writeStringToFile("initrd", tree.getDefaultInitrdPath()[0]); } public void testKickstartableTree() throws Exception { KickstartableTree k = createTestKickstartableTree(); assertNotNull(k); assertNotNull(k.getId()); KickstartableTree k2 = lookupById(k.getId()); assertEquals(k2.getLabel(), k.getLabel()); Org o = OrgFactory.lookupById(k2.getOrgId()); KickstartableTree k3 = KickstartFactory. lookupKickstartTreeByLabel(k2.getLabel(), o); assertEquals(k3.getLabel(), k2.getLabel()); List trees = KickstartFactory. lookupKickstartTreesByChannelAndOrg(k2.getChannel().getId(), o); assertNotNull(trees); assertTrue(trees.size() > 0); KickstartableTree kwithnullorg = createTestKickstartableTree(); String label = "treewithnullorg: " + TestUtils.randomString(); kwithnullorg.setLabel(label); kwithnullorg.setOrg(null); TestUtils.saveAndFlush(kwithnullorg); flushAndEvict(kwithnullorg); KickstartableTree lookedUp = KickstartFactory.lookupKickstartTreeByLabel(label, o); assertNotNull(lookedUp); assertNull(lookedUp.getOrgId()); } public void testIsRhnTree() throws Exception { KickstartableTree k = createTestKickstartableTree(); assertFalse(k.isRhnTree()); k.setOrg(null); assertTrue(k.isRhnTree()); } public void testDownloadLocation() throws Exception { KickstartableTree k = createTestKickstartableTree(); String expected = "/ks/dist/org/" + k.getOrg().getId() + "/" + k.getLabel(); assertEquals(expected, k.getDefaultDownloadLocation()); } public void testKsDataByTree() throws Exception { KickstartableTree k = createTestKickstartableTree( ChannelFactoryTest.createTestChannel(user)); KickstartData ksdata = KickstartDataTest. createKickstartWithOptions(user.getOrg()); ksdata.getKickstartDefaults().setKstree(k); KickstartFactory.saveKickstartData(ksdata); flushAndEvict(ksdata); List profiles = KickstartFactory.lookupKickstartDatasByTree(k); assertNotNull(profiles); assertTrue(profiles.size() > 0); } /** * Helper method to lookup KickstartableTree by id * @param id Id to lookup * @return Returns the KickstartableTree * @throws Exception */ private KickstartableTree lookupById(Long id) throws Exception { Session session = HibernateFactory.getSession(); return (KickstartableTree) session.getNamedQuery("KickstartableTree.findById") .setLong("id", id.longValue()) .uniqueResult(); } /** * Creates KickstartableTree for testing purposes. * @return Returns a committed KickstartableTree * @throws Exception */ public static KickstartableTree createTestKickstartableTree() throws Exception { User u = UserTestUtils.findNewUser("testUser", "testCreateTestKickstartableTree"); Channel channel = ChannelFactoryTest.createTestChannel(u); ChannelTestUtils.addDistMapToChannel(channel); return createTestKickstartableTree(channel); } /** * Creates KickstartableTree for testing purposes. * @param treeChannel Channel this Tree uses. * @return Returns a committed KickstartableTree * @throws Exception */ public static KickstartableTree createTestKickstartableTree(Channel treeChannel) throws Exception { Date created = new Date(); Date modified = new Date(); Date lastmodified = new Date(); Long testid = new Long(1); String query = "KickstartInstallType.findById"; KickstartInstallType installtype = (KickstartInstallType) TestUtils.lookupFromCacheById(testid, query); query = "KickstartTreeType.findById"; KickstartTreeType treetype = (KickstartTreeType) TestUtils.lookupFromCacheById(testid, query); KickstartableTree k = new KickstartableTree(); k.setLabel("ks-" + treeChannel.getLabel() + RandomStringUtils.randomAlphanumeric(5)); k.setBasePath(KICKSTART_TREE_PATH.getAbsolutePath()); k.setCreated(created); k.setModified(modified); k.setOrg(treeChannel.getOrg()); k.setLastModified(lastmodified); k.setInstallType(installtype); k.setTreeType(treetype); k.setChannel(treeChannel); createKickstartTreeItems(k); Distro d = Distro.create(CobblerXMLRPCHelper.getConnection("test"), k.getLabel(), k.getDefaultKernelPath(), k.getDefaultInitrdPath()[0], new HashMap(), k.getInstallType().getCobblerBreed(), k.getInstallType().getCobblerOsVersion(), k.getChannel().getChannelArch().cobblerArch()); Distro xend = Distro.create(CobblerXMLRPCHelper.getConnection("test"), k.getLabel(), k.getDefaultKernelPath(), k.getDefaultInitrdPath()[0], new HashMap(), k.getInstallType().getCobblerBreed(), k.getInstallType().getCobblerOsVersion(), k.getChannel().getChannelArch().cobblerArch()); k.setCobblerId(d.getUid()); k.setCobblerXenId(xend.getUid()); TestUtils.saveAndFlush(k); return k; } /** * Create a KickstartableTree for testing purposes using the given install type. * @param treeChannel channel to use for this tree. * @param installTypeLabel install type to use * @return the kickstartable tree * @throws Exception */ public static KickstartableTree createTestKickstartableTree( Channel treeChannel, String installTypeLabel) throws Exception { KickstartableTree tree = createTestKickstartableTree(treeChannel); String query = "KickstartInstallType.findByLabel"; KickstartInstallType installtype = (KickstartInstallType) TestUtils.lookupFromCacheByLabel(installTypeLabel, query); tree.setInstallType(installtype); TestUtils.saveAndFlush(tree); return tree; } }