Hello Ottomata,

I'd like you to do a code review.  Please visit

    https://gerrit.wikimedia.org/r/119724

to review the following change.

Change subject: Remove Java part of kraken-etl
......................................................................

Remove Java part of kraken-etl

We now use a separate branch of the camus repository to build the jar
for etl. Hence, no need to keep the now unused Java part of kraken-etl
around.

Change-Id: I9277a8d66871984e0773b31e7a6e8be1444c2140
---
D kraken-etl/pom.xml
D 
kraken-etl/src/main/java/org/wikimedia/analytics/kraken/etl/camus/kafka/coders/JsonStringMessageDecoder.java
D 
kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/camus/kafka/coders/JsonStringMessageDecoderTest.java
D 
kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/LoggingMockingTestCase.java
D 
kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/MockingTestCase.java
D 
kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/log/CollectionAppender.java
D 
kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/log/LogUtil.java
M pom.xml
8 files changed, 0 insertions(+), 862 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/analytics/kraken 
refs/changes/24/119724/1

diff --git a/kraken-etl/pom.xml b/kraken-etl/pom.xml
deleted file mode 100644
index 4fcc6d6..0000000
--- a/kraken-etl/pom.xml
+++ /dev/null
@@ -1,76 +0,0 @@
-<project xmlns="http://maven.apache.org/POM/4.0.0"; 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
http://maven.apache.org/xsd/maven-4.0.0.xsd";>
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.wikimedia.analytics.kraken</groupId>
-    <artifactId>kraken</artifactId>
-    <version>0.0.2-SNAPSHOT</version>
-    <relativePath>../pom.xml</relativePath>
-  </parent>
-
-  <artifactId>kraken-etl</artifactId>
-  <name>Kraken ETL</name>
-  <packaging>jar</packaging>
-
-  <dependencies>
-    <dependency>
-      <groupId>com.google.code.gson</groupId>
-      <artifactId>gson</artifactId>
-      <version>2.2.4</version>
-      <scope>compile</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>com.linkedin.camus</groupId>
-      <artifactId>camus-etl-kafka</artifactId>
-      <version>0.1.0-SNAPSHOT-wmf-1</version>
-      <scope>compile</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.easymock</groupId>
-      <artifactId>easymock</artifactId>
-      <version>3.0</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-module-junit4</artifactId>
-      <version>1.5</version>
-      <scope>test</scope>
-    </dependency>
-
-    <dependency>
-      <groupId>org.powermock</groupId>
-      <artifactId>powermock-api-easymock</artifactId>
-      <version>1.5</version>
-      <scope>test</scope>
-    </dependency>
-  </dependencies>
-
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.maven.plugins</groupId>
-        <artifactId>maven-shade-plugin</artifactId>
-        <version>2.0</version>
-        <configuration>
-          <shadedArtifactAttached>false</shadedArtifactAttached>
-        </configuration>
-        <executions>
-          <execution>
-            <phase>package</phase>
-            <goals>
-              <goal>shade</goal>
-            </goals>
-           <configuration>
-              <createDependencyReducedPom>false</createDependencyReducedPom>
-            </configuration>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git 
a/kraken-etl/src/main/java/org/wikimedia/analytics/kraken/etl/camus/kafka/coders/JsonStringMessageDecoder.java
 
