Search in sources :

Example 1 with DAO

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());
}
Also used : MockDAO(com.erudika.para.core.persistence.MockDAO) ArrayList(java.util.ArrayList) ArgumentMatchers.anyString(org.mockito.ArgumentMatchers.anyString) MockDAO(com.erudika.para.core.persistence.MockDAO) DAO(com.erudika.para.core.persistence.DAO) ParaObject(com.erudika.para.core.ParaObject) Search(com.erudika.para.core.search.Search) Sysprop(com.erudika.para.core.Sysprop) ParaObject(com.erudika.para.core.ParaObject) Tag(com.erudika.para.core.Tag) Test(org.junit.Test)

Example 2 with DAO

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()));
}
Also used : DAO(com.erudika.para.core.persistence.DAO) MockDAO(com.erudika.para.core.persistence.MockDAO) MockDAO(com.erudika.para.core.persistence.MockDAO) Search(com.erudika.para.core.search.Search) ArrayList(java.util.ArrayList) Map(java.util.Map) Test(org.junit.Test)

Example 3 with DAO

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;
}
Also used : LoggerFactory(org.slf4j.LoggerFactory) Indexed(com.erudika.para.core.annotations.Indexed) Cache(com.erudika.para.core.cache.Cache) ArrayList(java.util.ArrayList) LinkedHashMap(java.util.LinkedHashMap) Inject(javax.inject.Inject) MethodInvocation(org.aopalliance.intercept.MethodInvocation) Map(java.util.Map) Cached(com.erudika.para.core.annotations.Cached) Metrics(com.erudika.para.core.metrics.Metrics) DAO(com.erudika.para.core.persistence.DAO) LinkedList(java.util.LinkedList) Method(java.lang.reflect.Method) ValidationUtils(com.erudika.para.core.validation.ValidationUtils) Logger(org.slf4j.Logger) ParaObject(com.erudika.para.core.ParaObject) Set(java.util.Set) Collectors(java.util.stream.Collectors) Utils(com.erudika.para.core.utils.Utils) IOListener(com.erudika.para.core.listeners.IOListener) MethodInterceptor(org.aopalliance.intercept.MethodInterceptor) List(java.util.List) Modifier(java.lang.reflect.Modifier) Para(com.erudika.para.core.utils.Para) Search(com.erudika.para.core.search.Search) Collections(java.util.Collections) Metrics(com.erudika.para.core.metrics.Metrics) ParaObject(com.erudika.para.core.ParaObject) ParaObject(com.erudika.para.core.ParaObject) LinkedList(java.util.LinkedList)

Example 4 with DAO

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()));
}
Also used : DAO(com.erudika.para.core.persistence.DAO) MockDAO(com.erudika.para.core.persistence.MockDAO) User(com.erudika.para.core.User) LuceneSearch(com.erudika.para.server.search.LuceneSearch) Search(com.erudika.para.core.search.Search) Sysprop(com.erudika.para.core.Sysprop) ArrayList(java.util.ArrayList) Cache(com.erudika.para.core.cache.Cache) MockCache(com.erudika.para.core.cache.MockCache) Test(org.junit.Test)

Example 5 with DAO

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());
}
Also used : DAO(com.erudika.para.core.persistence.DAO) Test(org.junit.Test)

Aggregations

DAO (com.erudika.para.core.persistence.DAO)8 ParaObject (com.erudika.para.core.ParaObject)5 Search (com.erudika.para.core.search.Search)5 ArrayList (java.util.ArrayList)5 Test (org.junit.Test)4 Sysprop (com.erudika.para.core.Sysprop)3 HashMap (java.util.HashMap)3 LinkedList (java.util.LinkedList)3 Map (java.util.Map)3 App (com.erudika.para.core.App)2 Cache (com.erudika.para.core.cache.Cache)2 MockDAO (com.erudika.para.core.persistence.MockDAO)2 Pager (com.erudika.para.core.utils.Pager)2 Para (com.erudika.para.core.utils.Para)2 Utils (com.erudika.para.core.utils.Utils)2 IOException (java.io.IOException)2 Collections (java.util.Collections)2 List (java.util.List)2 Logger (org.slf4j.Logger)2 LoggerFactory (org.slf4j.LoggerFactory)2