@Test
  public void hasSameContextAfterDeserialization() throws Exception {
    SessionManagerImpl managerRead = serializeAndDeserializeSessionManager();

    assertThat(managerRead.getContext()).isNotNull();
    assertThat(managerRead.getContext()).isEqualTo(sessionManager.getContext());
  }
  @Test
  public void isClosedAfterDeserializationWhenItWasClosedBefore() throws Exception {
    sessionManager.close();
    SessionManagerImpl managerRead = serializeAndDeserializeSessionManager();

    assertThat(managerRead.isClosed()).isTrue();
  }
 @Test
 public void hasConfiguredAndStandardValuesWhenCreated() throws Exception {
   assertThat(sessionManager.getContext()).isInstanceOf(DummyContext.class);
   assertThat(sessionManager.getConfig().getName()).isEqualTo("name");
   assertThat(sessionManager.getConverterCache()).isNotNull();
   assertThat(sessionManager.getBapiMappings()).isNotNull();
   assertThat(sessionManager.getExecutionInterceptors()).isNotNull();
 }
  @Test
  public void hasSameExecutionInterceptorsAfterDeserialization() throws Exception {
    SessionManagerImpl managerRead = serializeAndDeserializeSessionManager();

    final Set<ExecutionInterceptor> executionInterceptors = managerRead.getExecutionInterceptors();
    assertThat(executionInterceptors).isNotNull();
    assertThat(executionInterceptors).hasSize(1);
    assertThat(executionInterceptors.iterator().next()).isInstanceOf(SapErrorInterceptor.class);
  }
  @Test
  public void hasSameBapiInterceptorsAfterDeserialization() throws Exception {
    SessionManagerImpl managerRead = serializeAndDeserializeSessionManager();

    final Set<BapiInterceptor> bapiInterceptors = managerRead.getBapiInterceptors();
    assertThat(bapiInterceptors).isNotNull();
    assertThat(bapiInterceptors).hasSize(1);
    assertThat(bapiInterceptors.iterator().next()).isInstanceOf(BeanValidationInterceptor.class);
  }
  private SessionManagerImpl serializeAndDeserializeSessionManager()
      throws IOException, ClassNotFoundException {
    // Converter gets created lazily on first access
    if (!sessionManager.isClosed()) {
      sessionManager.getConverterCache().getConverter(BooleanConverter.class);
    }

    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    ObjectOutputStream out = new ObjectOutputStream(baos);
    out.writeObject(sessionManager);
    out.close();

    ByteArrayInputStream bain = new ByteArrayInputStream(baos.toByteArray());
    ObjectInputStream in = new ObjectInputStream(bain);
    SessionManagerImpl managerRead = (SessionManagerImpl) in.readObject();
    in.close();
    return managerRead;
  }
  @Test
  public void hasConverterCacheAfterDeserialization() throws Exception {
    SessionManagerImpl managerRead = serializeAndDeserializeSessionManager();

    assertThat(managerRead.getConverterCache()).isNotNull();
  }