Skip to content

Commit

Permalink
Merge pull request #1952 from ably/fix/1951-RSH3a3a
Browse files Browse the repository at this point in the history
[ECO-4886] respect RSH3a3a
  • Loading branch information
maratal authored Jul 25, 2024
2 parents 5a79a49 + 9a3b4ab commit 3b07d51
Show file tree
Hide file tree
Showing 4 changed files with 17 additions and 3 deletions.
3 changes: 3 additions & 0 deletions Source/ARTPushActivationState.m
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,9 @@ - (ARTPushActivationState *)transition:(ARTPushActivationEvent *)event {
else if ([event isKindOfClass:[ARTPushActivationEventCalledActivate class]]) {
return validateAndSync(self.machine, event, self.logger);
}
else if ([event isKindOfClass:[ARTPushActivationEventGotPushDeviceDetails class]]) {
return self; // Consuming event (RSH3a3a)
}
return nil;
}

Expand Down
11 changes: 10 additions & 1 deletion Source/ARTPushActivationStateMachine.m
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ @implementation ARTPushActivationStateMachine {
ARTPushActivationState *_current;
dispatch_queue_t _queue;
dispatch_queue_t _userQueue;
NSMutableArray<ARTPushActivationEvent *> *_pendingEvents;
}

- (instancetype)initWithRest:(ARTRestInternal *const)rest
Expand Down Expand Up @@ -76,6 +77,14 @@ - (instancetype)initWithRest:(ARTRestInternal *const)rest
return self;
}

- (NSArray<ARTPushActivationEvent *> *)pendingEvents {
__block NSArray<ARTPushActivationEvent *> *ret;
dispatch_sync(_queue, ^{
ret = [self->_pendingEvents copy];
});
return ret;
}

- (ARTPushActivationEvent *)lastEvent {
__block ARTPushActivationEvent *ret;
dispatch_sync(_queue, ^{
Expand Down Expand Up @@ -132,7 +141,7 @@ - (void)handleEvent:(nonnull ARTPushActivationEvent *)event {
if (maybeNext == nil) {
break;
}
[_pendingEvents art_dequeue];
[_pendingEvents art_dequeue]; // consuming event

ARTLogDebug(_logger, @"%@: transition: %@ -> %@", NSStringFromClass(self.class), NSStringFromClass(_current.class), NSStringFromClass(maybeNext.class));
if (self.transitions) self.transitions(event, _current, maybeNext);
Expand Down
2 changes: 1 addition & 1 deletion Source/PrivateHeaders/Ably/ARTPushActivationStateMachine.h
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ NS_ASSUME_NONNULL_BEGIN

@property (readonly, nonatomic) ARTPushActivationEvent *lastEvent;
@property (readonly, nonatomic) ARTPushActivationState *current;
@property (readonly, nonatomic) NSMutableArray<ARTPushActivationEvent *> *pendingEvents;
@property (readonly, nonatomic) NSArray<ARTPushActivationEvent *> *pendingEvents;

- (instancetype)init NS_UNAVAILABLE;
+ (instancetype)new NS_UNAVAILABLE;
Expand Down
4 changes: 3 additions & 1 deletion Test/Tests/PushActivationStateMachineTests.swift
Original file line number Diff line number Diff line change
Expand Up @@ -203,7 +203,9 @@ class PushActivationStateMachineTests: XCTestCase {
beforeEach__Activation_state_machine__State_NotActivated()

stateMachine.send(ARTPushActivationEventGotPushDeviceDetails())

expect(stateMachine.current).to(beAKindOf(ARTPushActivationStateNotActivated.self))
XCTAssertEqual(stateMachine.pendingEvents.count, 0)
}

// RSH3b
Expand Down Expand Up @@ -982,7 +984,7 @@ class PushActivationStateMachineTests: XCTestCase {
expect(stateMachine.pendingEvents).toEventually(haveCount(1), timeout: testTimeout)
stateMachine.transitions = nil

let pendingEvent = try XCTUnwrap(stateMachine.pendingEvents.firstObject, "Pending event is missing")
let pendingEvent = try XCTUnwrap(stateMachine.pendingEvents.first, "Pending event is missing")
expect(pendingEvent).to(beAKindOf(ARTPushActivationEventCalledActivate.self))

waitUntil(timeout: testTimeout) { done in
Expand Down

0 comments on commit 3b07d51

Please sign in to comment.