use of com.erudika.para.core.persistence.DAO in project para by Erudika.
the class AOPUtilsTest method testUtils.
@Test
public void testUtils() throws Exception {
Tag tag = new Tag("tag");
Tag tag1 = new Tag("tag1");
Tag tag2 = new Tag("tag2");
Tag tag3 = new Tag("tag3");
List<ParaObject> list1 = new ArrayList<>();
list1.add(tag1);
list1.add(tag2);
list1.add(tag3);
List<ParaObject> list2 = new ArrayList<>();
list2.add(new Tag("tagzz1"));
list2.add(new Tag("tagzz2"));
list2.add(new Tag("tagzz3"));
List<String> badList = new ArrayList<>();
badList.add("XXXtagXXX");
List<Sysprop> badList2 = new ArrayList<>();
badList2.add(null);
badList2.add(null);
badList2.add(null);
badList2.add(new Sysprop());
assertSame(tag, getArgOfParaObject(new Object[] { tag, "string" }));
assertNull(getArgOfParaObject(new Object[] { "string" }));
assertEquals(list1, getArgOfListOfType(new Object[] { list1 }, ParaObject.class));
assertEquals(list2, getArgOfListOfType(new Object[] { list2 }, ParaObject.class));
assertNull(getArgOfListOfType(new Object[] { badList }, ParaObject.class));
assertEquals(badList2, getArgOfListOfType(new Object[] { badList2 }, ParaObject.class));
assertNull(getFirstArgOfString(new Object[] { list1 }));
assertNotNull(getFirstArgOfString(new Object[] { Integer.valueOf(123), "asd" }));
assertEquals("asd", getFirstArgOfString(new Object[] { Integer.valueOf(123), "asd" }));
DAO dao = new MockDAO();
Search search = getSearch(dao);
assertNotNull(dao.create(tag));
assertNotNull(dao.read(tag.getId()));
assertNotNull(search.findById(tag.getId()));
dao.delete(tag);
assertNull(dao.read(tag.getId()));
assertNull(search.findById(tag.getId()));
dao.createAll(list1);
assertNotNull(dao.read(tag1.getId()));
assertNotNull(dao.read(tag2.getId()));
assertNotNull(dao.read(tag3.getId()));
assertNotNull(search.findById(tag1.getId()));
assertNotNull(search.findById(tag2.getId()));
assertNotNull(search.findById(tag3.getId()));
dao.deleteAll(list1);
assertNull(dao.read(tag1.getId()));
assertNull(dao.read(tag2.getId()));
assertNull(dao.read(tag3.getId()));
assertNull(search.findById(tag1.getId()));
assertNull(search.findById(tag2.getId()));
assertNull(search.findById(tag3.getId()));
ArrayList<ParaObject> list3 = new ArrayList<>();
ArrayList<ParaObject> indexUs = new ArrayList<>();
tag.setIndexed(false);
tag.setStored(false);
list3.add(tag);
assertFalse(removeNotStoredNotIndexed(list3, null).isEmpty());
assertTrue(list3.isEmpty());
list3.clear();
tag.setIndexed(true);
tag.setStored(false);
list3.add(tag);
assertFalse(removeNotStoredNotIndexed(list3, indexUs).isEmpty());
assertTrue(list3.isEmpty());
assertFalse(indexUs.isEmpty());
Sysprop s = new Sysprop("custom_123");
s.setType("ok");
checkAndFixType(s);
assertEquals("ok", s.getType());
s.setType(null);
checkAndFixType(s);
assertNotNull(s.getType());
s.setType("___NOT_OK_");
checkAndFixType(s);
assertEquals("NOT_OK_", s.getType());
s.setType("NOT/_OK_");
checkAndFixType(s);
assertEquals("NOT_OK_", s.getType());
s.setType("NOT/OK/.OK");
checkAndFixType(s);
assertEquals("NOTOK.OK", s.getType());
s.setType("____");
checkAndFixType(s);
assertEquals(Utils.type(Sysprop.class), s.getType());
}
use of com.erudika.para.core.persistence.DAO in project para by Erudika.
the class ParaObjectTest method testLinks.
@Test
@SuppressWarnings("unchecked")
public void testLinks() {
Search search = mock(Search.class);
DAO dao = new MockDAO();
Tag t = new Tag("tag");
User u = new User("111");
User u3 = new User("333");
CoreUtils.getInstance().setDao(dao);
CoreUtils.getInstance().setSearch(search);
// u.setDao(dao);
// u.setSearch(search);
dao.create(t);
dao.create(u);
dao.create(u3);
Linker l1 = new Linker(Utils.type(User.class), Utils.type(Tag.class), "111", "222");
Linker l2 = new Linker(Utils.type(User.class), Utils.type(User.class), "111", "333");
u.link(t.getId());
u.link(u3.getId());
assertTrue(u.isLinked(t));
assertTrue(u.isLinked(u3));
ArrayList<ParaObject> list = new ArrayList<>();
list.add(l1);
list.add(l2);
when(search.findTerms(anyString(), anyString(), any(Map.class), anyBoolean())).thenReturn(list);
assertEquals(0, u.getLinkedObjects(Utils.type(Tag.class), null, null).size());
assertEquals(0, u.getLinkedObjects(Utils.type(User.class), null, null).size());
u.unlinkAll();
assertNull(dao.read(l1.getId()));
assertNull(dao.read(l2.getId()));
}
use of com.erudika.para.core.persistence.DAO in project para by Erudika.
the class IndexAndCacheAspect method addToIndexBatchOperation.
private Object addToIndexBatchOperation(String appid, Method daoMethod, Object[] args, MethodInvocation mi) throws Throwable {
List<ParaObject> addUs = AOPUtils.getArgOfListOfType(args, ParaObject.class);
List<ParaObject> indexUs = new LinkedList<>();
List<ParaObject> removedObjects = AOPUtils.removeNotStoredNotIndexed(addUs, indexUs);
Object result = invokeDAO(appid, daoMethod, mi);
List<ParaObject> indexUsFiltered = indexUs.stream().filter(p -> p.getVersion() >= 0).collect(Collectors.toList());
if (!indexUs.isEmpty() && indexUsFiltered.isEmpty()) {
logger.warn("DAO batch operation failed for {} objects due to version mismatch or rollback. " + "Indexing and caching for these objects will be skipped.", indexUs.size());
}
try (Metrics.Context context = Metrics.time(appid, search.getClass(), "indexAll")) {
search.indexAll(appid, indexUsFiltered);
}
// do not remove this line - breaks tests
if (addUs != null) {
// don't delete!
addUs.addAll(removedObjects);
}
logger.debug("{}: Indexed all {}->{}", getClass().getSimpleName(), appid, indexUs.size());
return result;
}
use of com.erudika.para.core.persistence.DAO in project para by Erudika.
the class AspectsIT method test.
@Test
public void test() throws InterruptedException {
DAO d = Para.getDAO();
Search s = Para.getSearch();
Cache c = Para.getCache();
System.setProperty("para.cache_enabled", "true");
assertNotNull(s0.create());
assertNotNull(d.read(s0.getId()));
User uB = new User("invalid");
// no identifier (username)
uB.setIdentifier(null);
uB.setPassword("badpass");
uB.create();
assertNull(d.read(uB.getId()));
assertNull(s.findById(uB.getId()));
assertNull(c.get(uB.getId()));
uB.setEmail("tes1@test.com");
uB.setPassword("goodpass123");
uB.setIdentifier(uB.getEmail());
uB.create();
assertNotNull(d.read(uB.getId()));
assertNotNull(s.findById(uB.getId()));
assertNotNull(c.get(uB.getId()));
logger.debug("---- cache remove -----");
c.remove(uB.getId());
assertNotNull(d.read(uB.getId()));
assertTrue(c.contains(uB.getId()));
logger.debug("---------");
uB.delete();
assertNull(d.read(uB.getId()));
assertNull(s.findById(uB.getId()));
assertNull(c.get(uB.getId()));
ArrayList<Sysprop> list = new ArrayList<>();
list.add(s0);
list.add(s1);
list.add(s2);
d.createAll(list);
assertNotNull(d.read(s0.getId()));
assertNotNull(s.findById(s0.getId()));
assertNotNull(c.get(s0.getId()));
assertNotNull(d.read(s1.getId()));
assertNotNull(s.findById(s1.getId()));
assertNotNull(c.get(s1.getId()));
assertNotNull(d.read(s2.getId()));
assertNotNull(s.findById(s2.getId()));
assertNotNull(c.get(s2.getId()));
logger.debug("---- read all from cache ----");
Map<String, User> map = d.readAll(Arrays.asList(s0.getId(), s1.getId(), s2.getId()), true);
assertTrue(map.containsKey(s0.getId()));
assertTrue(map.containsKey(s1.getId()));
assertTrue(map.containsKey(s2.getId()));
logger.debug("---- cache remove ----");
c.remove(s1.getId());
c.remove(s2.getId());
d.readAll(Arrays.asList(s0.getId(), s1.getId(), s2.getId()), true);
assertTrue(c.contains(s1.getId()));
assertTrue(c.contains(s2.getId()));
logger.debug("---- delete all ----");
d.deleteAll(list);
Thread.sleep(500);
assertNull(d.read(s0.getId()));
assertNull(s.findById(s0.getId()));
assertNull(c.get(s0.getId()));
assertNull(d.read(s1.getId()));
assertNull(s.findById(s1.getId()));
assertNull(c.get(s1.getId()));
assertNull(d.read(s2.getId()));
assertNull(s.findById(s2.getId()));
assertNull(c.get(s2.getId()));
// Removed in v1.18 - this will cause unexpected behavior in the future.
// These "special" classes are not documented and this is the wrong
// place to filter them out.
// test skipping special classes calling batch methods
// App app1 = new App("app1");
// User user1 = new User("user1");
// user1.setName("John Doe");
// user1.setGroups(User.Groups.USERS.toString());
// user1.setEmail("john1@asd.com");
// user1.setIdentifier(user1.getEmail());
// user1.setTimestamp(Utils.timestamp());
// user1.setPassword("123456");
// Tag t1 = new Tag("testtag123");
//
// // test that Apps and Users are removed from batch operations
// ArrayList<ParaObject> list1 = new ArrayList<ParaObject>();
// list1.add(app1);
// list1.add(user1);
// list1.add(t1);
// Para.getDAO().createAll(list1);
//
// System.setProperty("para.cache_enabled", "false");
// assertNull(Para.getDAO().read(app1.getId()));
// assertNull(Para.getDAO().read(user1.getId()));
// assertNotNull(Para.getDAO().read(t1.getId()));
//
// assertNull(Para.getSearch().findById(app1.getId()));
// assertNull(Para.getSearch().findById(user1.getId()));
// assertNotNull(Para.getSearch().findById(t1.getId()));
//
// System.setProperty("para.cache_enabled", "true");
// assertFalse(Para.getCache().contains(app1.getId()));
// assertFalse(Para.getCache().contains(user1.getId()));
// assertTrue(Para.getCache().contains(t1.getId()));
}
use of com.erudika.para.core.persistence.DAO in project para by Erudika.
the class VoteTest method testVotes.
@Test
public void testVotes() {
// new MockDAO();
DAO dao = CoreUtils.getInstance().getDao();
User u = new User("111");
User u2 = new User("222");
assertEquals(0, u.getVotes().intValue());
u.voteUp(u2.getId());
assertEquals(1, u.getVotes().intValue());
u.voteUp(u2.getId());
assertEquals(1, u.getVotes().intValue());
u.voteUp(u2.getId());
assertEquals(1, u.getVotes().intValue());
u.voteDown(u2.getId());
assertEquals(0, u.getVotes().intValue());
u.voteDown(u2.getId());
assertEquals(-1, u.getVotes().intValue());
u.voteDown(u2.getId());
assertEquals(-1, u.getVotes().intValue());
u.voteUp(u2.getId());
assertEquals(0, u.getVotes().intValue());
// test expirations and locks
u2.voteUp(u.getId());
assertEquals(1, u2.getVotes().intValue());
// isExpired() = true
Vote v = dao.read("vote:111:222");
v.setTimestamp(-1234L);
dao.create(v);
u2.voteUp(u.getId());
assertEquals(2, u2.getVotes().intValue());
// isExpired() = true
v = dao.read("vote:111:222");
v.setTimestamp(-1234L);
dao.create(v);
u2.voteUp(u.getId());
assertEquals(3, u2.getVotes().intValue());
// clear
dao.delete(v);
u2.setVotes(0);
u2.voteUp(u.getId());
assertEquals(1, u2.getVotes().intValue());
// isAmendable() = false
v = dao.read("vote:111:222");
v.setExpiresAfter(0);
v.setTimestamp(-1234L);
dao.create(v);
u2.voteDown(u.getId());
assertEquals(1, u2.getVotes().intValue());
// voting on self
u.setVotes(0);
u.voteDown(u.getId());
assertEquals(0, u.getVotes().intValue());
u.voteDown(u.getId());
assertEquals(0, u.getVotes().intValue());
u.voteUp(u.getId());
assertEquals(0, u.getVotes().intValue());
u.voteUp(u.getId());
assertEquals(0, u.getVotes().intValue());
Tag t = new Tag("test");
t.voteUp(t.getId());
assertEquals(0, t.getVotes().intValue());
}
Aggregations