Skip to content

Commit d759498

Browse files
Improve test coverage
Signed-off-by: Bruce Hong <[email protected]>
1 parent 528e8ac commit d759498

File tree

1 file changed

+308
-0
lines changed

1 file changed

+308
-0
lines changed

server/src/test/java/org/opensearch/index/mapper/DocumentParserTests.java

Lines changed: 308 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2274,4 +2274,312 @@ public void testDynamicFalseAllowTemplatesDottedFieldNameObject() throws Excepti
22742274
assertEquals(2, docWithTemplate.rootDoc().getFields("foo.bar.baz.a").length);
22752275
}
22762276

2277+
public void testDynamicFalseAllowTemplatesWithEmbeddedObject() throws Exception {
2278+
DocumentMapper mapper = createDocumentMapper(topMapping(b -> b.field("dynamic", "false_allow_templates")));
2279+
ParsedDocument doc = mapper.parse(source(b -> b.field("embedded_field", "value")));
2280+
assertEquals(0, doc.rootDoc().getFields("embedded_field").length);
2281+
2282+
DocumentMapper mapperWithTemplate = createDocumentMapper(topMapping(b -> {
2283+
b.field("dynamic", "false_allow_templates");
2284+
b.startArray("dynamic_templates");
2285+
{
2286+
b.startObject();
2287+
{
2288+
b.startObject("embedded_template");
2289+
{
2290+
b.field("match", "embedded_*");
2291+
b.field("match_mapping_type", "string");
2292+
b.startObject("mapping").field("type", "keyword").endObject();
2293+
}
2294+
b.endObject();
2295+
}
2296+
b.endObject();
2297+
}
2298+
b.endArray();
2299+
}));
2300+
ParsedDocument docWithTemplate = mapperWithTemplate.parse(source(b -> b.field("embedded_field", "value")));
2301+
assertEquals(2, docWithTemplate.rootDoc().getFields("embedded_field").length);
2302+
}
2303+
2304+
public void testDynamicFalseAllowTemplatesWithDateDetection() throws Exception {
2305+
DocumentMapper mapper = createDocumentMapper(topMapping(b -> {
2306+
b.field("dynamic", "false_allow_templates");
2307+
b.startArray("dynamic_date_formats").value("yyyy-MM-dd").endArray();
2308+
}));
2309+
ParsedDocument doc = mapper.parse(source(b -> b.field("date_field", "2023-12-25")));
2310+
assertEquals(0, doc.rootDoc().getFields("date_field").length);
2311+
2312+
DocumentMapper mapperWithTemplate = createDocumentMapper(topMapping(b -> {
2313+
b.field("dynamic", "false_allow_templates");
2314+
b.startArray("dynamic_date_formats").value("yyyy-MM-dd").endArray();
2315+
b.startArray("dynamic_templates");
2316+
{
2317+
b.startObject();
2318+
{
2319+
b.startObject("date_template");
2320+
{
2321+
b.field("match", "date_*");
2322+
b.field("match_mapping_type", "date");
2323+
b.startObject("mapping").field("type", "date").endObject();
2324+
}
2325+
b.endObject();
2326+
}
2327+
b.endObject();
2328+
}
2329+
b.endArray();
2330+
}));
2331+
ParsedDocument docWithTemplate = mapperWithTemplate.parse(source(b -> b.field("date_field", "2023-12-25")));
2332+
assertEquals(2, docWithTemplate.rootDoc().getFields("date_field").length);
2333+
}
2334+
2335+
public void testDynamicFalseAllowTemplatesWithNumericDetection() throws Exception {
2336+
DocumentMapper mapper = createDocumentMapper(topMapping(b -> b.field("dynamic", "false_allow_templates")));
2337+
ParsedDocument doc = mapper.parse(source(b -> b.field("numeric_field", "123")));
2338+
assertEquals(0, doc.rootDoc().getFields("numeric_field").length);
2339+
2340+
DocumentMapper mapperWithTemplate = createDocumentMapper(topMapping(b -> {
2341+
b.field("dynamic", "false_allow_templates");
2342+
b.startArray("dynamic_templates");
2343+
{
2344+
b.startObject();
2345+
{
2346+
b.startObject("numeric_template");
2347+
{
2348+
b.field("match", "numeric_*");
2349+
b.field("match_mapping_type", "long");
2350+
b.startObject("mapping").field("type", "long").endObject();
2351+
}
2352+
b.endObject();
2353+
}
2354+
b.endObject();
2355+
}
2356+
b.endArray();
2357+
}));
2358+
ParsedDocument docWithTemplate = mapperWithTemplate.parse(source(b -> b.field("numeric_field", "123")));
2359+
assertEquals(0, docWithTemplate.rootDoc().getFields("numeric_field").length);
2360+
}
2361+
2362+
public void testDynamicFalseAllowTemplatesWithFloatDetection() throws Exception {
2363+
DocumentMapper mapper = createDocumentMapper(topMapping(b -> b.field("dynamic", "false_allow_templates")));
2364+
ParsedDocument doc = mapper.parse(source(b -> b.field("float_field", "123.45")));
2365+
assertEquals(0, doc.rootDoc().getFields("float_field").length);
2366+
2367+
DocumentMapper mapperWithTemplate = createDocumentMapper(topMapping(b -> {
2368+
b.field("dynamic", "false_allow_templates");
2369+
b.startArray("dynamic_templates");
2370+
{
2371+
b.startObject();
2372+
{
2373+
b.startObject("float_template");
2374+
{
2375+
b.field("match", "float_*");
2376+
b.field("match_mapping_type", "double");
2377+
b.startObject("mapping").field("type", "float").endObject();
2378+
}
2379+
b.endObject();
2380+
}
2381+
b.endObject();
2382+
}
2383+
b.endArray();
2384+
}));
2385+
ParsedDocument docWithTemplate = mapperWithTemplate.parse(source(b -> b.field("float_field", "123.45")));
2386+
assertEquals(0, docWithTemplate.rootDoc().getFields("float_field").length);
2387+
}
2388+
2389+
public void testDynamicFalseAllowTemplatesWithBooleanDetection() throws Exception {
2390+
DocumentMapper mapper = createDocumentMapper(topMapping(b -> b.field("dynamic", "false_allow_templates")));
2391+
ParsedDocument doc = mapper.parse(source(b -> b.field("bool_field", true)));
2392+
assertEquals(0, doc.rootDoc().getFields("bool_field").length);
2393+
2394+
DocumentMapper mapperWithTemplate = createDocumentMapper(topMapping(b -> {
2395+
b.field("dynamic", "false_allow_templates");
2396+
b.startArray("dynamic_templates");
2397+
{
2398+
b.startObject();
2399+
{
2400+
b.startObject("boolean_template");
2401+
{
2402+
b.field("match", "bool_*");
2403+
b.field("match_mapping_type", "boolean");
2404+
b.startObject("mapping").field("type", "boolean").endObject();
2405+
}
2406+
b.endObject();
2407+
}
2408+
b.endObject();
2409+
}
2410+
b.endArray();
2411+
}));
2412+
ParsedDocument docWithTemplate = mapperWithTemplate.parse(source(b -> b.field("bool_field", true)));
2413+
assertEquals(2, docWithTemplate.rootDoc().getFields("bool_field").length);
2414+
}
2415+
2416+
public void testDynamicFalseAllowTemplatesWithBigInteger() throws Exception {
2417+
DocumentMapper mapper = createDocumentMapper(topMapping(b -> b.field("dynamic", "false_allow_templates")));
2418+
BigInteger bigInt = BigInteger.valueOf(Long.MAX_VALUE).add(BigInteger.ONE);
2419+
ParsedDocument doc = mapper.parse(source(b -> b.field("bigint_field", bigInt)));
2420+
assertEquals(0, doc.rootDoc().getFields("bigint_field").length);
2421+
2422+
DocumentMapper mapperWithTemplate = createDocumentMapper(topMapping(b -> {
2423+
b.field("dynamic", "false_allow_templates");
2424+
b.startArray("dynamic_templates");
2425+
{
2426+
b.startObject();
2427+
{
2428+
b.startObject("bigint_template");
2429+
{
2430+
b.field("match", "bigint_*");
2431+
b.field("match_mapping_type", "long");
2432+
b.startObject("mapping").field("type", "keyword").endObject();
2433+
}
2434+
b.endObject();
2435+
}
2436+
b.endObject();
2437+
}
2438+
b.endArray();
2439+
}));
2440+
ParsedDocument docWithTemplate = mapperWithTemplate.parse(source(b -> b.field("bigint_field", bigInt)));
2441+
assertEquals(2, docWithTemplate.rootDoc().getFields("bigint_field").length);
2442+
}
2443+
2444+
public void testDynamicFalseAllowTemplatesWithBigDecimal() throws Exception {
2445+
DocumentMapper mapper = createDocumentMapper(topMapping(b -> b.field("dynamic", "false_allow_templates")));
2446+
BigDecimal bigDecimal = BigDecimal.valueOf(Double.MAX_VALUE).add(BigDecimal.valueOf(10.1));
2447+
ParsedDocument doc = mapper.parse(source(b -> b.field("bigdecimal_field", bigDecimal)));
2448+
assertEquals(0, doc.rootDoc().getFields("bigdecimal_field").length);
2449+
2450+
DocumentMapper mapperWithTemplate = createDocumentMapper(topMapping(b -> {
2451+
b.field("dynamic", "false_allow_templates");
2452+
b.startArray("dynamic_templates");
2453+
{
2454+
b.startObject();
2455+
{
2456+
b.startObject("bigdecimal_template");
2457+
{
2458+
b.field("match", "bigdecimal_*");
2459+
b.field("match_mapping_type", "double");
2460+
b.startObject("mapping").field("type", "keyword").endObject();
2461+
}
2462+
b.endObject();
2463+
}
2464+
b.endObject();
2465+
}
2466+
b.endArray();
2467+
}));
2468+
ParsedDocument docWithTemplate = mapperWithTemplate.parse(source(b -> b.field("bigdecimal_field", bigDecimal)));
2469+
assertEquals(2, docWithTemplate.rootDoc().getFields("bigdecimal_field").length);
2470+
}
2471+
2472+
public void testDynamicFalseAllowTemplatesWithCopyTo() throws Exception {
2473+
DocumentMapper mapperWithDynamic = createDocumentMapper(topMapping(b -> {
2474+
b.field("dynamic", "false_allow_templates");
2475+
b.startArray("dynamic_templates");
2476+
{
2477+
b.startObject();
2478+
{
2479+
b.startObject("target_template");
2480+
{
2481+
b.field("match", "target_*");
2482+
b.field("match_mapping_type", "string");
2483+
b.startObject("mapping").field("type", "keyword").endObject();
2484+
}
2485+
b.endObject();
2486+
}
2487+
b.endObject();
2488+
}
2489+
b.endArray();
2490+
}));
2491+
2492+
MapperService mapperService = createMapperService(mapping(b -> {
2493+
b.startObject("source_field");
2494+
{
2495+
b.field("type", "text");
2496+
b.field("copy_to", "target_field");
2497+
}
2498+
b.endObject();
2499+
}));
2500+
2501+
ParsedDocument parsedDoc = mapperWithDynamic.parse(source(b -> b.field("source_field", "test value")));
2502+
if (parsedDoc.dynamicMappingsUpdate() != null) {
2503+
merge(mapperService, dynamicMapping(parsedDoc.dynamicMappingsUpdate()));
2504+
}
2505+
2506+
ParsedDocument doc = mapperService.documentMapper().parse(source(b -> b.field("source_field", "test value")));
2507+
assertEquals(1, doc.rootDoc().getFields("source_field").length);
2508+
assertEquals(1, doc.rootDoc().getFields("target_field").length);
2509+
}
2510+
2511+
public void testDynamicFalseAllowTemplatesWithNestedCopyTo() throws Exception {
2512+
DocumentMapper mapperWithDynamic = createDocumentMapper(topMapping(b -> {
2513+
b.field("dynamic", "false_allow_templates");
2514+
b.startArray("dynamic_templates");
2515+
{
2516+
b.startObject();
2517+
{
2518+
b.startObject("nested_template");
2519+
{
2520+
b.field("match", "nested");
2521+
b.field("match_mapping_type", "object");
2522+
b.startObject("mapping").field("type", "object").endObject();
2523+
}
2524+
b.endObject();
2525+
}
2526+
b.endObject();
2527+
}
2528+
{
2529+
b.startObject();
2530+
{
2531+
b.startObject("target_template");
2532+
{
2533+
b.field("match", "target_*");
2534+
b.field("match_mapping_type", "string");
2535+
b.startObject("mapping").field("type", "keyword").endObject();
2536+
}
2537+
b.endObject();
2538+
}
2539+
b.endObject();
2540+
}
2541+
b.endArray();
2542+
}));
2543+
2544+
MapperService mapperService = createMapperService(mapping(b -> {
2545+
b.startObject("nested");
2546+
{
2547+
b.field("type", "object");
2548+
b.startObject("properties");
2549+
{
2550+
b.startObject("source_field");
2551+
{
2552+
b.field("type", "text");
2553+
b.field("copy_to", "nested.target_field");
2554+
}
2555+
b.endObject();
2556+
}
2557+
b.endObject();
2558+
}
2559+
b.endObject();
2560+
}));
2561+
2562+
ParsedDocument parsedDoc = mapperWithDynamic.parse(source(b -> {
2563+
b.startObject("nested");
2564+
{
2565+
b.field("source_field", "test value");
2566+
}
2567+
b.endObject();
2568+
}));
2569+
if (parsedDoc.dynamicMappingsUpdate() != null) {
2570+
merge(mapperService, dynamicMapping(parsedDoc.dynamicMappingsUpdate()));
2571+
}
2572+
2573+
ParsedDocument doc = mapperService.documentMapper().parse(source(b -> {
2574+
b.startObject("nested");
2575+
{
2576+
b.field("source_field", "test value");
2577+
}
2578+
b.endObject();
2579+
}));
2580+
assertEquals(1, doc.rootDoc().getFields("nested.source_field").length);
2581+
// Copying to a field that is not in the mapping should not create a field in the document
2582+
assertEquals(0, doc.rootDoc().getFields("nested.target_field").length);
2583+
}
2584+
22772585
}

0 commit comments

Comments
 (0)