b/kraken-etl/src/main/java/org/wikimedia/analytics/kraken/etl/camus/kafka/coders/JsonStringMessageDecoder.java
deleted file mode 100644
index fa524af..0000000
--- 
a/kraken-etl/src/main/java/org/wikimedia/analytics/kraken/etl/camus/kafka/coders/JsonStringMessageDecoder.java
+++ /dev/null
@@ -1,94 +0,0 @@
-// Copyright (C) 2013 Wikimedia Foundation
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
-
-package org.wikimedia.analytics.kraken.etl.camus.kafka.coders;
-
-import java.util.Properties;
-import java.text.SimpleDateFormat;
-
-import com.google.gson.JsonParser;
-import com.google.gson.JsonObject;
-
-import com.linkedin.camus.coders.CamusWrapper;
-import com.linkedin.camus.coders.MessageDecoder;
-
-import org.apache.log4j.Logger;
-
-
-/**
- * MessageDecoder class that will convert the payload into a JSON object,
- * look for a field named 'timestamp', and then set the CamusWrapper's
- * timestamp property to the record's timestamp.  If the JSON does not have
- * a timestamp, then System.currentTimeMillis() will be used.
- * This MessageDecoder returns a CamusWrapper that works with Strings.
- */
-public class JsonStringMessageDecoder extends MessageDecoder<byte[], String> {
-    private static org.apache.log4j.Logger log = 
Logger.getLogger(JsonStringMessageDecoder.class);
-
-    public  static final String CAMUS_MESSAGE_TIMESTAMP_FORMAT = 
"camus.message.timestamp.format";
-    public  static final String DEFAULT_TIMESTAMP_FORMAT       = 
"[dd/MMM/yyyy:HH:mm:ss Z]";
-
-    public  static final String CAMUS_MESSAGE_TIMESTAMP_FIELD  = 
"camus.message.timestamp.field";
-    public  static final String DEFAULT_TIMESTAMP_FIELD        = "timestamp";
-
-    private String timestampFormat;
-    private String timestampField;
-
-    @Override
-    public void init(Properties props, String topicName) {
-        this.props     = props;
-        this.topicName = topicName;
-
-        timestampFormat = props.getProperty(CAMUS_MESSAGE_TIMESTAMP_FORMAT, 
DEFAULT_TIMESTAMP_FORMAT);
-        timestampField  = props.getProperty(CAMUS_MESSAGE_TIMESTAMP_FIELD,  
DEFAULT_TIMESTAMP_FIELD);
-    }
-
-    @Override
-    public CamusWrapper<String> decode(byte[] payload) {
-        long       timestamp = 0;
-        String     payloadString;
-        JsonObject jsonObject;
-
-        payloadString =  new String(payload);
-
-        // Parse the payload into a JsonObject.
-        try {
-            jsonObject = new 
JsonParser().parse(payloadString).getAsJsonObject();
-        } catch (RuntimeException e) {
-            log.error("Caught exception while parsing JSON string '" + 
payloadString + "'.");
-            throw new RuntimeException(e);
-        }
-
-        // Attempt to read and parse the timestamp element into a long.
-        if (jsonObject.has(timestampField)) {
-            String timestampString = 
jsonObject.get(timestampField).getAsString();
-            try {
-                timestamp = new 
SimpleDateFormat(timestampFormat).parse(timestampString).getTime();
-            } catch (Exception e) {
-                    log.error("Could not parse timestamp '" + timestampString 
+ "' while decoding JSON message.");
-            }
-        }
-
-        // If timestamp wasn't set in the above block,
-        // then set it to current time.
-        if (timestamp == 0) {
-            log.warn("Couldn't find or parse timestamp field '" + 
timestampField + "' in JSON message, defaulting to current time.");
-            timestamp = System.currentTimeMillis();
-        }
-
-        return new CamusWrapper<String>(payloadString, timestamp);
-    }
-}
diff --git 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/camus/kafka/coders/JsonStringMessageDecoderTest.java
 
