|
|
|
@ -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); |
|
|
|
|
} |
|
|
|
|
}; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|