blob: 5c4eddbc2d805ac17061e8bdc722eccbb485e3bb [file] [log] [blame]
// Copyright 2023 The ChromiumOS Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "net-base/byte_utils.h"
#include <base/logging.h>
#include <gtest/gtest.h>
namespace net_base::byte_utils {
namespace {
TEST(Bytes, ConvertBetweenUInt32) {
uint32_t val = 0x11223344;
const auto bytes = ToBytes<uint32_t>(val);
EXPECT_EQ(bytes.size(), sizeof(uint32_t));
EXPECT_EQ(FromBytes<uint32_t>(bytes), val);
}
TEST(Bytes, ConvertBetweenStruct) {
struct Foo {
int x;
char y;
};
const Foo foo{35, 'c'};
const auto bytes = ToBytes(foo);
EXPECT_EQ(bytes.size(), sizeof(Foo));
const Foo converted = *FromBytes<Foo>(bytes);
EXPECT_EQ(converted.x, foo.x);
EXPECT_EQ(converted.y, foo.y);
}
TEST(Bytes, StringToCStringBytes) {
EXPECT_EQ(StringToCStringBytes("abc"),
(std::vector<uint8_t>{'a', 'b', 'c', '\0'}));
EXPECT_EQ(StringToCStringBytes(std::string("abc\0", 4)),
(std::vector<uint8_t>{'a', 'b', 'c', '\0'}));
}
TEST(Bytes, StringFromCStringBytes) {
EXPECT_EQ(StringFromCStringBytes(std::vector<uint8_t>{'a', 'b'}), "ab");
EXPECT_EQ(StringFromCStringBytes(std::vector<uint8_t>{'a', 'b', '\0'}), "ab");
EXPECT_EQ(StringFromCStringBytes(std::vector<uint8_t>{'a', 'b', '\0', 'c'}),
"ab");
}
TEST(Bytes, ByteStringToBytes) {
EXPECT_EQ(ByteStringToBytes(std::string("abc", 3)),
(std::vector<uint8_t>{'a', 'b', 'c'}));
EXPECT_EQ(ByteStringToBytes(std::string("abc\0", 4)),
(std::vector<uint8_t>{'a', 'b', 'c', '\0'}));
EXPECT_EQ(ByteStringToBytes(std::string("abc\0d", 5)),
(std::vector<uint8_t>{'a', 'b', 'c', '\0', 'd'}));
}
TEST(Bytes, ByteStringFromBytes) {
EXPECT_EQ(ByteStringFromBytes(std::vector<uint8_t>{'a', 'b', 'c'}),
std::string("abc", 3));
EXPECT_EQ(ByteStringFromBytes(std::vector<uint8_t>{'a', 'b', 'c', '\0'}),
std::string("abc\0", 4));
EXPECT_EQ(ByteStringFromBytes(std::vector<uint8_t>{'a', 'b', 'c', '\0', 'd'}),
std::string("abc\0d", 5));
}
} // namespace
} // namespace net_base::byte_utils