package fr.gael.dhus.database.dao; import fr.gael.dhus.database.dao.interfaces.HibernateDao; import fr.gael.dhus.database.object.Eviction; import fr.gael.dhus.database.object.Product; import fr.gael.dhus.datastore.eviction.EvictionStrategy; import fr.gael.dhus.util.CheckIterator; import fr.gael.dhus.util.TestContextLoader; import org.hibernate.Hibernate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.test.annotation.DirtiesContext; import org.springframework.test.context.ContextConfiguration; import org.testng.annotations.Test; import java.util.HashSet; import java.util.Iterator; import java.util.Set; import static org.testng.Assert.*; @ContextConfiguration ( locations = "classpath:fr/gael/dhus/spring/context-test.xml", loader = TestContextLoader.class) @DirtiesContext (classMode = DirtiesContext.ClassMode.AFTER_CLASS) public class TestEvictionDao extends TestAbstractHibernateDao<Eviction, Long> { @Autowired private EvictionDao dao; @Autowired private ProductDao pdao; private Set<Product> products; @Override protected HibernateDao<Eviction, Long> getHibernateDao () { return dao; } @Override protected int howMany () { return 1; } private Set<Product> getProducts () { if (products != null) return products; long pid = 6L; products = new HashSet<Product> (); products.add (pdao.read (pid)); return products; } private Eviction createEviction (int period, int disk, int number, EvictionStrategy strategy) { Eviction eviction = new Eviction (); eviction.setKeepPeriod (period); eviction.setMaxDiskUsage (disk); eviction.setMaxProductNumber (number); eviction.setStrategy (strategy); eviction.setProducts (getProducts ()); return eviction; } @Override @Test (dependsOnMethods = "read") public void create () { int value = 42; EvictionStrategy strategy = EvictionStrategy.LRU; Eviction eviction = createEviction (value, value, value, strategy); eviction = dao.create (eviction); eviction = dao.read (eviction.getId ()); assertEquals (dao.count (), (howMany () + 1)); assertNotNull (eviction); assertEquals (eviction.getKeepPeriod (), value); assertEquals (eviction.getMaxDiskUsage (), value); assertEquals (eviction.getMaxProductNumber (), value); assertEquals (eviction.getProducts (), getProducts ()); assertEquals (eviction.getStrategy (), strategy); } @Override @Test public void read () { Eviction eviction = dao.read (1L); assertNotNull (eviction); assertEquals (eviction.getId (), Long.valueOf (1)); assertEquals (eviction.getKeepPeriod (), 10); assertEquals (eviction.getMaxDiskUsage (), 80); assertEquals (eviction.getMaxProductNumber (), 1000); assertEquals (eviction.getProducts ().size (), 0); assertEquals (eviction.getStrategy (), EvictionStrategy.NONE); } @Override @Test (dependsOnMethods = { "read", "getEviction" }) public void update () { long id = 1; int expected = 50; Product p2 = new Product (); p2.setId (6L); p2.setUuid ("aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa6"); Eviction eviction = dao.read (id); eviction.setMaxProductNumber (expected); assertTrue (eviction.getProducts ().isEmpty ()); eviction.getProducts ().add (p2); dao.update (eviction); eviction = dao.read (id); products = eviction.getProducts (); assertEquals (eviction.getMaxProductNumber (), expected); assertTrue (products.contains (p2)); // second update method dao.update (EvictionStrategy.LRU, 5, 8); eviction = dao.getEviction (); assertEquals (eviction.getStrategy (), EvictionStrategy.LRU); assertEquals (eviction.getKeepPeriod (), 5); assertEquals (eviction.getMaxDiskUsage (), 8); } @Override @Test (dependsOnMethods = { "read", "create" }) public void delete () { long id = 1; Eviction eviction = dao.read (id); Set<Product> ps = eviction.getProducts (); Hibernate.initialize (ps); dao.delete (eviction); assertEquals (dao.count (), (howMany () - 1)); assertNull (dao.read (id)); for (Product p : ps) { assertNotNull (pdao.read (p.getId ())); } } @Override @Test (dependsOnMethods = { "create" }) public void scroll () { dao.create (createEviction (2, 3, 5, EvictionStrategy.NONE)); String hql = "WHERE keepPeriod <= 8"; Iterator<Eviction> it = dao.scroll (hql, -1, -1).iterator (); assertTrue (CheckIterator.checkElementNumber (it, 1)); } @Override public void first () { dao.create (createEviction (2, 3, 5, EvictionStrategy.NONE)); String hql = "FROM Eviction ORDER BY keepPeriod"; Eviction eviction = dao.first (hql); assertNotNull (eviction); assertEquals (eviction.getKeepPeriod (), 2); } @Test public void getEviction () { Eviction eviction = dao.getEviction (); assertNotNull (eviction); assertEquals (eviction.getId (), Long.valueOf (1)); } @Test public void getFactoryDefault () { Eviction eviction = dao.getFactoryDefault (); assertEquals (eviction.getKeepPeriod (), 10); assertEquals (eviction.getMaxDiskUsage (), 80); assertEquals (eviction.getMaxProductNumber (), 1000); assertEquals (eviction.getStrategy (), EvictionStrategy.NONE); assertTrue (eviction.getProducts ().isEmpty ()); } @Test public void getProduct () { Set<Product> toEvict = dao.getProducts (); assertNotNull (toEvict); assertTrue (toEvict.isEmpty ()); } @Test (dependsOnMethods = "getProduct") public void setProducts () { dao.setProducts (getProducts ()); Set<Product> toEvict = dao.getProducts (); assertEquals (toEvict, getProducts ()); } }