b/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/camus/kafka/coders/JsonStringMessageDecoderTest.java
deleted file mode 100644
index 4412c1a..0000000
--- 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/camus/kafka/coders/JsonStringMessageDecoderTest.java
+++ /dev/null
@@ -1,266 +0,0 @@
-// Copyright (C) 2013 Wikimedia Foundation
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
-
-package org.wikimedia.analytics.kraken.etl.camus.kafka.coders;
-
-import java.text.DateFormatSymbols;
-import java.util.Properties;
-
-import org.wikimedia.analytics.kraken.etl.testutil.LoggingMockingTestCase;
-
-import com.linkedin.camus.coders.CamusWrapper;
-
-public class JsonStringMessageDecoderTest extends LoggingMockingTestCase {
-    public void testPropertiesEmpty() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        decoder.init(new Properties(), "someTopic");
-
-        // The default timestamp format uses localized month names :-/ so we
-        // have to localize month names to be able to test them.
-        String localizedJune = DateFormatSymbols.getInstance().getMonths()[5];
-
-        StringBuilder jsonStringBuilder = new StringBuilder();
-        jsonStringBuilder.append("{");
-        jsonStringBuilder.append("\"timestamp\": \"[14/");
-        jsonStringBuilder.append(localizedJune);
-        jsonStringBuilder.append("/2012:17:58:52 +0200]\"");
-        jsonStringBuilder.append("}");
-
-        String jsonString = jsonStringBuilder.toString();
-
-        byte[] payload = jsonString.getBytes();
-
-        CamusWrapper<String> res = decoder.decode(payload);
-
-        assertEquals("Parsed time stamp is not 2012-06-14 15:58:52",
-                1339689532L * 1000, res.getTimestamp());
-
-        assertEquals("Parsed record does not match JSON", jsonString, 
res.getRecord());
-    }
-
-    public void testPropertiesTimestampField() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        Properties properties = new Properties();
-        properties.setProperty("camus.message.timestamp.field", 
"real_timestamp");
-        decoder.init(properties, "someTopic");
-
-        // The default timestamp format uses localized month names :-/ so we
-        // have to localize month names to be able to test them.
-        String localizedJune = DateFormatSymbols.getInstance().getMonths()[5];
-
-        StringBuilder jsonStringBuilder = new StringBuilder();
-        jsonStringBuilder.append("{");
-        jsonStringBuilder.append("\"timestamp\": \"[13/");
-        jsonStringBuilder.append(localizedJune);
-        jsonStringBuilder.append("/2012:17:58:52 +0200]\"");
-        jsonStringBuilder.append(",");
-        jsonStringBuilder.append("\"real_timestamp\": \"[14/");
-        jsonStringBuilder.append(localizedJune);
-        jsonStringBuilder.append("/2012:17:58:52 +0200]\"");
-        jsonStringBuilder.append(",");
-        jsonStringBuilder.append("\"timestamp\": \"[15/");
-        jsonStringBuilder.append(localizedJune);
-        jsonStringBuilder.append("/2012:17:58:52 +0200]\"");
-        jsonStringBuilder.append("}");
-
-        String jsonString = jsonStringBuilder.toString();
-
-        byte[] payload = jsonString.getBytes();
-
-        CamusWrapper<String> res = decoder.decode(payload);
-
-        assertEquals("Parsed time stamp is not 2012-06-14 15:58:52",
-                1339689532L * 1000, res.getTimestamp());
-
-        assertEquals("Parsed record does not match JSON", jsonString, 
res.getRecord());
-    }
-
-    public void testPropertiesTimestampFormatIsoPlain() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        Properties properties = new Properties();
-        properties.setProperty("camus.message.timestamp.format", 
"yyyy-MM-dd'T'HH:mm:ssZ");
-        decoder.init(properties, "someTopic");
-
-        String jsonString = "{\"timestamp\": \"2012-06-14T17:58:52 +0200]\"}";
-
-        byte[] payload = jsonString.getBytes();
-
-        CamusWrapper<String> res = decoder.decode(payload);
-
-        assertEquals("Parsed time stamp is not 2012-06-14 15:58:52",
-                1339689532L * 1000, res.getTimestamp());
-
-        assertEquals("Parsed record does not match JSON", jsonString, 
res.getRecord());
-    }
-
-    public void testPropertiesTimestampFormatIsoSubsecond() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        Properties properties = new Properties();
-        properties.setProperty("camus.message.timestamp.format", 
"yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-        decoder.init(properties, "someTopic");
-
-        String jsonString = "{\"timestamp\": \"2012-06-14T17:58:52.332 
+0200]\"}";
-
-        byte[] payload = jsonString.getBytes();
-
-        CamusWrapper<String> res = decoder.decode(payload);
-
-        assertEquals("Parsed time stamp is not 2012-06-14 15:58:52.332",
-                1339689532L * 1000 + 332, res.getTimestamp());
-
-        assertEquals("Parsed record does not match JSON", jsonString, 
res.getRecord());
-    }
-
-    public void testPropertiesManyValues() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        Properties properties = new Properties();
-        properties.setProperty("someKey", "someValue");
-        properties.setProperty("camus.message.timestamp.field", "real_ts");
-        properties.setProperty("someOtherKey", "someOtherValue");
-        properties.setProperty("camus.message.timestamp.format", 
"yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-        properties.setProperty("yetAnotherKey", "yetAnotherValue");
-        decoder.init(properties, "someTopic");
-
-        String jsonString = "{\"real_ts\": \"2012-06-14T17:58:52.332 
+0200]\"}";
-
-        byte[] payload = jsonString.getBytes();
-
-        CamusWrapper<String> res = decoder.decode(payload);
-
-        assertEquals("Parsed time stamp is not 2012-06-14 15:58:52.332",
-                1339689532L * 1000 + 332, res.getTimestamp());
-
-        assertEquals("Parsed record does not match JSON", jsonString, 
res.getRecord());
-    }
-
-    public void testJsonWithPayload() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        Properties properties = new Properties();
-        properties.setProperty("camus.message.timestamp.format", 
"yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-        decoder.init(properties, "someTopic");
-
-        StringBuilder jsonStringBuilder = new StringBuilder();
-        jsonStringBuilder.append("{");
-        jsonStringBuilder.append("\"payload1\": true,");
-        jsonStringBuilder.append("\"payload2\": 42,");
-        jsonStringBuilder.append("\"timestamp\": \"2012-06-14T17:58:52.332 
+0200]\",");
-        jsonStringBuilder.append("\"payload3\": \"foo\",");
-        jsonStringBuilder.append("\"payload4\": \"bar\",");
-        jsonStringBuilder.append("\"payload5\": [ { \"foo\": \"bar\", \"baz\": 
4711 }, 169 ]");
-        jsonStringBuilder.append("}");
-
-        String jsonString = jsonStringBuilder.toString();
-
-        byte[] payload = jsonString.getBytes();
-
-        CamusWrapper<String> res = decoder.decode(payload);
-
-        assertEquals("Parsed time stamp is not 2012-06-14 15:58:52.332",
-                1339689532L * 1000 + 332, res.getTimestamp());
-
-        assertEquals("Parsed record does not match JSON", jsonString, 
res.getRecord());
-    }
-
-    public void testMalformedJson() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        Properties properties = new Properties();
-        properties.setProperty("camus.message.timestamp.format", 
"yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-        decoder.init(properties, "someTopic");
-
-        byte[] payload = "{".getBytes();
-
-        try {
-            decoder.decode(payload);
-        } catch (RuntimeException e) {
-            assertLogMessageContains("pars");
-        }
-    }
-
-    public void testJsonWithoutTimestamp() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        Properties properties = new Properties();
-        properties.setProperty("camus.message.timestamp.format", 
"yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-        decoder.init(properties, "someTopic");
-
-        String jsonString = "{}";
-        byte[] payload = jsonString.getBytes();
-
-        long tsPreDecode = System.currentTimeMillis();
-        CamusWrapper<String> res = decoder.decode(payload);
-        long tsPostDecode = System.currentTimeMillis();
-
-        assertLogMessageContains("current time");
-        assertTrue("Parsed time stamp is before start of decoding",
-                tsPreDecode <= res.getTimestamp());
-        assertTrue("Parsed time stamp is after end of decoding",
-                res.getTimestamp() <= tsPostDecode);
-        assertEquals("Parsed record does not match JSON", jsonString, 
res.getRecord());
-    }
-
-    public void testJsonWithMalformedTimestamp() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        Properties properties = new Properties();
-        properties.setProperty("camus.message.timestamp.format", 
"yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-        decoder.init(properties, "someTopic");
-
-        String jsonString = "{\"timestamp\": \"foo\"}";
-        byte[] payload = jsonString.getBytes();
-
-        long tsPreDecode = System.currentTimeMillis();
-        CamusWrapper<String> res = decoder.decode(payload);
-        long tsPostDecode = System.currentTimeMillis();
-
-        assertLogMessageContains("foo");
-        assertLogMessageContains("current time");
-        assertTrue("Parsed time stamp is before start of decoding",
-                tsPreDecode <= res.getTimestamp());
-        assertTrue("Parsed time stamp is after end of decoding",
-                res.getTimestamp() <= tsPostDecode);
-        assertEquals("Parsed record does not match JSON", jsonString, 
res.getRecord());
-    }
-
-    public void testJsonWithTimestampOfWrongType() {
-        JsonStringMessageDecoder decoder = new JsonStringMessageDecoder();
-
-        Properties properties = new Properties();
-        properties.setProperty("camus.message.timestamp.format", 
"yyyy-MM-dd'T'HH:mm:ss.SSSZ");
-        decoder.init(properties, "someTopic");
-
-        String jsonString = "{\"timestamp\": 4711}";
-        byte[] payload = jsonString.getBytes();
-
-        long tsPreDecode = System.currentTimeMillis();
-        CamusWrapper<String> res = decoder.decode(payload);
-        long tsPostDecode = System.currentTimeMillis();
-
-        assertLogMessageContains("4711");
-        assertLogMessageContains("current time");
-        assertTrue("Parsed time stamp is before start of decoding",
-                tsPreDecode <= res.getTimestamp());
-        assertTrue("Parsed time stamp is after end of decoding",
-                res.getTimestamp() <= tsPostDecode);
-        assertEquals("Parsed record does not match JSON", jsonString, 
res.getRecord());
-    }
-}
diff --git 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/LoggingMockingTestCase.java
 
