{"id":27974586,"url":"https://github.com/strapdata/elassandra-unit","last_synced_at":"2025-05-08T00:18:44.501Z","repository":{"id":52540392,"uuid":"168864751","full_name":"strapdata/elassandra-unit","owner":"strapdata","description":"Utility tool to load Data into Elassandra to help you writing good isolated JUnit Test into your application","archived":false,"fork":false,"pushed_at":"2022-06-27T16:14:52.000Z","size":1026,"stargazers_count":1,"open_issues_count":3,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-05-08T00:18:42.652Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"lgpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/strapdata.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.txt","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-02-02T18:40:03.000Z","updated_at":"2020-04-20T16:24:12.000Z","dependencies_parsed_at":"2022-09-08T06:20:43.080Z","dependency_job_id":null,"html_url":"https://github.com/strapdata/elassandra-unit","commit_stats":null,"previous_names":[],"tags_count":10,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strapdata%2Felassandra-unit","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strapdata%2Felassandra-unit/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strapdata%2Felassandra-unit/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/strapdata%2Felassandra-unit/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/strapdata","download_url":"https://codeload.github.com/strapdata/elassandra-unit/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":252973753,"owners_count":21834133,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2025-05-08T00:18:40.958Z","updated_at":"2025-05-08T00:18:44.464Z","avatar_url":"https://github.com/strapdata.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"git statu# ElassandraUnit\n\n**ElassandraUnit** is a fork form [CassandraUnit](https://github.com/jsevellec/cassandra-unit) modified for [Elassandra](http://www.elassandra.io).\n\n**ElassandraUnit** helps you writing isolated JUnit tests in a Test Driven Development style with an embedded [Elassandra](http://www.elassandra.io) instance.\n\n![Elassandra Unit Figure](elassandra-unit.png) \n\n* Start an embedded Elassandra (including both Cassandra and Elasticsearch).\n* Create structure (keyspace and Column Families) and load data from an XML, JSON or YAML DataSet.\n* Execute a CQL script.\n* Query Cassandra through the [Cassandra driver](https://github.com/datastax/java-driver) \n* Query Elasticsearch through the [Elasticsearch REST API](https://www.elastic.co/guide/en/elasticsearch/client/java-rest/6.5/java-rest-high.html).\n\n## Quick start\n\nAdd the following dependencies:\n\n```xml\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.strapdata.elassandraunit\u003c/groupId\u003e\n        \u003cartifactId\u003eelassandra-unit-spring\u003c/artifactId\u003e\n        \u003cversion\u003e${elassandra-unit.version}\u003c/version\u003e\n        \u003cscope\u003etest\u003c/scope\u003e\n        \u003cexclusions\u003e\n            \u003cexclusion\u003e\n                \u003cgroupId\u003ecom.strapdata.elassandraunit\u003c/groupId\u003e\n                \u003cartifactId\u003eelassandra-unit\u003c/artifactId\u003e\n            \u003c/exclusion\u003e\n        \u003c/exclusions\u003e\n    \u003c/dependency\u003e\n    \u003cdependency\u003e\n        \u003cgroupId\u003ecom.strapdata.elassandraunit\u003c/groupId\u003e\n        \u003cartifactId\u003eelassandra-unit\u003c/artifactId\u003e\n        \u003cclassifier\u003eshaded\u003c/classifier\u003e\n        \u003cexclusions\u003e\n            \u003cexclusion\u003e\n                \u003cartifactId\u003ehttpclient\u003c/artifactId\u003e\n                \u003cgroupId\u003eorg.apache.httpcomponents\u003c/groupId\u003e\n            \u003c/exclusion\u003e\n            \u003cexclusion\u003e\n                \u003cartifactId\u003ehttpcore\u003c/artifactId\u003e\n                \u003cgroupId\u003eorg.apache.httpcomponents\u003c/groupId\u003e\n            \u003c/exclusion\u003e\n        \u003c/exclusions\u003e\n        \u003cversion\u003e${elassandra-unit.version}\u003c/version\u003e\n        \u003cscope\u003etest\u003c/scope\u003e\n    \u003c/dependency\u003e\n```\n\nAdd the Elasticsearch REST high level client with the same version as the one embedded in elassandra.\n\n```xml\n    \u003cdependency\u003e\n      \u003cgroupId\u003eorg.elasticsearch.client\u003c/groupId\u003e\n      \u003cartifactId\u003eelasticsearch-rest-high-level-client\u003c/artifactId\u003e\n      \u003cversion\u003e6.2.3\u003c/version\u003e\n    \u003c/dependency\u003e\n```\n\nTo handle Elasticsearch search requests over CQL, set the system property **cassandra.custom_query_handler_class** to **org.elassandra.index.ElasticQueryHandler**:\n\n```xml\n    ...\n    \u003cbuild\u003e\n        \u003cplugin\u003e\n            \u003cgroupId\u003eorg.apache.maven.plugins\u003c/groupId\u003e\n            \u003cartifactId\u003emaven-surefire-plugin\u003c/artifactId\u003e\n            \u003cversion\u003e3.0.0-M3\u003c/version\u003e\n            \u003cconfiguration\u003e\n                \u003csystemPropertyVariables\u003e\n                    \u003ccassandra.custom_query_handler_class\u003eorg.elassandra.index.ElasticQueryHandler\u003c/cassandra.custom_query_handler_class\u003e\n                \u003c/systemPropertyVariables\u003e\n            \u003c/configuration\u003e\n            \u003c/plugin\u003e\n        \u003c/plugins\u003e\n    \u003c/build\u003e\n```\n\nCreate a JUnit test class :\n\n```java\npublic class SimpleTest {\n\n    static final String KEYSPACE = \"ks\";\n\n    @ClassRule\n    public static CassandraCQLUnit cassandraCQLUnit =\n        new CassandraCQLUnit(new SimpleCQLDataSet(\n            \"CREATE TABLE users (email text PRIMARY KEY, firstname text, lastname text, es_query text, es_options text);\", KEYSPACE));\n\n    private static Mapper\u003cUser\u003e userMapper;\n    private static RestHighLevelClient client;\n\n    @Before\n    public void setup() throws IOException {\n        userMapper = new MappingManager(cassandraCQLUnit.session).mapper(User.class);\n        client = new RestHighLevelClient(RestClient.builder(new HttpHost(\"localhost\", 9200, \"http\")));\n\n        // create an elasticsearch index on table users\n        CreateIndexRequest request = new CreateIndexRequest(\"users\");\n        request.mapping(\"users\", XContentFactory.jsonBuilder()\n            .startObject()\n                .startObject(\"users\")\n                    .field(\"discover\", \".*\")\n                .endObject()\n            .endObject());\n        request.settings(Settings.builder()\n            .put(\"keyspace\", KEYSPACE)                          // map index users to our keyspace.\n            .put(\"index.synchronous_refresh\",true)// synchronous elasticsearch refresh\n            .build());\n        CreateIndexResponse createIndexResponse = client.indices().create(request);\n    }\n\n    @Test\n    public void testMapper() throws Exception {\n        User user1 = new User().withEmail(\"user1@test.com\").withFirstname(\"Bob\").withLastname(\"Smith\");\n        User user2 = new User().withEmail(\"user2@test.com\").withFirstname(\"Alice\").withLastname(\"Smith\");\n        User user3 = new User().withEmail(\"user3@test.com\").withFirstname(\"Paul\").withLastname(\"Dupont\");\n        userMapper.save(user1);\n        userMapper.save(user2);\n        userMapper.save(user3);\n\n        User user = userMapper.get(\"user1@test.com\");\n        assertThat(user, is(user1));\n\n        // Elasticsearch search through the REST API\n        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder().query(QueryBuilders.termQuery(\"lastname\", \"Smith\"));\n        SearchRequest searchRequest = new SearchRequest().indices(\"users\").source(sourceBuilder);\n        SearchResponse searchResponse = client.search(searchRequest);\n        assertThat(searchResponse.getHits().totalHits, is(2L));\n\n        // Elasticsearch search through CQL\n        String esQuery = new SearchSourceBuilder().query(QueryBuilders.termQuery(\"lastname\", \"Smith\")).toString(ToXContent.EMPTY_PARAMS);\n        ResultSet results = cassandraCQLUnit.session.execute(\n            \"SELECT * FROM users WHERE es_options = ? AND es_query = ? ALLOW FILTERING\", \"indices=users\", esQuery);\n        Result\u003cUser\u003e users = userMapper.map(results);\n        assertThat(users.all().size(), is(2));\n    }\n}\n```\n\n## Resources\n\n* [cassandra unit wiki](https://github.com/jsevellec/cassandra-unit/wiki)\n* [cassandra-unit-examples](https://github.com/jsevellec/cassandra-unit-examples)\n* [elassandra-unit-examples](https://github.com/strapdata/elassandra-unit-examples)\n\n## Support\n\n * Community support available via [elassandra google groups](https://groups.google.com/forum/#!forum/elassandra).\n * Post feature requests and bugs on https://github.com/strapdata/elassandra-unit/issues\n * Commercial support is available through [Strapdata](http://www.strapdata.com/).\n\n## License\n\nThis project is licensed under [LGPL V3.0](http://www.gnu.org/licenses/lgpl-3.0-standalone.html)\n\n## Acknowledgments\n\n* [CassandraUnit](https://github.com/jsevellec/cassandra-unit) is developped by Jérémy Sevellec\n* Elasticsearch and Kibana are trademarks of Elasticsearch BV, registered in the U.S. and in other countries.\n* Apache Cassandra, Apache Lucene, Apache, Lucene and Cassandra are trademarks of the Apache Software Foundation.\n* Elassandra is a trademark of Strapdata SAS, registered in the U.S. and in other countries.\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrapdata%2Felassandra-unit","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fstrapdata%2Felassandra-unit","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fstrapdata%2Felassandra-unit/lists"}