/* * Copyright 2013 Netflix, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.netflix.suro.sink.remotefile; import com.fasterxml.jackson.core.type.TypeReference; import com.fasterxml.jackson.databind.ObjectMapper; import com.google.inject.AbstractModule; import com.google.inject.Guice; import com.google.inject.Injector; import com.google.inject.name.Names; import com.netflix.config.ConfigurationManager; import com.netflix.suro.jackson.DefaultObjectMapper; import org.joda.time.DateTime; import org.joda.time.format.DateTimeFormat; import org.joda.time.format.DateTimeFormatter; import org.junit.Test; import java.io.IOException; import static org.junit.Assert.assertEquals; public class TestPrefixFormatter { private static Injector injector = Guice.createInjector( new SuroSinkPlugin(), new AbstractModule() { @Override protected void configure() { bind(ObjectMapper.class).to(DefaultObjectMapper.class); bind(String.class).annotatedWith(Names.named("region")).toInstance("eu-west-1"); bind(String.class).annotatedWith(Names.named("stack")).toInstance("gps"); } } ); @Test public void testDynamicStatic() throws IOException { String spec = "{\n" + " \"type\": \"dynamic\",\n" + " \"format\": \"static(prefix)\"\n" + "}"; ObjectMapper mapper = injector.getInstance(ObjectMapper.class); RemotePrefixFormatter formatter = mapper.readValue(spec, new TypeReference<RemotePrefixFormatter>(){}); assertEquals(formatter.get(), "prefix/"); } @Test public void testDynamicDate() throws IOException { String spec = "{\n" + " \"type\": \"dynamic\",\n" + " \"format\": \"date(YYYYMMDD)\"\n" + "}"; ObjectMapper mapper = injector.getInstance(ObjectMapper.class); RemotePrefixFormatter formatter = mapper.readValue(spec, new TypeReference<RemotePrefixFormatter>(){}); DateTimeFormatter format = DateTimeFormat.forPattern("YYYYMMDD"); assertEquals(formatter.get(), format.print(new DateTime()) + "/"); } @Test public void testDynamicProperty() throws IOException { String spec = "{\n" + " \"type\": \"dynamic\",\n" + " \"format\": \"property(prop1)\"\n" + "}"; ConfigurationManager.getConfigInstance().setProperty("prop1", "prop1"); ObjectMapper mapper = injector.getInstance(ObjectMapper.class); RemotePrefixFormatter formatter = mapper.readValue(spec, new TypeReference<RemotePrefixFormatter>(){}); assertEquals(formatter.get(), "prop1/"); } @Test public void testDynamicCombination() throws IOException { String spec = "{\n" + " \"type\": \"dynamic\",\n" + " \"format\": \"static(routing_key);date(YYYYMMDD);property(prop1)\"\n" + "}"; ConfigurationManager.getConfigInstance().setProperty("prop1", "propvalue1"); DateTimeFormatter format = DateTimeFormat.forPattern("YYYYMMDD"); ObjectMapper mapper = injector.getInstance(ObjectMapper.class); RemotePrefixFormatter formatter = mapper.readValue(spec, new TypeReference<RemotePrefixFormatter>(){}); assertEquals(formatter.get(), "routing_key/" + format.print(new DateTime()) + "/propvalue1/"); } @Test public void testInjectedDateRegionStack() throws IOException { String spec = "{\n" + " \"type\": \"DateRegionStack\",\n" + " \"date\": \"YYYYMMDD\"\n" + "}"; ObjectMapper mapper = injector.getInstance(ObjectMapper.class); RemotePrefixFormatter formatter = mapper.readValue(spec, new TypeReference<RemotePrefixFormatter>() {}); DateTimeFormatter format = DateTimeFormat.forPattern("YYYYMMDD"); String answer = String.format("%s/eu-west-1/gps/", format.print(new DateTime())); assertEquals(formatter.get(), answer); } @Test public void testDateRegionStack() throws IOException { String spec = "{\n" + " \"type\": \"DateRegionStack\",\n" + " \"date\": \"YYYYMMDD\",\n" + " \"region\": \"us-east-1\",\n" + " \"stack\": \"normal\"\n" + "}"; ObjectMapper mapper = injector.getInstance(ObjectMapper.class); RemotePrefixFormatter formatter = mapper.readValue(spec, new TypeReference<RemotePrefixFormatter>() {}); DateTimeFormatter format = DateTimeFormat.forPattern("YYYYMMDD"); String answer = String.format("%s/us-east-1/normal/", format.print(new DateTime())); assertEquals(formatter.get(), answer); } }