public void testWriteableReaderReturnsWrongName() throws IOException { BytesStreamOutput out = new BytesStreamOutput(); NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(); namedWriteableRegistry.register( BaseNamedWriteable.class, TestNamedWriteable.NAME, (StreamInput in) -> new TestNamedWriteable(in) { @Override public String getWriteableName() { return "intentionally-broken"; } }); TestNamedWriteable namedWriteableIn = new TestNamedWriteable( randomAsciiOfLengthBetween(1, 10), randomAsciiOfLengthBetween(1, 10)); out.writeNamedWriteable(namedWriteableIn); byte[] bytes = BytesReference.toBytes(out.bytes()); StreamInput in = new NamedWriteableAwareStreamInput(StreamInput.wrap(bytes), namedWriteableRegistry); assertEquals(in.available(), bytes.length); AssertionError e = expectThrows(AssertionError.class, () -> in.readNamedWriteable(BaseNamedWriteable.class)); assertThat( e.getMessage(), endsWith( " claims to have a different name [intentionally-broken] than it was read from [test-named-writeable].")); }
public void testNamedWriteableUnknownNamedWriteable() throws IOException { NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(); namedWriteableRegistry.register( BaseNamedWriteable.class, TestNamedWriteable.NAME, TestNamedWriteable::new); BytesStreamOutput out = new BytesStreamOutput(); out.writeNamedWriteable( new NamedWriteable() { @Override public String getWriteableName() { return "unknown"; } @Override public void writeTo(StreamOutput out) throws IOException {} }); StreamInput in = new NamedWriteableAwareStreamInput( StreamInput.wrap(BytesReference.toBytes(out.bytes())), namedWriteableRegistry); try { // no named writeable registered with given name under test category, can write but cannot // read it back in.readNamedWriteable(BaseNamedWriteable.class); fail("read should have failed"); } catch (IllegalArgumentException e) { assertThat( e.getMessage(), equalTo("unknown named writeable [" + BaseNamedWriteable.class.getName() + "][unknown]")); } }
public void testNamedWriteableDuplicates() throws IOException { NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(); namedWriteableRegistry.register( BaseNamedWriteable.class, TestNamedWriteable.NAME, TestNamedWriteable::new); IllegalArgumentException e = expectThrows( IllegalArgumentException.class, () -> namedWriteableRegistry.register( BaseNamedWriteable.class, TestNamedWriteable.NAME, TestNamedWriteable::new)); assertThat( e.getMessage(), startsWith( "named writeable [" + BaseNamedWriteable.class.getName() + "][" + TestNamedWriteable.NAME + "] is already registered by [")); }
public void testNamedWriteable() throws IOException { BytesStreamOutput out = new BytesStreamOutput(); NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(); namedWriteableRegistry.register( BaseNamedWriteable.class, TestNamedWriteable.NAME, TestNamedWriteable::new); TestNamedWriteable namedWriteableIn = new TestNamedWriteable( randomAsciiOfLengthBetween(1, 10), randomAsciiOfLengthBetween(1, 10)); out.writeNamedWriteable(namedWriteableIn); byte[] bytes = BytesReference.toBytes(out.bytes()); StreamInput in = new NamedWriteableAwareStreamInput(StreamInput.wrap(bytes), namedWriteableRegistry); assertEquals(in.available(), bytes.length); BaseNamedWriteable namedWriteableOut = in.readNamedWriteable(BaseNamedWriteable.class); assertEquals(namedWriteableOut, namedWriteableIn); assertEquals(in.available(), 0); }
public void testNamedWriteableReaderReturnsNull() throws IOException { BytesStreamOutput out = new BytesStreamOutput(); NamedWriteableRegistry namedWriteableRegistry = new NamedWriteableRegistry(); namedWriteableRegistry.register( BaseNamedWriteable.class, TestNamedWriteable.NAME, (StreamInput in) -> null); TestNamedWriteable namedWriteableIn = new TestNamedWriteable( randomAsciiOfLengthBetween(1, 10), randomAsciiOfLengthBetween(1, 10)); out.writeNamedWriteable(namedWriteableIn); byte[] bytes = BytesReference.toBytes(out.bytes()); StreamInput in = new NamedWriteableAwareStreamInput(StreamInput.wrap(bytes), namedWriteableRegistry); assertEquals(in.available(), bytes.length); IOException e = expectThrows(IOException.class, () -> in.readNamedWriteable(BaseNamedWriteable.class)); assertThat( e.getMessage(), endsWith( "] returned null which is not allowed and probably means it screwed up the stream.")); }