Skip to content

Commit 3014759

Browse files
bzbarsky-applepull[bot]
authored andcommitted
Factor out per-controller storage into test helper. (#28999)
1 parent 55b8559 commit 3014759

File tree

4 files changed

+148
-81
lines changed

4 files changed

+148
-81
lines changed

src/darwin/Framework/CHIPTests/MTRPerControllerStorageTests.m

+14-81
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@
2222
#import "MTRErrorTestUtils.h"
2323
#import "MTRFabricInfoChecker.h"
2424
#import "MTRTestKeys.h"
25+
#import "MTRTestPerControllerStorage.h"
2526
#import "MTRTestResetCommissioneeHelper.h"
26-
#import "MTRTestStorage.h"
2727

2828
static const uint16_t kPairingTimeoutInSeconds = 10;
2929
static const uint16_t kTimeoutInSeconds = 3;
@@ -69,73 +69,6 @@ - (void)controller:(MTRDeviceController *)controller commissioningComplete:(NSEr
6969

7070
@end
7171

72-
@interface MTRPerControllerStorageTestsStorageDelegate : NSObject <MTRDeviceControllerStorageDelegate>
73-
@property (nonatomic, readonly) NSMutableDictionary<NSString *, NSData *> * storage;
74-
@property (nonatomic, readonly) NSUUID * controllerID;
75-
@end
76-
77-
@implementation MTRPerControllerStorageTestsStorageDelegate
78-
79-
- (instancetype)initWithControllerID:(NSUUID *)controllerID
80-
{
81-
if (!(self = [super init])) {
82-
return nil;
83-
}
84-
85-
_storage = [[NSMutableDictionary alloc] init];
86-
_controllerID = controllerID;
87-
return self;
88-
}
89-
90-
- (nullable id<NSSecureCoding>)controller:(MTRDeviceController *)controller
91-
valueForKey:(NSString *)key
92-
securityLevel:(MTRStorageSecurityLevel)securityLevel
93-
sharingType:(MTRStorageSharingType)sharingType
94-
{
95-
XCTAssertEqualObjects(_controllerID, controller.uniqueIdentifier);
96-
97-
__auto_type * data = self.storage[key];
98-
if (data == nil) {
99-
return data;
100-
}
101-
102-
NSError * error;
103-
id value = [NSKeyedUnarchiver unarchivedObjectOfClasses:MTRDeviceControllerStorageClasses() fromData:data error:&error];
104-
XCTAssertNil(error);
105-
XCTAssertNotNil(data);
106-
107-
return value;
108-
}
109-
110-
- (BOOL)controller:(MTRDeviceController *)controller
111-
storeValue:(id<NSSecureCoding>)value
112-
forKey:(NSString *)key
113-
securityLevel:(MTRStorageSecurityLevel)securityLevel
114-
sharingType:(MTRStorageSharingType)sharingType
115-
{
116-
XCTAssertEqualObjects(_controllerID, controller.uniqueIdentifier);
117-
118-
NSError * error;
119-
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:value requiringSecureCoding:YES error:&error];
120-
XCTAssertNil(error);
121-
XCTAssertNotNil(data);
122-
123-
self.storage[key] = data;
124-
return YES;
125-
}
126-
127-
- (BOOL)controller:(MTRDeviceController *)controller
128-
removeValueForKey:(NSString *)key
129-
securityLevel:(MTRStorageSecurityLevel)securityLevel
130-
sharingType:(MTRStorageSharingType)sharingType
131-
{
132-
XCTAssertEqualObjects(_controllerID, controller.uniqueIdentifier);
133-
self.storage[key] = nil;
134-
return YES;
135-
}
136-
137-
@end
138-
13972
@interface MTRPerControllerStorageTestsCertificateIssuer : NSObject <MTROperationalCertificateIssuer>
14073
- (instancetype)initWithRootCertificate:(MTRCertificateDERBytes)rootCertificate
14174
intermediateCertificate:(MTRCertificateDERBytes _Nullable)intermediateCertificate
@@ -319,7 +252,7 @@ - (nullable MTRDeviceController *)startControllerWithRootKeys:(MTRTestKeys *)roo
319252
operationalKeys:(MTRTestKeys *)operationalKeys
320253
fabricID:(NSNumber *)fabricID
321254
nodeID:(NSNumber *)nodeID
322-
storage:(MTRPerControllerStorageTestsStorageDelegate *)storage
255+
storage:(MTRTestPerControllerStorage *)storage
323256
caseAuthenticatedTags:(nullable NSSet *)caseAuthenticatedTags
324257
error:(NSError * __autoreleasing *)error
325258
certificateIssuer:
@@ -376,7 +309,7 @@ - (nullable MTRDeviceController *)startControllerWithRootKeys:(MTRTestKeys *)roo
376309
operationalKeys:(MTRTestKeys *)operationalKeys
377310
fabricID:(NSNumber *)fabricID
378311
nodeID:(NSNumber *)nodeID
379-
storage:(MTRPerControllerStorageTestsStorageDelegate *)storage
312+
storage:(MTRTestPerControllerStorage *)storage
380313
error:(NSError * __autoreleasing *)error
381314
certificateIssuer:
382315
(MTRPerControllerStorageTestsCertificateIssuer * __autoreleasing *)certificateIssuer
@@ -395,7 +328,7 @@ - (nullable MTRDeviceController *)startControllerWithRootKeys:(MTRTestKeys *)roo
395328
operationalKeys:(MTRTestKeys *)operationalKeys
396329
fabricID:(NSNumber *)fabricID
397330
nodeID:(NSNumber *)nodeID
398-
storage:(MTRPerControllerStorageTestsStorageDelegate *)storage
331+
storage:(MTRTestPerControllerStorage *)storage
399332
caseAuthenticatedTags:(nullable NSSet *)caseAuthenticatedTags
400333
error:(NSError * __autoreleasing *)error
401334
{
@@ -413,7 +346,7 @@ - (nullable MTRDeviceController *)startControllerWithRootKeys:(MTRTestKeys *)roo
413346
operationalKeys:(MTRTestKeys *)operationalKeys
414347
fabricID:(NSNumber *)fabricID
415348
nodeID:(NSNumber *)nodeID
416-
storage:(MTRPerControllerStorageTestsStorageDelegate *)storage
349+
storage:(MTRTestPerControllerStorage *)storage
417350
error:(NSError * __autoreleasing *)error
418351
{
419352
return [self startControllerWithRootKeys:rootKeys
@@ -436,7 +369,7 @@ - (void)test001_BasicControllerStartup
436369
__auto_type * operationalKeys = [[MTRTestKeys alloc] init];
437370
XCTAssertNotNil(operationalKeys);
438371

439-
__auto_type * storageDelegate = [[MTRPerControllerStorageTestsStorageDelegate alloc] initWithControllerID:[NSUUID UUID]];
372+
__auto_type * storageDelegate = [[MTRTestPerControllerStorage alloc] initWithControllerID:[NSUUID UUID]];
440373

441374
NSNumber * nodeID = @(123);
442375
NSNumber * fabricID = @(456);
@@ -481,7 +414,7 @@ - (void)test002_TryStartingTwoControllersWithSameNodeID
481414
__auto_type * operationalKeys = [[MTRTestKeys alloc] init];
482415
XCTAssertNotNil(operationalKeys);
483416

484-
__auto_type * storageDelegate = [[MTRPerControllerStorageTestsStorageDelegate alloc] initWithControllerID:[NSUUID UUID]];
417+
__auto_type * storageDelegate = [[MTRTestPerControllerStorage alloc] initWithControllerID:[NSUUID UUID]];
485418

486419
NSNumber * nodeID = @(123);
487420
NSNumber * fabricID = @(456);
@@ -526,7 +459,7 @@ - (void)test003_TestTwoControllersSameUUID
526459
XCTAssertNotNil(operationalKeys);
527460
XCTAssertEqual(operationalKeys.signatureCount, 0);
528461

529-
__auto_type * storageDelegate = [[MTRPerControllerStorageTestsStorageDelegate alloc] initWithControllerID:[NSUUID UUID]];
462+
__auto_type * storageDelegate = [[MTRTestPerControllerStorage alloc] initWithControllerID:[NSUUID UUID]];
530463

531464
NSNumber * fabricID = @(456);
532465

@@ -578,7 +511,7 @@ - (void)test004_TestBasicSessionResumption
578511
XCTAssertNotNil(operationalKeys);
579512
XCTAssertEqual(operationalKeys.signatureCount, 0);
580513

581-
__auto_type * storageDelegate = [[MTRPerControllerStorageTestsStorageDelegate alloc] initWithControllerID:[NSUUID UUID]];
514+
__auto_type * storageDelegate = [[MTRTestPerControllerStorage alloc] initWithControllerID:[NSUUID UUID]];
582515

583516
NSNumber * nodeID = @(123);
584517
NSNumber * fabricID = @(456);
@@ -675,7 +608,7 @@ - (void)test005_TestSessionResumptionDataClearingNodeIDChanged
675608
XCTAssertNotNil(operationalKeys);
676609
XCTAssertEqual(operationalKeys.signatureCount, 0);
677610

678-
__auto_type * storageDelegate = [[MTRPerControllerStorageTestsStorageDelegate alloc] initWithControllerID:[NSUUID UUID]];
611+
__auto_type * storageDelegate = [[MTRTestPerControllerStorage alloc] initWithControllerID:[NSUUID UUID]];
679612

680613
NSNumber * nodeID1 = @(123);
681614
NSNumber * nodeID2 = @(246);
@@ -778,7 +711,7 @@ - (void)test006_TestSessionResumptionDataClearingCATsChanged
778711
XCTAssertNotNil(operationalKeys);
779712
XCTAssertEqual(operationalKeys.signatureCount, 0);
780713

781-
__auto_type * storageDelegate = [[MTRPerControllerStorageTestsStorageDelegate alloc] initWithControllerID:[NSUUID UUID]];
714+
__auto_type * storageDelegate = [[MTRTestPerControllerStorage alloc] initWithControllerID:[NSUUID UUID]];
782715

783716
NSNumber * nodeID = @(123);
784717
NSNumber * fabricID = @(456);
@@ -887,7 +820,7 @@ - (void)test007_TestMultipleControllers
887820
NSNumber * fabricID1 = @(1);
888821
NSNumber * fabricID2 = @(2);
889822

890-
__auto_type * storageDelegate1 = [[MTRPerControllerStorageTestsStorageDelegate alloc] initWithControllerID:[NSUUID UUID]];
823+
__auto_type * storageDelegate1 = [[MTRTestPerControllerStorage alloc] initWithControllerID:[NSUUID UUID]];
891824

892825
// Start several controllers that have distinct identities but share some
893826
// node/fabric IDs.
@@ -904,7 +837,7 @@ - (void)test007_TestMultipleControllers
904837
XCTAssertNotNil(controller1);
905838
XCTAssertTrue([controller1 isRunning]);
906839

907-
__auto_type * storageDelegate2 = [[MTRPerControllerStorageTestsStorageDelegate alloc] initWithControllerID:[NSUUID UUID]];
840+
__auto_type * storageDelegate2 = [[MTRTestPerControllerStorage alloc] initWithControllerID:[NSUUID UUID]];
908841
MTRDeviceController * controller2 = [self startControllerWithRootKeys:rootKeys
909842
operationalKeys:operationalKeys
910843
fabricID:fabricID1
@@ -915,7 +848,7 @@ - (void)test007_TestMultipleControllers
915848
XCTAssertNotNil(controller2);
916849
XCTAssertTrue([controller2 isRunning]);
917850

918-
__auto_type * storageDelegate3 = [[MTRPerControllerStorageTestsStorageDelegate alloc] initWithControllerID:[NSUUID UUID]];
851+
__auto_type * storageDelegate3 = [[MTRTestPerControllerStorage alloc] initWithControllerID:[NSUUID UUID]];
919852
MTRDeviceController * controller3 = [self startControllerWithRootKeys:rootKeys
920853
operationalKeys:operationalKeys
921854
fabricID:fabricID2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
/**
2+
* Copyright (c) 2023 Project CHIP Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#import <Foundation/Foundation.h>
18+
#import <Matter/Matter.h>
19+
20+
NS_ASSUME_NONNULL_BEGIN
21+
22+
@interface MTRTestPerControllerStorage : NSObject <MTRDeviceControllerStorageDelegate>
23+
24+
- (instancetype)initWithControllerID:(NSUUID *)controllerID;
25+
26+
@property (nonatomic, readonly) NSUUID * controllerID;
27+
28+
- (nullable id<NSSecureCoding>)controller:(MTRDeviceController *)controller
29+
valueForKey:(NSString *)key
30+
securityLevel:(MTRStorageSecurityLevel)securityLevel
31+
sharingType:(MTRStorageSharingType)sharingType;
32+
- (BOOL)controller:(MTRDeviceController *)controller
33+
storeValue:(id<NSSecureCoding>)value
34+
forKey:(NSString *)key
35+
securityLevel:(MTRStorageSecurityLevel)securityLevel
36+
sharingType:(MTRStorageSharingType)sharingType;
37+
- (BOOL)controller:(MTRDeviceController *)controller
38+
removeValueForKey:(NSString *)key
39+
securityLevel:(MTRStorageSecurityLevel)securityLevel
40+
sharingType:(MTRStorageSharingType)sharingType;
41+
@end
42+
43+
NS_ASSUME_NONNULL_END
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,85 @@
1+
/**
2+
* Copyright (c) 2023 Project CHIP Authors
3+
*
4+
* Licensed under the Apache License, Version 2.0 (the "License");
5+
* you may not use this file except in compliance with the License.
6+
* You may obtain a copy of the License at
7+
*
8+
* http://www.apache.org/licenses/LICENSE-2.0
9+
*
10+
* Unless required by applicable law or agreed to in writing, software
11+
* distributed under the License is distributed on an "AS IS" BASIS,
12+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13+
* See the License for the specific language governing permissions and
14+
* limitations under the License.
15+
*/
16+
17+
#import <XCTest/XCTest.h>
18+
19+
#import "MTRTestPerControllerStorage.h"
20+
21+
@interface MTRTestPerControllerStorage ()
22+
@property (nonatomic, readonly) NSMutableDictionary<NSString *, NSData *> * storage;
23+
@end
24+
25+
@implementation MTRTestPerControllerStorage
26+
27+
- (instancetype)initWithControllerID:(NSUUID *)controllerID
28+
{
29+
if (!(self = [super init])) {
30+
return nil;
31+
}
32+
33+
_storage = [[NSMutableDictionary alloc] init];
34+
_controllerID = controllerID;
35+
return self;
36+
}
37+
38+
- (nullable id<NSSecureCoding>)controller:(MTRDeviceController *)controller
39+
valueForKey:(NSString *)key
40+
securityLevel:(MTRStorageSecurityLevel)securityLevel
41+
sharingType:(MTRStorageSharingType)sharingType
42+
{
43+
XCTAssertEqualObjects(_controllerID, controller.uniqueIdentifier);
44+
45+
__auto_type * data = self.storage[key];
46+
if (data == nil) {
47+
return data;
48+
}
49+
50+
NSError * error;
51+
id value = [NSKeyedUnarchiver unarchivedObjectOfClasses:MTRDeviceControllerStorageClasses() fromData:data error:&error];
52+
XCTAssertNil(error);
53+
XCTAssertNotNil(data);
54+
55+
return value;
56+
}
57+
58+
- (BOOL)controller:(MTRDeviceController *)controller
59+
storeValue:(id<NSSecureCoding>)value
60+
forKey:(NSString *)key
61+
securityLevel:(MTRStorageSecurityLevel)securityLevel
62+
sharingType:(MTRStorageSharingType)sharingType
63+
{
64+
XCTAssertEqualObjects(_controllerID, controller.uniqueIdentifier);
65+
66+
NSError * error;
67+
NSData * data = [NSKeyedArchiver archivedDataWithRootObject:value requiringSecureCoding:YES error:&error];
68+
XCTAssertNil(error);
69+
XCTAssertNotNil(data);
70+
71+
self.storage[key] = data;
72+
return YES;
73+
}
74+
75+
- (BOOL)controller:(MTRDeviceController *)controller
76+
removeValueForKey:(NSString *)key
77+
securityLevel:(MTRStorageSecurityLevel)securityLevel
78+
sharingType:(MTRStorageSharingType)sharingType
79+
{
80+
XCTAssertEqualObjects(_controllerID, controller.uniqueIdentifier);
81+
self.storage[key] = nil;
82+
return YES;
83+
}
84+
85+
@end

src/darwin/Framework/Matter.xcodeproj/project.pbxproj

+6
Original file line numberDiff line numberDiff line change
@@ -172,6 +172,7 @@
172172
517BF3F0282B62B800A8B7DB /* MTRCertificates.h in Headers */ = {isa = PBXBuildFile; fileRef = 517BF3EE282B62B800A8B7DB /* MTRCertificates.h */; settings = {ATTRIBUTES = (Public, ); }; };
173173
517BF3F1282B62B800A8B7DB /* MTRCertificates.mm in Sources */ = {isa = PBXBuildFile; fileRef = 517BF3EF282B62B800A8B7DB /* MTRCertificates.mm */; };
174174
517BF3F3282B62CB00A8B7DB /* MTRCertificateTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 517BF3F2282B62CB00A8B7DB /* MTRCertificateTests.m */; };
175+
518D3F832AA132DC008E0007 /* MTRTestPerControllerStorage.m in Sources */ = {isa = PBXBuildFile; fileRef = 518D3F812AA132DC008E0007 /* MTRTestPerControllerStorage.m */; };
175176
519498322A25581C00B3BABE /* MTRSetupPayloadSerializerTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 519498312A25581C00B3BABE /* MTRSetupPayloadSerializerTests.m */; };
176177
51A2F1322A00402A00F03298 /* MTRDataValueParserTests.m in Sources */ = {isa = PBXBuildFile; fileRef = 51A2F1312A00402A00F03298 /* MTRDataValueParserTests.m */; };
177178
51B22C1E2740CB0A008D5055 /* MTRStructsObjc.h in Headers */ = {isa = PBXBuildFile; fileRef = 51B22C1D2740CB0A008D5055 /* MTRStructsObjc.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -486,6 +487,8 @@
486487
517BF3EE282B62B800A8B7DB /* MTRCertificates.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRCertificates.h; sourceTree = "<group>"; };
487488
517BF3EF282B62B800A8B7DB /* MTRCertificates.mm */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.objcpp; path = MTRCertificates.mm; sourceTree = "<group>"; };
488489
517BF3F2282B62CB00A8B7DB /* MTRCertificateTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRCertificateTests.m; sourceTree = "<group>"; };
490+
518D3F812AA132DC008E0007 /* MTRTestPerControllerStorage.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRTestPerControllerStorage.m; sourceTree = "<group>"; };
491+
518D3F822AA132DC008E0007 /* MTRTestPerControllerStorage.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRTestPerControllerStorage.h; sourceTree = "<group>"; };
489492
519498312A25581C00B3BABE /* MTRSetupPayloadSerializerTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRSetupPayloadSerializerTests.m; sourceTree = "<group>"; };
490493
51A2F1312A00402A00F03298 /* MTRDataValueParserTests.m */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.objc; path = MTRDataValueParserTests.m; sourceTree = "<group>"; };
491494
51B22C1D2740CB0A008D5055 /* MTRStructsObjc.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MTRStructsObjc.h; sourceTree = "<group>"; };
@@ -968,6 +971,8 @@
968971
51742B4829CB5F45009974FE /* MTRTestResetCommissioneeHelper.h */,
969972
51742B4929CB5FC0009974FE /* MTRTestResetCommissioneeHelper.m */,
970973
51C984612A61CE2A00B0AD9A /* MTRFabricInfoChecker.h */,
974+
518D3F822AA132DC008E0007 /* MTRTestPerControllerStorage.h */,
975+
518D3F812AA132DC008E0007 /* MTRTestPerControllerStorage.m */,
971976
51C984602A61CE2A00B0AD9A /* MTRFabricInfoChecker.m */,
972977
);
973978
path = TestHelpers;
@@ -1581,6 +1586,7 @@
15811586
1E5801C328941C050033A199 /* MTRTestOTAProvider.m in Sources */,
15821587
5A6FEC9D27B5E48900F25F42 /* MTRXPCProtocolTests.m in Sources */,
15831588
1EE0805E2A44875E008A03C2 /* MTRCommissionableBrowserTests.m in Sources */,
1589+
518D3F832AA132DC008E0007 /* MTRTestPerControllerStorage.m in Sources */,
15841590
51339B1F2A0DA64D00C798C1 /* MTRCertificateValidityTests.m in Sources */,
15851591
5173A47929C0E82300F67F48 /* MTRFabricInfoTests.m in Sources */,
15861592
5143851E2A65885500EDC8E6 /* MTRSwiftPairingTests.swift in Sources */,

0 commit comments

Comments
 (0)