[OP-138] CLONE 3.1 - T#10917 handle invalid ServerId in incoming requests Created: 24/Nov/14  Updated: 05/Feb/15  Resolved: 28/Nov/14

Status: Closed
Project: Opush
Component/s: None
Affects Version/s: 3.0.2
Fix Version/s: 3.1.0

Type: Bug Priority: Normal
Reporter: Matthieu EXT_BAECHLER Assignee: Stephane COLSON
Resolution: Fixed Votes: 0
Labels: None
Remaining Estimate: Not Specified
Time Spent: Not Specified
Original Estimate: Not Specified

Issue Links:
Cloners
clones OP-123 T#10917 handle invalid ServerId in in... Closed
Story Points: 1
Rank: 6601
Sprint: OBM Sprint 2015#2

 Description   

Sometimes, incoming Sync requests come with some bad ServerId like :

  • 0
  • an arbitrary string
  • a ServerId that doesn't belong to the Sync CollectionId

We should ignore entries if needed or return an appropriate answer.



 Comments   
Comment by Matthieu EXT_BAECHLER [ 28/Nov/14 ]

Same impact as OP-123

Comment by Jenkins Continuous Integration Server [ 18/Dec/14 ]

SUCCESS: Integrated in opush-master #180
OP-138 refactor Sync client API to use a builder pattern (thilaire: efce15ffbcfbe7d4f14bdbc4d19202dc87cf6e5d)

  • client/src/main/java/org/obm/sync/push/client/OPClient.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnCalendarsTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnContactsTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerWithBackendTest.java
  • client/src/main/java/org/obm/sync/push/client/commands/SyncWithCommand.java
  • integration-testing/opush/src/test/java/org/obm/opush/MailBackendGetChangedTest.java
    OP-138 remove code duplication (thilaire: 5ecf144a9570fe3da6fa584eae7701e9e3907f0d)
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
    OP-138 merge SyncWithCommand into Sync object (thilaire: 91db2a2d6d7b56ad786e68196dd16f305f3da137)
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerWithBackendTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnContactsTest.java
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnCalendarsTest.java
  • client/src/main/java/org/obm/sync/push/client/commands/SyncWithDataCommand.java
  • client/src/main/java/org/obm/sync/push/client/commands/SyncWithCommand.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/MailBackendGetChangedTest.java
    OP-138 convert another OPClient.sync invocation into a Sync.Builder one (thilaire: 3c8b949206bbfed366f7156f0fa8d46a3c351620)
  • client/src/main/java/org/obm/sync/push/client/OPClient.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnCalendarsTest.java
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerWithBackendTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnContactsTest.java
    OP-138 remove use of xml template to have a more flexible Sync command (thilaire: 3d1a852ad5c73a3b10c6886d6eb04b36b7fdb732)
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
  • client/src/main/resources/data/SyncRequest.xml
    OP-138 make use of opush protocol object SyncCollection (thilaire: 670c73a30e972bbec64823f3a3052e3204c19bc7)
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
    OP-138 make use of opush protocol object SyncCollection (step two) (thilaire: 3ec0e3a78d3ec6c1ad37b0d91a685e814d30712b)
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerWithBackendTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnCalendarsTest.java
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnContactsTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/MailBackendGetChangedTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerTest.java
    OP-138 remove SyncCollectionCommandDto (thilaire: b5a0cfca83dfdae9f17e490224f56e5e9f0c5d18)
  • protocol/src/test/java/org/obm/push/protocol/SyncProtocolTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommands.java
  • client/src/main/resources/data/SyncWithCommandRequest.xml
  • protocol/src/main/java/org/obm/push/protocol/data/SyncDecoder.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnCalendarsTest.java
  • protocol/src/main/java/org/obm/push/protocol/SyncProtocol.java
  • push-core/src/main/java/org/obm/push/protocol/data/SyncAnalyser.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerTest.java
  • protocol/src/main/java/org/obm/push/protocol/data/SyncEncoder.java
  • protocol/src/main/java/org/obm/push/protocol/bean/SyncCollection.java
  • protocol/src/test/java/org/obm/push/BeansTest.java
  • client/src/main/resources/data/EmailDeleteSyncRequest.xml
  • client/src/main/resources/data/EmailSyncRequest.xml
  • client/src/main/java/org/obm/sync/push/client/commands/EmailDeleteSyncRequest.java
  • protocol/src/main/java/org/obm/push/protocol/data/ContactDecoder.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnContactsTest.java
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
  • protocol/src/main/java/org/obm/push/protocol/data/ContactEncoder.java
  • client/src/main/java/org/obm/sync/push/client/commands/EmailSyncNoOptionsCommand.java
  • push-core/src/test/java/org/obm/push/protocol/data/SyncAnalyserTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/MailBackendGetChangedTest.java
  • protocol/src/main/java/org/obm/push/protocol/bean/SyncCollectionCommandDto.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerWithBackendTest.java
  • protocol/src/test/java/org/obm/push/protocol/bean/SyncCollectionTest.java
  • protocol/src/test/java/org/obm/push/protocol/data/SyncDecoderTest.java
  • client/src/main/resources/data/EmailSyncRequestWithWait.xml
  • client/src/main/java/org/obm/sync/push/client/commands/EmailSyncCommand.java
    OP-138 finally make Sync multi command and drop template based sync (thilaire: 81f1cd3ca20bad3a79b30c38a7c5730ced4da3c9)
  • protocol/src/test/java/org/obm/push/protocol/SyncProtocolTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnCalendarsTest.java
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerWithBackendTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/MailBackendGetChangedTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnContactsTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerTest.java
  • protocol/src/test/java/org/obm/push/protocol/bean/SyncCollectionTest.java
  • protocol/src/main/java/org/obm/push/protocol/bean/SyncCollection.java
    OP-138 make various integrity checks on commands ServerId (thilaire: 237ec694342b4b4a283503d8b3c647c7a06e7a13)
  • push-bean/src/test/java/org/obm/push/bean/ServerIdTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerTest.java
  • push-core/src/main/java/org/obm/push/protocol/data/SyncAnalyser.java
  • push-bean/src/main/java/org/obm/push/bean/ServerId.java
    OP-138 finally fed up by this warning ... remove it now (thilaire: 3ac4c5e7e60fc4cba91e6ff824314596405f85f4)
  • push-mail/src/main/java/org/obm/push/mail/MailBackendImpl.java
    OP-138 remove inheritance with SyncCollectionCommands, use delegation (thilaire: e12ead1ceee1a628ede31f17334942576b8fd323)
  • push-bean/src/test/java/org/obm/push/bean/SyncCollectionCommandsIndexTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommands.java
  • push-bean/src/test/java/org/obm/push/bean/BeansTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsResponse.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsIndex.java
  • push-bean/src/test/java/org/obm/push/bean/SyncCollectionCommandsTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionResponsesResponse.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/JSONService.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandsResponseMixIn.java
    OP-138 remove AbstractSyncCollection (thilaire: a5bd568fd9141c1178a9c2542d27ffd3714393b0)
  • push-core/src/test/java/org/obm/push/protocol/data/SyncAnalyserTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsResponse.java
  • protocol/src/main/java/org/obm/push/protocol/data/SyncEncoder.java
  • push-bean/src/main/java/org/obm/push/bean/AbstractSyncCollection.java
  • push-bean/src/test/java/org/obm/push/bean/AbstractSyncCollectionTest.java
  • push-core/src/main/java/org/obm/push/SummaryLoggerService.java
  • protocol/src/test/java/org/obm/push/protocol/GetItemEstimateProtocolTest.java
  • push-bean/src/main/java/org/obm/push/bean/PIMDataType.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandsResponseMixIn.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsIndex.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/JSONService.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/AnalysedSyncCollectionMixIn.java
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
  • push-bean/src/main/java/org/obm/push/bean/AnalysedSyncCollection.java
  • protocol/src/main/java/org/obm/push/protocol/SyncProtocol.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/AbstractSyncCollectionMixIn.java
  • protocol/src/test/java/org/obm/push/protocol/bean/SyncCollectionTest.java
  • push-core/src/main/java/org/obm/push/handler/PingHandler.java
  • protocol/src/main/java/org/obm/push/protocol/PingProtocol.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionResponse.java
  • protocol/src/main/java/org/obm/push/protocol/GetItemEstimateProtocol.java
  • protocol/src/main/java/org/obm/push/protocol/bean/SyncCollection.java
  • protocol/src/test/java/org/obm/push/protocol/data/SyncDecoderTest.java
    OP-138 AnalysedSyncCollection contains a SyncCollectionCommandsRequest instead of a ...Response (thilaire: 3ceb9f3dbdb8ff7e8d2dc7731cd4c3148f525ba4)
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsResponse.java
  • push-dao-cassandra/src/test/java/org/obm/push/json/JSONServiceTest.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/JSONService.java
  • push-core/src/test/java/org/obm/push/SummaryLoggerServiceTest.java
  • push-core/src/main/java/org/obm/push/protocol/data/SyncAnalyser.java
  • push-core/src/test/java/org/obm/push/protocol/data/SyncAnalyserTest.java
  • push-core/src/test/java/org/obm/push/handler/SyncHandlerTest.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandsRequestMixIn.java
  • push-core/src/main/java/org/obm/push/handler/SyncHandler.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsRequest.java
  • push-bean/src/main/java/org/obm/push/bean/AnalysedSyncCollection.java
  • push-bean/src/test/java/org/obm/push/bean/AnalysedSyncCollectionTest.java
    OP-138 duplicate SyncCollectionCommand into SyncCollectionCommandRequest and SyncCollectionCommandResponse (thilaire: 94661959625c522f941759b0a175b2614a9f4183)
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandsMixIn.java
  • protocol/src/test/java/org/obm/push/protocol/bean/SyncCollectionTest.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandRequestMixIn.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionResponse.java
  • integration-testing/opush/src/test/java/org/obm/opush/MailBackendGetChangedTest.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandsResponseMixIn.java
  • protocol/src/main/java/org/obm/push/protocol/bean/SyncCollection.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommands.java
  • push-core/src/test/java/org/obm/push/handler/SyncHandlerTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandResponse.java
  • push-bean/src/main/java/org/obm/push/bean/TypedCommand.java
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/JSONService.java
  • push-bean/src/test/java/org/obm/push/bean/TypedCommandsIndexTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsIndex.java
  • push-core/src/main/java/org/obm/push/handler/ItemOperationsHandler.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerTest.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandResponseMixIn.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnContactsTest.java
  • push-core/src/main/java/org/obm/push/state/StateMachine.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerWithBackendTest.java
  • push-bean/src/main/java/org/obm/push/bean/TypedCommandsIndex.java
  • push-dao-cassandra/src/test/java/org/obm/push/json/JSONServiceCompatibilityTest.java
  • push-dao-cassandra/src/test/java/org/obm/push/json/JSONServiceTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommand.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsResponse.java
  • push-core/src/test/java/org/obm/push/state/StateMachineTest.java
  • push-bean/src/test/java/org/obm/push/bean/BeansTest.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandsRequestMixIn.java
  • protocol/src/main/java/org/obm/push/protocol/data/SyncEncoder.java
  • push-core/src/main/java/org/obm/push/protocol/data/SyncAnalyser.java
  • push-bean/src/main/java/org/obm/push/bean/AnalysedSyncCollection.java
  • protocol/src/test/java/org/obm/push/protocol/SyncProtocolTest.java
  • push-bean/src/test/java/org/obm/push/bean/AnalysedSyncCollectionTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionResponsesResponse.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/TypedCommandsMixIn.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandMixIn.java
  • protocol/src/test/java/org/obm/push/protocol/data/SyncDecoderTest.java
  • protocol/src/main/java/org/obm/push/protocol/data/SyncDecoder.java
  • push-core/src/test/java/org/obm/push/SummaryLoggerServiceTest.java
  • protocol/src/main/java/org/obm/push/protocol/SyncProtocol.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandRequest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsRequest.java
  • push-core/src/main/java/org/obm/push/handler/SyncHandler.java
  • push-bean/src/test/java/org/obm/push/bean/SyncCollectionCommandsIndexTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnCalendarsTest.java
    OP-138 remove SyncCollectionCommandsRequest object (thilaire: 18135fc8f2fddfe0082ba89569697f2a0df55a74)
  • push-bean/src/main/java/org/obm/push/bean/AnalysedSyncCollection.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandsRequest.java
  • push-core/src/test/java/org/obm/push/protocol/data/SyncAnalyserTest.java
  • push-core/src/main/java/org/obm/push/protocol/data/SyncAnalyser.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/JSONService.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/AnalysedSyncCollectionMixIn.java
  • push-core/src/test/java/org/obm/push/SummaryLoggerServiceTest.java
  • push-bean/src/test/java/org/obm/push/bean/BeansTest.java
  • push-core/src/main/java/org/obm/push/SummaryLoggerService.java
  • push-core/src/main/java/org/obm/push/handler/SyncHandler.java
  • push-core/src/test/java/org/obm/push/handler/SyncHandlerTest.java
  • push-dao-cassandra/src/test/java/org/obm/push/json/JSONServiceTest.java
  • push-dao-cassandra/src/main/java/org/obm/push/json/mixin/SyncCollectionCommandsRequestMixIn.java
  • push-bean/src/main/java/org/obm/push/bean/TypedCommandsIndex.java
  • push-bean/src/test/java/org/obm/push/bean/AnalysedSyncCollectionTest.java
    OP-138 add EncodedApplicationData to postpone data decoding after collection type resolution (thilaire: 602b39e214768fdd2179437ea2e672a6da8a004a)
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnContactsTest.java
  • protocol/src/main/java/org/obm/push/protocol/data/ContactEncoder.java
  • push-bean/src/main/java/org/obm/push/bean/EncodedApplicationData.java
  • protocol/src/test/java/org/obm/push/protocol/data/SyncDecoderTest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerOnCalendarsTest.java
  • protocol/src/main/java/org/obm/push/protocol/bean/ClientSyncRequest.java
  • push-core/src/main/java/org/obm/push/protocol/data/SyncAnalyser.java
  • protocol/src/main/java/org/obm/push/protocol/data/SyncEncoder.java
  • protocol/src/main/java/org/obm/push/protocol/data/SyncDecoder.java
  • protocol/src/main/java/org/obm/push/protocol/bean/SyncRequest.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerWithBackendTest.java
  • protocol/src/main/java/org/obm/push/protocol/SyncProtocol.java
  • protocol/src/main/java/org/obm/push/protocol/ActiveSyncProtocol.java
  • protocol/src/main/java/org/obm/push/protocol/AsymetricActiveSyncProtocol.java
  • integration-testing/opush/src/test/java/org/obm/opush/command/sync/SyncHandlerTest.java
  • protocol/src/main/java/org/obm/push/protocol/bean/SyncCollection.java
  • push-bean/src/main/java/org/obm/push/bean/EncodedSyncCollectionCommandRequest.java
  • integration-testing/opush/src/test/java/org/obm/opush/MailBackendGetChangedTest.java
  • push-dao-cassandra/src/test/java/org/obm/push/json/JSONServiceTest.java
  • push-bean/src/main/java/org/obm/push/bean/SyncCollectionCommandRequest.java
  • client/src/main/java/org/obm/sync/push/client/commands/Sync.java
  • protocol/src/test/java/org/obm/push/protocol/bean/SyncCollectionTest.java
  • protocol/src/test/java/org/obm/push/protocol/SyncProtocolTest.java
