xref: /aosp_15_r20/external/grpc-grpc/src/objective-c/tests/UnitTests/GRPCCallOptionsTests.m (revision cc02d7e222339f7a4f6ba5f422e6413f4bd931f2)
1*cc02d7e2SAndroid Build Coastguard Worker/*
2*cc02d7e2SAndroid Build Coastguard Worker *
3*cc02d7e2SAndroid Build Coastguard Worker * Copyright 2022 gRPC authors.
4*cc02d7e2SAndroid Build Coastguard Worker *
5*cc02d7e2SAndroid Build Coastguard Worker * Licensed under the Apache License, Version 2.0 (the "License");
6*cc02d7e2SAndroid Build Coastguard Worker * you may not use this file except in compliance with the License.
7*cc02d7e2SAndroid Build Coastguard Worker * You may obtain a copy of the License at
8*cc02d7e2SAndroid Build Coastguard Worker *
9*cc02d7e2SAndroid Build Coastguard Worker *     http://www.apache.org/licenses/LICENSE-2.0
10*cc02d7e2SAndroid Build Coastguard Worker *
11*cc02d7e2SAndroid Build Coastguard Worker * Unless required by applicable law or agreed to in writing, software
12*cc02d7e2SAndroid Build Coastguard Worker * distributed under the License is distributed on an "AS IS" BASIS,
13*cc02d7e2SAndroid Build Coastguard Worker * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*cc02d7e2SAndroid Build Coastguard Worker * See the License for the specific language governing permissions and
15*cc02d7e2SAndroid Build Coastguard Worker * limitations under the License.
16*cc02d7e2SAndroid Build Coastguard Worker *
17*cc02d7e2SAndroid Build Coastguard Worker */
18*cc02d7e2SAndroid Build Coastguard Worker
19*cc02d7e2SAndroid Build Coastguard Worker#import <XCTest/XCTest.h>
20*cc02d7e2SAndroid Build Coastguard Worker
21*cc02d7e2SAndroid Build Coastguard Worker#import <GRPCClient/GRPCCallOptions.h>
22*cc02d7e2SAndroid Build Coastguard Worker
23*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kGRPCCallOptionsTestServerAuthority = @"dummy";
24*cc02d7e2SAndroid Build Coastguard Workerstatic NSTimeInterval kGRPCCallOptionsTestTimeout = 11;
25*cc02d7e2SAndroid Build Coastguard Workerstatic BOOL kGRPCCallOptionsTestFlowControl = YES;
26*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kGRPCCallOptionsTestOAuth2Token = @"token";
27*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kGRPCCallOptionsTestUserAgentPrefix = @"test_prefix";
28*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kGRPCCallOptionsTestUserAgentSuffix = @"test_suffix";
29*cc02d7e2SAndroid Build Coastguard Workerstatic NSUInteger kGRPCCallOptionsTestResponseSizeLimit = 81;
30*cc02d7e2SAndroid Build Coastguard Workerstatic GRPCCompressionAlgorithm kGRPCCallOptionsTestCompressionAlgorithm = GRPCCompressDeflate;
31*cc02d7e2SAndroid Build Coastguard Workerstatic BOOL kGRPCCallOptionsTestRetryEnabled = YES;
32*cc02d7e2SAndroid Build Coastguard Workerstatic NSTimeInterval kGRPCCallOptionsTestMaxRetryInterval = 101;
33*cc02d7e2SAndroid Build Coastguard Workerstatic NSTimeInterval kGRPCCallOptionsTestMinRetryInterval = 23;
34*cc02d7e2SAndroid Build Coastguard Workerstatic double kGRPCCallOptionsTestRetryFactor = 2.12;
35*cc02d7e2SAndroid Build Coastguard Workerstatic NSTimeInterval kGRPCCallOptionsTestKeepAliveTimeout = 120;
36*cc02d7e2SAndroid Build Coastguard Workerstatic NSTimeInterval kGRPCCallOptionsTestKeepAliveInterval = 60;
37*cc02d7e2SAndroid Build Coastguard Workerstatic NSTimeInterval kGRPCCallOptionsTestConnectMaxBackoff = 180;
38*cc02d7e2SAndroid Build Coastguard Workerstatic NSTimeInterval kGRPCCallOptionsTestConnectMinTimeout = 210;
39*cc02d7e2SAndroid Build Coastguard Workerstatic NSTimeInterval kGRPCCallOptionsTestConnectInitialBackoff = 12;
40*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kGRPCCallOptionsTestPEMPrivateKey = @"dummy_key";
41*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kGRPCCallOptionsTestPEMRootCertificates = @"dummy_cert";
42*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kGRPCCallOptionsTestPEMCertificateChain = @"dummy_chain";
43*cc02d7e2SAndroid Build Coastguard Workerstatic GRPCTransportType kGRPCCallOptionsTestTransportType = GRPCTransportTypeChttp2BoringSSL;
44*cc02d7e2SAndroid Build Coastguard Workerstatic GRPCTransportID kGRPCCallOptionsTestTransportID = "dummy_transport";
45*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kGRPCCallOptionsTestHostNameOverride = @"localhost";
46*cc02d7e2SAndroid Build Coastguard Workerstatic NSString *const kGRPCCallOptionsTestChannelPoolDomain = @"dummy_domain";
47*cc02d7e2SAndroid Build Coastguard Workerstatic NSUInteger kGRPCCallOptionsTestChannelID = 111;
48*cc02d7e2SAndroid Build Coastguard Worker
49*cc02d7e2SAndroid Build Coastguard Worker@interface GRPCCallOptionsTests : XCTestCase
50*cc02d7e2SAndroid Build Coastguard Worker
51*cc02d7e2SAndroid Build Coastguard Worker@end
52*cc02d7e2SAndroid Build Coastguard Worker
53*cc02d7e2SAndroid Build Coastguard Worker@implementation GRPCCallOptionsTests
54*cc02d7e2SAndroid Build Coastguard Worker
55*cc02d7e2SAndroid Build Coastguard Worker/** Verify a valid immutable copy can be created from GRPCCallOptions. */
56*cc02d7e2SAndroid Build Coastguard Worker- (void)testCreateImmutableCopyFromImmutable {
57*cc02d7e2SAndroid Build Coastguard Worker  GRPCCallOptions *opt = [[GRPCCallOptions alloc] init];
58*cc02d7e2SAndroid Build Coastguard Worker  GRPCCallOptions *subject = [opt copy];
59*cc02d7e2SAndroid Build Coastguard Worker  XCTAssertTrue([subject isKindOfClass:[GRPCCallOptions class]]);
60*cc02d7e2SAndroid Build Coastguard Worker}
61*cc02d7e2SAndroid Build Coastguard Worker
62*cc02d7e2SAndroid Build Coastguard Worker/** Verify a valid mutable copy can be created from GRPCCallOptions. */
63*cc02d7e2SAndroid Build Coastguard Worker- (void)testCreateMutableCopyFromImmutable {
64*cc02d7e2SAndroid Build Coastguard Worker  GRPCCallOptions *opt = [[GRPCCallOptions alloc] init];
65*cc02d7e2SAndroid Build Coastguard Worker  GRPCMutableCallOptions *subject = [opt mutableCopy];
66*cc02d7e2SAndroid Build Coastguard Worker  XCTAssertTrue([subject isKindOfClass:[GRPCMutableCallOptions class]]);
67*cc02d7e2SAndroid Build Coastguard Worker}
68*cc02d7e2SAndroid Build Coastguard Worker
69*cc02d7e2SAndroid Build Coastguard Worker/** Verify a valid mutable copy can be created from GRPCMutableCallOptions. */
70*cc02d7e2SAndroid Build Coastguard Worker- (void)testCreateMutableCopyFromMutable {
71*cc02d7e2SAndroid Build Coastguard Worker  GRPCMutableCallOptions *opt = [[GRPCMutableCallOptions alloc] init];
72*cc02d7e2SAndroid Build Coastguard Worker  GRPCMutableCallOptions *subject = [opt mutableCopy];
73*cc02d7e2SAndroid Build Coastguard Worker  XCTAssertTrue([subject isKindOfClass:[GRPCMutableCallOptions class]]);
74*cc02d7e2SAndroid Build Coastguard Worker}
75*cc02d7e2SAndroid Build Coastguard Worker
76*cc02d7e2SAndroid Build Coastguard Worker/** Verify a valid immutable copy can be created from GRPCMutableCallOptions. */
77*cc02d7e2SAndroid Build Coastguard Worker- (void)testCreateImmutableCopyFromMutable {
78*cc02d7e2SAndroid Build Coastguard Worker  GRPCMutableCallOptions *mutableOpt = [[GRPCMutableCallOptions alloc] init];
79*cc02d7e2SAndroid Build Coastguard Worker  GRPCCallOptions *subject = [mutableOpt copy];
80*cc02d7e2SAndroid Build Coastguard Worker  XCTAssertTrue([subject isKindOfClass:[GRPCCallOptions class]]);
81*cc02d7e2SAndroid Build Coastguard Worker}
82*cc02d7e2SAndroid Build Coastguard Worker
83*cc02d7e2SAndroid Build Coastguard Worker/** Verify property values are copied when copy from mutable options. */
84*cc02d7e2SAndroid Build Coastguard Worker- (void)testCopyFromMutableCallOptions {
85*cc02d7e2SAndroid Build Coastguard Worker  GRPCMutableCallOptions *mutableOpt = [self testMutableCallOptions];
86*cc02d7e2SAndroid Build Coastguard Worker  XCTAssertTrue([self isEqualToTestCallOptions:[mutableOpt copy]]);
87*cc02d7e2SAndroid Build Coastguard Worker  XCTAssertTrue([self isEqualToTestCallOptions:[mutableOpt mutableCopy]]);
88*cc02d7e2SAndroid Build Coastguard Worker}
89*cc02d7e2SAndroid Build Coastguard Worker
90*cc02d7e2SAndroid Build Coastguard Worker/** Verify property values are copied when copy from immutable options */
91*cc02d7e2SAndroid Build Coastguard Worker- (void)testCopyFromImmutableCallOptions {
92*cc02d7e2SAndroid Build Coastguard Worker  GRPCCallOptions *opt = [[self testMutableCallOptions] copy];
93*cc02d7e2SAndroid Build Coastguard Worker  XCTAssertTrue([self isEqualToTestCallOptions:[opt copy]]);
94*cc02d7e2SAndroid Build Coastguard Worker  XCTAssertTrue([self isEqualToTestCallOptions:[opt mutableCopy]]);
95*cc02d7e2SAndroid Build Coastguard Worker}
96*cc02d7e2SAndroid Build Coastguard Worker
97*cc02d7e2SAndroid Build Coastguard Worker#pragma mark - Private
98*cc02d7e2SAndroid Build Coastguard Worker
99*cc02d7e2SAndroid Build Coastguard Worker- (GRPCMutableCallOptions *)testMutableCallOptions {
100*cc02d7e2SAndroid Build Coastguard Worker  GRPCMutableCallOptions *mutableOpt = [[GRPCMutableCallOptions alloc] init];
101*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.serverAuthority = kGRPCCallOptionsTestServerAuthority;
102*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.timeout = kGRPCCallOptionsTestTimeout;
103*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.flowControlEnabled = kGRPCCallOptionsTestFlowControl;
104*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.oauth2AccessToken = kGRPCCallOptionsTestOAuth2Token;
105*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.initialMetadata = @{@"key" : @"value"};
106*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.userAgentPrefix = kGRPCCallOptionsTestUserAgentPrefix;
107*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.userAgentSuffix = kGRPCCallOptionsTestUserAgentSuffix;
108*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.responseSizeLimit = kGRPCCallOptionsTestResponseSizeLimit;
109*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.compressionAlgorithm = kGRPCCallOptionsTestCompressionAlgorithm;
110*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.retryEnabled = kGRPCCallOptionsTestRetryEnabled;
111*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.maxRetryInterval = kGRPCCallOptionsTestMaxRetryInterval;
112*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.minRetryInterval = kGRPCCallOptionsTestMinRetryInterval;
113*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.retryFactor = kGRPCCallOptionsTestRetryFactor;
114*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.keepaliveTimeout = kGRPCCallOptionsTestKeepAliveTimeout;
115*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.keepaliveInterval = kGRPCCallOptionsTestKeepAliveInterval;
116*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.connectMaxBackoff = kGRPCCallOptionsTestConnectMaxBackoff;
117*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.connectMinTimeout = kGRPCCallOptionsTestConnectMinTimeout;
118*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.connectInitialBackoff = kGRPCCallOptionsTestConnectInitialBackoff;
119*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.additionalChannelArgs = @{@"extra_key" : @"extra_value"};
120*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.PEMPrivateKey = kGRPCCallOptionsTestPEMPrivateKey;
121*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.PEMRootCertificates = kGRPCCallOptionsTestPEMRootCertificates;
122*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.PEMCertificateChain = kGRPCCallOptionsTestPEMCertificateChain;
123*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.transportType = kGRPCCallOptionsTestTransportType;
124*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.transport = kGRPCCallOptionsTestTransportID;
125*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.hostNameOverride = kGRPCCallOptionsTestHostNameOverride;
126*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.channelPoolDomain = kGRPCCallOptionsTestChannelPoolDomain;
127*cc02d7e2SAndroid Build Coastguard Worker  mutableOpt.channelID = kGRPCCallOptionsTestChannelID;
128*cc02d7e2SAndroid Build Coastguard Worker  return mutableOpt;
129*cc02d7e2SAndroid Build Coastguard Worker}
130*cc02d7e2SAndroid Build Coastguard Worker
131*cc02d7e2SAndroid Build Coastguard Worker- (BOOL)isEqualToTestCallOptions:(GRPCCallOptions *)callOpt {
132*cc02d7e2SAndroid Build Coastguard Worker  return [callOpt.serverAuthority isEqualToString:kGRPCCallOptionsTestServerAuthority] &&
133*cc02d7e2SAndroid Build Coastguard Worker         callOpt.timeout == kGRPCCallOptionsTestTimeout &&
134*cc02d7e2SAndroid Build Coastguard Worker         callOpt.flowControlEnabled == kGRPCCallOptionsTestFlowControl &&
135*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.oauth2AccessToken isEqualToString:kGRPCCallOptionsTestOAuth2Token] &&
136*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.initialMetadata isEqualToDictionary:@{@"key" : @"value"}] &&
137*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.userAgentPrefix isEqualToString:kGRPCCallOptionsTestUserAgentPrefix] &&
138*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.userAgentSuffix isEqualToString:kGRPCCallOptionsTestUserAgentSuffix] &&
139*cc02d7e2SAndroid Build Coastguard Worker         callOpt.responseSizeLimit == kGRPCCallOptionsTestResponseSizeLimit &&
140*cc02d7e2SAndroid Build Coastguard Worker         callOpt.compressionAlgorithm == kGRPCCallOptionsTestCompressionAlgorithm &&
141*cc02d7e2SAndroid Build Coastguard Worker         callOpt.retryEnabled == kGRPCCallOptionsTestRetryEnabled &&
142*cc02d7e2SAndroid Build Coastguard Worker         callOpt.maxRetryInterval == kGRPCCallOptionsTestMaxRetryInterval &&
143*cc02d7e2SAndroid Build Coastguard Worker         callOpt.minRetryInterval == kGRPCCallOptionsTestMinRetryInterval &&
144*cc02d7e2SAndroid Build Coastguard Worker         callOpt.retryFactor == kGRPCCallOptionsTestRetryFactor &&
145*cc02d7e2SAndroid Build Coastguard Worker         callOpt.keepaliveTimeout == kGRPCCallOptionsTestKeepAliveTimeout &&
146*cc02d7e2SAndroid Build Coastguard Worker         callOpt.keepaliveInterval == kGRPCCallOptionsTestKeepAliveInterval &&
147*cc02d7e2SAndroid Build Coastguard Worker         callOpt.connectMaxBackoff == kGRPCCallOptionsTestConnectMaxBackoff &&
148*cc02d7e2SAndroid Build Coastguard Worker         callOpt.connectMinTimeout == kGRPCCallOptionsTestConnectMinTimeout &&
149*cc02d7e2SAndroid Build Coastguard Worker         callOpt.connectInitialBackoff == kGRPCCallOptionsTestConnectInitialBackoff &&
150*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.additionalChannelArgs isEqualToDictionary:@{@"extra_key" : @"extra_value"}] &&
151*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.PEMPrivateKey isEqualToString:kGRPCCallOptionsTestPEMPrivateKey] &&
152*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.PEMCertificateChain isEqualToString:kGRPCCallOptionsTestPEMCertificateChain] &&
153*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.PEMRootCertificates isEqualToString:kGRPCCallOptionsTestPEMRootCertificates] &&
154*cc02d7e2SAndroid Build Coastguard Worker         callOpt.transportType == kGRPCCallOptionsTestTransportType &&
155*cc02d7e2SAndroid Build Coastguard Worker         callOpt.transport == kGRPCCallOptionsTestTransportID &&
156*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.hostNameOverride isEqualToString:kGRPCCallOptionsTestHostNameOverride] &&
157*cc02d7e2SAndroid Build Coastguard Worker         [callOpt.channelPoolDomain isEqualToString:kGRPCCallOptionsTestChannelPoolDomain] &&
158*cc02d7e2SAndroid Build Coastguard Worker         callOpt.channelID == kGRPCCallOptionsTestChannelID;
159*cc02d7e2SAndroid Build Coastguard Worker}
160*cc02d7e2SAndroid Build Coastguard Worker
161*cc02d7e2SAndroid Build Coastguard Worker@end
162