package org.opennms.netmgt.dao.hibernate; import static org.junit.Assert.assertEquals; import java.util.List; import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; import org.opennms.core.criteria.Alias.JoinType; import org.opennms.core.criteria.CriteriaBuilder; import org.opennms.core.test.MockLogAppender; import org.opennms.core.test.OpenNMSJUnit4ClassRunner; import org.opennms.core.utils.BeanUtils; import org.opennms.netmgt.dao.DatabasePopulator; import org.opennms.netmgt.dao.NodeDao; import org.opennms.netmgt.dao.db.JUnitConfigurationEnvironment; import org.opennms.netmgt.dao.db.JUnitTemporaryDatabase; import org.opennms.netmgt.model.OnmsCriteria; import org.opennms.netmgt.model.OnmsNode; import org.springframework.beans.factory.InitializingBean; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.context.ContextConfiguration; import org.springframework.transaction.annotation.Transactional; @RunWith(OpenNMSJUnit4ClassRunner.class) @ContextConfiguration(locations={ "classpath:/META-INF/opennms/applicationContext-dao.xml", "classpath*:/META-INF/opennms/component-dao.xml", "classpath:/META-INF/opennms/applicationContext-databasePopulator.xml", "classpath:/META-INF/opennms/applicationContext-setupIpLike-enabled.xml" }) @JUnitConfigurationEnvironment @JUnitTemporaryDatabase(dirtiesContext=false) public class HibernateCriteriaConverterTest implements InitializingBean { @Autowired DatabasePopulator m_populator; @Autowired NodeDao m_nodeDao; private static boolean m_populated = false; @Override public void afterPropertiesSet() throws Exception { BeanUtils.assertAutowiring(this); } @Before public void setUp() { MockLogAppender.setupLogging(true); try { if (!m_populated) { m_populator.populateDatabase(); } } catch (final Throwable e) { e.printStackTrace(System.err); } finally { m_populated = true; } } @Test public void testNodeQuery() throws Exception { List<OnmsNode> nodes; // first, try with OnmsCriteria final OnmsCriteria crit = new OnmsCriteria(OnmsNode.class); crit.add(org.hibernate.criterion.Restrictions.isNotNull("id")); nodes = m_nodeDao.findMatching(crit); assertEquals(6, nodes.size()); // then the same with the builder final CriteriaBuilder cb = new CriteriaBuilder(OnmsNode.class); cb.isNotNull("id"); nodes = m_nodeDao.findMatching(cb.toCriteria()); assertEquals(6, nodes.size()); cb.eq("label", "node1").join("ipInterfaces", "ipInterface").eq("ipInterface.ipAddress", "192.168.1.1"); nodes = m_nodeDao.findMatching(cb.toCriteria()); assertEquals(1, nodes.size()); } @Test public void testNodeIlikeQuery() { final CriteriaBuilder cb = new CriteriaBuilder(OnmsNode.class); cb.isNotNull("id").eq("label", "node1").alias("ipInterfaces", "ipInterface", JoinType.LEFT_JOIN).ilike("ipInterface.ipAddress", "1%"); final List<OnmsNode> nodes = m_nodeDao.findMatching(cb.toCriteria()); assertEquals(3, nodes.size()); } @Test @Transactional public void testDistinctQuery() { List<OnmsNode> nodes = null; final CriteriaBuilder cb = new CriteriaBuilder(OnmsNode.class); cb.isNotNull("id").distinct(); cb.eq("label", "node1").join("ipInterfaces", "ipInterface", JoinType.LEFT_JOIN).eq("ipInterface.ipAddress", "192.168.1.1"); nodes = m_nodeDao.findMatching(cb.toCriteria()); assertEquals(1, nodes.size()); assertEquals(Integer.valueOf(1), nodes.get(0).getId()); } }