Comment by Thomas HILAIRE [ 04/Feb/15 ]

Impacts: same as OP-123
It changes details of Sync command handling.
It means that it can break Sync on some devices : we must test synchronization with various phones with addition/modification/deletion.

QA
Reproduction steps: One way to produce this issue, with a Nexus 4 (Android 5.0.1) :

  1. usera with its Nexus4, is configured to synchronize each 10 minutes
  2. usera with its Nexus4, receive en email in its INBOX
  3. usera with its Nexus4, read this email and return to the INBOX view
  4. usera with its Nexus4, he select the read email and drop it with the "bin" button
  5. usera with its Nexus4, force the synchronization

Bad behavior:
the device does not want to synchronize its INBOX anymore

Expected behavior:
the device is able to synchronize its INBOX anymore

Comment by Stephane COLSON [ 05/Feb/15 ]

I QA this

Comment by Stephane COLSON [ 05/Feb/15 ]

OK with Opush 3.1.0~alpha0~git20150120.165759.0aee3e7-1 and OBM 3.1.2~1 (Wheezy)

Case reproduced by Thomas HILAIRE with Nexus 4 (Android 5.0.1) looking at the logs

14:50:38.185 [WARN ] {o.o.p.protocol.data.SyncAnalyser} [t149/cSync/r52/usera@obm24.lyn.lng] Error with a command
org.obm.push.exception.activesync.InvalidServerId: item ServerId{collectionId=CollectionId{id=32}, itemId=18} doesn't belong to collection CollectionId{id=36}
        at org.obm.push.protocol.data.SyncAnalyser.checkServerId(SyncAnalyser.java:176) [push-core-3.1.0-SNAPSHOT.jar:na]
        at org.obm.push.protocol.data.SyncAnalyser.getCollection(SyncAnalyser.java:130) [push-core-3.1.0-SNAPSHOT.jar:na]
        at org.obm.push.protocol.data.SyncAnalyser.analyseSync(SyncAnalyser.java:95) [push-core-3.1.0-SNAPSHOT.jar:na]
        at org.obm.push.handler.SyncHandler.analyzeRequest(SyncHandler.java:228) [push-core-3.1.0-SNAPSHOT.jar:na]
        at org.obm.push.handler.SyncHandler.process(SyncHandler.java:171) [push-core-3.1.0-SNAPSHOT.jar:na]
        at org.obm.push.handler.WbxmlRequestHandler.process(WbxmlRequestHandler.java:103) [push-core-3.1.0-SNAPSHOT.jar:na]
        at org.obm.push.handler.SyncHandler$$EnhancerByGuice$$31c6675f.CGLIB$process$7(<generated>) [guice-3.0.jar:na]
        at org.obm.push.handler.SyncHandler$$EnhancerByGuice$$31c6675f$$FastClassByGuice$$85968cf0.invoke(<generated>) [guice-3.0.jar:na]
        at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228) [guice-3.0.jar:na]
        at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:72) [guice-3.0.jar:na]
        at org.obm.push.technicallog.TechnicalLoggingInterceptor.invoke(TechnicalLoggingInterceptor.java:70) [technical-log-3.1.0-SNAPSHOT.jar:na]
        at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:72) [guice-3.0.jar:na]
        at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:52) [guice-3.0.jar:na]
        at org.obm.push.handler.SyncHandler$$EnhancerByGuice$$31c6675f.process(<generated>) [guice-3.0.jar:na]
        at org.obm.push.ActiveSyncServlet.processActiveSyncMethod(ActiveSyncServlet.java:253) [push-core-3.1.0-SNAPSHOT.jar:na]
        at org.obm.push.ActiveSyncServlet.doPost(ActiveSyncServlet.java:176) [push-core-3.1.0-SNAPSHOT.jar:na]
        at org.obm.push.ActiveSyncServlet$$EnhancerByGuice$$e00f7e07.CGLIB$doPost$1(<generated>) [guice-3.0.jar:na]
        at org.obm.push.ActiveSyncServlet$$EnhancerByGuice$$e00f7e07$$FastClassByGuice$$76155b2a.invoke(<generated>) [guice-3.0.jar:na]
        at com.google.inject.internal.cglib.proxy.$MethodProxy.invokeSuper(MethodProxy.java:228) [guice-3.0.jar:na]
        at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:72) [guice-3.0.jar:na]
        at org.obm.push.technicallog.TechnicalLoggingInterceptor.invoke(TechnicalLoggingInterceptor.java:70) [technical-log-3.1.0-SNAPSHOT.jar:na]
        at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:72) [guice-3.0.jar:na]
        at org.obm.annotations.transactional.TransactionalInterceptor.managerTransaction(TransactionalInterceptor.java:87) [annotations-3.0.1-alpha3.jar:na]
        at org.obm.annotations.transactional.TransactionalInterceptor.invoke(TransactionalInterceptor.java:73) [annotations-3.0.1-alpha3.jar:na]
        at com.google.inject.internal.InterceptorStackCallback$InterceptedMethodInvocation.proceed(InterceptorStackCallback.java:72) [guice-3.0.jar:na]
        at com.google.inject.internal.InterceptorStackCallback.intercept(InterceptorStackCallback.java:52) [guice-3.0.jar:na]
        at org.obm.push.ActiveSyncServlet$$EnhancerByGuice$$e00f7e07.doPost(<generated>) [guice-3.0.jar:na]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:707) [javax.servlet-api-3.1.0.jar:3.1.0]
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:790) [javax.servlet-api-3.1.0.jar:3.1.0]
        at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:263) [guice-servlet-3.0.jar:na]
        at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:178) [guice-servlet-3.0.jar:na]
        at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:91) [guice-servlet-3.0.jar:na]
        at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:62) [guice-servlet-3.0.jar:na]
        at org.obm.breakdownduration.BreakdownDurationFilter.doFilter(BreakdownDurationFilter.java:71) [breakdown-duration-3.0.1-alpha3.jar:na]
        at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163) [guice-servlet-3.0.jar:na]
        at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58) [guice-servlet-3.0.jar:na]
        at org.obm.servlet.filter.qos.QoSFilter.handleRequest(QoSFilter.java:113) [qos-filter-3.0.1-alpha3.jar:na]
        at org.obm.servlet.filter.qos.QoSFilter.doFilter(QoSFilter.java:94) [qos-filter-3.0.1-alpha3.jar:na]
        at com.google.inject.servlet.FilterDefinition.doFilter(FilterDefinition.java:163) [guice-servlet-3.0.jar:na]
        at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:58) [guice-servlet-3.0.jar:na]

Tests done with Ipad (iOS 8.1.2), Fairphone FP1 (Android 4.2.2) and Nexus 7 (5.0.2). New contact created, modified then deleted. New event created, modified the deleted. Email received. Cannot send email because of OP-152

Generated at Mon Sep 16 02:20:40 CEST 2019 using JIRA 6.1.1#6155-sha1:7188aeec9a6b57d61ea04c52f235f15f55c105e2.