/* (c) 2014 Open Source Geospatial Foundation - all rights reserved
* This code is licensed under the GPL 2.0 license, available at the root
* application directory.
*/
package org.geoserver.geofence.core.dao;
import org.geoserver.geofence.core.dao.UserGroupDAO;
import org.geoserver.geofence.core.dao.RuleLimitsDAO;
import org.geoserver.geofence.core.dao.RuleDAO;
import org.geoserver.geofence.core.dao.GSUserDAO;
import org.geoserver.geofence.core.dao.LayerDetailsDAO;
import org.geoserver.geofence.core.dao.GFUserDAO;
import com.vividsolutions.jts.geom.MultiPolygon;
import com.vividsolutions.jts.geom.Polygon;
import com.vividsolutions.jts.io.ParseException;
import com.vividsolutions.jts.io.WKTReader;
import org.geoserver.geofence.core.model.GFUser;
import org.geoserver.geofence.core.model.UserGroup;
import java.util.List;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.geoserver.geofence.core.model.GSUser;
import org.geoserver.geofence.core.model.Rule;
import org.junit.Before;
import static org.junit.Assert.*;
import org.junit.rules.TestName;
import org.junit.Test;
/**
*
* @author ETj (etj at geo-solutions.it)
*/
public abstract class BaseDAOTest {
protected final Logger LOGGER;
@org.junit.Rule
public TestName name = new TestName();
protected static GSUserDAO userDAO;
protected static GFUserDAO gfUserDAO;
protected static UserGroupDAO userGroupDAO;
protected static RuleDAO ruleDAO;
protected static LayerDetailsDAO detailsDAO;
protected static RuleLimitsDAO limitsDAO;
protected static ClassPathXmlApplicationContext ctx = null;
public BaseDAOTest() {
LOGGER = LogManager.getLogger(getClass());
synchronized(BaseDAOTest.class) {
if(ctx == null) {
String[] paths = {
"applicationContext.xml"
// ,"applicationContext-test.xml"
};
ctx = new ClassPathXmlApplicationContext(paths);
userDAO = (GSUserDAO)ctx.getBean("gsUserDAO");
gfUserDAO = (GFUserDAO)ctx.getBean("gfUserDAO");
userGroupDAO = (UserGroupDAO)ctx.getBean("userGroupDAO");
ruleDAO = (RuleDAO)ctx.getBean("ruleDAO");
detailsDAO = (LayerDetailsDAO)ctx.getBean("layerDetailsDAO");
limitsDAO = (RuleLimitsDAO)ctx.getBean("ruleLimitsDAO");
}
}
}
@Before
public void setUp() throws Exception {
LOGGER.info("################ Running " + getClass().getSimpleName() + "::" + name.getMethodName() );
removeAll();
LOGGER.info("##### Ending setup for " + name.getMethodName() + " ###----------------------");
}
@Test
public void testCheckDAOs() {
assertNotNull(userDAO);
assertNotNull(gfUserDAO);
assertNotNull(userGroupDAO);
assertNotNull(ruleDAO);
assertNotNull(detailsDAO);
}
protected void removeAll() {
removeAllRules();
removeAllUsers();
removeAllUserGroups();
}
protected void removeAllUsers() {
List<GSUser> list = userDAO.findAll();
for (GSUser item : list) {
LOGGER.info("Removing " + item);
boolean ret = userDAO.remove(item);
assertTrue("User not removed", ret);
}
assertEquals("Users have not been properly deleted", 0, userDAO.count(null));
}
protected void removeAllGRUsers() {
List<GFUser> list = gfUserDAO.findAll();
for (GFUser item : list) {
LOGGER.info("Removing " + item);
boolean ret = gfUserDAO.remove(item);
assertTrue("User not removed", ret);
}
assertEquals("GRUsers have not been properly deleted", 0, gfUserDAO.count(null));
}
protected void removeAllRules() {
List<Rule> list = ruleDAO.findAll();
for (Rule item : list) {
LOGGER.info("Removing " + item);
boolean ret = ruleDAO.remove(item);
assertTrue("Rule not removed", ret);
}
assertEquals("Rules have not been properly deleted", 0, ruleDAO.count(null));
}
protected void removeAllUserGroups() {
List<UserGroup> list = userGroupDAO.findAll();
for (UserGroup item : list) {
LOGGER.info("Removing " + item);
boolean ret = userGroupDAO.remove(item);
assertTrue("UserGroup not removed", ret);
}
assertEquals("UserGroups have not been properly deleted", 0, userGroupDAO.count(null));
}
protected GSUser createUser(String base, UserGroup userGroup) {
GSUser user = new GSUser();
user.setName( base );
user.getGroups().add(userGroup);
return user;
}
protected UserGroup createUserGroup(String base) {
UserGroup group = new UserGroup();
group.setName(base);
userGroupDAO.persist(group);
return group;
}
protected GSUser createUserAndGroup(String base) {
UserGroup group = createUserGroup(base);
return createUser(base, group);
}
protected final static String MULTIPOLYGONWKT = "MULTIPOLYGON(((48.6894038 62.33877482, 48.7014874 62.33877482, 48.7014874 62.33968662, 48.6894038 62.33968662, 48.6894038 62.33877482)))";
protected final static String POLYGONWKT = "POLYGON((48.6894038 62.33877482, 48.7014874 62.33877482, 48.7014874 62.33968662, 48.6894038 62.33968662, 48.6894038 62.33877482))";
protected MultiPolygon buildMultiPolygon() {
try {
WKTReader reader = new WKTReader();
MultiPolygon mp = (MultiPolygon) reader.read(MULTIPOLYGONWKT);
mp.setSRID(4326);
return mp;
} catch (ParseException ex) {
throw new RuntimeException("Unexpected exception: " + ex.getMessage(), ex);
}
}
protected Polygon buildPolygon() {
try {
WKTReader reader = new WKTReader();
Polygon mp = (Polygon) reader.read(POLYGONWKT);
mp.setSRID(4326);
return mp;
} catch (ParseException ex) {
throw new RuntimeException("Unexpected exception: " + ex.getMessage(), ex);
}
}
//==========================================================================
}