com.redhat.rhn.frontend.action.common.test.RhnSetActionTest.java Source code

Java tutorial

Introduction

Here is the source code for com.redhat.rhn.frontend.action.common.test.RhnSetActionTest.java

Source

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

import com.redhat.rhn.common.db.datasource.DataResult;
import com.redhat.rhn.common.hibernate.HibernateFactory;
import com.redhat.rhn.common.hibernate.HibernateHelper;
import com.redhat.rhn.domain.Identifiable;
import com.redhat.rhn.domain.user.User;
import com.redhat.rhn.frontend.action.common.RhnSetAction;
import com.redhat.rhn.frontend.struts.RequestContext;
import com.redhat.rhn.manager.rhnset.RhnSetDecl;
import com.redhat.rhn.testing.ActionHelper;
import com.redhat.rhn.testing.RhnBaseTestCase;

import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.hibernate.HibernateException;
import org.hibernate.Session;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;

import javax.servlet.http.HttpServletRequest;

/**
 * RhnSetActionTest
 * @version $Rev$
 */
public class RhnSetActionTest extends RhnBaseTestCase {
    private static Logger log = Logger.getLogger(RhnSetActionTest.class);
    private TestAction action = null;

    public void setUp() throws Exception {
        super.setUp();
        action = new TestAction();
    }

    public void testUpdateList() throws Exception {
        //TestAction action = new TestAction();
        ActionHelper sah = new ActionHelper();
        sah.setUpAction(action);
        sah.setupClampListBounds();
        sah.getRequest().setRequestURL("foo");
        sah.getRequest().setupAddParameter("items_selected", new String[] { "10", "20", "30" });
        sah.getRequest().setupAddParameter("newset", (String) null);
        sah.getRequest().setupAddParameter("items_on_page", (String) null);
        ActionForward forward = sah.executeAction("updatelist");

        // let's go find the data
        verifyRhnSetData(sah.getUser().getId(), action.getSetDecl().getLabel(), 3);
        verifyParam(forward.getPath(), "setupdated", "true");
    }

    public void testUpdateListPipe() throws Exception {
        ActionHelper sah = new ActionHelper();
        sah.setUpAction(action);
        sah.setupClampListBounds();
        sah.getRequest().setRequestURL("foo");
        sah.getRequest().setupAddParameter("items_selected", new String[] { "777|999", "99|555", "666|77656" });
        sah.getRequest().setupAddParameter("newset", (String) null);
        sah.getRequest().setupAddParameter("items_on_page", (String) null);
        sah.executeAction("updatelist");

        // let's go find the data
        verifyRhnSetData(sah.getUser().getId(), action.getSetDecl().getLabel(), 3);
    }

    public void testUnselectAll() throws Exception {
        ActionHelper sah = new ActionHelper();
        sah.setUpAction(action);
        sah.setupClampListBounds();
        ActionForward forward = sah.executeAction("unselectall");

        verifyRhnSetData(sah.getUser().getId(), action.getSetDecl().getLabel(), 0);
        verifyParam(forward.getPath(), "setupdated", "true");
    }

    public void testSelectAllBadDataType() throws Exception {
        ActionHelper sah = new ActionHelper();
        TestActionWithData a = new TestActionWithData();
        sah.setUpAction(a);
        sah.setupClampListBounds();
        // We check to make sure we throw
        // exception if the list has invalid types in it.
        boolean failed = false;
        try {
            sah.executeAction("selectall");
        } catch (Exception iea) {
            failed = true;
        }
        assertTrue(failed);
    }

    public void testSelectAll() throws Exception {
        ActionHelper sah = new ActionHelper();
        TestActionWithData a = new TestActionWithData() {
            protected DataResult getDataResult(User user, ActionForm formIn, HttpServletRequest request) {
                List retval = new LinkedList();
                for (int i = 0; i < 10; i++) {
                    retval.add(new TestIdObject(new Long(i)));
                }
                return new DataResult(retval);
            }
        };
        sah.setUpAction(a);
        sah.setupClampListBounds();
        ActionForward forward = sah.executeAction("selectall");
        verifyRhnSetData(sah.getUser().getId(), a.getSetDecl().getLabel(), 10);
        verifyParam(forward.getPath(), "setupdated", "true");
    }

