1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
use Cow;
use ;
const NAME: &str = "docker.elastic.co/elasticsearch/elasticsearch";
const TAG: &str = "7.16.1";
/// Port that the [`Elasticsearch`] container has internally
/// Used **for API calls over http**, including search, aggregation, monitoring, ...
/// Client libraries have switched to using this to communicate to elastic.
/// Can be rebound externally via [`testcontainers::core::ImageExt::with_mapped_port`]
///
/// [`Elasticsearch`]: https://elastic.co/
pub const ELASTICSEARCH_API_PORT: ContainerPort = Tcp;
/// Port that the [`Elasticsearch`] container has internally.
/// Used **for nodes to communicate between each other** and handles cluster updates naster elections, nodes leaving/joining, ...
/// Can be rebound externally via [`testcontainers::core::ImageExt::with_mapped_port`]
///
/// [`Elasticsearch`]: https://elastic.co/
pub const ELASTICSEARCH_INTER_NODE_PORT: ContainerPort = Tcp;
/// Module to work with [`Elasticsearch`] inside of tests.
///
/// Starts an instance of Elasticsearch based on the official [`Elasticsearch docker image`].
///
/// Elasticsearch is a distributed, RESTful search and analytics engine capable of addressing
/// a growing number of use cases. This module provides a local Elasticsearch instance for testing purposes.
/// The container exposes port `9200` for API calls ([`ELASTICSEARCH_API_PORT`]) and port `9300` for
/// inter-node communication ([`ELASTICSEARCH_INTER_NODE_PORT`]) by default.
///
/// # Example
/// ```
/// use testcontainers_modules::{
/// elastic_search::ElasticSearch, testcontainers::runners::SyncRunner,
/// };
///
/// let elasticsearch_instance = ElasticSearch::default().start().unwrap();
/// let host = elasticsearch_instance.get_host().unwrap();
/// let port = elasticsearch_instance.get_host_port_ipv4(9200).unwrap();
///
/// // Use the Elasticsearch API at http://{host}:{port}
/// ```
///
/// [`Elasticsearch`]: https://www.elastic.co/elasticsearch/
/// [`Elasticsearch docker image`]: https://www.docker.elastic.co/r/elasticsearch/elasticsearch