Search in sources :

Example 1 with LookupService

use of io.divolte.server.ip2geo.LookupService in project divolte-collector by divolte.

the class DslRecordMapperTest method shouldMapAllGeoIpFields.

@Test
public void shouldMapAllGeoIpFields() throws IOException, InterruptedException, ClosedServiceException {
    /*
         * Have to work around not being able to create a HttpServerExchange a bit.
         * We setup a actual server just to do a request and capture the HttpServerExchange
         * instance. Then we setup a DslRecordMapper instance with a mock ip2geo lookup service,
         * we then use the previously captured exchange object against our locally created mapper
         * instance to test the ip2geo mapping (using the a mock lookup service).
         */
    setupServer("minimal-mapping.groovy");
    final EventPayload payload = request("http://www.example.com");
    final File geoMappingFile = File.createTempFile("geo-mapping", ".groovy");
    copyResourceToFile("geo-mapping.groovy", geoMappingFile);
    final ImmutableMap<String, Object> mappingConfig = ImmutableMap.of("divolte.mappings.test.mapping_script_file", geoMappingFile.getAbsolutePath(), "divolte.mappings.test.schema_file", avroFile.getAbsolutePath());
    final Config geoConfig = ConfigFactory.parseMap(mappingConfig).withFallback(ConfigFactory.parseResources("base-test-server.conf")).withFallback(ConfigFactory.parseResources("reference-test.conf"));
    final ValidatedConfiguration vc = new ValidatedConfiguration(() -> geoConfig);
    final CityResponse mockResponseWithEverything = loadFromClassPath("/city-response-with-everything.json", new TypeReference<CityResponse>() {
    });
    final Map<String, Object> expectedMapping = loadFromClassPath("/city-response-expected-mapping.json", new TypeReference<Map<String, Object>>() {
    });
    final LookupService mockLookupService = mock(LookupService.class);
    when(mockLookupService.lookup(any())).thenReturn(Optional.of(mockResponseWithEverything));
    final DslRecordMapper mapper = new DslRecordMapper(vc, geoMappingFile.getAbsolutePath(), new Schema.Parser().parse(Resources.toString(Resources.getResource("TestRecord.avsc"), StandardCharsets.UTF_8)), Optional.of(mockLookupService));
    final GenericRecord record = mapper.newRecordFromExchange(payload.event);
    // Validate the results.
    verify(mockLookupService).lookup(any());
    verifyNoMoreInteractions(mockLookupService);
    expectedMapping.forEach((k, v) -> {
        final Object recordValue = record.get(k);
        assertEquals("Property " + k + " not mapped correctly.", v, recordValue);
    });
    Files.delete(geoMappingFile.toPath());
}
Also used : DslRecordMapper(io.divolte.server.recordmapping.DslRecordMapper) Config(com.typesafe.config.Config) ValidatedConfiguration(io.divolte.server.config.ValidatedConfiguration) JsonParser(com.fasterxml.jackson.core.JsonParser) CityResponse(com.maxmind.geoip2.model.CityResponse) LookupService(io.divolte.server.ip2geo.LookupService) GenericRecord(org.apache.avro.generic.GenericRecord) Map(java.util.Map) ImmutableMap(com.google.common.collect.ImmutableMap) EventPayload(io.divolte.server.ServerTestUtils.EventPayload) Test(org.junit.Test)

Aggregations

JsonParser (com.fasterxml.jackson.core.JsonParser)1 ImmutableMap (com.google.common.collect.ImmutableMap)1 CityResponse (com.maxmind.geoip2.model.CityResponse)1 Config (com.typesafe.config.Config)1 EventPayload (io.divolte.server.ServerTestUtils.EventPayload)1 ValidatedConfiguration (io.divolte.server.config.ValidatedConfiguration)1 LookupService (io.divolte.server.ip2geo.LookupService)1 DslRecordMapper (io.divolte.server.recordmapping.DslRecordMapper)1 Map (java.util.Map)1 GenericRecord (org.apache.avro.generic.GenericRecord)1 Test (org.junit.Test)1