/* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you 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 org.apache.flink.streaming.connectors.wikiedits; import org.apache.flink.streaming.api.datastream.DataStream; import org.apache.flink.streaming.api.environment.StreamExecutionEnvironment; import org.apache.flink.streaming.api.functions.sink.SinkFunction; import org.junit.Test; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.net.InetSocketAddress; import java.net.Socket; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import static org.junit.Assert.fail; public class WikipediaEditsSourceTest { private static final Logger LOG = LoggerFactory.getLogger(WikipediaEditsSourceTest.class); /** * NOTE: if you are behind a firewall you may need to use a SOCKS Proxy for this test. * * We first check the connection to the IRC server. If it fails, this test * is effectively ignored. * * @see <a href="http://docs.oracle.com/javase/8/docs/technotes/guides/net/proxies.html">Socks Proxy</a> */ @Test(timeout = 120 * 1000) public void testWikipediaEditsSource() throws Exception { final int numRetries = 5; final int waitBetweenRetriesMillis = 2000; final int connectTimeout = 1000; boolean success = false; for (int i = 0; i < numRetries && !success; i++) { // Check connection boolean canConnect = false; String host = WikipediaEditsSource.DEFAULT_HOST; int port = WikipediaEditsSource.DEFAULT_PORT; try (Socket s = new Socket()) { s.connect(new InetSocketAddress(host, port), connectTimeout); canConnect = s.isConnected(); } catch (Throwable ignored) { } if (canConnect) { StreamExecutionEnvironment env = StreamExecutionEnvironment.getExecutionEnvironment(); env.getConfig().disableSysoutLogging(); DataStream<WikipediaEditEvent> edits = env.addSource(new WikipediaEditsSource()); edits.addSink(new SinkFunction<WikipediaEditEvent>() { @Override public void invoke(WikipediaEditEvent value) throws Exception { throw new Exception("Expected test exception"); } }); try { env.execute(); fail("Did not throw expected Exception."); } catch (Exception e) { assertNotNull(e.getCause()); assertEquals("Expected test exception", e.getCause().getMessage()); } success = true; } else { LOG.info("Failed to connect to IRC server ({}/{}). Retrying in {} ms.", i + 1, numRetries, waitBetweenRetriesMillis); Thread.sleep(waitBetweenRetriesMillis); } } if (success) { LOG.info("Successfully ran test."); } else { LOG.info("Skipped test, because not able to connect to IRC server."); } } }