Skip to content

Commit

Permalink
acceptance tests
Browse files Browse the repository at this point in the history
  • Loading branch information
adyach committed Jan 10, 2020
1 parent 6057364 commit dda69f2
Show file tree
Hide file tree
Showing 60 changed files with 434 additions and 374 deletions.
4 changes: 2 additions & 2 deletions Dockerfile
Expand Up @@ -3,8 +3,8 @@ FROM registry.opensource.zalan.do/stups/openjdk:1.8.0-191-19
MAINTAINER Team Aruha, team-aruha@zalando.de

WORKDIR /
ADD build/libs/nakadi.jar nakadi.jar
ADD api/nakadi-event-bus-api.yaml api/nakadi-event-bus-api.yaml
ADD app/build/libs/nakadi.jar nakadi.jar
ADD app/api api/nakadi-event-bus-api.yaml

EXPOSE 8080

Expand Down
174 changes: 174 additions & 0 deletions acceptance-test/build.gradle
@@ -0,0 +1,174 @@
buildscript {
ext {
springBootVersion = '1.5.20.RELEASE'
}

repositories {
mavenCentral()
maven {
url "https://plugins.gradle.org/m2/"
}
}

dependencies {
classpath "org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}"
classpath 'org.yaml:snakeyaml:1.21'
classpath 'org.owasp:dependency-check-gradle:3.3.2'
}
}

apply plugin: 'java'
apply plugin: 'groovy'
apply plugin: 'eclipse'
apply plugin: 'application'
apply plugin: 'jacoco'
apply plugin: 'findbugs'
apply plugin: 'checkstyle'
apply plugin: 'project-report'
apply plugin: 'org.springframework.boot'
apply plugin: 'io.spring.dependency-management'
apply plugin: 'org.owasp.dependencycheck'

group 'org.zalando'
sourceCompatibility = 1.8
targetCompatibility = 1.8

mainClassName = 'org.zalando.nakadi.Application'
springBoot {
layout = "ZIP"
}

repositories {
mavenCentral()
maven { url 'https://jitpack.io' }
}

jar {
baseName = 'nakadi'
}

configurations {
all*.exclude module: 'spring-boot-starter-logging'
}

findbugs {
reportLevel = "high"
sourceSets = []
}