b/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/LoggingMockingTestCase.java
deleted file mode 100644
index fc199a0..0000000
--- 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/LoggingMockingTestCase.java
+++ /dev/null
@@ -1,121 +0,0 @@
-// Copyright (C) 2013 Wikimedia Foundation
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
-
-package org.wikimedia.analytics.kraken.etl.testutil;
-
-import com.google.common.collect.Lists;
-
-import org.wikimedia.analytics.kraken.etl.testutil.log.LogUtil;
-import org.apache.log4j.spi.LoggingEvent;
-import org.junit.After;
-
-import java.util.Iterator;
-
-import org.apache.log4j.Level;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-
-public abstract class LoggingMockingTestCase extends MockingTestCase {
-  private String loggerName;
-  private LogUtil.LoggerSettings loggerSettings;
-  private java.util.Collection<LoggingEvent> loggedEvents;
-
-  protected final void assertLogMessageContains(String needle, Level level) {
-    LoggingEvent hit = null;
-    Iterator<LoggingEvent> iter = loggedEvents.iterator();
-    while (hit == null && iter.hasNext()) {
-      LoggingEvent event = iter.next();
-      if (event.getRenderedMessage().contains(needle)) {
-        if (level == null || level.equals(event.getLevel())) {
-          hit = event;
-        }
-      }
-    }
-    assertNotNull("Could not find log message containing '" + needle + "'",
-        hit);
-    assertTrue("Could not remove log message containing '" + needle + "'",
-        loggedEvents.remove(hit));
-  }
-
-  protected final void assertLogMessageContains(String needle) {
-    assertLogMessageContains(needle, null);
-  }
-
-  protected final void assertLogThrowableMessageContains(String needle) {
-    LoggingEvent hit = null;
-    Iterator<LoggingEvent> iter = loggedEvents.iterator();
-    while (hit == null && iter.hasNext()) {
-      LoggingEvent event = iter.next();
-
-      if (event.getThrowableInformation().getThrowable().toString()
-          .contains(needle)) {
-        hit = event;
-      }
-    }
-    assertNotNull("Could not find log message with a Throwable containing '"
-        + needle + "'", hit);
-    assertTrue("Could not remove log message with a Throwable containing '"
-        + needle + "'", loggedEvents.remove(hit));
-  }
-
-  // As the PowerMock runner does not pass through runTest, we inject log
-  // verification through @After
-  @After
-  public final void assertNoUnassertedLogEvents() {
-    if (loggedEvents.size() > 0) {
-      LoggingEvent event = loggedEvents.iterator().next();
-      String msg = "Found untreated logged events. First one is:\n";
-      msg += event.getRenderedMessage();
-      if (event.getThrowableInformation() != null) {
-        msg += "\n" + event.getThrowableInformation().getThrowable();
-      }
-      fail(msg);
-    }
-  }
-
-  @Override
-  public void setUp() throws Exception {
-    super.setUp();
-    loggedEvents = Lists.newArrayList();
-
-    // The logger we're interested is class name without the trailing "Test".
-    // While this is not the most general approach it is sufficient for now,
-    // and we can improve later to allow tests to specify which loggers are
-    // to check.
-    loggerName = this.getClass().getCanonicalName();
-    loggerName = loggerName.substring(0, loggerName.length()-4);
-    loggerSettings = LogUtil.logToCollection(loggerName, loggedEvents);
-  }
-
-  @Override
-  protected void runTest() throws Throwable {
-    super.runTest();
-    // Plain JUnit runner does not pick up @After, so we add it here
-    // explicitly. Note, that we cannot put this into tearDown, as failure
-    // to verify mocks would bail out and might leave open resources from
-    // subclasses open.
-    assertNoUnassertedLogEvents();
-  }
-
-  @Override
-  public void tearDown() throws Exception {
-    if (loggerName != null && loggerSettings != null) {
-      Logger logger = LogManager.getLogger(loggerName);
-      loggerSettings.pushOntoLogger(logger);
-    }
-    super.tearDown();
-  }
-}
diff --git 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/MockingTestCase.java
 
