Misc. cleanup: net/
* Plumb helper results back with base::expected instead of adding assertion failures directly, so tests fail with exactly one error and we can use macros to help handle the expected objects in the future * Use FilePath::LossyDisplayName() instead of value() for human-readable output * Use base::NumberToString() to avoid casting a size_t down to an int Bug: none Change-Id: I983192a2dd1c395631307ae3dbe2eccf9eb0d383 Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/4501203 Commit-Queue: Peter Kasting <pkasting@chromium.org> Auto-Submit: Peter Kasting <pkasting@chromium.org> Commit-Queue: David Schinazi <dschinazi@chromium.org> Reviewed-by: David Schinazi <dschinazi@chromium.org> Cr-Commit-Position: refs/heads/main@{#1139013}
This commit is contained in:

committed by
Chromium LUCI CQ

parent
15f159357c
commit
d1fc3e9c5a
@ -19,9 +19,10 @@
|
||||
#include "base/memory/raw_ptr.h"
|
||||
#include "base/strings/string_number_conversions.h"
|
||||
#include "base/strings/string_util.h"
|
||||
#include "base/strings/stringprintf.h"
|
||||
#include "base/strings/utf_string_conversions.h"
|
||||
#include "base/task/thread_pool/thread_pool_instance.h"
|
||||
#include "base/threading/thread.h"
|
||||
#include "base/types/expected.h"
|
||||
#include "base/values.h"
|
||||
#include "build/build_config.h"
|
||||
#include "net/base/test_completion_callback.h"
|
||||
@ -99,7 +100,8 @@ void AddEntries(FileNetLogObserver* logger,
|
||||
// ParsedNetLog holds the parsed contents of a NetLog file (constants, events,
|
||||
// and polled data).
|
||||
struct ParsedNetLog {
|
||||
::testing::AssertionResult InitFromFileContents(const std::string& input);
|
||||
base::expected<void, std::string> InitFromFileContents(
|
||||
const std::string& input);
|
||||
const base::Value::Dict* GetEvent(size_t i) const;
|
||||
|
||||
// Initializes the ParsedNetLog by parsing a JSON file.
|
||||
@ -116,37 +118,37 @@ struct ParsedNetLog {
|
||||
raw_ptr<const base::Value::Dict> polled_data = nullptr;
|
||||
};
|
||||
|
||||
::testing::AssertionResult ParsedNetLog::InitFromFileContents(
|
||||
base::expected<void, std::string> ParsedNetLog::InitFromFileContents(
|
||||
const std::string& input) {
|
||||
if (input.empty()) {
|
||||
return ::testing::AssertionFailure() << "input is empty";
|
||||
return base::unexpected("input is empty");
|
||||
}
|
||||
|
||||
auto parsed_json = base::JSONReader::ReadAndReturnValueWithError(input);
|
||||
if (!parsed_json.has_value()) {
|
||||
return ::testing::AssertionFailure() << parsed_json.error().message;
|
||||
return base::unexpected(parsed_json.error().message);
|
||||
}
|
||||
root = std::move(*parsed_json);
|
||||
|
||||
const base::Value::Dict* dict = root.GetIfDict();
|
||||
if (!dict) {
|
||||
return ::testing::AssertionFailure() << "Not a dictionary";
|
||||
return base::unexpected("Not a dictionary");
|
||||
}
|
||||
|
||||
events = dict->FindListByDottedPath("events");
|
||||
if (!events) {
|
||||
return ::testing::AssertionFailure() << "No events list";
|
||||
return base::unexpected("No events list");
|
||||
}
|
||||
|
||||
constants = dict->FindDictByDottedPath("constants");
|
||||
if (!constants) {
|
||||
return ::testing::AssertionFailure() << "No constants dictionary";
|
||||
return base::unexpected("No constants dictionary");
|
||||
}
|
||||
|
||||
// Polled data is optional (ignore success).
|
||||
polled_data = dict->FindDictByDottedPath("polledData");
|
||||
|
||||
return ::testing::AssertionSuccess();
|
||||
return base::ok();
|
||||
}
|
||||
|
||||
// Returns the event at index |i|, or nullptr if there is none.
|
||||
@ -159,21 +161,21 @@ const base::Value::Dict* ParsedNetLog::GetEvent(size_t i) const {
|
||||
|
||||
// Creates a ParsedNetLog by reading a NetLog from a file. Returns nullptr on
|
||||
// failure.
|
||||
std::unique_ptr<ParsedNetLog> ReadNetLogFromDisk(
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> ReadNetLogFromDisk(
|
||||
const base::FilePath& log_path) {
|
||||
std::string input;
|
||||
if (!base::ReadFileToString(log_path, &input)) {
|
||||
ADD_FAILURE() << "Failed reading file: " << log_path.value();
|
||||
return nullptr;
|
||||
return base::unexpected("Failed reading file: " +
|
||||
base::UTF16ToUTF8(log_path.LossyDisplayName()));
|
||||
}
|
||||
|
||||
std::unique_ptr<ParsedNetLog> result = std::make_unique<ParsedNetLog>();
|
||||
|
||||
::testing::AssertionResult init_result = result->InitFromFileContents(input);
|
||||
EXPECT_TRUE(init_result);
|
||||
if (!init_result)
|
||||
return nullptr;
|
||||
|
||||
base::expected<void, std::string> init_result =
|
||||
result->InitFromFileContents(input);
|
||||
if (!init_result.has_value()) {
|
||||
return base::unexpected(init_result.error());
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
@ -433,9 +435,10 @@ TEST_P(FileNetLogObserverTest, GeneratesValidJSONWithNoEvents) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
ASSERT_EQ(0u, log->events->size());
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
ASSERT_EQ(0u, (*log)->events->size());
|
||||
}
|
||||
|
||||
TEST_P(FileNetLogObserverTest, GeneratesValidJSONWithOneEvent) {
|
||||
@ -451,9 +454,10 @@ TEST_P(FileNetLogObserverTest, GeneratesValidJSONWithOneEvent) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
ASSERT_EQ(1u, log->events->size());
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
ASSERT_EQ(1u, (*log)->events->size());
|
||||
}
|
||||
|
||||
TEST_P(FileNetLogObserverTest, GeneratesValidJSONWithOneEventPreExisting) {
|
||||
@ -469,9 +473,10 @@ TEST_P(FileNetLogObserverTest, GeneratesValidJSONWithOneEventPreExisting) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
ASSERT_EQ(1u, log->events->size());
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
ASSERT_EQ(1u, (*log)->events->size());
|
||||
}
|
||||
|
||||
TEST_P(FileNetLogObserverTest, PreExistingFileBroken) {
|
||||
@ -512,11 +517,12 @@ TEST_P(FileNetLogObserverTest, CustomConstants) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
|
||||
// Check that custom constant was correctly printed.
|
||||
ExpectDictionaryContainsProperty(*log->constants, kConstantKey,
|
||||
ExpectDictionaryContainsProperty(*(*log)->constants, kConstantKey,
|
||||
kConstantString);
|
||||
}
|
||||
|
||||
@ -539,13 +545,14 @@ TEST_P(FileNetLogObserverTest, GeneratesValidJSONWithPolledData) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
ASSERT_EQ(0u, log->events->size());
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
ASSERT_EQ(0u, (*log)->events->size());
|
||||
|
||||
// Make sure additional information is present and validate it.
|
||||
ASSERT_TRUE(log->polled_data);
|
||||
ExpectDictionaryContainsProperty(*log->polled_data, kDummyPolledDataPath,
|
||||
ASSERT_TRUE((*log)->polled_data);
|
||||
ExpectDictionaryContainsProperty(*(*log)->polled_data, kDummyPolledDataPath,
|
||||
kDummyPolledDataString);
|
||||
}
|
||||
|
||||
@ -564,9 +571,10 @@ TEST_P(FileNetLogObserverTest, LogModeRecorded) {
|
||||
CreateAndStartObserving(nullptr, test_case.capture_mode);
|
||||
logger_->StopObserving(nullptr, closure.closure());
|
||||
closure.WaitForResult();
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
ExpectDictionaryContainsProperty(*log->constants, "logCaptureMode",
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
ExpectDictionaryContainsProperty(*(*log)->constants, "logCaptureMode",
|
||||
test_case.expected_value);
|
||||
}
|
||||
}
|
||||
@ -586,8 +594,8 @@ TEST_P(FileNetLogObserverTest, AddEventsFromMultipleThreads) {
|
||||
// Start all the threads. Waiting for them to start is to hopefuly improve
|
||||
// the odds of hitting interesting races once events start being added.
|
||||
for (size_t i = 0; i < threads.size(); ++i) {
|
||||
threads[i] = std::make_unique<base::Thread>(
|
||||
base::StringPrintf("WorkerThread%i", static_cast<int>(i)));
|
||||
threads[i] = std::make_unique<base::Thread>("WorkerThread" +
|
||||
base::NumberToString(i));
|
||||
threads[i]->Start();
|
||||
threads[i]->WaitUntilThreadStarted();
|
||||
}
|
||||
@ -632,10 +640,11 @@ TEST_P(FileNetLogObserverTest, AddEventsFromMultipleThreads) {
|
||||
#endif
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
// Check that the expected number of events were written to disk.
|
||||
EXPECT_EQ(kNumEventsAddedPerThread * kNumThreads, log->events->size());
|
||||
EXPECT_EQ(kNumEventsAddedPerThread * kNumThreads, (*log)->events->size());
|
||||
|
||||
#if BUILDFLAG(IS_FUCHSIA)
|
||||
LOG(ERROR) << "Teardown.";
|
||||
@ -660,9 +669,10 @@ TEST_F(FileNetLogObserverBoundedTest, EqualToOneFile) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
VerifyEventsInLog(log.get(), kNumEvents, kNumEvents);
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
VerifyEventsInLog(log->get(), kNumEvents, kNumEvents);
|
||||
}
|
||||
|
||||
// Sends enough events to fill one file, and partially fill a second file.
|
||||
@ -687,9 +697,10 @@ TEST_F(FileNetLogObserverBoundedTest, OneEventOverOneFile) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
VerifyEventsInLog(log.get(), kNumEvents, kNumEvents);
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
VerifyEventsInLog(log->get(), kNumEvents, kNumEvents);
|
||||
}
|
||||
|
||||
// Sends enough events to the observer to completely fill two files.
|
||||
@ -710,9 +721,10 @@ TEST_F(FileNetLogObserverBoundedTest, EqualToTwoFiles) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
VerifyEventsInLog(log.get(), kNumEvents, kNumEvents);
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
VerifyEventsInLog(log->get(), kNumEvents, kNumEvents);
|
||||
}
|
||||
|
||||
// Sends exactly enough events to the observer to completely fill all files,
|
||||
@ -736,9 +748,10 @@ TEST_F(FileNetLogObserverBoundedTest, FillAllFilesNoOverwriting) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
VerifyEventsInLog(log.get(), kNumEvents, kNumEvents);
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
VerifyEventsInLog(log->get(), kNumEvents, kNumEvents);
|
||||
}
|
||||
|
||||
// Sends more events to the observer than will fill the WriteQueue, forcing the
|
||||
@ -763,10 +776,11 @@ TEST_F(FileNetLogObserverBoundedTest, DropOldEventsFromWriteQueue) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
VerifyEventsInLog(
|
||||
log.get(), kNumEvents,
|
||||
log->get(), kNumEvents,
|
||||
static_cast<size_t>(kTotalNumFiles * ((kFileSize - 1) / kEventSize + 1)));
|
||||
}
|
||||
|
||||
@ -802,9 +816,10 @@ TEST_F(FileNetLogObserverBoundedTest, OverwriteAllFiles) {
|
||||
(kTotalNumFiles - 1) * events_per_file + events_in_last_file;
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
VerifyEventsInLog(log.get(), kNumEvents,
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
VerifyEventsInLog(log->get(), kNumEvents,
|
||||
static_cast<size_t>(num_events_in_files));
|
||||
}
|
||||
|
||||
@ -842,9 +857,10 @@ TEST_F(FileNetLogObserverBoundedTest, PartiallyOverwriteFiles) {
|
||||
(kTotalNumFiles - 1) * events_per_file + events_in_last_file;
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
VerifyEventsInLog(log.get(), kNumEvents,
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
VerifyEventsInLog(log->get(), kNumEvents,
|
||||
static_cast<size_t>(num_events_in_files));
|
||||
}
|
||||
|
||||
@ -947,9 +963,10 @@ TEST_F(FileNetLogObserverBoundedTest, BlockEventsFile0) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
ASSERT_EQ(0u, log->events->size());
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
ASSERT_EQ(0u, (*log)->events->size());
|
||||
}
|
||||
|
||||
// Make sure that when using bounded mode with a pre-existing output file,
|
||||
@ -1007,9 +1024,10 @@ TEST_F(FileNetLogObserverBoundedTest, LargeWriteQueueSize) {
|
||||
closure.WaitForResult();
|
||||
|
||||
// Verify the written log.
|
||||
std::unique_ptr<ParsedNetLog> log = ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log);
|
||||
ASSERT_EQ(3u, log->events->size());
|
||||
base::expected<std::unique_ptr<ParsedNetLog>, std::string> log =
|
||||
ReadNetLogFromDisk(log_path_);
|
||||
ASSERT_TRUE(log.has_value());
|
||||
ASSERT_EQ(3u, (*log)->events->size());
|
||||
}
|
||||
|
||||
void AddEntriesViaNetLog(NetLog* net_log, int num_entries) {
|
||||
@ -1024,8 +1042,8 @@ TEST_P(FileNetLogObserverTest, AddEventsFromMultipleThreadsWithStopObserving) {
|
||||
// Start all the threads. Waiting for them to start is to hopefully improve
|
||||
// the odds of hitting interesting races once events start being added.
|
||||
for (size_t i = 0; i < threads.size(); ++i) {
|
||||
threads[i] = std::make_unique<base::Thread>(
|
||||
base::StringPrintf("WorkerThread%i", static_cast<int>(i)));
|
||||
threads[i] = std::make_unique<base::Thread>("WorkerThread" +
|
||||
base::NumberToString(i));
|
||||
threads[i]->Start();
|
||||
threads[i]->WaitUntilThreadStarted();
|
||||
}
|
||||
@ -1060,8 +1078,8 @@ TEST_P(FileNetLogObserverTest,
|
||||
// Start all the threads. Waiting for them to start is to hopefully improve
|
||||
// the odds of hitting interesting races once events start being added.
|
||||
for (size_t i = 0; i < threads.size(); ++i) {
|
||||
threads[i] = std::make_unique<base::Thread>(
|
||||
base::StringPrintf("WorkerThread%i", static_cast<int>(i)));
|
||||
threads[i] = std::make_unique<base::Thread>("WorkerThread" +
|
||||
base::NumberToString(i));
|
||||
threads[i]->Start();
|
||||
threads[i]->WaitUntilThreadStarted();
|
||||
}
|
||||
|
Reference in New Issue
Block a user