@Test public void testTimePaging() throws Exception { User user = serviceFacade.getUserManager().getUserByEMail("*****@*****.**"); serviceFacade.getPostManager().deleteAll(user.getId()); serviceFacade.getRelationManager().deleteAll(); serviceFacade.getSourceManager().deleteAll(user.getId()); TestTimeSource tts1 = new TestTimeSource(user, "t1", 51, 2, 50, 0); TestTimeSource tts2 = new TestTimeSource(user, "t2", 11, 1, 100, 200); TestTimePagedSource tts3 = new TestTimePagedSource(user, "t3", 100, 1, 5, 75); TestTimePagedSource tts4 = new TestTimePagedSource(user, "t4", 217, 3, 7, 13); serviceFacade.getSourceManager().registerNewBean("t1", tts1); serviceFacade.getSourceManager().registerNewBean("t2", tts2); serviceFacade.getSourceManager().registerNewBean("t3", tts3); serviceFacade.getSourceManager().registerNewBean("t4", tts4); SocialSource st = new SocialSource("", "", "", ""); st.setSourceCode(tts1.getSourceCode()); st.setUserId(user.getId()); serviceFacade.getSourceManager().create(st); st = new SocialSource("", "", "", ""); st.setSourceCode(tts2.getSourceCode()); st.setUserId(user.getId()); serviceFacade.getSourceManager().create(st); st = new SocialSource("", "", "", ""); st.setSourceCode(tts3.getSourceCode()); st.setUserId(user.getId()); serviceFacade.getSourceManager().create(st); st = new SocialSource("", "", "", ""); st.setSourceCode(tts4.getSourceCode()); st.setUserId(user.getId()); serviceFacade.getSourceManager().create(st); serviceFacade.getSourceManager().getActualSources(user.getId(), RelationType.WALL); Assert.assertEquals(tts1.posts.size(), 51); Assert.assertEquals(tts2.posts.size(), 11); Assert.assertEquals(tts3.posts.size(), 100); Assert.assertEquals(tts4.posts.size(), 217); Assert.assertEquals(tts3.getTimelineSource(null, null, null).getObjects(0, 10).size(), 10); Assert.assertEquals(tts3.getTimelineSource(null, null, null).getObjects(0, 100).size(), 100); Assert.assertEquals(tts3.getTimelineSource(null, null, null).getObjects(0, 300).size(), 100); // Simple read from sources List<Post> posts; serviceFacade.getPostManager().deleteAll(user.getId()); serviceFacade.getRelationManager().deleteAll(); posts = readFromSource(user, "t1", 0, 2); Assert.assertEquals(posts.size(), tts1.posts.size()); Assert.assertEquals(posts.get(0).getPid(), "t1_50"); Assert.assertEquals(posts.get(posts.size() - 1).getPid(), "t1_0"); checkTimestamps(posts); posts = readFromSource(user, "t2", 0, 4); Assert.assertEquals(posts.size(), tts2.posts.size()); Assert.assertEquals(posts.get(0).getPid(), "t2_10"); Assert.assertEquals(posts.get(posts.size() - 1).getPid(), "t2_0"); checkTimestamps(posts); posts = readFromSource(user, "t3", 0, 11); Assert.assertEquals(posts.size(), tts3.posts.size()); Assert.assertEquals(posts.get(0).getPid(), "t3_99"); Assert.assertEquals(posts.get(posts.size() - 1).getPid(), "t3_0"); checkTimestamps(posts); posts = readFromSource(user, "t4", 0, 13); Assert.assertEquals(posts.size(), tts4.posts.size()); Assert.assertEquals(posts.get(0).getPid(), "t4_216"); Assert.assertEquals(posts.get(posts.size() - 1).getPid(), "t4_0"); checkTimestamps(posts); // Simple read from all sources posts = readFromSource(user, null, 0, 15); Assert.assertEquals(posts.size(), 379); checkTimestamps(posts); serviceFacade.getPostManager().deleteAll(user.getId()); serviceFacade.getRelationManager().deleteAll(); posts = readFromSource(user, null, 0, 15); Assert.assertEquals(posts.size(), 379); checkTimestamps(posts); // Add new posts to t2 and t4 ((LinkedList) tts2.posts).addFirst(makePost("t2_new1", tts2.getSourceCode(), user, 2000)); ((LinkedList) tts2.posts).addFirst(makePost("t2_new2", tts2.getSourceCode(), user, 2010)); ((LinkedList) tts2.posts).addFirst(makePost("t2_new3", tts2.getSourceCode(), user, 2100)); ((LinkedList) tts4.posts).addFirst(makePost("t4_new1", tts4.getSourceCode(), user, 1999)); ((LinkedList) tts4.posts).addFirst(makePost("t4_new2", tts4.getSourceCode(), user, 2010)); ((LinkedList) tts4.posts).addFirst(makePost("t4_new3", tts4.getSourceCode(), user, 2011)); posts = readFromSource(user, "t2", 0, 10); Assert.assertEquals(posts.size(), tts2.posts.size()); Assert.assertEquals(posts.get(0).getPid(), "t2_new3"); Assert.assertEquals(posts.get(posts.size() - 1).getPid(), "t2_0"); checkTimestamps(posts); posts = readFromSource(user, "t4", 0, 11); Assert.assertEquals(posts.size(), tts4.posts.size()); Assert.assertEquals(posts.get(0).getPid(), "t4_new3"); Assert.assertEquals(posts.get(posts.size() - 1).getPid(), "t4_0"); checkTimestamps(posts); posts = readFromSource(user, null, 0, 15); Assert.assertEquals(385, posts.size()); checkTimestamps(posts); ((LinkedList) tts4.posts).addFirst(makePost("t4_new4", tts4.getSourceCode(), user, 2015)); ((LinkedList) tts4.posts).addFirst(makePost("t4_new5", tts4.getSourceCode(), user, 2016)); ((LinkedList) tts4.posts).addFirst(makePost("t4_new6", tts4.getSourceCode(), user, 2017)); posts = readFromSource(user, "t4", 0, 11); Assert.assertEquals(posts.size(), tts4.posts.size()); Assert.assertEquals(posts.get(0).getPid(), "t4_new6"); Assert.assertEquals(posts.get(posts.size() - 1).getPid(), "t4_0"); checkTimestamps(posts); posts = readFromSource(user, null, 0, 7); Assert.assertEquals(388, posts.size()); checkTimestamps(posts); // Connect new source TestTimePagedSource tts5 = new TestTimePagedSource(user, "t5", 13, 1, 50, 0); serviceFacade.getSourceManager().registerNewBean("t5", tts5); st = new SocialSource("", "", "", ""); st.setSourceCode(tts5.getSourceCode()); st.setUserId(user.getId()); serviceFacade.getSourceManager().create(st); posts = readFromSource(user, "t5", 0, 20); Assert.assertEquals(posts.size(), tts5.posts.size()); Assert.assertEquals(posts.get(0).getPid(), "t5_12"); Assert.assertEquals(posts.get(posts.size() - 1).getPid(), "t5_0"); checkTimestamps(posts); posts = readFromSource(user, null, 0, 10); Assert.assertEquals(401, posts.size()); checkTimestamps(posts); serviceFacade.getSourceManager().unRegisterBean("t1"); serviceFacade.getSourceManager().unRegisterBean("t2"); serviceFacade.getSourceManager().unRegisterBean("t3"); serviceFacade.getSourceManager().unRegisterBean("t4"); serviceFacade.getSourceManager().unRegisterBean("t5"); // Read one source then connect and read another serviceFacade.getPostManager().deleteAll(user.getId()); serviceFacade.getRelationManager().deleteAll(); serviceFacade.getSourceManager().deleteAll(user.getId()); TestTimePagedSource tts6 = new TestTimePagedSource(user, "t6", 100, 1, 5, 0); TestTimePagedSource tts7 = new TestTimePagedSource(user, "t7", 50, 1, 10, 0); serviceFacade.getSourceManager().registerNewBean("t6", tts6); st = new SocialSource("", "", "", ""); st.setSourceCode(tts6.getSourceCode()); st.setUserId(user.getId()); serviceFacade.getSourceManager().create(st); posts = readFromSource(user, "t6", 0, 10); Assert.assertEquals(posts.size(), 100); serviceFacade.getSourceManager().registerNewBean("t7", tts7); st = new SocialSource("", "", "", ""); st.setSourceCode(tts7.getSourceCode()); st.setUserId(user.getId()); serviceFacade.getSourceManager().create(st); posts = readFromSource(user, null, 0, 10); Assert.assertEquals(posts.size(), 150); serviceFacade.getSourceManager().unRegisterBean("t6"); serviceFacade.getSourceManager().unRegisterBean("t7"); // Read then delete then read again serviceFacade.getPostManager().deleteAll(user.getId()); serviceFacade.getRelationManager().deleteAll(); serviceFacade.getSourceManager().deleteAll(user.getId()); TestTimePagedSource tts8 = new TestTimePagedSource(user, "t8", 100, 1, 10, 0); serviceFacade.getSourceManager().registerNewBean("t8", tts8); st = new SocialSource("", "", "", ""); st.setSourceCode(tts8.getSourceCode()); st.setUserId(user.getId()); serviceFacade.getSourceManager().create(st); // del in the beginning posts = readFromSource(user, null, 0, 10); Assert.assertEquals(posts.size(), 100); posts = tts8.posts; for (int i = 0; i < 10; i++) { posts.remove(0); } posts = readFromSource(user, null, 0, 10); Assert.assertEquals(posts.size(), 100); // in the center posts = tts8.posts; for (int i = 0; i < 10; i++) { posts.remove(50); } posts = readFromSource(user, null, 0, 10); Assert.assertEquals(posts.size(), 100); // at the end posts = tts8.posts; for (int i = 0; i < 10; i++) { posts.remove(posts.size() - 1); } posts = readFromSource(user, null, 0, 10); Assert.assertEquals(posts.size(), 100); // full tts8.posts.clear(); posts = readFromSource(user, null, 0, 10); Assert.assertEquals(posts.size(), 100); // Read 50 posts then delete some then read again serviceFacade.getPostManager().deleteAll(user.getId()); serviceFacade.getRelationManager().deleteAll(); posts.clear(); tts8 = new TestTimePagedSource(user, "t8", 100, 1, 10, 0); serviceFacade.getSourceManager().registerNewBean("t8", tts8); TimelineObjectIterator it = serviceFacade.getPostManager().getObjectsIterator(RelationType.WALL); it.setCount(10); it.setOffset(0); for (int i = 0; i < 5; i++) { it.hasNext( user, null, null, null, Collections.singleton(tts8.getSourceCode()), RelationType.WALL, true); posts.addAll(it.next()); } Assert.assertEquals(posts.size(), 50); posts = tts8.posts; for (int i = 0; i < 10; i++) { posts.remove(45); } posts = readFromSource(user, null, 0, 10); Assert.assertEquals(posts.size(), 90); // does not work - skips last 10 post ( serviceFacade.getSourceManager().unRegisterBean("t8"); }