1 // Copyright 2014 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 #ifndef COMPONENTS_INVALIDATION_MOCK_ACK_HANDLER_H_ 6 #define COMPONENTS_INVALIDATION_MOCK_ACK_HANDLER_H_ 7 8 #include <map> 9 #include <vector> 10 11 #include "base/compiler_specific.h" 12 #include "base/memory/weak_ptr.h" 13 #include "components/invalidation/ack_handler.h" 14 #include "components/invalidation/invalidation_export.h" 15 #include "components/invalidation/invalidation_util.h" 16 17 namespace syncer { 18 19 class Invalidation; 20 21 // This AckHandler implementation colaborates with the FakeInvalidationService 22 // to enable unit tests to assert that invalidations are being acked properly. 23 class INVALIDATION_EXPORT MockAckHandler 24 : public AckHandler, 25 public base::SupportsWeakPtr<MockAckHandler> { 26 public: 27 MockAckHandler(); 28 virtual ~MockAckHandler(); 29 30 // Sets up some internal state to track this invalidation, and modifies it so 31 // that its Acknowledge() and Drop() methods will route back to us. 32 void RegisterInvalidation(Invalidation* invalidation); 33 34 // No one was listening for this invalidation, so no one will receive it or 35 // ack it. We keep track of it anyway to let tests make assertions about it. 36 void RegisterUnsentInvalidation(Invalidation* invalidation); 37 38 // Returns true if the specified invalidaition has been delivered, but has not 39 // been acknowledged yet. 40 bool IsUnacked(const Invalidation& invalidation) const; 41 42 // Returns true if the specified invalidation has been delivered and 43 // acknowledged. 44 bool IsAcknowledged(const Invalidation& invalidation) const; 45 46 // Returns true if the specified invalidation has been delivered and 47 // dropped. 48 bool IsDropped(const Invalidation& invalidation) const; 49 50 // Returns true if the specified invalidation was never delivered. 51 bool IsUnsent(const Invalidation& invalidation) const; 52 53 // Retruns true if all invalidations have been acked and all drops recovered. 54 bool AllInvalidationsAccountedFor() const; 55 56 // Implementation of AckHandler. 57 virtual void Acknowledge( 58 const invalidation::ObjectId& id, 59 const AckHandle& handle) OVERRIDE; 60 virtual void Drop( 61 const invalidation::ObjectId& id, 62 const AckHandle& handle) OVERRIDE; 63 64 private: 65 typedef std::vector<syncer::Invalidation> InvalidationVector; 66 typedef std::map<invalidation::ObjectId, 67 AckHandle, 68 ObjectIdLessThan> IdHandleMap; 69 70 InvalidationVector unsent_invalidations_; 71 InvalidationVector unacked_invalidations_; 72 InvalidationVector acked_invalidations_; 73 InvalidationVector dropped_invalidations_; 74 75 IdHandleMap unrecovered_drop_events_; 76 }; 77 78 } // namespace syncer 79 80 #endif // COMPONENTS_INVALIDATION_MOCK_ACK_HANDLER_H_ 81