阿里sdk
This commit is contained in:
@@ -0,0 +1,133 @@
|
||||
//
|
||||
// ScheduleCenterV4Test.m
|
||||
// AlicloudHttpDNSTests
|
||||
//
|
||||
// Created by xuyecan on 2024/6/16.
|
||||
// Copyright © 2024 alibaba-inc.com. All rights reserved.
|
||||
//
|
||||
|
||||
#import <Foundation/Foundation.h>
|
||||
#import <OCMock/OCMock.h>
|
||||
#import "TestBase.h"
|
||||
#import "HttpdnsHostObject.h"
|
||||
#import "HttpdnsScheduleCenter.h"
|
||||
#import "HttpdnsService.h"
|
||||
#import "HttpdnsService_Internal.h"
|
||||
#import "HttpdnsRequest_Internal.h"
|
||||
#import "HttpdnsScheduleExecutor.h"
|
||||
#import "HttpdnsRemoteResolver.h"
|
||||
|
||||
|
||||
/**
|
||||
* 由于使用OCMock在连续的测试用例中重复Mock对象(即使每次都已经stopMocking)会有内存错乱的问题,
|
||||
* 目前还解决不了,所以这个类中的测试case,需要手动单独执行
|
||||
*/
|
||||
@interface ScheduleCenterV4Test : TestBase
|
||||
|
||||
@end
|
||||
|
||||
|
||||
@implementation ScheduleCenterV4Test
|
||||
|
||||
+ (void)setUp {
|
||||
[super setUp];
|
||||
}
|
||||
|
||||
+ (void)tearDown {
|
||||
[super tearDown];
|
||||
}
|
||||
|
||||
- (void)setUp {
|
||||
[super setUp];
|
||||
|
||||
static dispatch_once_t onceToken;
|
||||
dispatch_once(&onceToken, ^{
|
||||
self.httpdns = [[HttpDnsService alloc] initWithAccountID:100000];
|
||||
});
|
||||
|
||||
[self.httpdns setLogEnabled:YES];
|
||||
[self.httpdns setReuseExpiredIPEnabled:NO];
|
||||
|
||||
[self.httpdns setLogHandler:self];
|
||||
|
||||
self.currentTimeStamp = [[NSDate date] timeIntervalSince1970];
|
||||
}
|
||||
|
||||
- (void)tearDown {
|
||||
[super tearDown];
|
||||
}
|
||||
|
||||
- (void)testUpdateFailureWillMoveToNextUpdateServer {
|
||||
[self presetNetworkEnvAsIpv4];
|
||||
|
||||
HttpdnsScheduleExecutor *realRequest = [HttpdnsScheduleExecutor new];
|
||||
id mockRequest = OCMPartialMock(realRequest);
|
||||
OCMStub([mockRequest fetchRegionConfigFromServer:[OCMArg any] error:(NSError * __autoreleasing *)[OCMArg anyPointer]])
|
||||
.andReturn(nil);
|
||||
|
||||
id mockRequestClass = OCMClassMock([HttpdnsScheduleExecutor class]);
|
||||
OCMStub([mockRequestClass new]).andReturn(mockRequest);
|
||||
|
||||
HttpdnsScheduleCenter *scheduleCenter = [[HttpdnsScheduleCenter alloc] initWithAccountId:100000];
|
||||
|
||||
NSArray<NSString *> *updateServerHostList = [scheduleCenter currentUpdateServerV4HostList];
|
||||
|
||||
int updateServerCount = (int)[updateServerHostList count];
|
||||
XCTAssertGreaterThan(updateServerCount, 0);
|
||||
|
||||
int startIndex = [scheduleCenter currentActiveUpdateServerHostIndex];
|
||||
|
||||
// 指定已经重试2次,避免重试影响计算
|
||||
[scheduleCenter asyncUpdateRegionScheduleConfigAtRetry:2];
|
||||
[NSThread sleepForTimeInterval:0.1];
|
||||
|
||||
OCMVerify([mockRequest fetchRegionConfigFromServer:[OCMArg any] error:(NSError * __autoreleasing *)[OCMArg anyPointer]]);
|
||||
|
||||
int currentIndex = [scheduleCenter currentActiveUpdateServerHostIndex];
|
||||
XCTAssertEqual((startIndex + 1) % updateServerCount, currentIndex);
|
||||
|
||||
for (int i = 0; i < updateServerCount; i++) {
|
||||
[scheduleCenter asyncUpdateRegionScheduleConfigAtRetry:2];
|
||||
[NSThread sleepForTimeInterval:0.1];
|
||||
}
|
||||
|
||||
int finalIndex = [scheduleCenter currentActiveUpdateServerHostIndex];
|
||||
XCTAssertEqual(currentIndex, finalIndex % updateServerCount);
|
||||
|
||||
[NSThread sleepForTimeInterval:3];
|
||||
}
|
||||
|
||||
- (void)testResolveFailureWillMoveToNextServiceServer {
|
||||
[self presetNetworkEnvAsIpv4];
|
||||
|
||||
id mockResolver = OCMPartialMock([HttpdnsRemoteResolver new]);
|
||||
OCMStub([mockResolver resolve:[OCMArg any] error:(NSError * __autoreleasing *)[OCMArg anyPointer]])
|
||||
.andDo(^(NSInvocation *invocation) {
|
||||
NSError *mockError = [NSError errorWithDomain:@"com.example.error" code:123 userInfo:@{NSLocalizedDescriptionKey: @"Mock error"}];
|
||||
NSError *__autoreleasing *errorPtr = nil;
|
||||
[invocation getArgument:&errorPtr atIndex:3];
|
||||
if (errorPtr) {
|
||||
*errorPtr = mockError;
|
||||
}
|
||||
});
|
||||
|
||||
id mockResolverClass = OCMClassMock([HttpdnsRemoteResolver class]);
|
||||
OCMStub([mockResolverClass new]).andReturn(mockResolver);
|
||||
|
||||
HttpdnsScheduleCenter *scheduleCenter = [[HttpdnsScheduleCenter alloc] initWithAccountId:100000];
|
||||
int startIndex = [scheduleCenter currentActiveServiceServerHostIndex];
|
||||
int serviceServerCount = (int)[scheduleCenter currentServiceServerV4HostList].count;
|
||||
|
||||
HttpdnsRequest *request = [[HttpdnsRequest alloc] initWithHost:@"mock" queryIpType:HttpdnsQueryIPTypeAuto];
|
||||
[request becomeBlockingRequest];
|
||||
|
||||
HttpdnsRequestManager *requestManager = self.httpdns.requestManager;
|
||||
|
||||
[requestManager executeRequest:request retryCount:1];
|
||||
|
||||
int secondIndex = [scheduleCenter currentActiveServiceServerHostIndex];
|
||||
|
||||
XCTAssertEqual((startIndex + 1) % serviceServerCount, secondIndex);
|
||||
}
|
||||
|
||||
@end
|
||||
Reference in New Issue
Block a user