mirror of
https://github.com/chromium/crashpad.git
synced 2024-12-31 01:43:03 +08:00
c49da9caef
As mentioned at https://chromium-review.googlesource.com/c/chromium/src/+/735820#message-e8b199498d8b850f2612c46648069d819dd47517, the typical Windows behavior for symbolic links requires administrative privileges. Symbolic links are available to non-administrators in Windows 10.0.15063 and later (1703, Creators Update), provided that developer mode has been enabled and SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE is passed to CreateSymbolicLink(). See https://blogs.windows.com/buildingapps/2016/12/02/symlinks-windows-10/. This adds SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE to uses of CreateSymbolicLink(), and creates test::CanCreateSymbolicLinks() to determine whether symbolic link creation is possible. Tests that exercise symbolic links are adapted to gate all symbolic link operations on this test. Test: crashpad_util_test DirectoryReader.*:Filesystem.* Change-Id: I8250cadd974ffcc7abe32701a0d5bc487061baf0 Bug: crashpad: Reviewed-on: https://chromium-review.googlesource.com/739472 Commit-Queue: Mark Mentovai <mark@chromium.org> Reviewed-by: Joshua Peraza <jperaza@chromium.org> Reviewed-by: Scott Graham <scottmg@chromium.org>
88 lines
3.2 KiB
C++
88 lines
3.2 KiB
C++
// Copyright 2017 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.
|
||
|
||
#ifndef CRASHPAD_TEST_GTEST_DISABLED_H_
|
||
#define CRASHPAD_TEST_GTEST_DISABLED_H_
|
||
|
||
#include <string>
|
||
#include <vector>
|
||
|
||
#include "base/macros.h"
|
||
#include "gtest/gtest.h"
|
||
|
||
//! \file
|
||
|
||
namespace crashpad {
|
||
namespace test {
|
||
|
||
//! \brief Provides support for dynamically disabled gtest tests.
|
||
//!
|
||
//! A test runner must register this with gtest as follows prior to calling
|
||
//! `RUN_ALL_TESTS()`:
|
||
//! \code
|
||
//! testing::AddGlobalTestEnvironment(
|
||
//! crashpad::test::DisabledTestGtestEnvironment::Get());
|
||
//! \endcode
|
||
class DisabledTestGtestEnvironment final : public testing::Environment {
|
||
public:
|
||
//! \brief Returns the DisabledTestGtestEnvironment singleton instance,
|
||
//! creating it if necessary.
|
||
static DisabledTestGtestEnvironment* Get();
|
||
|
||
//! \brief Displays a message about a test being disabled, and arranges for
|
||
//! this information to be duplicated in TearDown().
|
||
//!
|
||
//! This method is for the internal use of the DISABLED_TEST() macro. Do not
|
||
//! call it directly, use the macro instead.
|
||
void DisabledTest();
|
||
|
||
private:
|
||
DisabledTestGtestEnvironment();
|
||
~DisabledTestGtestEnvironment() override;
|
||
|
||
// testing::Environment:
|
||
void TearDown() override;
|
||
|
||
std::vector<std::string> disabled_tests_;
|
||
|
||
DISALLOW_COPY_AND_ASSIGN(DisabledTestGtestEnvironment);
|
||
};
|
||
|
||
} // namespace test
|
||
} // namespace crashpad
|
||
|
||
//! \brief Displays a message about a test being disabled, and returns early.
|
||
//!
|
||
//! gtest only provides a mechanism for tests to be disabled statically, by
|
||
//! prefixing test case names or test names with `DISABLED_`. When it is
|
||
//! necessary to disable tests dynamically, gtest provides no assistance. This
|
||
//! macro displays a message about the disabled test and returns early. The
|
||
//! dynamically disabled test will also be displayed during gtest global test
|
||
//! environment tear-down before the test executable exits.
|
||
//!
|
||
//! This macro may only be invoked from the context of a gtest test.
|
||
//!
|
||
//! There’s a long-standing <a
|
||
//! href="https://groups.google.com/d/topic/googletestframework/Nwh3u7YFuN4">gtest
|
||
//! feature request</a> to provide this functionality directly in gtest, but
|
||
//! since it hasn’t been implemented, this macro provides a local mechanism to
|
||
//! achieve it.
|
||
#define DISABLED_TEST() \
|
||
do { \
|
||
::crashpad::test::DisabledTestGtestEnvironment::Get()->DisabledTest(); \
|
||
return; \
|
||
} while (false)
|
||
|
||
#endif // CRASHPAD_TEST_GTEST_DISABLED_H_
|