@Test
  public void shouldRaiseErrorWhenUnmarshallingBytesWithUnknownVersion() throws Exception {
    ExternalizerTestHelper<EntityKey, FutureEntityKeyExternalizer> futureExternalizer =
        ExternalizerTestHelper.getInstance(new FutureEntityKeyExternalizer());

    String[] columnNames = {"foo", "bar", "baz"};
    EntityKeyMetadata keyMetadata = new DefaultEntityKeyMetadata("Foobar", columnNames);
    Object[] values = {123, "Hello", 456L};

    EntityKey key = new EntityKey(keyMetadata, values);

    // given
    byte[] bytes = futureExternalizer.marshall(key);

    // then
    thrown.expect(HibernateException.class);
    thrown.expectMessage("OGM001101");

    // when
    externalizerHelper.unmarshall(bytes);
  }
  @Test
  public void shouldSerializeAndDeserializeEntityKey() throws Exception {
    String[] columnNames = {"foo", "bar", "baz"};
    EntityKeyMetadata keyMetadata = new DefaultEntityKeyMetadata("Foobar", columnNames);
    Object[] values = {123, "Hello", 456L};

    // given
    EntityKey key = new EntityKey(keyMetadata, values);

    // when
    byte[] bytes = externalizerHelper.marshall(key);
    EntityKey unmarshalledKey = externalizerHelper.unmarshall(bytes);

    // then
    assertThat(unmarshalledKey.getTable()).isEqualTo(key.getTable());
    assertThat(unmarshalledKey.getColumnNames()).isEqualTo(key.getColumnNames());
    assertThat(unmarshalledKey.getColumnValues()).isEqualTo(key.getColumnValues());

    assertTrue(key.equals(unmarshalledKey));
    assertTrue(unmarshalledKey.equals(key));
    assertThat(unmarshalledKey.hashCode()).isEqualTo(key.hashCode());
  }
 @Before
 public void setupMarshallerFactory() {
   externalizerHelper = ExternalizerTestHelper.getInstance(EntityKeyExternalizer.INSTANCE);
 }