@Test public void test_verbosenessSettings() { final List<Object> l_true = Arrays.asList(1, "1", "true", true, "TRUE", "True"); final List<Object> l_false = Arrays.asList(0, "0", "false", false, "FALSE", "False"); for (Object o : l_true) { final DataSchemaBean.SearchIndexSchemaBean s = BeanTemplateUtils.build(DataSchemaBean.SearchIndexSchemaBean.class) .with( DataSchemaBean.SearchIndexSchemaBean::technology_override_schema, ImmutableMap.builder().put("verbose", o).build()) .done() .get(); assertEquals(true, ElasticsearchIndexService.is_verbose(s)); } for (Object o : l_false) { final DataSchemaBean.SearchIndexSchemaBean s = BeanTemplateUtils.build(DataSchemaBean.SearchIndexSchemaBean.class) .with( DataSchemaBean.SearchIndexSchemaBean::technology_override_schema, ImmutableMap.builder().put("verbose", o).build()) .done() .get(); assertEquals(false, ElasticsearchIndexService.is_verbose(s)); } // (not present) { final DataSchemaBean.SearchIndexSchemaBean s = BeanTemplateUtils.build(DataSchemaBean.SearchIndexSchemaBean.class) .with( DataSchemaBean.SearchIndexSchemaBean::technology_override_schema, ImmutableMap.builder().build()) .done() .get(); assertEquals(false, ElasticsearchIndexService.is_verbose(s)); } { final DataSchemaBean.SearchIndexSchemaBean s = BeanTemplateUtils.build(DataSchemaBean.SearchIndexSchemaBean.class).done().get(); assertEquals(false, ElasticsearchIndexService.is_verbose(s)); } }
@Test public void test_indexCreation() throws IOException { final Calendar time_setter = GregorianCalendar.getInstance(); time_setter.set(2015, 1, 1, 13, 0, 0); final String bucket_str = Resources.toString( Resources.getResource( "com/ikanow/aleph2/search_service/elasticsearch/services/test_bucket_validate_success.json"), Charsets.UTF_8); final DataBucketBean bucket = BeanTemplateUtils.build(bucket_str, DataBucketBean.class) .with("modified", time_setter.getTime()) .done() .get(); final String mapping_str = Resources.toString( Resources.getResource( "com/ikanow/aleph2/search_service/elasticsearch/services/test_verbose_mapping_validate_results.json"), Charsets.UTF_8); final JsonNode mapping_json = _mapper.readTree(mapping_str.getBytes()); final String template_name = ElasticsearchIndexUtils.getBaseIndexName(bucket); try { _crud_factory .getClient() .admin() .indices() .prepareDeleteTemplate(template_name) .execute() .actionGet(); } catch (Exception e) { } // (This is fine, just means it doesn't exist) // Create index template from empty { final GetIndexTemplatesRequest gt = new GetIndexTemplatesRequest().names(template_name); final GetIndexTemplatesResponse gtr = _crud_factory.getClient().admin().indices().getTemplates(gt).actionGet(); assertTrue("No templates to start with", gtr.getIndexTemplates().isEmpty()); _index_service.handlePotentiallyNewIndex( bucket, Optional.empty(), ElasticsearchIndexConfigUtils.buildConfigBeanFromSchema(bucket, _config_bean, _mapper), "_default_"); final GetIndexTemplatesRequest gt2 = new GetIndexTemplatesRequest().names(template_name); final GetIndexTemplatesResponse gtr2 = _crud_factory.getClient().admin().indices().getTemplates(gt2).actionGet(); assertEquals(1, _index_service._bucket_template_cache.size()); assertEquals(1, gtr2.getIndexTemplates().size()); assertTrue( "Mappings should be equivalent", ElasticsearchIndexService.mappingsAreEquivalent( gtr2.getIndexTemplates().get(0), mapping_json, _mapper)); } // Check is ignored subsequently (same date, same content; same date, different content) { _index_service.handlePotentiallyNewIndex( bucket, Optional.empty(), ElasticsearchIndexConfigUtils.buildConfigBeanFromSchema(bucket, _config_bean, _mapper), "_default_"); final GetIndexTemplatesRequest gt2 = new GetIndexTemplatesRequest().names(template_name); final GetIndexTemplatesResponse gtr2 = _crud_factory.getClient().admin().indices().getTemplates(gt2).actionGet(); assertEquals(1, _index_service._bucket_template_cache.size()); assertEquals(1, gtr2.getIndexTemplates().size()); } // Check is checked-but-left if time updated, content not { time_setter.set(2015, 1, 1, 14, 0, 0); final Date next_time = time_setter.getTime(); final DataBucketBean bucket2 = BeanTemplateUtils.clone(bucket).with("modified", next_time).done(); _index_service.handlePotentiallyNewIndex( bucket2, Optional.empty(), ElasticsearchIndexConfigUtils.buildConfigBeanFromSchema(bucket2, _config_bean, _mapper), "_default_"); final GetIndexTemplatesRequest gt2 = new GetIndexTemplatesRequest().names(template_name); final GetIndexTemplatesResponse gtr2 = _crud_factory.getClient().admin().indices().getTemplates(gt2).actionGet(); assertEquals(1, _index_service._bucket_template_cache.size()); assertEquals(next_time, _index_service._bucket_template_cache.get(bucket._id())); assertEquals(1, gtr2.getIndexTemplates().size()); } // Check is updated if time-and-content is different { time_setter.set(2015, 1, 1, 15, 0, 0); final String bucket_str2 = Resources.toString( Resources.getResource( "com/ikanow/aleph2/search_service/elasticsearch/services/test_bucket2_validate_success.json"), Charsets.UTF_8); final DataBucketBean bucket2 = BeanTemplateUtils.build(bucket_str2, DataBucketBean.class) .with("modified", time_setter.getTime()) .done() .get(); _index_service.handlePotentiallyNewIndex( bucket2, Optional.empty(), ElasticsearchIndexConfigUtils.buildConfigBeanFromSchema(bucket2, _config_bean, _mapper), "_default_"); final GetIndexTemplatesRequest gt2 = new GetIndexTemplatesRequest().names(template_name); final GetIndexTemplatesResponse gtr2 = _crud_factory.getClient().admin().indices().getTemplates(gt2).actionGet(); assertEquals(1, _index_service._bucket_template_cache.size()); assertEquals(time_setter.getTime(), _index_service._bucket_template_cache.get(bucket._id())); assertEquals(1, gtr2.getIndexTemplates().size()); assertFalse( ElasticsearchIndexService.mappingsAreEquivalent( gtr2.getIndexTemplates().get(0), mapping_json, _mapper)); // has changed } // Check if mapping is deleted then next time bucket modified is updated then the mapping is // recreated { _crud_factory .getClient() .admin() .indices() .prepareDeleteTemplate(template_name) .execute() .actionGet(); // (check with old date) final GetIndexTemplatesRequest gt = new GetIndexTemplatesRequest().names(template_name); final GetIndexTemplatesResponse gtr = _crud_factory.getClient().admin().indices().getTemplates(gt).actionGet(); assertTrue("No templates to start with", gtr.getIndexTemplates().isEmpty()); { _index_service.handlePotentiallyNewIndex( bucket, Optional.empty(), ElasticsearchIndexConfigUtils.buildConfigBeanFromSchema(bucket, _config_bean, _mapper), "_default_"); final GetIndexTemplatesRequest gt2 = new GetIndexTemplatesRequest().names(template_name); final GetIndexTemplatesResponse gtr2 = _crud_factory.getClient().admin().indices().getTemplates(gt2).actionGet(); assertTrue("Initially no change", gtr2.getIndexTemplates().isEmpty()); } // Update date and retry { time_setter.set(2015, 1, 1, 16, 0, 0); final Date next_time = time_setter.getTime(); final DataBucketBean bucket2 = BeanTemplateUtils.clone(bucket).with("modified", next_time).done(); _index_service.handlePotentiallyNewIndex( bucket2, Optional.empty(), ElasticsearchIndexConfigUtils.buildConfigBeanFromSchema(bucket2, _config_bean, _mapper), "_default_"); final GetIndexTemplatesRequest gt2 = new GetIndexTemplatesRequest().names(template_name); final GetIndexTemplatesResponse gtr2 = _crud_factory.getClient().admin().indices().getTemplates(gt2).actionGet(); assertEquals(1, _index_service._bucket_template_cache.size()); assertEquals(1, gtr2.getIndexTemplates().size()); assertTrue( "Mappings should be equivalent", ElasticsearchIndexService.mappingsAreEquivalent( gtr2.getIndexTemplates().get(0), mapping_json, _mapper)); } } }