1212
1313import com .fasterxml .jackson .core .JsonParser ;
1414import com .fasterxml .jackson .databind .JsonNode ;
15+ import com .fasterxml .jackson .databind .node .JsonNodeType ;
1516import java .io .IOException ;
17+ import org .apache .logging .log4j .Level ;
18+ import org .apache .logging .log4j .LogManager ;
19+ import org .apache .logging .log4j .core .LoggerContext ;
20+ import org .apache .logging .log4j .core .config .Configuration ;
21+ import org .apache .logging .log4j .core .config .LoggerConfig ;
1622import org .junit .jupiter .api .Test ;
1723import org .opensearch .OpenSearchParseException ;
1824
@@ -28,4 +34,127 @@ public void testGetValueWithIOException() throws IOException {
2834 assertThrows (OpenSearchParseException .class , content ::geoValue );
2935 assertTrue (exception .getMessage ().contains ("error parsing geo point" ));
3036 }
37+
38+ @ Test
39+ public void testGeoValueWithIOExceptionAndDebugEnabled () throws IOException {
40+ LoggerContext ctx = (LoggerContext ) LogManager .getContext (false );
41+ Configuration config = ctx .getConfiguration ();
42+ LoggerConfig loggerConfig = config .getLoggerConfig (OpenSearchJsonContent .class .getName ());
43+ Level previousLevel = loggerConfig .getLevel ();
44+ loggerConfig .setLevel (Level .DEBUG );
45+ ctx .updateLoggers ();
46+ try {
47+ JsonNode jsonNode = mock (JsonNode .class );
48+ JsonParser jsonParser = mock (JsonParser .class );
49+ when (jsonNode .traverse ()).thenReturn (jsonParser );
50+ when (jsonParser .nextToken ()).thenThrow (new IOException ());
51+ OpenSearchJsonContent content = new OpenSearchJsonContent (jsonNode );
52+ assertThrows (OpenSearchParseException .class , content ::geoValue );
53+ } finally {
54+ loggerConfig .setLevel (previousLevel );
55+ ctx .updateLoggers ();
56+ }
57+ }
58+
59+ @ Test
60+ public void testLongValueWithInvalidNodeAndDebugEnabled () {
61+ LoggerContext ctx = (LoggerContext ) LogManager .getContext (false );
62+ Configuration config = ctx .getConfiguration ();
63+ LoggerConfig loggerConfig = config .getLoggerConfig (OpenSearchJsonContent .class .getName ());
64+ Level previousLevel = loggerConfig .getLevel ();
65+ loggerConfig .setLevel (Level .DEBUG );
66+ ctx .updateLoggers ();
67+ try {
68+ JsonNode jsonNode = mock (JsonNode .class );
69+ when (jsonNode .isNumber ()).thenReturn (false );
70+ when (jsonNode .isTextual ()).thenReturn (false );
71+ when (jsonNode .getNodeType ()).thenReturn (JsonNodeType .ARRAY );
72+ OpenSearchJsonContent content = new OpenSearchJsonContent (jsonNode );
73+ assertThrows (OpenSearchParseException .class , content ::longValue );
74+ } finally {
75+ loggerConfig .setLevel (previousLevel );
76+ ctx .updateLoggers ();
77+ }
78+ }
79+
80+ @ Test
81+ public void testDoubleValueWithInvalidNodeAndDebugEnabled () {
82+ LoggerContext ctx = (LoggerContext ) LogManager .getContext (false );
83+ Configuration config = ctx .getConfiguration ();
84+ LoggerConfig loggerConfig = config .getLoggerConfig (OpenSearchJsonContent .class .getName ());
85+ Level previousLevel = loggerConfig .getLevel ();
86+ loggerConfig .setLevel (Level .DEBUG );
87+ ctx .updateLoggers ();
88+ try {
89+ JsonNode jsonNode = mock (JsonNode .class );
90+ when (jsonNode .isNumber ()).thenReturn (false );
91+ when (jsonNode .isTextual ()).thenReturn (false );
92+ when (jsonNode .getNodeType ()).thenReturn (JsonNodeType .OBJECT );
93+ OpenSearchJsonContent content = new OpenSearchJsonContent (jsonNode );
94+ assertThrows (OpenSearchParseException .class , content ::doubleValue );
95+ } finally {
96+ loggerConfig .setLevel (previousLevel );
97+ ctx .updateLoggers ();
98+ }
99+ }
100+
101+ @ Test
102+ public void testBooleanValueWithInvalidNodeAndDebugEnabled () {
103+ LoggerContext ctx = (LoggerContext ) LogManager .getContext (false );
104+ Configuration config = ctx .getConfiguration ();
105+ LoggerConfig loggerConfig = config .getLoggerConfig (OpenSearchJsonContent .class .getName ());
106+ Level previousLevel = loggerConfig .getLevel ();
107+ loggerConfig .setLevel (Level .DEBUG );
108+ ctx .updateLoggers ();
109+ try {
110+ JsonNode jsonNode = mock (JsonNode .class );
111+ when (jsonNode .isBoolean ()).thenReturn (false );
112+ when (jsonNode .isTextual ()).thenReturn (false );
113+ when (jsonNode .getNodeType ()).thenReturn (JsonNodeType .ARRAY );
114+ OpenSearchJsonContent content = new OpenSearchJsonContent (jsonNode );
115+ assertThrows (OpenSearchParseException .class , content ::booleanValue );
116+ } finally {
117+ loggerConfig .setLevel (previousLevel );
118+ ctx .updateLoggers ();
119+ }
120+ }
121+
122+ @ Test
123+ public void testLongValueWithInvalidNode () {
124+ JsonNode jsonNode = mock (JsonNode .class );
125+ when (jsonNode .isNumber ()).thenReturn (false );
126+ when (jsonNode .isTextual ()).thenReturn (false );
127+ when (jsonNode .getNodeType ()).thenReturn (JsonNodeType .ARRAY );
128+ OpenSearchJsonContent content = new OpenSearchJsonContent (jsonNode );
129+ OpenSearchParseException exception =
130+ assertThrows (OpenSearchParseException .class , content ::longValue );
131+ assertTrue (exception .getMessage ().contains ("node must be a number" ));
132+ assertTrue (exception .getMessage ().contains ("ARRAY" ));
133+ }
134+
135+ @ Test
136+ public void testDoubleValueWithInvalidNode () {
137+ JsonNode jsonNode = mock (JsonNode .class );
138+ when (jsonNode .isNumber ()).thenReturn (false );
139+ when (jsonNode .isTextual ()).thenReturn (false );
140+ when (jsonNode .getNodeType ()).thenReturn (JsonNodeType .OBJECT );
141+ OpenSearchJsonContent content = new OpenSearchJsonContent (jsonNode );
142+ OpenSearchParseException exception =
143+ assertThrows (OpenSearchParseException .class , content ::doubleValue );
144+ assertTrue (exception .getMessage ().contains ("node must be a number" ));
145+ assertTrue (exception .getMessage ().contains ("OBJECT" ));
146+ }
147+
148+ @ Test
149+ public void testBooleanValueWithInvalidNode () {
150+ JsonNode jsonNode = mock (JsonNode .class );
151+ when (jsonNode .isBoolean ()).thenReturn (false );
152+ when (jsonNode .isTextual ()).thenReturn (false );
153+ when (jsonNode .getNodeType ()).thenReturn (JsonNodeType .ARRAY );
154+ OpenSearchJsonContent content = new OpenSearchJsonContent (jsonNode );
155+ OpenSearchParseException exception =
156+ assertThrows (OpenSearchParseException .class , content ::booleanValue );
157+ assertTrue (exception .getMessage ().contains ("node must be a boolean" ));
158+ assertTrue (exception .getMessage ().contains ("ARRAY" ));
159+ }
31160}
0 commit comments