diff --git a/.gitignore b/.gitignore index b977b7b5b60c..2345a7bbbc12 100644 --- a/.gitignore +++ b/.gitignore @@ -13,3 +13,4 @@ node_modules node build cache/ +*.mmdb diff --git a/src/test/java/org/graylog/plugins/map/ConditionalRunner.java b/src/test/java/org/graylog/plugins/map/ConditionalRunner.java new file mode 100644 index 000000000000..c90264daa945 --- /dev/null +++ b/src/test/java/org/graylog/plugins/map/ConditionalRunner.java @@ -0,0 +1,84 @@ +package org.graylog.plugins.map; + +import org.junit.runners.BlockJUnit4ClassRunner; +import org.junit.runners.model.FrameworkMethod; +import org.junit.runners.model.InitializationError; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import java.util.stream.Stream; + +/** + * JUnit test runner based on {@link BlockJUnit4ClassRunner} that disables tests based on condition annotations. + *
+ * Supported conditions: + *
+ * Example: + *
{@code + * @literal @RunWith(ConditionalRunner.class) + * @literal @ResourceExistsCondition({"/file1.txt", "/file2.txt"}) + * public class GeoIpResolverEngineTest { + * @literal @Test + * @literal @ResourceExistsCondition("/file3.txt") + * public void test() { + * } + * } + * }+ */ +@Target({ElementType.METHOD, ElementType.TYPE}) +@Retention(RetentionPolicy.RUNTIME) +public @interface ResourceExistsCondition { + /** List of resources that must exist to run the tests. */ + String[] value(); +} + diff --git a/src/test/java/org/graylog/plugins/map/geoip/GeoIpResolverEngineTest.java b/src/test/java/org/graylog/plugins/map/geoip/GeoIpResolverEngineTest.java index 139a42645c79..47cb32667998 100644 --- a/src/test/java/org/graylog/plugins/map/geoip/GeoIpResolverEngineTest.java +++ b/src/test/java/org/graylog/plugins/map/geoip/GeoIpResolverEngineTest.java @@ -21,11 +21,14 @@ import com.eaio.uuid.UUID; import com.google.common.collect.Maps; import com.google.common.net.InetAddresses; +import org.graylog.plugins.map.ConditionalRunner; +import org.graylog.plugins.map.ResourceExistsCondition; import org.graylog.plugins.map.config.GeoIpResolverConfig; import org.graylog2.plugin.Message; import org.junit.After; import org.junit.Before; import org.junit.Test; +import org.junit.runner.RunWith; import java.net.URISyntaxException; import java.util.Map; @@ -37,7 +40,10 @@ import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; +@RunWith(ConditionalRunner.class) +@ResourceExistsCondition(GeoIpResolverEngineTest.GEO_LITE2_CITY_MMDB) public class GeoIpResolverEngineTest { + static final String GEO_LITE2_CITY_MMDB = "/GeoLite2-City.mmdb"; private MetricRegistry metricRegistry; private GeoIpResolverConfig config; @@ -55,7 +61,7 @@ public void tearDown() { } private String getTestDatabasePath() throws URISyntaxException { - return this.getClass().getResource("/GeoLite2-City.mmdb").toURI().getPath(); + return this.getClass().getResource(GEO_LITE2_CITY_MMDB).toURI().getPath(); } @Test diff --git a/src/test/java/org/graylog/plugins/map/geoip/MaxmindDataAdapterTest.java b/src/test/java/org/graylog/plugins/map/geoip/MaxmindDataAdapterTest.java index 3c15339f2aeb..6e8db2c18e4c 100644 --- a/src/test/java/org/graylog/plugins/map/geoip/MaxmindDataAdapterTest.java +++ b/src/test/java/org/graylog/plugins/map/geoip/MaxmindDataAdapterTest.java @@ -5,7 +5,8 @@ import com.maxmind.geoip2.DatabaseReader; import com.maxmind.geoip2.model.CityResponse; import com.maxmind.geoip2.model.CountryResponse; -import com.maxmind.geoip2.record.City; +import org.graylog.plugins.map.ConditionalRunner; +import org.graylog.plugins.map.ResourceExistsCondition; import org.graylog.plugins.map.config.DatabaseType; import org.graylog2.plugin.lookup.LookupResult; import org.junit.After; @@ -29,9 +30,12 @@ MaxmindDataAdapterTest.CountryDatabaseTest.class }) public class MaxmindDataAdapterTest { + private static final String GEO_LITE2_CITY_MMDB = "/GeoLite2-City.mmdb"; + private static final String GEO_LITE2_COUNTRY_MMDB = "/GeoLite2-Country.mmdb"; + private static final Map