#include "net/log/net_log_values.h"
#include <limits>
#include "base/values.h"
#include "net/log/file_net_log_observer.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace net {
std::string GetNetLogString(std::string_view raw) {
base::Value value = NetLogStringValue(raw);
EXPECT_TRUE(value.is_string());
return value.GetString();
}
TEST(NetLogValuesTest, NetLogASCIIStringValue) {
EXPECT_EQ("ascii\nstrin\0g", GetNetLogString("ascii\nstrin\0g"));
EXPECT_EQ("%ESCAPED:\xE2\x80\x8B utf-8 string %E2%98%83",
GetNetLogString("utf-8 string \xE2\x98\x83"));
EXPECT_EQ("%20", GetNetLogString("%20"));
EXPECT_EQ("%ESCAPED:\xE2\x80\x8B %E2%98%83 %2520",
GetNetLogString("\xE2\x98\x83 %20"));
for (uint8_t c = 0; c <= 0x7F; ++c) {
if (c == '%')
continue;
std::string s;
s.push_back(c);
EXPECT_EQ("%ESCAPED:\xE2\x80\x8B %E2 " + s, GetNetLogString("\xE2 " + s));
}
}
TEST(NetLogValuesTest, NetLogBinaryValue) {
auto value1 = NetLogBinaryValue(nullptr, 0);
ASSERT_TRUE(value1.is_string());
EXPECT_EQ("", value1.GetString());
const uint8_t kBytes[] = {0x00, 0xF3, 0xF8, 0xFF};
auto value2 = NetLogBinaryValue(kBytes, std::size(kBytes));
ASSERT_TRUE(value2.is_string());
EXPECT_EQ("APP4/w==", value2.GetString());
}
template <typename T>
std::string SerializedNetLogNumber(T num) {
auto value = NetLogNumberValue(num);
EXPECT_TRUE(value.is_string() || value.is_int() || value.is_double());
return SerializeNetLogValueToJson(value);
}
std::string SerializedNetLogInt64(int64_t num) {
return SerializedNetLogNumber(num);
}
std::string SerializedNetLogUint64(uint64_t num) {
return SerializedNetLogNumber(num);
}
TEST(NetLogValuesTest, NetLogNumberValue) {
const int64_t kMinInt = std::numeric_limits<int32_t>::min();
const int64_t kMaxInt = std::numeric_limits<int32_t>::max();
EXPECT_EQ("0", SerializedNetLogInt64(0));
EXPECT_EQ("0", SerializedNetLogUint64(0));
EXPECT_EQ("-1", SerializedNetLogInt64(-1));
EXPECT_EQ("-2147483648", SerializedNetLogInt64(kMinInt));
EXPECT_EQ("2147483647", SerializedNetLogInt64(kMaxInt));
EXPECT_EQ("-2147483649", SerializedNetLogInt64(kMinInt - 1));
EXPECT_EQ("2147483648", SerializedNetLogInt64(kMaxInt + 1));
EXPECT_EQ("4294967294", SerializedNetLogInt64(0xFFFFFFFF - 1));
const int64_t kMaxSafeInteger = 9007199254740991;
EXPECT_EQ("-9007199254740991", SerializedNetLogInt64(-kMaxSafeInteger));
EXPECT_EQ("9007199254740991", SerializedNetLogInt64(kMaxSafeInteger));
EXPECT_EQ("9007199254740991", SerializedNetLogUint64(kMaxSafeInteger));
EXPECT_EQ("\"-9007199254740992\"",
SerializedNetLogInt64(-kMaxSafeInteger - 1));
EXPECT_EQ("\"9007199254740992\"", SerializedNetLogInt64(kMaxSafeInteger + 1));
EXPECT_EQ("\"9007199254740992\"",
SerializedNetLogUint64(kMaxSafeInteger + 1));
EXPECT_EQ("\"9223372036854775807\"",
SerializedNetLogInt64(std::numeric_limits<int64_t>::max()));
EXPECT_EQ("\"18446744073709551615\"",
SerializedNetLogUint64(std::numeric_limits<uint64_t>::max()));
}
}