Skip to content

Commit 7155322

Browse files
authored
Fix non-faulted task when loading installationId from persistence group fails. (#970)
1 parent 56cc254 commit 7155322

File tree

2 files changed

+36
-7
lines changed

2 files changed

+36
-7
lines changed

Parse/Internal/Installation/InstallationIdentifierStore/PFInstallationIdentifierStore.m

+9-7
Original file line numberDiff line numberDiff line change
@@ -65,9 +65,9 @@ - (BFTask *)clearInstallationIdentifierAsync {
6565
self.installationIdentifier = nil;
6666
return [[self _getPersistenceGroupAsync] continueWithSuccessBlock:^id(BFTask<id<PFPersistenceGroup>> *task) {
6767
id<PFPersistenceGroup> group = task.result;
68-
return [[[group beginLockedContentAccessAsyncToDataForKey:PFInstallationIdentifierFileName] continueWithSuccessBlock:^id(BFTask *_) {
68+
return [[[group beginLockedContentAccessAsyncToDataForKey:PFInstallationIdentifierFileName] continueWithSuccessBlock:^id(BFTask *t) {
6969
return [group removeDataAsyncForKey:PFInstallationIdentifierFileName];
70-
}] continueWithBlock:^id(BFTask *task) {
70+
}] continueWithBlock:^id(BFTask *t) {
7171
return [group endLockedContentAccessAsyncToDataForKey:PFInstallationIdentifierFileName];
7272
}];
7373
}];
@@ -88,10 +88,10 @@ - (BFTask *)_clearCachedInstallationIdentifierAsync {
8888
- (BFTask<NSString *> *)_loadInstallationIdentifierAsync {
8989
return (BFTask<NSString *> *)[[self _getPersistenceGroupAsync] continueWithSuccessBlock:^id(BFTask<id<PFPersistenceGroup>> *task) {
9090
id<PFPersistenceGroup> group = task.result;
91-
return [[[[group beginLockedContentAccessAsyncToDataForKey:PFInstallationIdentifierFileName] continueWithSuccessBlock:^id(BFTask *_) {
91+
return [[[[[group beginLockedContentAccessAsyncToDataForKey:PFInstallationIdentifierFileName] continueWithSuccessBlock:^id(BFTask *_) {
9292
return [group getDataAsyncForKey:PFInstallationIdentifierFileName];
93-
}] continueWithSuccessBlock:^id(BFTask *task) {
94-
NSData *data = task.result;
93+
}] continueWithSuccessBlock:^id(BFTask *t) {
94+
NSData *data = t.result;
9595
NSString *installationId = nil;
9696
if (data) {
9797
installationId = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
@@ -103,9 +103,11 @@ - (BFTask *)_clearCachedInstallationIdentifierAsync {
103103
installationId = [NSUUID UUID].UUIDString.lowercaseString;
104104
return [[group setDataAsync:[installationId dataUsingEncoding:NSUTF8StringEncoding]
105105
forKey:PFInstallationIdentifierFileName] continueWithSuccessResult:installationId];
106-
}] continueWithBlock:^id(BFTask <NSString *>*task) {
106+
}] continueWithBlock:^id(BFTask<NSString *> *t) {
107107
[group endLockedContentAccessAsyncToDataForKey:PFInstallationIdentifierFileName];
108-
self.installationIdentifier = task.result;
108+
return t;
109+
}] continueWithSuccessBlock:^id _Nullable(BFTask<NSString *> * _Nonnull t) {
110+
self.installationIdentifier = t.result;
109111
return self.installationIdentifier;
110112
}];
111113
}];

Tests/Unit/InstallationIdentifierUnitTests.m

+27
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,13 @@
77
* of patent rights can be found in the PATENTS file in the same directory.
88
*/
99

10+
#import <OCMock/OCMock.h>
11+
1012
#import "PFInstallationIdentifierStore_Private.h"
1113
#import "PFUnitTestCase.h"
1214
#import "Parse_Private.h"
1315
#import "BFTask+Private.h"
16+
#import "PFPersistenceController.h"
1417

1518
@interface InstallationIdentifierUnitTests : PFUnitTestCase
1619

@@ -68,4 +71,28 @@ - (void)testInstallationIdentifierThreadSafe {
6871
});
6972
}
7073

74+
- (void)testInstallationIdentifierPropagatesErrorOnPersistenceFailure {
75+
id<PFPersistenceGroup> group = PFStrictProtocolMock(@protocol(PFPersistenceGroup));
76+
OCMStub([group beginLockedContentAccessAsyncToDataForKey:[OCMArg isNotNil]]).andReturn([BFTask taskWithResult:nil]);
77+
OCMStub([group endLockedContentAccessAsyncToDataForKey:[OCMArg isNotNil]]).andReturn([BFTask taskWithResult:nil]);
78+
OCMStub([group getDataAsyncForKey:[OCMArg isNotNil]]).andReturn([BFTask taskWithResult:nil]);
79+
OCMStub([group setDataAsync:[OCMArg isNotNil] forKey:[OCMArg isNotNil]]).andReturn([BFTask taskWithError:[[NSError alloc] init]]);
80+
81+
PFPersistenceController *persistenceController = PFStrictClassMock([PFPersistenceController class]);
82+
OCMStub([persistenceController getPersistenceGroupAsync]).andReturn([BFTask taskWithResult:group]);
83+
84+
id<PFPersistenceControllerProvider> dataSource = PFStrictProtocolMock(@protocol(PFPersistenceControllerProvider));
85+
OCMStub([dataSource persistenceController]).andReturn(persistenceController);
86+
87+
PFInstallationIdentifierStore *store = [[PFInstallationIdentifierStore alloc] initWithDataSource:dataSource];
88+
89+
XCTestExpectation *expectation = [self currentSelectorTestExpectation];
90+
[[store getInstallationIdentifierAsync] continueWithBlock:^id _Nullable(BFTask<NSString *> * _Nonnull t) {
91+
XCTAssertTrue(t.faulted);
92+
[expectation fulfill];
93+
return nil;
94+
}];
95+
[self waitForTestExpectations];
96+
}
97+
7198
@end

0 commit comments

Comments
 (0)