You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-ios/Signal/test/network/dns/DnsManagerTest.m

86 lines
3.8 KiB
Objective-C

#import <XCTest/XCTest.h>
#import "DnsManager.h"
#import "TestUtil.h"
#import "Util.h"
#import "IpAddress.h"
#import "ThreadManager.h"
#import "CancelTokenSource.h"
#import <netdb.h>
#define infrastructureTestHostName @"relay.whispersystems.org"
#define reliableHostName @"example.com"
#define invalidHostname @"∆©˙∆¨¥©©˜¨¥©˜†¥µ¬¬¨˙µ†¥∫®∂®†"
#define nonExistentHostname [NSString stringWithFormat:@"%@kfurmtludehntlgihmvnduyebntiinvbudydepqowudyfnrkt.com", \
[[CryptoTools generateSecureRandomData:10] encodedAsBase64]]
@interface DnsManagerTest : XCTestCase
@end
@implementation DnsManagerTest
-(void) testQueryAddresses_Sequential {
Future* f1 = [DnsManager asyncQueryAddressesForDomainName:reliableHostName
unlessCancelled:nil];
testChurnUntil([f1 hasSucceeded], 5.0);
test([(NSArray*)[f1 forceGetResult] count] > 0);
Future* f2 = [DnsManager asyncQueryAddressesForDomainName:invalidHostname
unlessCancelled:nil];
testChurnUntil([f2 hasFailed], 5.0);
Future* f3 = [DnsManager asyncQueryAddressesForDomainName:nonExistentHostname
unlessCancelled:nil];
testChurnUntil([f3 hasFailed], 5.0);
Future* f4 = [DnsManager asyncQueryAddressesForDomainName:infrastructureTestHostName
unlessCancelled:nil];
testChurnUntil([f4 hasSucceeded], 5.0);
test([f4 hasSucceeded] && [(NSArray*)[f4 forceGetResult] count] > 0);
}
-(void) testQueryAddresses_Concurrent {
Future* f1 = [DnsManager asyncQueryAddressesForDomainName:reliableHostName
unlessCancelled:nil];
Future* f2 = [DnsManager asyncQueryAddressesForDomainName:invalidHostname
unlessCancelled:nil];
Future* f3 = [DnsManager asyncQueryAddressesForDomainName:nonExistentHostname
unlessCancelled:nil];
Future* f4 = [DnsManager asyncQueryAddressesForDomainName:infrastructureTestHostName
unlessCancelled:nil];
testChurnUntil([f1 hasSucceeded] && [f2 hasFailed] && [f3 hasFailed] && [f4 hasSucceeded], 5.0);
test([f1 hasSucceeded] && [(NSArray*)[f1 forceGetResult] count] > 0);
test([f4 hasSucceeded] && [(NSArray*)[f4 forceGetResult] count] > 0);
}
-(void) testQueryAddresses_Cancel {
CancelTokenSource* c = [CancelTokenSource cancelTokenSource];
Future* f1 = [DnsManager asyncQueryAddressesForDomainName:reliableHostName
unlessCancelled:[c getToken]];
Future* f2 = [DnsManager asyncQueryAddressesForDomainName:invalidHostname
unlessCancelled:[c getToken]];
Future* f3 = [DnsManager asyncQueryAddressesForDomainName:nonExistentHostname
unlessCancelled:[c getToken]];
Future* f4 = [DnsManager asyncQueryAddressesForDomainName:infrastructureTestHostName
unlessCancelled:[c getToken]];
[c cancel];
testChurnUntil(![f1 isIncomplete] && [f2 hasFailed] && [f3 hasFailed] && ![f4 isIncomplete], 5.0);
test([f1 hasSucceeded] || [[f1 forceGetFailure] conformsToProtocol:@protocol(CancelToken)]);
test([f2 hasFailed]);
test([f3 hasFailed]);
test([f4 hasSucceeded] || [[f4 forceGetFailure] conformsToProtocol:@protocol(CancelToken)]);
}
-(void)testQueryAddresses_FastCancel {
CancelTokenSource* c = [CancelTokenSource cancelTokenSource];
Future* f = [DnsManager asyncQueryAddressesForDomainName:reliableHostName
unlessCancelled:[c getToken]];
[c cancel];
test(![f isIncomplete]);
}
@end