b/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/MockingTestCase.java
deleted file mode 100644
index f2cb3c7..0000000
--- 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/MockingTestCase.java
+++ /dev/null
@@ -1,155 +0,0 @@
-// Copyright (C) 2013 Wikimedia Foundation
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
-
-package org.wikimedia.analytics.kraken.etl.testutil;
-
-import junit.framework.TestCase;
-
-import org.easymock.EasyMock;
-import org.easymock.IMocksControl;
-import org.junit.After;
-import org.junit.runner.RunWith;
-import org.powermock.api.easymock.PowerMock;
-import org.powermock.modules.junit4.PowerMockRunner;
-
-import java.util.ArrayList;
-import java.util.Collection;
-
-/**
- * Test case with some support for automatically verifying mocks.
- */
-public abstract class MockingTestCase extends TestCase {
-  private Collection<Object> mocks;
-  private Collection<IMocksControl> mockControls;
-  private boolean mocksReplayed;
-  private boolean usePowerMock;
-
-  /**
-   * Create and register a mock control.
-   *
-   * @return The mock control instance.
-   */
-  protected final IMocksControl createMockControl() {
-    IMocksControl mockControl = EasyMock.createControl();
-    assertTrue("Adding mock control failed", mockControls.add(mockControl));
-    return mockControl;
-  }
-
-  /**
-   * Create and register a mock.
-   *
-   * Creates a mock and registers it in the list of created mocks, so it gets
-   * treated automatically upon {@code replay} and {@code verify};
-   * @param toMock The class to create a mock for.
-   * @return The mock instance.
-   */
-  protected final <T> T createMock(Class<T> toMock) {
-    return createMock(toMock, null);
-  }
-
-  /**
-   * Create a mock for a mock control and register a mock.
-   *
-   * Creates a mock and registers it in the list of created mocks, so it gets
-   * treated automatically upon {@code replay} and {@code verify};
-   * @param toMock The class to create a mock for.
-   * @param control The mock control to create the mock on. If null, do not use
-   *    a specific control.
-   * @return The mock instance.
-   */
-  protected final <T> T createMock(Class<T> toMock, IMocksControl control) {
-    assertFalse("Mocks have already been set to replay", mocksReplayed);
-    final T mock;
-    if (control == null) {
-      if (usePowerMock) {
-        mock = PowerMock.createMock(toMock);
-      } else {
-        mock = EasyMock.createMock(toMock);
-      }
-      assertTrue("Adding " + toMock.getName() + " mock failed",
-          mocks.add(mock));
-    } else {
-      mock = control.createMock(toMock);
-    }
-    return mock;
-  }
-
-  /**
-   * Set all registered mocks to replay
-   */
-  protected final void replayMocks() {
-    assertFalse("Mocks have already been set to replay", mocksReplayed);
-    if (usePowerMock) {
-      PowerMock.replayAll();
-    } else {
-      EasyMock.replay(mocks.toArray());
-    }
-    for (IMocksControl mockControl : mockControls) {
-      mockControl.replay();
-    }
-    mocksReplayed = true;
-  }
-
-  /**
-   * Verify all registered mocks
-   *
-   * This method is called automatically at the end of a test. Nevertheless,
-   * it is safe to also call it beforehand, if this better meets the
-   * verification part of a test.
-   */
-  // As the PowerMock runner does not pass through runTest, we inject mock
-  // verification through @After
-  @After
-  public final void verifyMocks() {
-    if (!mocks.isEmpty() || !mockControls.isEmpty()) {
-      assertTrue("Created mocks have not been set to replay. Call replayMocks "
-          + "within the test", mocksReplayed);
-      if (usePowerMock) {
-        PowerMock.verifyAll();
-      } else {
-        EasyMock.verify(mocks.toArray());
-      }
-      for (IMocksControl mockControl : mockControls) {
-        mockControl.verify();
-      }
-    }
-  }
-
-  @Override
-  public void setUp() throws Exception {
-    super.setUp();
-
-    usePowerMock = false;
-    RunWith runWith = this.getClass().getAnnotation(RunWith.class);
-    if (runWith != null) {
-      usePowerMock = PowerMockRunner.class.isAssignableFrom(runWith.value());
-    }
-
-    mocks = new ArrayList<Object>();
-    mockControls = new ArrayList<IMocksControl>();
-    mocksReplayed = false;
-  }
-
-  @Override
-  protected void runTest() throws Throwable {
-    super.runTest();
-    // Plain JUnit runner does not pick up @After, so we add it here
-    // explicitly. Note, that we cannot put this into tearDown, as failure
-    // to verify mocks would bail out and might leave open resources from
-    // subclasses open.
-    verifyMocks();
-  }
-}
diff --git 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/log/CollectionAppender.java
 
