blob: 229166b74a2602235f1527b68385f3ca1c6f2d1c [file] [log] [blame]
// Copyright 2020 The Fuchsia Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "lib/fidl/cpp/comparison.h"
#include <map>
#include <zxtest/zxtest.h>
#include "lib/fidl/cpp/clone.h"
#ifdef __Fuchsia__
#include <lib/zx/event.h>
#endif
namespace fidl {
namespace {
TEST(Comparison, UnknownBytes) {
UnknownBytes bytes1 = {
.bytes = {0xde, 0xad, 0xbe, 0xef},
};
UnknownBytes bytes2 = {
.bytes = {0xde, 0xad, 0xbe, 0xef},
};
ASSERT_EQ(true, Equals(bytes1, bytes2));
}
#ifdef __Fuchsia__
TEST(Comparison, UnknownDataSameHandle) {
zx_handle_t h;
ASSERT_EQ(ZX_OK, zx_event_create(0, &h));
UnknownData data1 = {
.bytes = {0xde, 0xad},
.handles = {},
};
data1.handles.push_back(zx::handle(h));
UnknownData data2 = {
.bytes = {0xde, 0xad},
.handles = {},
};
data2.handles.push_back(zx::handle(h));
ASSERT_EQ(true, Equals(data1, data2));
std::map<uint64_t, UnknownData> map1;
map1.insert({3, std::move(data1)});
std::map<uint64_t, UnknownData> map2;
map2.insert({3, std::move(data2)});
ASSERT_EQ(true, Equals(map1, map2));
// prevent double close by releasing one of the handles
[[maybe_unused]] zx_handle_t copy = map1.begin()->second.handles[0].release();
}
TEST(Comparison, UnknownDataCopiedHandle) {
zx_handle_t h;
ASSERT_EQ(ZX_OK, zx_event_create(0, &h));
UnknownData data1 = {
.bytes = {0xde, 0xad},
.handles = {},
};
data1.handles.push_back(zx::handle(h));
UnknownData data2;
ASSERT_EQ(ZX_OK, Clone(data1, &data2));
ASSERT_EQ(false, Equals(data1, data2));
std::map<uint64_t, UnknownData> map1;
map1.insert({3, std::move(data1)});
std::map<uint64_t, UnknownData> map2;
map2.insert({3, std::move(data2)});
ASSERT_EQ(false, Equals(map1, map2));
}
#endif
} // namespace
} // namespace fidl