Package de.jetwick.tw

Source Code of de.jetwick.tw.TweetConsumerTest

/**
* Copyright (C) 2010 Peter Karich <jetwick_@_pannous_._info>
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
* use this file except in compliance with the License. You may obtain a copy of
* the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* License for the specific language governing permissions and limitations under
* the License.
*/
package de.jetwick.tw;

import java.util.Random;
import de.jetwick.es.ElasticTweetSearch;
import com.google.inject.Module;
import org.junit.AfterClass;
import org.junit.BeforeClass;
import de.jetwick.JetwickTestClass;
import de.jetwick.config.DefaultModule;
import de.jetwick.data.JTweet;
import de.jetwick.es.ElasticTweetSearchTest;
import de.jetwick.data.JUser;
import de.jetwick.data.UrlEntry;
import de.jetwick.util.GenericUrlResolver;
import de.jetwick.util.MyDate;
import java.util.Arrays;
import java.util.Date;
import java.util.concurrent.BlockingQueue;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;


import static org.junit.Assert.*;

/**
*
* @author Peter Karich, peat_hal 'at' users 'dot' sourceforge 'dot' net
*/
public class TweetConsumerTest extends JetwickTestClass {

    private ElasticTweetSearchTest tester = new ElasticTweetSearchTest();
    private TweetConsumer tweetConsumer;
    private GenericUrlResolver resolver;

    @BeforeClass
    public static void beforeClass() {
        ElasticTweetSearchTest.beforeClass();
    }

    @AfterClass
    public static void afterClass() {
        ElasticTweetSearchTest.afterClass();
    }

    @Override
    @Before
    public void setUp() throws Exception {
        // TODO multiple ElasticTweetSearch instances will be created
        tester.setUp();
        super.setUp();
        resolver = getInstance(GenericUrlResolver.class);
        tweetConsumer = getInstance(TweetConsumer.class);

        assertTrue(tester.getSearch() == resolver.getTweetSearch());
        assertTrue(tweetConsumer.getResolver() == resolver);
    }

    @After
    @Override
    public void tearDown() throws Exception {
        super.tearDown();
        tester.tearDown();
    }

    @Test
    public void testAddAll() {
        tester.getSearch().setRemoveOlderThanDays(1);

        BlockingQueue<JTweet> queue = tweetConsumer.register("addAll", Integer.MAX_VALUE, 1);
        JTweet tw = createTweet(1L, "@daniel fancy!", "timetabling");
        tw.setCreatedAt(new Date());
        queue.add(tw.setFeedSource("addAll"));
        tweetConsumer.executeOneBatch();

        assertEquals(1, resolver.getInputQueue().size());
    }

    @Test
    public void testAddSomeMore() throws InterruptedException {
        tester.getSearch().setRemoveOlderThanDays(1);

        BlockingQueue<JTweet> queue = tweetConsumer.register("tweet-producer", Integer.MAX_VALUE, 3);
        JTweet tw = createTweetWithUrl(4L, "http://test.de text", "userB", "http://test.de");
        tw.setCreatedAt(new MyDate().minusDays(2).toDate());
        JTweet tw2 = createTweetWithUrl(5L, "RT @userB: http://test.de text", "timetabling", "http://test.de");
        tw2.setCreatedAt(new Date());
        JTweet tw3 = createTweet(6L, "Bla bli", "userB");
        tw3.setCreatedAt(new Date());
        queue.addAll(Arrays.asList(tw, tw2, tw3));
        tweetConsumer.executeOneBatch();

        assertEquals(2, resolver.getInputQueue().size());
        assertTrue(resolver.getInputQueue().contains(tw));
        assertFalse(resolver.getInputQueue().contains(tw2));
        assertTrue(resolver.getInputQueue().contains(tw3));

        // clear queues to avoid disturbing the next test
        do {
            resolver.executeResolve(0);
        } while (tweetConsumer.executeOneBatch() > 0);
    }

    @Test
    public void testESData() throws InterruptedException {
        BlockingQueue<JTweet> queue = tweetConsumer.register("tweet-producer", Integer.MAX_VALUE, 1);
        String url = "http://irgendwas.de";
        JTweet tw = createTweetWithUrl(5L, url + " text", "timetabling", url);
        tw.setCreatedAt(new Date());
        queue.add(tw);
        tweetConsumer.executeOneBatch();
        assertEquals(1, resolver.getInputQueue().size());

        resolver.getInputQueue().clear();
        tw = createTweetWithUrl(6L, "RT @timetabling: " + url + " text", "userB", url);
        tw.setCreatedAt(new Date());
        queue.add(tw);
        tweetConsumer.executeOneBatch();
        assertEquals(0, resolver.getInputQueue().size());
    }

    @Test
    public void testTweetCache() {
        BlockingQueue<JTweet> queue = tweetConsumer.register("tweet-producer", Integer.MAX_VALUE, 2);
        JTweet tw1 = createTweet(1L, "text1", "timetabling");
        tw1.setCreatedAt(new Date());
        JTweet tw3 = createTweet(3L, "text3", "timetabling");
        tw3.setCreatedAt(new Date());
        queue.addAll(Arrays.asList(tw1, tw1, tw3));

        tweetConsumer.initTweetCache();
        tweetConsumer.executeOneBatch();

        assertEquals(2, resolver.getInputQueue().size());
        assertTrue(resolver.getInputQueue().contains(tw1));
        assertTrue(resolver.getInputQueue().contains(tw3));
        resolver.getInputQueue().clear();

        queue = tweetConsumer.register("tweet-producer2", Integer.MAX_VALUE, 1);
        JTweet tw2 = createTweet(2L, "text2", "timetabling");
        tw2.setCreatedAt(new Date());
        queue.addAll(Arrays.asList(tw1, tw2, tw3));
        tweetConsumer.executeOneBatch();

        assertEquals(1, resolver.getInputQueue().size());
        assertFalse(resolver.getInputQueue().contains(tw1));
        assertTrue(resolver.getInputQueue().contains(tw2));
        assertFalse(resolver.getInputQueue().contains(tw3));
    }

    JTweet createTweet(long id, String twText, String user) {
        Random rand = new Random();
        double d = rand.nextDouble();
        String url = "http://test.de/" + d;
        return createTweetWithUrl(id, twText, user, url);
    }

    JTweet createTweetWithUrl(long id, String twText, String user, String url) {
        int index = twText.indexOf(url);
        if (index < 0) {
            twText = url + " " + twText;
            index = 0;
        }

        UrlEntry ue = new UrlEntry(index, index + url.length(), url);
        return new JTweet(id, twText, new JUser(user)).setCreatedAt(new Date(id)).addUrlEntry(ue);
    }

    @Override
    public Module createModule() {
        return new DefaultModule() {

            @Override
            public void installSearchModule() {
                bind(ElasticTweetSearch.class).toInstance(tester.getSearch());
            }
        };
    }
}
TOP

Related Classes of de.jetwick.tw.TweetConsumerTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.