b/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/log/CollectionAppender.java
deleted file mode 100644
index 948aa28..0000000
--- 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/log/CollectionAppender.java
+++ /dev/null
@@ -1,60 +0,0 @@
-// Copyright (C) 2013 Wikimedia Foundation
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
-
-package org.wikimedia.analytics.kraken.etl.testutil.log;
-
-import com.google.common.collect.Lists;
-
-import org.apache.log4j.AppenderSkeleton;
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.util.Collection;
-import java.util.LinkedList;
-
-/**
- * Log4j appender that logs into a list
- */
-public class CollectionAppender extends AppenderSkeleton {
-  private Collection<LoggingEvent> events;
-
-  public CollectionAppender() {
-    events = new LinkedList<LoggingEvent>();
-  }
-
-  public CollectionAppender(Collection<LoggingEvent> events) {
-    this.events = events;
-  }
-
-  @Override
-  public boolean requiresLayout() {
-    return false;
-  }
-
-  @Override
-  protected void append(LoggingEvent event) {
-    if (! events.add(event)) {
-      throw new RuntimeException("Could not append event " + event);
-    }
-  }
-
-  @Override
-  public void close() {
-  }
-
-  public Collection<LoggingEvent> getLoggedEvents() {
-    return Lists.newLinkedList(events);
-  }
-}
diff --git 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/log/LogUtil.java
 
