#if OCTAGON
#ifndef OTTestsBase_h
#define OTTestsBase_h
#import <Foundation/Foundation.h>
#import <XCTest/XCTest.h>
#import <OCMock/OCMock.h>
#import "keychain/ot/OTContext.h"
#import "keychain/ot/OTJoiningConfiguration.h"
#import "keychain/ot/OTEscrowKeys.h"
#import "keychain/ot/OTDefines.h"
#import "keychain/ot/OTControl.h"
#import "keychain/ot/OTManager.h"
#import "keychain/ot/OTClique.h"
#import "keychain/ot/OTCuttlefishContext.h"
#import "keychain/ot/OTClientStateMachine.h"
#import "KeychainCircle/KCJoiningRequestSession+Internal.h"
#import "KeychainCircle/KCJoiningAcceptSession+Internal.h"
#import "KeychainCircle/KCJoiningSession.h"
#import <Security/SecKey.h>
#import <Security/SecBase.h>
#import <SecurityFoundation/SFKey.h>
#import <SecurityFoundation/SFKey_Private.h>
#include "keychain/SecureObjectSync/SOSPeerInfoInternal.h"
#import "keychain/ckks/tests/CloudKitKeychainSyncingTestsBase.h"
#import "keychain/ckks/tests/CloudKitMockXCTest.h"
#import "keychain/ckks/tests/MockCloudKit.h"
#import "keychain/ckks/tests/CKKSTests.h"
#import "keychain/ckks/CKKS.h"
#import "keychain/ckks/CKKSViewManager.h"
#import <corecrypto/cchkdf.h>
#import <corecrypto/ccsha2.h>
#import <corecrypto/ccec.h>
NS_ASSUME_NONNULL_BEGIN
@interface OTTestsBase : CloudKitKeychainSyncingTestsBase <OTContextIdentityProvider>
@property id otControl;
@property id otControlAcceptor;
@property OTManager* manager;
@property OTManager* managerForAcceptor;
@property (nonatomic, strong) OTCloudStore* cloudStore;
@property (nonatomic, strong) OTLocalStore* localStore;
@property (nonatomic, strong) FakeCKZone* otFakeZone;
@property (nonatomic, strong) CKRecordZoneID* otZoneID;
@property (nonatomic, strong) OTContext* context;
@property (nonatomic, strong) _SFECKeyPair* peerSigningKey;
@property (nonatomic, strong) _SFECKeyPair* peerEncryptionKey;
@property (nonatomic, strong) NSData* secret;
@property (nonatomic, strong) NSString* recordName;
@property (nonatomic, strong) NSString* egoPeerID;
@property (nonatomic, strong) NSString* sosPeerID;
@property (nonatomic, strong) OTEscrowKeys* escrowKeys;
@property OTCuttlefishContext* cuttlefishContext;
@property (nonatomic, strong) FakeCKZone* rampZone;
@property (nonatomic, strong) CKRecord *enrollRampRecord;
@property (nonatomic, strong) CKRecord *restoreRampRecord;
@property (nonatomic, strong) CKRecord *cfuRampRecord;
@property (nonatomic, strong) OTRamp *enroll;
@property (nonatomic, strong) OTRamp *restore;
@property (nonatomic, strong) OTRamp *cfu;
@property (nonatomic, strong) CKKSNearFutureScheduler* scheduler;
@property (nonatomic, strong) XCTestExpectation *expectation;
@property (nonatomic, strong) XCTestExpectation *spiBlockExpectation;
@property (nonatomic, strong) CKRecordZoneID* rampZoneID;
- (OTRamp*)fakeRamp:(NSString*)recordName
featureName:(NSString*)featureName
accountTracker:(CKKSAccountStateTracker*)accountTracker
lockStateStracker:(CKKSLockStateTracker*)lockStateTracker
reachabilityTracker:(CKKSReachabilityTracker*)reachabilityTracker;
-(void) expectAddedCKModifyRecords:(NSDictionary<NSString*, NSNumber*>*)records holdFetch:(BOOL)shouldHoldTheFetch;
-(void) expectDeletedCKModifyRecords:(NSDictionary<NSString*, NSNumber*>*)records holdFetch:(BOOL)shouldHoldTheFetch;
-(void) setUpRampRecordsInCloudKitWithFeatureOn;
-(void) setUpRampRecordsInCloudKitWithFeatureOff;
@end
NS_ASSUME_NONNULL_END
#endif
#endif