com.redhat.rhn.domain.config.test.ConfigurationFactoryTest.java Source code

Java tutorial

Introduction

Here is the source code for com.redhat.rhn.domain.config.test.ConfigurationFactoryTest.java

Source

/**
 * 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.domain.config.test;

import java.io.ByteArrayInputStream;
import java.util.Date;

import org.hibernate.Session;

import com.redhat.rhn.common.hibernate.HibernateFactory;
import com.redhat.rhn.domain.config.ConfigChannel;
import com.redhat.rhn.domain.config.ConfigChannelType;
import com.redhat.rhn.domain.config.ConfigContent;
import com.redhat.rhn.domain.config.ConfigFile;
import com.redhat.rhn.domain.config.ConfigFileName;
import com.redhat.rhn.domain.config.ConfigFileState;
import com.redhat.rhn.domain.config.ConfigFileType;
import com.redhat.rhn.domain.config.ConfigInfo;
import com.redhat.rhn.domain.config.ConfigRevision;
import com.redhat.rhn.domain.config.ConfigurationFactory;
import com.redhat.rhn.testing.BaseTestCaseWithUser;
import com.redhat.rhn.testing.ConfigTestUtils;
import com.redhat.rhn.testing.TestUtils;

public class ConfigurationFactoryTest extends BaseTestCaseWithUser {

    public void testLookupConfigChannelType() throws Exception {
        assertNotNull(ConfigChannelType.global());
        assertNotNull(ConfigChannelType.sandbox());
        assertNotNull(ConfigChannelType.local());
    }

    public void testLookupConfigFileType() throws Exception {
        assertNotNull(ConfigFileType.dir());
        assertEquals(ConfigFileType.DIR, ConfigFileType.dir().getLabel());
        assertNotNull(ConfigFileType.file());
        assertEquals(ConfigFileType.FILE, ConfigFileType.file().getLabel());
    }

    public void testLookupConfigFileState() throws Exception {
        assertNotNull(ConfigFileState.normal());
        assertNotNull(ConfigFileState.dead());
    }

    public void testSaveNewConfigChannel() {
        String label = "testlabel";
        ConfigChannel channel = ConfigurationFactory.saveNewConfigChannel(user.getOrg(), ConfigChannelType.global(),
                "testname", label, "testdescription");
        assertNotNull(channel.getId());

        //evict it so we can look it back up
        flushAndEvict(channel);

        ConfigChannel channel2 = ConfigurationFactory.lookupConfigChannelById(channel.getId());
        assertNotNull(channel2);
        assertEquals(channel.getName(), channel2.getName());

        //now change something and hopefully avoid a database problem.
        channel2.setName("newName");
        ConfigurationFactory.commit(channel2);
        //now look up the new way
        ConfigChannel channel3 = ConfigurationFactory.lookupConfigChannelByLabel(label, user.getOrg(),
                ConfigChannelType.global());
        assertEquals(channel2, channel3);

    }

    public void testSaveNewConfigFile() {
        //Create a channel to put the file in
        ConfigChannel channel = ConfigTestUtils.createConfigChannel(user.getOrg());

        //Create a config file
        ConfigFile file = channel.createConfigFile(ConfigFileState.dead(), "testname");
        assertNotNull(file.getId());

        //evict it so we can look it back up
        flushAndEvict(file);

        ConfigFile file2 = ConfigurationFactory.lookupConfigFileById(file.getId());
        assertNotNull(file2);
        assertEquals(file.getConfigFileName().getPath(), file2.getConfigFileName().getPath());

        //now change something and hopefully avoid database problem
        file2.setModified(new Date());
        ConfigurationFactory.commit(file2);
    }

    public void testSaveNewConfigRevision() {

        //Create a file to put this revision in
        ConfigFile file = ConfigTestUtils.createConfigFile(user.getOrg());

        //Create a content and info to put into this revision
        ConfigContent content = ConfigTestUtils.createConfigContent(new Long(234L), true);
        ConfigInfo info = ConfigTestUtils.createConfigInfo("root", "root", new Long(777));
        commitAndCloseSession();
        commitHappened();

        //Create a config revision
        ConfigRevision revision = ConfigTestUtils.createConfigRevision(file, content, info, new Long(23));
        assertNotNull(revision.getId());

        //evict it so we can look it back up
        flushAndEvict(revision);

        ConfigRevision revision2 = ConfigurationFactory.lookupConfigRevisionById(revision.getId());
        assertNotNull(revision2);
        assertEquals(revision.getRevision(), revision2.getRevision());
        ConfigurationFactory.commit(revision2);
    }

    public void testLookupOrInsertConfigInfo() {

        //one problem is that looking up the same thing must be done in such a way that
        //hibernate doesn't yell about it.
        ConfigInfo info1 = ConfigurationFactory.lookupOrInsertConfigInfo("testman", "testgroup", new Long(665), "",
                null);
        ConfigInfo info2 = ConfigurationFactory.lookupOrInsertConfigInfo("testman", "testgroup", new Long(665), "",
                null);
        assertNotNull(info1.getId());
        assertNotNull(info2.getId());
        assertEquals(info1.getId(), info2.getId());

        //now let's add them to two different ConfigRevisions and make sure that we don't
        //have any trouble saving them.
        ConfigFile file = ConfigTestUtils.createConfigFile(user.getOrg());
        ConfigContent content = ConfigTestUtils.createConfigContent();

        ConfigRevision rev1 = ConfigTestUtils.createConfigRevision(file, content, info1, new Long(1));
        ConfigRevision rev2 = ConfigTestUtils.createConfigRevision(file, content, info2, new Long(2));

        //The revisions have now been inserted,  now let's see if hibernate can handle
        //an update for them.
        ConfigurationFactory.commit(rev1);
        ConfigurationFactory.commit(rev2);
    }

    public void testLookupOrInsertConfigFileName() {
        //one problem is that looking up the same thing must be done in such a way that
        //hibernate doesn't yell about it.
        String filename = "/etc/" + TestUtils.randomString();
        ConfigFileName name1 = ConfigurationFactory.lookupOrInsertConfigFileName(filename);
        ConfigFileName name2 = ConfigurationFactory.lookupOrInsertConfigFileName(filename);
        assertNotNull(name1.getId());
        assertNotNull(name2.getId());
        assertEquals(name1.getId(), name2.getId());

        //now let's add them to two different ConfigFiles and make sure that we don't
        //have any trouble saving them.
        ConfigChannel channel = ConfigTestUtils.createConfigChannel(user.getOrg());
        ConfigChannel channel2 = ConfigTestUtils.createConfigChannel(user.getOrg());

        ConfigFile file1 = channel.createConfigFile(ConfigFileState.normal(), name1);
        ConfigFile file2 = channel2.createConfigFile(ConfigFileState.normal(), name1);

        //The files have now been inserted,  now let's see if hibernate can handle
        //an update for them.
        ConfigurationFactory.commit(file1);
        ConfigurationFactory.commit(file2);
    }

    public void testRemoveConfigChannel() {

        //Let's create a channel/file/revision
        ConfigRevision cr = ConfigTestUtils.createConfigRevision(user.getOrg());
        ConfigChannel channel = cr.getConfigFile().getConfigChannel();
        assertNotNull(cr.getId());

        //now let's create another file in this channel without a revision,
        //just to test things out.
        ConfigFile file = ConfigTestUtils.createConfigFile(channel);
        assertNotNull(file.getId());

        //We have to evict everything from the session so that hibernate
        //doesn't complain that we removed things out from under its feet.
        Session session = HibernateFactory.getSession();
        session.flush();
        session.evict(channel);
        session.evict(file);
        session.evict(cr.getConfigFile());
        session.evict(cr);

        //run the method we are testing
        ConfigurationFactory.removeConfigChannel(channel);

        //confirm that the channel is gone.
        assertNull(ConfigurationFactory.lookupConfigChannelById(channel.getId()));
        //and everything that was in the channel.
        assertNull(ConfigurationFactory.lookupConfigFileById(file.getId()));
        assertNull(ConfigurationFactory.lookupConfigFileById(cr.getConfigFile().getId()));
        assertNull(ConfigurationFactory.lookupConfigRevisionById(cr.getId()));
    }

    public void testCreateNewRevisionFromStream() throws Exception {
        String startData = "this is some original data";
        StringBuffer stringBuffer1 = new StringBuffer(startData);
        ByteArrayInputStream stream = new ByteArrayInputStream(stringBuffer1.toString().getBytes("UTF-8"));
        ConfigRevision cr = ConfigTestUtils.createConfigRevision(user.getOrg());
        ConfigRevision cr2 = ConfigurationFactory.createNewRevisionFromStream(user, stream,
                new Long(startData.length()), cr.getConfigFile());
        assertEquals(user.getId(), cr2.getChangedById());
        assertEquals(user.getLogin(), cr2.getChangedBy().getLogin());
    }
}