diff --git a/pom.xml b/pom.xml
index 231ddc555038..16a187f0d029 100644
--- a/pom.xml
+++ b/pom.xml
@@ -102,9 +102,21 @@
2.8.1
- org.testng
- testng
- 6.9.10
+ junit
+ junit
+ ${junit.version}
+ test
+
+
+ org.assertj
+ assertj-core
+ ${assertj-core.version}
+ test
+
+
+ org.mockito
+ mockito-core
+ ${mockito.version}
test
diff --git a/src/main/java/org/graylog/plugins/map/geoip/MaxmindDataAdapter.java b/src/main/java/org/graylog/plugins/map/geoip/MaxmindDataAdapter.java
index 2f29b38e159d..97c533646d95 100644
--- a/src/main/java/org/graylog/plugins/map/geoip/MaxmindDataAdapter.java
+++ b/src/main/java/org/graylog/plugins/map/geoip/MaxmindDataAdapter.java
@@ -6,8 +6,8 @@
import com.fasterxml.jackson.annotation.JsonTypeName;
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
import com.google.auto.value.AutoValue;
+import com.google.common.annotations.VisibleForTesting;
import com.google.common.collect.ArrayListMultimap;
-import com.google.common.collect.ImmutableMap;
import com.google.common.collect.Multimap;
import com.google.common.net.InetAddresses;
import com.google.inject.assistedinject.Assisted;
@@ -15,6 +15,8 @@
import com.maxmind.geoip2.exception.AddressNotFoundException;
import com.maxmind.geoip2.model.CityResponse;
import com.maxmind.geoip2.model.CountryResponse;
+import com.maxmind.geoip2.record.Country;
+import com.maxmind.geoip2.record.Location;
import org.graylog.autovalue.WithBeanGetter;
import org.graylog.plugins.map.config.DatabaseType;
import org.graylog2.plugin.lookup.LookupCachePurge;
@@ -36,6 +38,8 @@
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
+import java.util.HashMap;
+import java.util.Map;
import java.util.Optional;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicReference;
@@ -130,7 +134,7 @@ private DatabaseReader loadReader(File file) throws IOException {
@Override
protected LookupResult doGet(Object key) {
- InetAddress addr;
+ final InetAddress addr;
if (key instanceof InetAddress) {
addr = (InetAddress) key;
} else {
@@ -147,39 +151,60 @@ protected LookupResult doGet(Object key) {
case MAXMIND_CITY:
try {
final CityResponse city = reader.city(addr);
- final String singleValue = String.join(",", city.getLocation().getLatitude().toString(), city.getLocation().getLongitude().toString());
- final ImmutableMap.Builder