crashpad/util/mach/bootstrap_test.cc
Mark Mentovai ba24acb86c ios: Split bootstrap out from mach_extensions
mach_extensions is sensible on iOS, but bootstrap is not available
outside of macOS. To allow mach_extensions to be used cleanly on iOS,
the bootstrap code is moved into its own macOS-specific file.

Bug: crashpad:31
Change-Id: I7bf9d5194253b563954a1e55fbf67a16f686e8ff
Reviewed-on: https://chromium-review.googlesource.com/c/crashpad/crashpad/+/2154529
Reviewed-by: Justin Cohen <justincohen@chromium.org>
Commit-Queue: Mark Mentovai <mark@chromium.org>
2020-04-17 20:54:47 +00:00

71 lines
2.4 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

// Copyright 2020 The Crashpad Authors. All rights reserved.
//
// 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.
#include "util/mach/bootstrap.h"
#include "base/mac/scoped_mach_port.h"
#include "gtest/gtest.h"
#include "util/mach/mach_extensions.h"
#include "util/misc/random_string.h"
namespace crashpad {
namespace test {
namespace {
TEST(Bootstrap, BootstrapCheckInAndLookUp) {
// This should always exist.
base::mac::ScopedMachSendRight report_crash(
BootstrapLookUp("com.apple.ReportCrash"));
EXPECT_NE(report_crash, kMachPortNull);
std::string service_name = "org.chromium.crashpad.test.bootstrap_check_in.";
service_name.append(RandomString());
{
// The new service hasnt checked in yet, so this should fail.
base::mac::ScopedMachSendRight send(BootstrapLookUp(service_name));
EXPECT_EQ(send, kMachPortNull);
// Check it in.
base::mac::ScopedMachReceiveRight receive(BootstrapCheckIn(service_name));
EXPECT_NE(receive, kMachPortNull);
// Now it should be possible to look up the new service.
send = BootstrapLookUp(service_name);
EXPECT_NE(send, kMachPortNull);
// It shouldnt be possible to check the service in while its active.
base::mac::ScopedMachReceiveRight receive_2(BootstrapCheckIn(service_name));
EXPECT_EQ(receive_2, kMachPortNull);
}
// The new service should be gone now.
base::mac::ScopedMachSendRight send(BootstrapLookUp(service_name));
EXPECT_EQ(send, kMachPortNull);
// It should be possible to check it in again.
base::mac::ScopedMachReceiveRight receive(BootstrapCheckIn(service_name));
EXPECT_NE(receive, kMachPortNull);
}
TEST(Bootstrap, SystemCrashReporterHandler) {
base::mac::ScopedMachSendRight system_crash_reporter_handler(
SystemCrashReporterHandler());
EXPECT_TRUE(system_crash_reporter_handler.is_valid());
}
} // namespace
} // namespace test
} // namespace crashpad