package com.inin.analytics; import static org.junit.Assert.*; import org.joda.time.LocalDate; import org.junit.Test; import com.google.gson.Gson; import com.inin.analytics.elasticsearch.index.rotation.ElasticSearchIndexMetadata; import com.inin.analytics.elasticsearch.index.routing.ElasticsearchRoutingStrategyV1; import com.inin.analytics.elasticsearch.util.GsonFactory; public class DateSerializerTest { @Test public void test() { ElasticSearchIndexMetadata indexMetadata = new ElasticSearchIndexMetadata(); indexMetadata.setDate(new LocalDate("2015-02-09")); indexMetadata.setIndexNameAtBirth("test"); indexMetadata.setNumShards(2); indexMetadata.setNumShardsPerOrg(3); indexMetadata.setRebuiltIndexAlias("alias"); indexMetadata.setRoutingStrategyClassName(ElasticsearchRoutingStrategyV1.class.getName()); Gson gson = GsonFactory.buildGsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); String json = gson.toJson(indexMetadata); assertEquals(json, "{\"indexNameAtBirth\":\"test\",\"rebuiltIndexAlias\":\"alias\",\"indexLocalDate\":\"2015-02-09\",\"numShards\":2,\"numShardsPerOrg\":3,\"routingStrategyClassName\":\"com.inin.analytics.elasticsearch.index.routing.ElasticsearchRoutingStrategyV1\"}"); ElasticSearchIndexMetadata indexMetadataDeserialized = gson.fromJson(json, ElasticSearchIndexMetadata.class); assertEquals(indexMetadata.getDate(), indexMetadataDeserialized.getDate()); assertEquals(indexMetadata.getIndexNameAtBirth(), indexMetadataDeserialized.getIndexNameAtBirth()); assertEquals(indexMetadata.getNumShards(), indexMetadataDeserialized.getNumShards()); assertEquals(indexMetadata.getNumShardsPerOrg(), indexMetadataDeserialized.getNumShardsPerOrg()); assertEquals(indexMetadata.getRebuiltIndexAlias(), indexMetadataDeserialized.getRebuiltIndexAlias()); assertEquals(indexMetadata.getRebuiltIndexName(), indexMetadataDeserialized.getRebuiltIndexName()); assertEquals(indexMetadata.getRoutingStrategyClassName(), indexMetadataDeserialized.getRoutingStrategyClassName()); } @Test public void testBackwardsCompatibility() { // We had a case where the indexDate was serialized wrong. This has since been fixed, but this test verifies that the indexDate is ignored and left null rather than blowing up on deserialize String oldJson = "\n" + "\n" + "{\n" + " \"indexNameAtBirth\": \"c141031\",\n" + " \"rebuiltIndexName\": \"c141031_build_399_20150206012509\",\n" + " \"rebuiltIndexAlias\": \"c141031r\",\n" + " \"indexDate\": {\n" + " \"iLocalMillis\": 1414713600000,\n" + " \"iChronology\": {\n" + " \"iBase\": {\n" + " \"iMinDaysInFirstWeek\": 4\n" + " }\n" + " }\n" + " },\n" + " \"numShards\": 5,\n" + " \"numShardsPerOrg\": 2,\n" + " \"routingStrategyClassName\": \"com.inin.analytics.elasticsearch.index.routing.ElasticsearchRoutingStrategyV1\"\n" + "}\n" + "\n" + ""; Gson gson = GsonFactory.buildGsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); ElasticSearchIndexMetadata indexMetadataDeserialized = gson.fromJson(oldJson, ElasticSearchIndexMetadata.class); assertNull(indexMetadataDeserialized.getDate()); assertEquals("c141031", indexMetadataDeserialized.getIndexNameAtBirth()); assertEquals(5, indexMetadataDeserialized.getNumShards()); assertEquals(2, indexMetadataDeserialized.getNumShardsPerOrg()); assertEquals("c141031r", indexMetadataDeserialized.getRebuiltIndexAlias()); assertEquals("c141031_build_399_20150206012509", indexMetadataDeserialized.getRebuiltIndexName()); assertEquals("com.inin.analytics.elasticsearch.index.routing.ElasticsearchRoutingStrategyV1", indexMetadataDeserialized.getRoutingStrategyClassName()); } @Test public void testMissingDate() { // We had a case where the indexDate was serialized wrong. This has since been fixed, but this test verifies that the indexDate is ignored and left null rather than blowing up on deserialize String oldJson = "\n" + "\n" + "{\n" + " \"indexNameAtBirth\": \"c141031\",\n" + " \"rebuiltIndexName\": \"c141031_build_399_20150206012509\",\n" + " \"rebuiltIndexAlias\": \"c141031r\",\n" + " \"numShards\": 5,\n" + " \"numShardsPerOrg\": 2,\n" + " \"routingStrategyClassName\": \"com.inin.analytics.elasticsearch.index.routing.ElasticsearchRoutingStrategyV1\"\n" + "}\n" + "\n" + ""; Gson gson = GsonFactory.buildGsonBuilder().excludeFieldsWithoutExposeAnnotation().create(); ElasticSearchIndexMetadata indexMetadataDeserialized = gson.fromJson(oldJson, ElasticSearchIndexMetadata.class); assertNull(indexMetadataDeserialized.getDate()); assertEquals("c141031", indexMetadataDeserialized.getIndexNameAtBirth()); assertEquals(5, indexMetadataDeserialized.getNumShards()); assertEquals(2, indexMetadataDeserialized.getNumShardsPerOrg()); assertEquals("c141031r", indexMetadataDeserialized.getRebuiltIndexAlias()); assertEquals("c141031_build_399_20150206012509", indexMetadataDeserialized.getRebuiltIndexName()); assertEquals("com.inin.analytics.elasticsearch.index.routing.ElasticsearchRoutingStrategyV1", indexMetadataDeserialized.getRoutingStrategyClassName()); } }