package org.apache.spark.streaming.talos;
import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaPairRDD;
import org.apache.spark.api.java.function.Function;
import org.apache.spark.streaming.Durations;
import org.apache.spark.streaming.api.java.JavaPairDStream;
import org.apache.spark.streaming.api.java.JavaStreamingContext;
import org.junit.After;
import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
import scala.Tuple2;
import java.io.Serializable;
import java.util.*;
/**
* Created by jiasheng on 16-3-25.
*/
public class JavaDirectTalosStreamSuite implements Serializable {
private transient JavaStreamingContext ssc = null;
private transient TalosTestUtils talosTestUtils = null;
private String topic = "spark-talos-java-test";
@Before
public void setUp() {
SparkConf sparkConf = new SparkConf()
.setMaster("local[4]").setAppName(this.getClass().getSimpleName());
ssc = new JavaStreamingContext(sparkConf, Durations.milliseconds(200));
talosTestUtils = new TalosTestUtils(new HashMap<String, String>() {{
put("auto.offset.reset", "smallest");
}});
talosTestUtils.deleteTopic(topic);
talosTestUtils.createTopic(topic, 8);
}
@After
public void tearDown() {
}
@Test
public void testDirectStream() throws InterruptedException {
HashSet<String> sentMessages = new HashSet<String>();
for (int i = 1; i <= 100; i++)
sentMessages.add(i + "");
talosTestUtils.sendMessagesAndWaitForReceive(topic, sentMessages);
JavaPairDStream<String, String> stream = TalosUtils.createDirectStream(
ssc, talosTestUtils.javaTalosParams(), talosTestUtils.credential(), new HashSet<String>() {{
add(topic);
}}
);
final Set<String> result = Collections.synchronizedSet(new HashSet<String>());
stream.foreachRDD(
new Function<JavaPairRDD<String, String>, Void>() {
public Void call(JavaPairRDD<String, String> rdd) throws Exception {
Iterator<Tuple2<String, String>> iterator = rdd.collect().iterator();
while (iterator.hasNext()) {
result.add(iterator.next()._2);
}
return null;
}
}
);
ssc.start();
long startTime = System.currentTimeMillis();
boolean matches = false;
while (!matches && System.currentTimeMillis() - startTime < 20000) {
matches = sentMessages.size() == result.size();
Thread.sleep(50);
}
Assert.assertEquals(sentMessages, result);
ssc.stop();
}
}