Elasticsearchからデータを取得するための統合テストを作成します。
testContainerにデフォルト値を使用しているので、RestHighLevelClientはテストコンテナーにアクセスできるはずですが、java.net.ConnecteException: Connection refused
データにインデックスを付けようとすると常に同じ例外()が発生しますが、コマンドでDockerイメージをローカルで実行すると
docker run -d --rm -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" -e "transport.host=127.0.0.1" --name elastic docker.elastic.co/elasticsearch/elasticsearch:6.5.4
私のテストは正しく機能します。
ポートマッピングは同じなので、どこに問題がありますか?この例外の理由は何ですか?
私のテスト:
@ExtendWith(SpringExtension.class)
@Testcontainers
@WebMvcTest
class FlowerResourceTest {
@Container
private ElasticsearchContainer esContainer = new ElasticsearchContainer("docker.elastic.co/elasticsearch/elasticsearch:6.5.4");
@Autowired
private ElasticsearchConfiguration esConfig;
@Autowired
private FlowerService flowerService;
private RestHighLevelClient client;
@Test
void test() throws IOException, InterruptedException {
client = esConfig.client();
var jsonFlower = "{\n" +
" \"name\": \"XXX\",\n" +
" \"color\" : \"red\"\n" +
"}";
IndexRequest indexRequest = new IndexRequest("flowers", "doc", "1")
.source(jsonFlower, XContentType.JSON);
assertTrue(esContainer.isRunning());
client.index(indexRequest, RequestOptions.DEFAULT);
var flowers = flowerService.findAll();
assertTrue(flowers.size() > 0);
DeleteRequest deleteRequest = new DeleteRequest("flowers", "doc", "1");
client.delete(deleteRequest, RequestOptions.DEFAULT);
}
}
よく覚えている場合は、次のコマンドを使用して公開ポートを要求できます。
esContainer.getMappedPort(ELASTICSEARCH_PORT);
Dockerコンテナーはランダムに使用可能なポートを公開するため、前述のコマンドと同様にポートを確認してください。そのポートをクライアントに使用します。興味があれば、私の同僚がサンプルコードを使ってこれに関するブログ投稿を書きました:https://amsterdam.luminis.eu/2018/08/20/elasticsearch-instances-for-integration-testing/
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加