From ca0ab227533e2ec6182c634155c51954fd717719 Mon Sep 17 00:00:00 2001 From: Przemko Robakowski Date: Thu, 11 Mar 2021 13:02:23 +0100 Subject: [PATCH] Make GeoIp tests more robust (#70305) This change modifies GeoIpDownloaderIT to wait in assertBusy despite of error (by wrapping whole body in try-catch) and adds additional assertion to debug failures tracked in #69594 # Conflicts: # modules/ingest-geoip/src/internalClusterTest/java/org/elasticsearch/ingest/geoip/GeoIpDownloaderIT.java --- .../ingest/geoip/GeoIpDownloaderIT.java | 58 ++++++++++--------- 1 file changed, 31 insertions(+), 27 deletions(-) diff --git a/modules/ingest-geoip/src/internalClusterTest/java/org/elasticsearch/ingest/geoip/GeoIpDownloaderIT.java b/modules/ingest-geoip/src/internalClusterTest/java/org/elasticsearch/ingest/geoip/GeoIpDownloaderIT.java index f6f640da7775b..98222a2124a18 100644 --- a/modules/ingest-geoip/src/internalClusterTest/java/org/elasticsearch/ingest/geoip/GeoIpDownloaderIT.java +++ b/modules/ingest-geoip/src/internalClusterTest/java/org/elasticsearch/ingest/geoip/GeoIpDownloaderIT.java @@ -76,7 +76,7 @@ protected Settings nodeSettings(int nodeOrdinal) { } @After - public void disableDownloader(){ + public void disableDownloader() { ClusterUpdateSettingsResponse settingsResponse = client().admin().cluster() .prepareUpdateSettings() .setPersistentSettings(Settings.builder().put(GeoIpDownloaderTaskExecutor.ENABLED_SETTING.getKey(), false)) @@ -98,43 +98,47 @@ public void testGeoIpDatabasesDownload() throws Exception { assertEquals(Set.of("GeoLite2-ASN.mmdb", "GeoLite2-City.mmdb", "GeoLite2-Country.mmdb"), state.getDatabases().keySet()); }, 2, TimeUnit.MINUTES); - GeoIpTaskState state = (GeoIpTaskState) getTask().getState(); for (String id : org.elasticsearch.common.collect.List.of("GeoLite2-ASN.mmdb", "GeoLite2-City.mmdb", "GeoLite2-Country.mmdb")) { assertBusy(() -> { - GeoIpTaskState.Metadata metadata = state.get(id); - BoolQueryBuilder queryBuilder = new BoolQueryBuilder() - .filter(new MatchQueryBuilder("name", id)) - .filter(new RangeQueryBuilder("chunk") - .from(metadata.getFirstChunk()) - .to(metadata.getLastChunk(), true)); - int size = metadata.getLastChunk() - metadata.getFirstChunk() + 1; - SearchResponse res = client().prepareSearch(GeoIpDownloader.DATABASES_INDEX) - .setSize(size) - .setQuery(queryBuilder) - .addSort("chunk", SortOrder.ASC) - .get(); - TotalHits totalHits = res.getHits().getTotalHits(); - assertEquals(TotalHits.Relation.EQUAL_TO, totalHits.relation); - assertEquals(size, totalHits.value); - assertEquals(size, res.getHits().getHits().length); + try { + GeoIpTaskState state = (GeoIpTaskState) getTask().getState(); + assertEquals(Set.of("GeoLite2-ASN.mmdb", "GeoLite2-City.mmdb", "GeoLite2-Country.mmdb"), state.getDatabases().keySet()); + GeoIpTaskState.Metadata metadata = state.get(id); + BoolQueryBuilder queryBuilder = new BoolQueryBuilder() + .filter(new MatchQueryBuilder("name", id)) + .filter(new RangeQueryBuilder("chunk") + .from(metadata.getFirstChunk()) + .to(metadata.getLastChunk(), true)); + int size = metadata.getLastChunk() - metadata.getFirstChunk() + 1; + SearchResponse res = client().prepareSearch(GeoIpDownloader.DATABASES_INDEX) + .setSize(size) + .setQuery(queryBuilder) + .addSort("chunk", SortOrder.ASC) + .get(); + TotalHits totalHits = res.getHits().getTotalHits(); + assertEquals(TotalHits.Relation.EQUAL_TO, totalHits.relation); + assertEquals(size, totalHits.value); + assertEquals(size, res.getHits().getHits().length); - List data = new ArrayList<>(); + List data = new ArrayList<>(); - for (SearchHit hit : res.getHits().getHits()) { - data.add((byte[]) hit.getSourceAsMap().get("data")); - } + for (SearchHit hit : res.getHits().getHits()) { + data.add((byte[]) hit.getSourceAsMap().get("data")); + } - GZIPInputStream stream = new GZIPInputStream(new MultiByteArrayInputStream(data)); - Path tempFile = createTempFile(); - try (OutputStream os = new BufferedOutputStream(Files.newOutputStream(tempFile, TRUNCATE_EXISTING, WRITE, CREATE))) { + GZIPInputStream stream = new GZIPInputStream(new MultiByteArrayInputStream(data)); + Path tempFile = createTempFile(); + try (OutputStream os = new BufferedOutputStream(Files.newOutputStream(tempFile, TRUNCATE_EXISTING, WRITE, CREATE))) { byte[] bytes = new byte[4096]; int read; while ((read = stream.read(bytes)) != -1) { os.write(bytes, 0, read); } + } + parseDatabase(tempFile); + } catch (Exception e) { + throw new AssertionError(e); } - - parseDatabase(tempFile); }); } }