blob: f7b3bf97e30d6132eb58887683ff63249c99a35b [file] [log] [blame]
//
// Copyright 2022 Google Inc.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import <XCTest/XCTest.h>
#import "Service/Sources/EDOHostService+Private.h"
#import "Service/Sources/EDOHostService.h"
#import "Service/Sources/EDOObject+Private.h"
#import "Service/Sources/EDOObject.h"
#import "Service/Sources/EDOObjectAliveMessage.h"
#import "Service/Sources/EDOServicePort.h"
@interface EDOObjectAliveMessageTests : XCTestCase
@end
@implementation EDOObjectAliveMessageTests {
EDOHostService *_service;
}
- (void)setUp {
[super setUp];
NSObject *rootObject = [[NSObject alloc] init];
_service = [EDOHostService serviceWithPort:0
rootObject:rootObject
queue:dispatch_get_main_queue()];
}
- (void)tearDown {
[_service invalidate];
[super tearDown];
}
/** Verifies EDOObjectAliveRequest results are @c YES when object is stored in the service. */
- (void)testPassObjectAliveQueryForCachedObject {
EDOObject *proxy = [_service distantObjectForLocalObject:[[NSObject alloc] init] hostPort:nil];
EDOObjectAliveRequest *request = [EDOObjectAliveRequest requestWithObject:proxy];
EDOObjectAliveResponse *response =
(EDOObjectAliveResponse *)EDOObjectAliveRequest.requestHandler(request, _service);
XCTAssertTrue(response.alive);
}
/** Verifies EDOObjectAliveRequest results are @c YES when object is root object. */
- (void)testPassObjectAliveQueryForRootObject {
EDOServicePort *port = [EDOServicePort servicePortWithPort:_service.port
hostPort:_service.port.hostPort];
EDOObject *proxy = [EDOObject edo_remoteProxyFromUnderlyingObject:_service.rootLocalObject
withPort:port];
EDOObjectAliveRequest *request = [EDOObjectAliveRequest requestWithObject:proxy];
EDOObjectAliveResponse *response =
(EDOObjectAliveResponse *)EDOObjectAliveRequest.requestHandler(request, _service);
XCTAssertTrue(response.alive);
}
/** Verifies EDOObjectAliveRequest results are @c NO when object is not stored in the service. */
- (void)testFailObjectAliveQueryForUncachedObject {
EDOServicePort *port = [EDOServicePort servicePortWithPort:_service.port
hostPort:_service.port.hostPort];
EDOObject *proxy = [EDOObject edo_remoteProxyFromUnderlyingObject:[[NSObject alloc] init]
withPort:port];
EDOObjectAliveRequest *request = [EDOObjectAliveRequest requestWithObject:proxy];
EDOObjectAliveResponse *response =
(EDOObjectAliveResponse *)EDOObjectAliveRequest.requestHandler(request, _service);
XCTAssertFalse(response.alive);
}
/** Verifies EDOObjectAliveRequest results are @c NO when port is not match. */
- (void)testFailObjectAliveQueryForMismatchedPort {
EDOServicePort *port = [EDOServicePort servicePortWithPort:0 serviceName:@"not exist"];
EDOObject *proxy = [EDOObject edo_remoteProxyFromUnderlyingObject:_service.rootLocalObject
withPort:port];
EDOObjectAliveRequest *request = [EDOObjectAliveRequest requestWithObject:proxy];
EDOObjectAliveResponse *response =
(EDOObjectAliveResponse *)EDOObjectAliveRequest.requestHandler(request, _service);
XCTAssertFalse(response.alive);
}
/** Verifies EDOObjectAliveRequest results are @c NO when object is removed from the service. */
- (void)testFailObjectAliveQueryForRemovedObject {
EDOObject *proxy = [_service distantObjectForLocalObject:[[NSObject alloc] init] hostPort:nil];
[_service removeObjectWithAddress:proxy.remoteAddress];
EDOObjectAliveRequest *request = [EDOObjectAliveRequest requestWithObject:proxy];
EDOObjectAliveResponse *response =
(EDOObjectAliveResponse *)EDOObjectAliveRequest.requestHandler(request, _service);
XCTAssertFalse(response.alive);
}
@end