From d6aac679b59ca03937e785c8e894e3461009f9f4 Mon Sep 17 00:00:00 2001 From: "R. Tyler Croy" Date: Wed, 2 Sep 2015 11:26:38 -0700 Subject: [PATCH] Borrow TopicPartition from Verspaetung See https://github.com/lookout/verspaetung --- build.gradle | 8 +- gradle/wrapper/gradle-wrapper.properties | 4 +- .../reiseburo/beetle/TopicPartition.java | 70 +++++++++++++++++ .../beetle/TopicPartitionSpec.groovy | 78 +++++++++++++++++++ 4 files changed, 154 insertions(+), 6 deletions(-) create mode 100644 src/main/java/com/github/reiseburo/beetle/TopicPartition.java create mode 100644 src/test/groovy/com/github/reiseburo/beetle/TopicPartitionSpec.groovy diff --git a/build.gradle b/build.gradle index 5a96d42..3a29b53 100644 --- a/build.gradle +++ b/build.gradle @@ -4,23 +4,23 @@ buildscript { } } +apply plugin: 'groovy' apply plugin: 'idea' -apply plugin: 'findbugs' apply plugin: 'java' apply plugin: 'maven' -apply plugin: 'pmd' - version '0.1.0' group 'com.github.reiseburo' description 'A sane API on top of Kafka' +defaultTasks 'check', 'assemble' -repository { +repositories { jcenter() } dependencies { compile 'org.apache.curator:curator-framework:[2.7.1,2.8)' + compile 'io.reactivex:rxjava:[1.0.14,2.0)' testCompile "org.spockframework:spock-core:1.0-groovy-2.4" testCompile 'cglib:cglib-nodep:3.1' diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 3369272..f3f24d4 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,6 +1,6 @@ -#Wed Sep 02 11:09:13 PDT 2015 +#Wed Sep 02 11:25:13 PDT 2015 distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-2.6-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-2.6-all.zip diff --git a/src/main/java/com/github/reiseburo/beetle/TopicPartition.java b/src/main/java/com/github/reiseburo/beetle/TopicPartition.java new file mode 100644 index 0000000..6abe42e --- /dev/null +++ b/src/main/java/com/github/reiseburo/beetle/TopicPartition.java @@ -0,0 +1,70 @@ +package com.github.reiseburo.beetle; +/* +*Copyright (c) 2015 Lookout, Inc* + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ + +import java.util.Objects; + +/** + */ +class TopicPartition { + private final String topic; + private final Integer partition; + + public TopicPartition(String topic, Integer partition) { + this.topic = topic; + this.partition = partition; + } + + /** + * Return true for any two TopicPartition instances that have equal topic + * and partition properties + */ + @Override + public boolean equals(Object compared) { + /* bail early for object identity */ + if (this == compared) { + return true; + } + + if (!(compared instanceof TopicPartition)) { + return false; + } + + return (this.topic == ((TopicPartition)compared).topic) && + (this.partition == ((TopicPartition)compared).partition); + } + + @Override + public int hashCode() { + return Objects.hash(this.topic, this.partition); + } + + @Override + public String toString() { + return this.topic + ":" + this.partition; + } +} diff --git a/src/test/groovy/com/github/reiseburo/beetle/TopicPartitionSpec.groovy b/src/test/groovy/com/github/reiseburo/beetle/TopicPartitionSpec.groovy new file mode 100644 index 0000000..948c744 --- /dev/null +++ b/src/test/groovy/com/github/reiseburo/beetle/TopicPartitionSpec.groovy @@ -0,0 +1,78 @@ +package com.github.reiseburo.beetle +/* +*Copyright (c) 2015 Lookout, Inc* + +MIT License + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +"Software"), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE +LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION +OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION +WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. + */ +import spock.lang.* + + +class TopicPartitionSpec extends Specification { + String topic = 'spock-topic' + Integer partition = 12 + + def "the constructor should set the properties"() { + given: + TopicPartition tp = new TopicPartition(topic, partition) + + expect: + tp.topic == topic + tp.partition == partition + } + + def "equals() is true with identical topic/partions"() { + given: + TopicPartition left = new TopicPartition(topic, partition) + TopicPartition right = new TopicPartition(topic, partition) + + expect: + left == right + } + + def "equals() is false with two different objects"() { + given: + TopicPartition left = new TopicPartition(topic, partition) + + expect: + left != 'not even' + } + + def "hashCode() returns an identical hash for identical topic/partitions"() { + given: + TopicPartition left = new TopicPartition(topic, partition) + TopicPartition right = new TopicPartition(topic, partition) + + expect: + left.hashCode() == right.hashCode() + } + + def "hashCode() returns a different hash for different topic/partitions"() { + given: + TopicPartition left = new TopicPartition(topic, partition) + TopicPartition right = new TopicPartition('bok', 1) + + expect: + left.hashCode() != right.hashCode() + } +} \ No newline at end of file