@@ -143,4 +143,52 @@ public void testInsufficientMaxMessageSizeError() throws IOException {
143143 || e .getCause ().getMessage ().contains ("MaxMessageSize reached" ));
144144 }
145145 }
146+
147+ /**
148+ * The -1 sentinel must be honored as "use the default max message size",
149+ * not rejected as a non-positive value.
150+ */
151+ @ Test
152+ public void testReadAcceptsMinusOneAsDefaultMaxMessageSize () throws IOException {
153+ Configuration readConf = new Configuration ();
154+ readConf .setInt ("parquet.thrift.string.size.limit" , -1 );
155+ ParquetReadOptions options = HadoopReadOptions .builder (readConf ).build ();
156+
157+ try (ParquetFileReader reader =
158+ ParquetFileReader .open (HadoopInputFile .fromPath (TEST_FILE , readConf ), options )) {
159+ ParquetMetadata metadata = reader .getFooter ();
160+ assertNotNull (metadata );
161+ assertEquals (schema , metadata .getFileMetaData ().getSchema ());
162+ }
163+ }
164+
165+ @ Test
166+ public void testReadRejectsZeroMaxMessageSize () throws IOException {
167+ assertRejectsNonPositiveMaxMessageSize (0 );
168+ }
169+
170+ @ Test
171+ public void testReadRejectsInvalidNegativeMaxMessageSize () throws IOException {
172+ assertRejectsNonPositiveMaxMessageSize (-5 );
173+ }
174+
175+ private void assertRejectsNonPositiveMaxMessageSize (int maxMessageSize ) throws IOException {
176+ Configuration readConf = new Configuration ();
177+ readConf .setInt ("parquet.thrift.string.size.limit" , maxMessageSize );
178+ ParquetReadOptions options = HadoopReadOptions .builder (readConf ).build ();
179+
180+ try (ParquetFileReader reader =
181+ ParquetFileReader .open (HadoopInputFile .fromPath (TEST_FILE , readConf ), options )) {
182+ fail ("Expected failure for non-positive max message size: " + maxMessageSize );
183+ } catch (RuntimeException | IOException e ) {
184+ String message = e .getMessage () == null ? "" : e .getMessage ();
185+ String causeMessage = e .getCause () == null || e .getCause ().getMessage () == null
186+ ? ""
187+ : e .getCause ().getMessage ();
188+ assertTrue (
189+ "Expected 'Max message size must be positive' in " + message + " / " + causeMessage ,
190+ message .contains ("Max message size must be positive" )
191+ || causeMessage .contains ("Max message size must be positive" ));
192+ }
193+ }
146194}
0 commit comments