spring-esdata-loader-junit-jupiter

Set of JUnit Rules & Extensions to easily load data to test your spring-data elasticsearch-based projects

License

License

MIT
Categories

Categories

JUnit Unit Testing Data
GroupId

GroupId

com.github.tinesoft
ArtifactId

ArtifactId

spring-esdata-loader-junit-jupiter
Last Version

Last Version

1.1.0
Release Date

Release Date

Type

Type

jar
Description

Description

spring-esdata-loader-junit-jupiter
Set of JUnit Rules & Extensions to easily load data to test your spring-data elasticsearch-based projects
Project URL

Project URL

https://github.com/tinesoft/spring-esdata-loader
Source Code Management

Source Code Management

https://github.com/tinesoft/spring-esdata-loader.git

Download spring-esdata-loader-junit-jupiter

How to add to project

<!-- https://jarcasting.com/artifacts/com.github.tinesoft/spring-esdata-loader-junit-jupiter/ -->
<dependency>
    <groupId>com.github.tinesoft</groupId>
    <artifactId>spring-esdata-loader-junit-jupiter</artifactId>
    <version>1.1.0</version>
</dependency>
// https://jarcasting.com/artifacts/com.github.tinesoft/spring-esdata-loader-junit-jupiter/
implementation 'com.github.tinesoft:spring-esdata-loader-junit-jupiter:1.1.0'
// https://jarcasting.com/artifacts/com.github.tinesoft/spring-esdata-loader-junit-jupiter/
implementation ("com.github.tinesoft:spring-esdata-loader-junit-jupiter:1.1.0")
'com.github.tinesoft:spring-esdata-loader-junit-jupiter:jar:1.1.0'
<dependency org="com.github.tinesoft" name="spring-esdata-loader-junit-jupiter" rev="1.1.0">
  <artifact name="spring-esdata-loader-junit-jupiter" type="jar" />
</dependency>
@Grapes(
@Grab(group='com.github.tinesoft', module='spring-esdata-loader-junit-jupiter', version='1.1.0')
)
libraryDependencies += "com.github.tinesoft" % "spring-esdata-loader-junit-jupiter" % "1.1.0"
[com.github.tinesoft/spring-esdata-loader-junit-jupiter "1.1.0"]

Dependencies

compile (2)

Group / Artifact Type Version
com.github.tinesoft : spring-esdata-loader-core jar 1.1.0
org.junit.jupiter : junit-jupiter-api jar 5.5.2

Project Modules

There are no modules declared in this project.

spring-esdata-loader

Build  Status codebeat badge GitHub

spring-esdata-loader is a Java 8+ testing library to help you write integration tests for your spring-data elasticsearch-based projects, by allowing you to easily load data into Elasticsearch, using entity mappings (i.e domain classes annotated with @Document, @Field, etc) and via specific Junit 4's Rules or JUnit Jupiter's Extensions.

The library reads all the metadata it needs from the entity classes (index name, index type, etc) , uses them to create/refresh the index on the ES server and feeds it with the data using the ElasticsearchOperations present in your test application context.

Features

  • Simple API and no configuration required
  • Support for JUnit 4 via @LoadEsDataRule, @DeleteEsDataRule
  • Support for JUnit Jupiter via
    • @LoadEsDataConfig / @LoadEsDataExtension
    • @DeleteEsDataConfig / @DeleteEsDataExtension
  • Built-in support for gzipped data
  • Multiple data formats(dump, manual)
  • Written in Java 8
  • Based on Spring (Data, Test)

Dependencies

spring-esdata-loader is based on dependencies that you already have in your Spring (Boot) project, if you are doing Elasticsearch with Spring :

Installation & Usage

The library is split into 2 independent sub-modules, both are available on JCenter and Maven Central:

  • spring-esdata-loader-junit4 for testing with JUnit 4
  • spring-esdata-loader-junit-jupiter for testing with JUnit Jupiter

To get started,

  1. add the appropriate dependency to your gradle or maven project
