/**
* 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;
}
}
}