@Test
public void Should_sendCloneOfMessageFillingCheckpointStatusOnExecution()
        throws Exception {

    IObject entryState = IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.iobject.IObject"),
            ("{'recoverStrategy':'the recover strategy'," +
                    "'message':{'a':'1'}," +
                    "'responsibleCheckpointId':'rCP'," +
                    "'prevCheckpointId':'prCP'," +
                    "'prevCheckpointEntryId':'pcpEi'}").replace('\'','"'));
    when(entryMock.getState()).thenReturn(entryState);
    CheckpointSchedulerAction action = new CheckpointSchedulerAction();
    action.execute(entryMock);
    verify(recoverStrategy).reSend(same(entryState));
      ArgumentCaptor<IObject> mc = ArgumentCaptor.forClass(IObject.class);
      verify(messageBusHandlerMock).handle(mc.capture(), same(chainId));
      IObject sent = mc.getValue();
      IObject sentCPS = (IObject) sent.getValue(IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.ifield_name.IFieldName"), "checkpointStatus"));
      assertEquals("1", sent.getValue(IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.ifield_name.IFieldName"), "a")));
      assertEquals(entryId, sentCPS.getValue(IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.ifield_name.IFieldName"), "checkpointEntryId")));
      assertEquals("rCP", sentCPS.getValue(IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.ifield_name.IFieldName"), "responsibleCheckpointId")));
      assertEquals("prCP", sentCPS.getValue(IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.ifield_name.IFieldName"), "prevCheckpointId")));
      assertEquals("pcpEi", sentCPS.getValue(IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.ifield_name.IFieldName"), "prevCheckpointEntryId")));
      assertNotSame(sent, entryState.getValue(IOC.resolve(Keys.getOrAdd("info.smart_tools.smartactors.iobject.ifield_name.IFieldName"), "message")));
}