diff options
Diffstat (limited to 'java')
-rw-r--r-- | java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java | 369 |
1 files changed, 184 insertions, 185 deletions
diff --git a/java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java b/java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java index 03593413..37fa242d 100644 --- a/java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java +++ b/java/core/src/test/java/com/google/protobuf/ParseExceptionsTest.java @@ -24,189 +24,188 @@ import static org.junit.Assert.fail; */ public class ParseExceptionsTest { -// disable for now for update the maven local repo. -// private interface ParseTester { -// DescriptorProto parse(InputStream in) throws IOException; -// } -// -// private byte serializedProto[]; -// -// private void setup() { -// serializedProto = DescriptorProto.getDescriptor().toProto().toByteArray(); -// } -// -// private void setupDelimited() { -// ByteArrayOutputStream bos = new ByteArrayOutputStream(); -// try { -// DescriptorProto.getDescriptor().toProto().writeDelimitedTo(bos); -// } catch (IOException e) { -// fail("Exception not expected: " + e); -// } -// serializedProto = bos.toByteArray(); -// } -// -// @Test public void message_parseFrom_InputStream() { -// setup(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.parseFrom(in); -// } -// }); -// } -// -// @Test public void message_parseFrom_InputStreamAndExtensionRegistry() { -// setup(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.parseFrom(in, ExtensionRegistry.newInstance()); -// } -// }); -// } -// -// @Test public void message_parseFrom_CodedInputStream() { -// setup(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.parseFrom(CodedInputStream.newInstance(in)); -// } -// }); -// } -// -// @Test public void message_parseFrom_CodedInputStreamAndExtensionRegistry() { -// setup(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.parseFrom(CodedInputStream.newInstance(in), -// ExtensionRegistry.newInstance()); -// } -// }); -// } -// -// @Test public void message_parseDelimitedFrom_InputStream() { -// setupDelimited(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.parseDelimitedFrom(in); -// } -// }); -// } -// -// @Test public void message_parseDelimitedFrom_InputStreamAndExtensionRegistry() { -// setupDelimited(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.parseDelimitedFrom(in, ExtensionRegistry.newInstance()); -// } -// }); -// } -// -// @Test public void messageBuilder_mergeFrom_InputStream() { -// setup(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.newBuilder().mergeFrom(in).build(); -// } -// }); -// } -// -// @Test public void messageBuilder_mergeFrom_InputStreamAndExtensionRegistry() { -// setup(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.newBuilder().mergeFrom(in, ExtensionRegistry.newInstance()).build(); -// } -// }); -// } -// -// @Test public void messageBuilder_mergeFrom_CodedInputStream() { -// setup(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.newBuilder().mergeFrom(CodedInputStream.newInstance(in)).build(); -// } -// }); -// } -// -// @Test public void messageBuilder_mergeFrom_CodedInputStreamAndExtensionRegistry() { -// setup(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// return DescriptorProto.newBuilder() -// .mergeFrom(CodedInputStream.newInstance(in), ExtensionRegistry.newInstance()).build(); -// } -// }); -// } -// -// @Test public void messageBuilder_mergeDelimitedFrom_InputStream() { -// setupDelimited(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// DescriptorProto.Builder builder = DescriptorProto.newBuilder(); -// builder.mergeDelimitedFrom(in); -// return builder.build(); -// } -// }); -// } -// -// @Test public void messageBuilder_mergeDelimitedFrom_InputStreamAndExtensionRegistry() { -// setupDelimited(); -// verifyExceptions(new ParseTester() { -// public DescriptorProto parse(InputStream in) throws IOException { -// DescriptorProto.Builder builder = DescriptorProto.newBuilder(); -// builder.mergeDelimitedFrom(in, ExtensionRegistry.newInstance()); -// return builder.build(); -// } -// }); -// } -// -// private void verifyExceptions(ParseTester parseTester) { -// // No exception -// try { -// assertEquals(DescriptorProto.getDescriptor().toProto(), -// parseTester.parse(new ByteArrayInputStream(serializedProto))); -// } catch (IOException e) { -// fail("No exception expected: " + e); -// } -// -// // IOException -// try { -// // using a "broken" stream that will throw part-way through reading the message -// parseTester.parse(broken(new ByteArrayInputStream(serializedProto))); -// fail("IOException expected but not thrown"); -// } catch (IOException e) { -// assertFalse(e instanceof InvalidProtocolBufferException); -// } -// -// // InvalidProtocolBufferException -// try { -// // make the serialized proto invalid -// for (int i = 0; i < 50; i++) { -// serializedProto[i] = -1; -// } -// parseTester.parse(new ByteArrayInputStream(serializedProto)); -// fail("InvalidProtocolBufferException expected but not thrown"); -// } catch (IOException e) { -// assertTrue(e instanceof InvalidProtocolBufferException); -// } -// } -// -// private InputStream broken(InputStream i) { -// return new FilterInputStream(i) { -// int count = 0; -// -// @Override public int read() throws IOException { -// if (count++ >= 50) { -// throw new IOException("I'm broken!"); -// } -// return super.read(); -// } -// -// @Override public int read(byte b[], int off, int len) throws IOException { -// if ((count += len) >= 50) { -// throw new IOException("I'm broken!"); -// } -// return super.read(b, off, len); -// } -// }; -// } + private interface ParseTester { + DescriptorProto parse(InputStream in) throws IOException; + } + + private byte serializedProto[]; + + private void setup() { + serializedProto = DescriptorProto.getDescriptor().toProto().toByteArray(); + } + + private void setupDelimited() { + ByteArrayOutputStream bos = new ByteArrayOutputStream(); + try { + DescriptorProto.getDescriptor().toProto().writeDelimitedTo(bos); + } catch (IOException e) { + fail("Exception not expected: " + e); + } + serializedProto = bos.toByteArray(); + } + + @Test public void message_parseFrom_InputStream() { + setup(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.parseFrom(in); + } + }); + } + + @Test public void message_parseFrom_InputStreamAndExtensionRegistry() { + setup(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.parseFrom(in, ExtensionRegistry.newInstance()); + } + }); + } + + @Test public void message_parseFrom_CodedInputStream() { + setup(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.parseFrom(CodedInputStream.newInstance(in)); + } + }); + } + + @Test public void message_parseFrom_CodedInputStreamAndExtensionRegistry() { + setup(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.parseFrom(CodedInputStream.newInstance(in), + ExtensionRegistry.newInstance()); + } + }); + } + + @Test public void message_parseDelimitedFrom_InputStream() { + setupDelimited(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.parseDelimitedFrom(in); + } + }); + } + + @Test public void message_parseDelimitedFrom_InputStreamAndExtensionRegistry() { + setupDelimited(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.parseDelimitedFrom(in, ExtensionRegistry.newInstance()); + } + }); + } + + @Test public void messageBuilder_mergeFrom_InputStream() { + setup(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.newBuilder().mergeFrom(in).build(); + } + }); + } + + @Test public void messageBuilder_mergeFrom_InputStreamAndExtensionRegistry() { + setup(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.newBuilder().mergeFrom(in, ExtensionRegistry.newInstance()).build(); + } + }); + } + + @Test public void messageBuilder_mergeFrom_CodedInputStream() { + setup(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.newBuilder().mergeFrom(CodedInputStream.newInstance(in)).build(); + } + }); + } + + @Test public void messageBuilder_mergeFrom_CodedInputStreamAndExtensionRegistry() { + setup(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + return DescriptorProto.newBuilder() + .mergeFrom(CodedInputStream.newInstance(in), ExtensionRegistry.newInstance()).build(); + } + }); + } + + @Test public void messageBuilder_mergeDelimitedFrom_InputStream() { + setupDelimited(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + DescriptorProto.Builder builder = DescriptorProto.newBuilder(); + builder.mergeDelimitedFrom(in); + return builder.build(); + } + }); + } + + @Test public void messageBuilder_mergeDelimitedFrom_InputStreamAndExtensionRegistry() { + setupDelimited(); + verifyExceptions(new ParseTester() { + public DescriptorProto parse(InputStream in) throws IOException { + DescriptorProto.Builder builder = DescriptorProto.newBuilder(); + builder.mergeDelimitedFrom(in, ExtensionRegistry.newInstance()); + return builder.build(); + } + }); + } + + private void verifyExceptions(ParseTester parseTester) { + // No exception + try { + assertEquals(DescriptorProto.getDescriptor().toProto(), + parseTester.parse(new ByteArrayInputStream(serializedProto))); + } catch (IOException e) { + fail("No exception expected: " + e); + } + + // IOException + try { + // using a "broken" stream that will throw part-way through reading the message + parseTester.parse(broken(new ByteArrayInputStream(serializedProto))); + fail("IOException expected but not thrown"); + } catch (IOException e) { + assertFalse(e instanceof InvalidProtocolBufferException); + } + + // InvalidProtocolBufferException + try { + // make the serialized proto invalid + for (int i = 0; i < 50; i++) { + serializedProto[i] = -1; + } + parseTester.parse(new ByteArrayInputStream(serializedProto)); + fail("InvalidProtocolBufferException expected but not thrown"); + } catch (IOException e) { + assertTrue(e instanceof InvalidProtocolBufferException); + } + } + + private InputStream broken(InputStream i) { + return new FilterInputStream(i) { + int count = 0; + + @Override public int read() throws IOException { + if (count++ >= 50) { + throw new IOException("I'm broken!"); + } + return super.read(); + } + + @Override public int read(byte b[], int off, int len) throws IOException { + if ((count += len) >= 50) { + throw new IOException("I'm broken!"); + } + return super.read(b, off, len); + } + }; + } } |