Gradle Maven
JUnit 4
dependencies {
    testImplementation 'com.github.spring-esdata-loader:spring-esdata-loader-junit4:1.1.0'
}
<dependency>
    <groupId>com.github.spring-esdata-loader</groupId>
    <artifactId>spring-esdata-loader-junit4</artifactId>
    <version>1.1.0</version>
    <scope>test</scope>
</dependency>
JUnit Jupiter
dependencies {
    testImplementation 'com.github.spring-esdata-loader:spring-esdata-loader-junit-jupiter:1.1.0'
}
<dependency>
    <groupId>com.github.spring-esdata-loader</groupId>
    <artifactId>spring-esdata-loader-junit-jupiter</artifactId>
    <version>1.1.0</version>
    <scope>test</scope>
</dependency>
  1. write your test class. You can have a look at:

Supported Data Formats

spring-esdata-loader currently supports 2 formats to load data into Elasticsearch: DUMP and MANUAL.

Dump data format

Here is an example:

{"_index":"author","_type":"Author","_id":"1","_score":1,"_source":{"id":"1","firstName":"firstName1","lastName":"lastName1"}}
{"_index":"author","_type":"Author","_id":"2","_score":1,"_source":{"id":"2","firstName":"firstName2","lastName":"lastName2"}}
{"_index":"author","_type":"Author","_id":"3","_score":1,"_source":{"id":"3","firstName":"firstName3","lastName":"lastName3"}}
{"_index":"author","_type":"Author","_id":"4","_score":1,"_source":{"id":"4","firstName":"firstName4","lastName":"lastName4"}}
{"_index":"author","_type":"Author","_id":"5","_score":1,"_source":{"id":"5","firstName":"firstName5","lastName":"lastName5"}}
{"_index":"author","_type":"Author","_id":"6","_score":1,"_source":{"id":"6","firstName":"firstName6","lastName":"lastName6"}}
{"_index":"author","_type":"Author","_id":"7","_score":1,"_source":{"id":"7","firstName":"firstName7","lastName":"lastName7"}}
{"_index":"author","_type":"Author","_id":"8","_score":1,"_source":{"id":"8","firstName":"firstName8","lastName":"lastName8"}}
{"_index":"author","_type":"Author","_id":"9","_score":1,"_source":{"id":"9","firstName":"firstName9","lastName":"lastName9"}}
{"_index":"author","_type":"Author","_id":"10","_score":1,"_source":{"id":"10","firstName":"firstName10","lastName":"lastName10"}}

You can use a tool like elasticdump (requires NodeJS) to extract existing data from your Elasticsearch server, and them dump them into a JSON file.

$ npx elasticdump --input=http://localhost:9200/my_index --output=my_index_data.json

The above command will run elasticdump to extract data from an index named my_index on a ES server located at http://localhost:9200 and then save the result into a file named my_index_data.json

If you change the --output part above into --output=$ | gzip my_data.json.gz the data will be automatically gzipped

Manual data format

In this format, you specify your target data directly (no metadata like _index, _source, ...), as an Array of JSON objects.

This is more suitable when you create test data from scratch (as opposed to dumping existing ones from a ES server) because it is easier to tweak later on to accommodate future modifications in tests.

Here is an example:

[
    {"id":"1","firstName":"firstName1","lastName":"lastName1"},
    {"id":"2","firstName":"firstName2","lastName":"lastName2"},
    {"id":"3","firstName":"firstName3","lastName":"lastName3"},
    {"id":"4","firstName":"firstName4","lastName":"lastName4"},
    {"id":"5","firstName":"firstName5","lastName":"lastName5"},
    {"id":"6","firstName":"firstName6","lastName":"lastName6"},
    {"id":"7","firstName":"firstName7","lastName":"lastName7"},
    {"id":"8","firstName":"firstName8","lastName":"lastName8"},
    {"id":"9","firstName":"firstName9","lastName":"lastName9"},
    {"id":"10","firstName":"firstName10","lastName":"lastName10"}
]

Contributing

Contributions are always welcome! Just fork the project, work on your feature/bug fix, and submit it. You can also contribute by creating issues. Please read the contribution guidelines for more information.

License

Copyright (c) 2019 Tine Kondo. Licensed under the MIT License (MIT)

Versions

Version
1.1.0
1.0.3
1.0.2
1.0.1