    public void testFilter() throws Exception {
        ActionHelper sah = new ActionHelper();
        sah.setUpAction(action);
        sah.getRequest().setupAddParameter(RequestContext.FILTER_STRING, "zzzz");
        sah.setupClampListBounds();

        ActionForward forward = sah.executeAction("filter");
        verifyParam(forward.getPath(), RequestContext.FILTER_STRING, "zzzz");
    }

    public void testUnspecified() throws Exception {
        ActionHelper sah = new ActionHelper();
        sah.setUpAction(action);
        sah.setupClampListBounds();
        sah.getRequest().setupAddParameter("items_selected", new String[] { "10", "20", "30" });
        sah.getRequest().setupAddParameter("newset", (String) null);
        sah.getRequest().setupAddParameter("items_on_page", (String) null);
        ActionForward forward = sah.executeAction("unspecified");

        verifyParam(forward.getPath(), "newset", "[10, 20, 30]");
    }

    private void verifyParam(String path, String name, String value) {
        String[] args = StringUtils.split(path, "?&");
        for (int i = 0; i < args.length; i++) {
            String[] param = StringUtils.split(args[i], "=");
            if (param[0].equals(name)) {
                assertEquals(value, param[1]);
                break;
            }
        }
    }

    public static void verifyRhnSetData(User user, RhnSetDecl decl, int size)
            throws HibernateException, SQLException {
        verifyRhnSetData(user.getId(), decl.getLabel(), size);
    }

    public static void verifyRhnSetData(Long uid, String setname, int size)
            throws HibernateException, SQLException {
        Session session = null;
        Connection c = null;
        Statement stmt = null;
        ResultSet rs = null;
        try {
            session = HibernateFactory.getSession();
            session.flush();
            c = session.connection();
            stmt = c.createStatement();
            String query = "select * from rhnset where user_id = " + uid.toString();
            rs = stmt.executeQuery(query);

            assertNotNull(rs);

            int cnt = 0;
            while (rs.next()) {
                assertEquals(uid.longValue(), rs.getLong("USER_ID"));
                assertEquals(setname, rs.getString("LABEL"));
                cnt++;
            }

            assertEquals(size, cnt);
        } catch (SQLException e) {
            log.error("Error validating data.", e);
            throw e;
        } finally {
            HibernateHelper.cleanupDB(rs, stmt);
        }
    }

    public static class TestAction extends RhnSetAction {

        protected RhnSetDecl getSetDecl() {
            return RhnSetDecl.TEST;
        }

        /**
         * {@inheritDoc}
         */
        protected DataResult getDataResult(User user, ActionForm formIn, HttpServletRequest request) {
            return null;
        }

        /**
         * {@inheritDoc}
         */
        protected void processMethodKeys(Map<String, String> map) {
            assertNotNull(map.get("updatelist"));
            assertNotNull(map.get("selectall"));
            assertNotNull(map.get("unselectall"));
        }

        /**
         * {@inheritDoc}
         */
        protected void processParamMap(ActionForm formIn, HttpServletRequest request, Map<String, Object> params) {
            assertNotNull(params);
        }

    }

    public static class TestActionWithData extends RhnSetAction {

        protected RhnSetDecl getSetDecl() {
            return RhnSetDecl.TEST;
        }

        /**
         * {@inheritDoc}
         */
        protected DataResult getDataResult(User user, ActionForm formIn, HttpServletRequest request) {
            List retval = Arrays.asList(Locale.getISOCountries());
            return new DataResult(retval);
        }

        /**
         * {@inheritDoc}
         */
        protected void processMethodKeys(Map<String, String> map) {
            assertNotNull(map.get("updatelist"));
            assertNotNull(map.get("selectall"));
            assertNotNull(map.get("unselectall"));
        }

        /**
         * {@inheritDoc}
         */
        protected void processParamMap(ActionForm formIn, HttpServletRequest request, Map<String, Object> params) {
            assertNotNull(params);
        }

    }

    public class TestIdObject implements Identifiable {
        private Long id;

        public TestIdObject(Long idIn) {
            this.id = idIn;
        }

        public Long getId() {
            return this.id;
        }

    }

}