dependencies {
ext {
dropwizardVersion = '3.1.3'
curatorVersion = '4.2.0'
zookeeperVersion = '3.4.14'
jacksonVersion = '2.9.8'
springFrameworkVersion = '4.3.23.RELEASE'
}
// Override spring-boot BOM versions
ext['json.version'] = '20180130'
ext['json-path'] = '2.4.0'
ext['jsonassert'] = '1.5.0'

implementation project(':core-common')
implementation project(':core-metastore')
implementation project(':core-services')

implementation project(':api-publishing')
implementation project(':api-consumption')
implementation project(':api-metastore')
implementation project(':api-cursors')
implementation project(':api-misc')
implementation project(':app')

// spring
compile("org.springframework.boot:spring-boot-starter-web") {
exclude module: 'logback-classic'
exclude module: 'log4j-over-slf4j'
exclude module: 'spring-boot-starter-tomcat'
}
compile "org.springframework:spring-context:$springFrameworkVersion"
compile "org.springframework:spring-web:$springFrameworkVersion"
compile "org.springframework:spring-webmvc:$springFrameworkVersion"
compile "org.springframework.boot:spring-boot-starter-jetty"

compile('org.springframework.boot:spring-boot-starter-security') {
exclude module: "logback-classic"
}

compile 'org.slf4j:slf4j-log4j12'

compile("com.fasterxml.jackson.datatype:jackson-datatype-json-org:$jacksonVersion") {
exclude module: "json"
}
compile "com.fasterxml.jackson.core:jackson-annotations:$jacksonVersion"
compile "com.fasterxml.jackson.core:jackson-core:$jacksonVersion"
compile "com.fasterxml.jackson.core:jackson-databind:$jacksonVersion"
compile "com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:$jacksonVersion"
compile "com.fasterxml.jackson.datatype:jackson-datatype-jdk8:$jacksonVersion"
compile "com.fasterxml.jackson.datatype:jackson-datatype-joda:$jacksonVersion"
compile "com.fasterxml.jackson.module:jackson-module-afterburner:$jacksonVersion"
compile 'org.zalando:jackson-datatype-problem:0.22.0'
compile 'org.zalando:problem:0.22.0'
compile 'org.json:json:20180130'

compile('org.zalando.stups:stups-spring-oauth2-server:1.0.22') {
exclude module: "httpclient"
}
compile 'org.zalando:twintip-spring-web:1.1.0'

// tests
testCompile 'org.hamcrest:hamcrest-all:1.3'
testCompile('org.junit.jupiter:junit-jupiter-api:5.5.2') {
exclude module: "hamcrest-core"
}
testCompile "org.springframework:spring-test"
testCompile 'org.springframework.boot:spring-boot-test'
testCompile 'org.springframework.boot:spring-boot-starter-test'
testCompile 'org.skyscreamer:jsonassert'
testCompile 'uk.co.datumedge:hamcrest-json:0.2'
testCompile 'org.mockito:mockito-all:1.10.19'
testCompile('com.jayway.restassured:rest-assured:2.9.0') {
exclude module: "hamcrest-core"
exclude module: "hamcrest-library"
}
testCompile 'com.jayway.jsonpath:json-path'
testRuntime 'org.pegdown:pegdown:1.6.0'
testCompile project(path: ':core-common', configuration: 'testOutput')
testCompile project(path: ':core-services', configuration: 'testOutput')
}
// end::dependencies[]

tasks.withType(FindBugs) {
reports {
xml.enabled = false
html.enabled = true
}
}

test {
testLogging {
events "passed", "skipped", "failed"
}
testLogging.exceptionFormat = 'full'
maxParallelForks = Runtime.runtime.availableProcessors()
}

jacoco {
toolVersion = "0.8.2"
}

jacocoTestReport {
reports {
xml.enabled = true
html.enabled = true
}
}

checkstyle {
configFile = new File(rootDir, "checkstyle.xml")
toolVersion = "7.6"
}

task checkstyle {
dependsOn checkstyleMain, checkstyleTest
}
@@ -1,26 +1,25 @@
package org.zalando.nakadi.service.job;
package org.zalando.nakadi.job;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.google.common.base.Charsets;
import org.apache.curator.framework.CuratorFramework;
import org.apache.curator.utils.ZKPaths;
import org.hamcrest.CoreMatchers;
import org.joda.time.DateTime;
import org.joda.time.DateTimeZone;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
import org.zalando.nakadi.config.JsonConfig;
import org.zalando.nakadi.repository.zookeeper.ZooKeeperHolder;
import org.zalando.nakadi.service.job.ExclusiveJobWrapper;
import org.zalando.nakadi.webservice.BaseAT;
import org.zalando.nakadi.webservice.utils.ZookeeperTestUtils;

import java.util.concurrent.atomic.AtomicBoolean;

import static org.hamcrest.CoreMatchers.is;
import static org.hamcrest.CoreMatchers.nullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.lessThan;
import static org.mockito.Mockito.when;
import static org.zalando.nakadi.utils.TestUtils.randomUUID;