b/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/log/LogUtil.java
deleted file mode 100644
index 12bb3fd..0000000
--- 
a/kraken-etl/src/test/java/org/wikimedia/analytics/kraken/etl/testutil/log/LogUtil.java
+++ /dev/null
@@ -1,89 +0,0 @@
-// Copyright (C) 2013 Wikimedia Foundation
-//
-// This program is free software; you can redistribute it and/or
-// modify it under the terms of the GNU General Public License
-// as published by the Free Software Foundation; either version 2
-// of the License, or (at your option) any later version.
-//
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
-//
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the Free Software
-// Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, 
USA.
-
-package org.wikimedia.analytics.kraken.etl.testutil.log;
-
-import org.apache.log4j.Appender;
-import org.apache.log4j.LogManager;
-import org.apache.log4j.Logger;
-import org.apache.log4j.spi.LoggingEvent;
-
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.Enumeration;
-import java.util.List;
-
-public class LogUtil {
-  /**
-   * Change logger's setting so it only logs to a collection.
-   *
-   * @param logName Name of the logger to modify.
-   * @param collection The collection to log into.
-   * @return The logger's original settings.
-   */
-  public static LoggerSettings logToCollection(String logName,
-      Collection<LoggingEvent> collection) {
-    Logger logger = LogManager.getLogger(logName);
-    LoggerSettings loggerSettings = new LoggerSettings(logger);
-    logger.removeAllAppenders();
-    logger.setAdditivity(false);
-    CollectionAppender listAppender = new CollectionAppender(collection);
-    logger.addAppender(listAppender);
-    return loggerSettings;
-  }
-
-  /**
-   * Capsule for a logger's settings that get mangled by rerouting logging to 
a collection
-   */
-  public static class LoggerSettings {
-    private final boolean additive;
-    private final List<Appender> appenders;
-
-    /**
-     * Read off logger settings from an instance.
-     *
-     * @param logger The logger to read the settings off from.
-     */
-    private LoggerSettings(Logger logger) {
-        this.additive = logger.getAdditivity();
-
-        Enumeration<?> appenders = logger.getAllAppenders();
-        this.appenders = new ArrayList<Appender>();
-        while (appenders.hasMoreElements()) {
-            Object appender = appenders.nextElement();
-            if (appender instanceof Appender) {
-                this.appenders.add((Appender)appender);
-            } else {
-                throw new RuntimeException("getAllAppenders of " + logger
-                        + " contained an object that is not an Appender");
-            }
-        }
-    }
-
-    /**
-     * Pushes this settings back onto a logger.
-     *
-     * @param logger the logger on which to push the settings.
-     */
-    public void pushOntoLogger(Logger logger) {
-      logger.setAdditivity(additive);
-             logger.removeAllAppenders();
-      for (Appender appender : appenders) {
-        logger.addAppender(appender);
-      }
-    }
-  }
-}
diff --git a/pom.xml b/pom.xml
index 4f037dc..4b017f3 100644
--- a/pom.xml
+++ b/pom.xml
@@ -16,7 +16,6 @@
         <module>kraken-generic</module>
         <module>kraken-dclass</module>
         <module>kraken-pig</module>
-        <module>kraken-etl</module>
         <module>kraken-toolbelt</module>
     </modules>
     

-- 
To view, visit https://gerrit.wikimedia.org/r/119724
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: I9277a8d66871984e0773b31e7a6e8be1444c2140
Gerrit-PatchSet: 1
Gerrit-Project: analytics/kraken
Gerrit-Branch: master
Gerrit-Owner: QChris <[email protected]>
Gerrit-Reviewer: Ottomata <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to