Borrow TopicPartition from Verspaetung

See https://github.com/lookout/verspaetung
This commit is contained in:
R. Tyler Croy 2015-09-02 11:26:38 -07:00
parent 6a0dc264d4
commit d6aac679b5
No known key found for this signature in database
GPG Key ID: 1426C7DC3F51E16F
4 changed files with 154 additions and 6 deletions

View File

@ -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'

View File

@ -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

View File

@ -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;
}
}

View File

@ -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()
}
}