public class ExclusiveJobWrapperAT extends BaseAT {
Expand All @@ -39,7 +38,7 @@ public class ExclusiveJobWrapperAT extends BaseAT {
public ExclusiveJobWrapperAT() {
objectMapper = new JsonConfig().jacksonObjectMapper();
zkHolder = Mockito.mock(ZooKeeperHolder.class);
when(zkHolder.get()).thenReturn(CURATOR);
Mockito.when(zkHolder.get()).thenReturn(CURATOR);
}

@Before
Expand All @@ -61,7 +60,7 @@ public void whenItsNotTimeToRunThenJobIsNotExecuted() throws Exception {
createLatestNode(2);

jobWrapper.runJobLocked(dummyJob);
assertThat(jobExecuted.get(), is(false));
assertThat(jobExecuted.get(), CoreMatchers.is(false));
}

@Test
Expand All @@ -72,15 +71,15 @@ public void whenJobIsAlreadyRunningOnAnotherNodeThenJobIsNotExecuted() throws Ex
CURATOR.create().creatingParentsIfNeeded().forPath(lockPath);

jobWrapper.runJobLocked(dummyJob);
assertThat(jobExecuted.get(), is(false));
assertThat(jobExecuted.get(), CoreMatchers.is(false));
}

@Test
public void whenExecuteJobThenOk() throws Exception {
jobWrapper.runJobLocked(dummyJob);
assertThat(jobExecuted.get(), is(true));
assertThat(jobExecuted.get(), CoreMatchers.is(true));

assertThat("lock node should be removed", CURATOR.checkExists().forPath(lockPath), is(nullValue()));
assertThat("lock node should be removed", CURATOR.checkExists().forPath(lockPath), CoreMatchers.is(CoreMatchers.nullValue()));

final byte[] data = CURATOR.getData().forPath(latestPath);
final DateTime lastCleaned = objectMapper.readValue(new String(data, Charsets.UTF_8), DateTime.class);
Expand Down
@@ -1,4 +1,4 @@
package org.zalando.nakadi.service.job;
package org.zalando.nakadi.job;

import com.google.common.collect.Lists;
import com.jayway.restassured.specification.RequestSpecification;
Expand Down
Expand Up @@ -17,10 +17,10 @@
import java.util.List;
import java.util.stream.Collectors;

import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.hamcrest.core.IsNull.notNullValue;
import static org.zalando.nakadi.utils.TestUtils.buildDefaultEventType;

public class EventTypeDbRepositoryTest extends AbstractDbRepositoryTest {
Expand Down
Expand Up @@ -3,9 +3,9 @@
import org.junit.Before;
import org.junit.Test;
import org.zalando.nakadi.domain.EventType;
import org.zalando.nakadi.domain.Timeline;
import org.zalando.nakadi.domain.storage.KafkaConfiguration;
import org.zalando.nakadi.domain.storage.Storage;
import org.zalando.nakadi.domain.Timeline;
import org.zalando.nakadi.domain.storage.ZookeeperConnection;
import org.zalando.nakadi.exceptions.runtime.NoSuchStorageException;
import org.zalando.nakadi.exceptions.runtime.StorageIsUsedException;
Expand Down
Expand Up @@ -8,8 +8,8 @@
import org.zalando.nakadi.config.JsonConfig;
import org.zalando.nakadi.domain.Subscription;
import org.zalando.nakadi.domain.SubscriptionBase;
import org.zalando.nakadi.exceptions.runtime.NoSuchSubscriptionException;
import org.zalando.nakadi.exceptions.runtime.DuplicatedSubscriptionException;
import org.zalando.nakadi.exceptions.runtime.NoSuchSubscriptionException;
import org.zalando.nakadi.exceptions.runtime.ServiceTemporarilyUnavailableException;
import org.zalando.nakadi.util.HashGenerator;
import org.zalando.nakadi.util.UUIDGenerator;
Expand All @@ -23,10 +23,10 @@

import static java.util.Collections.emptySet;
import static java.util.stream.Collectors.toList;
import static org.hamcrest.CoreMatchers.not;
import static org.hamcrest.CoreMatchers.notNullValue;
import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.isEmptyOrNullString;
import static org.hamcrest.Matchers.not;
import static org.hamcrest.Matchers.notNullValue;
import static org.hamcrest.core.IsEqual.equalTo;
import static org.zalando.nakadi.utils.TestUtils.createRandomSubscriptions;

Expand Down Expand Up @@ -196,7 +196,7 @@ public void whenDeleteNoneExistingConnectionThenNoSuchSubscriptionException()
private void insertSubscriptionToDB(final Subscription subscription) {
try {
template.update("INSERT INTO zn_data.subscription (s_id, s_subscription_object, s_key_fields_hash) " +
"VALUES (?, ?::JSONB, ?)",
"VALUES (?, ?::JSONB, ?)",
subscription.getId(),
TestUtils.OBJECT_MAPPER.writer().writeValueAsString(subscription),
hashGenerator.generateSubscriptionKeyFieldsHash(subscription));
Expand Down
Expand Up @@ -4,6 +4,7 @@
import org.apache.kafka.clients.consumer.KafkaConsumer;
import org.apache.kafka.common.PartitionInfo;
import org.echocat.jomon.runtime.concurrent.RetryForSpecifiedTimeStrategy;
import org.hamcrest.Matchers;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mockito;
Expand All @@ -30,10 +31,7 @@
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.Matchers.hasItem;
import static org.hamcrest.Matchers.hasSize;
import static org.hamcrest.Matchers.not;
import static org.mockito.Matchers.any;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class KafkaRepositoryAT extends BaseAT {

Expand Down Expand Up @@ -200,7 +198,7 @@ public void whenDeleteTopicThenTopicIsDeleted() {
// ASSERT //
// check that topic was deleted
executeWithRetry(() -> {
assertThat(getAllTopics().keySet(), not(hasItem(topicName)));
assertThat(getAllTopics().keySet(), Matchers.not(hasItem(topicName)));
},
new RetryForSpecifiedTimeStrategy<Void>(5000).withExceptionsThatForceRetry(AssertionError.class)
.withWaitBetweenEachTry(500));
Expand Down Expand Up @@ -231,15 +229,15 @@ private Map<String, List<PartitionInfo>> getAllTopics() {
}

private KafkaTopicRepository createKafkaTopicRepository() {
final KafkaZookeeper kafkaZookeeper = mock(KafkaZookeeper.class);
when(kafkaZookeeper.getZookeeperConnectionString()).thenReturn(ZOOKEEPER_URL);
final KafkaZookeeper kafkaZookeeper = Mockito.mock(KafkaZookeeper.class);
Mockito.when(kafkaZookeeper.getZookeeperConnectionString()).thenReturn(ZOOKEEPER_URL);

final Consumer<byte[], byte[]> consumer = mock(Consumer.class);
when(consumer.partitionsFor(any())).thenReturn(new ArrayList<>());
final Consumer<byte[], byte[]> consumer = Mockito.mock(Consumer.class);
Mockito.when(consumer.partitionsFor(any())).thenReturn(new ArrayList<>());

final KafkaFactory factory = mock(KafkaFactory.class);
when(factory.getConsumer()).thenReturn(consumer);
final KafkaLocationManager kafkaLocationManager = mock(KafkaLocationManager.class);
final KafkaFactory factory = Mockito.mock(KafkaFactory.class);
Mockito.when(factory.getConsumer()).thenReturn(consumer);
final KafkaLocationManager kafkaLocationManager = Mockito.mock(KafkaLocationManager.class);
Mockito
.doReturn(kafkaHelper.createProducer())
.when(factory)
Expand Down
Expand Up @@ -17,7 +17,7 @@

import static com.jayway.restassured.RestAssured.given;
import static com.jayway.restassured.http.ContentType.JSON;
import static java.text.MessageFormat.format;
import static java.lang.String.format;
import static org.springframework.http.HttpHeaders.CONTENT_ENCODING;
import static org.zalando.problem.Status.NOT_ACCEPTABLE;

Expand Down

0 comments on commit dda69f2

Please sign in to comment.