| // Copyright 2019 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. |
| |
| // Tests disk-inspector primitive data type behavior. |
| |
| #include <disk_inspector/common_types.h> |
| #include <gtest/gtest.h> |
| |
| namespace disk_inspector { |
| namespace { |
| |
| void TestPrimitiveType(DiskObject* obj, const void* expected_value, size_t expected_size) { |
| ASSERT_EQ(0u, obj->GetNumElements()); |
| ASSERT_EQ(nullptr, obj->GetElementAt(0).get()); |
| ASSERT_EQ(nullptr, obj->GetElementAt(1).get()); |
| |
| size_t size; |
| const void* buffer = nullptr; |
| |
| obj->GetValue(&buffer, &size); |
| ASSERT_EQ(size, expected_size); |
| |
| if (expected_size == sizeof(uint32_t)) { |
| const char name[] = "uint32Obj"; |
| auto out_name = obj->GetName(); |
| ASSERT_STREQ(out_name, name); |
| const uint32_t* value = reinterpret_cast<const uint32_t*>(buffer); |
| ASSERT_EQ(*value, *(reinterpret_cast<const uint32_t*>(expected_value))); |
| } else if (expected_size == sizeof(uint64_t)) { |
| const char name[] = "uint64Obj"; |
| auto out_name = obj->GetName(); |
| ASSERT_STREQ(out_name, name); |
| const uint64_t* value = reinterpret_cast<const uint64_t*>(buffer); |
| ASSERT_EQ(*value, *(reinterpret_cast<const uint64_t*>(expected_value))); |
| } else if (expected_size == sizeof(char)) { |
| const char name[] = "charObj"; |
| auto out_name = obj->GetName(); |
| ASSERT_STREQ(out_name, name); |
| const char* value = reinterpret_cast<const char*>(buffer); |
| ASSERT_EQ(*value, *(reinterpret_cast<const char*>(expected_value))); |
| } else { |
| FAIL(); |
| } |
| } |
| |
| TEST(DiskInpectorTest, TestUint32) { |
| uint32_t inp_val = 5; |
| auto out_obj = std::make_unique<DiskObjectUint32>("uint32Obj", &inp_val); |
| |
| TestPrimitiveType(out_obj.get(), &inp_val, sizeof(uint32_t)); |
| } |
| |
| TEST(DiskInpectorTest, TestUint64) { |
| uint64_t inp_val = 55; |
| auto out_obj = std::make_unique<DiskObjectUint64>("uint64Obj", &inp_val); |
| |
| TestPrimitiveType(out_obj.get(), &inp_val, sizeof(uint64_t)); |
| } |
| |
| TEST(DiskInpectorTest, TestChar) { |
| char inp_val = 'h'; |
| auto out_obj = std::make_unique<DiskObjectChar>("charObj", &inp_val); |
| |
| TestPrimitiveType(out_obj.get(), &inp_val, sizeof(char)); |
| } |
| |
| TEST(DiskInpectorTest, TestUint32Array) { |
| uint32_t inp_arr[2] = {1, 2}; |
| auto out_obj = std::make_unique<DiskObjectUint32Array>("uint32Obj", inp_arr, 2); |
| |
| ASSERT_EQ(out_obj->GetName(), std::string("uint32Obj")); |
| ASSERT_EQ(2u, out_obj->GetNumElements()); |
| |
| // Testing element at index 0 |
| std::unique_ptr<DiskObject> elem_obj = out_obj->GetElementAt(0); |
| ASSERT_NE(nullptr, elem_obj.get()); |
| TestPrimitiveType(elem_obj.get(), inp_arr, sizeof(inp_arr[0])); |
| |
| // Testing element at index 1 |
| std::unique_ptr<DiskObject> elem_obj1 = out_obj->GetElementAt(1); |
| ASSERT_NE(nullptr, elem_obj1.get()); |
| TestPrimitiveType(elem_obj1.get(), &inp_arr[1], sizeof(inp_arr[1])); |
| |
| // Check out of range elements |
| ASSERT_EQ(nullptr, out_obj->GetElementAt(2).get()); |
| } |
| |
| TEST(DiskInpectorTest, TestUint64Array) { |
| uint64_t inp_arr[2] = {7, 8}; |
| auto out_obj = std::make_unique<DiskObjectUint64Array>("uint64Obj", inp_arr, 2); |
| |
| ASSERT_EQ(out_obj->GetName(), std::string("uint64Obj")); |
| ASSERT_EQ(2u, out_obj->GetNumElements()); |
| |
| // Testing element at index 0 |
| std::unique_ptr<DiskObject> elem_obj = out_obj->GetElementAt(0); |
| ASSERT_NE(nullptr, elem_obj.get()); |
| TestPrimitiveType(elem_obj.get(), inp_arr, sizeof(inp_arr[0])); |
| |
| // Testing element at index 1 |
| std::unique_ptr<DiskObject> elem_obj1 = out_obj->GetElementAt(1); |
| ASSERT_NE(nullptr, elem_obj1.get()); |
| TestPrimitiveType(elem_obj1.get(), &inp_arr[1], sizeof(inp_arr[1])); |
| |
| // Check out of range elements |
| ASSERT_EQ(nullptr, out_obj->GetElementAt(2).get()); |
| } |
| |
| TEST(DiskInpectorTest, TestCharArray) { |
| char inp_arr[2] = {'h', 'i'}; |
| auto out_obj = std::make_unique<DiskObjectCharArray>("charObj", inp_arr, 2); |
| |
| ASSERT_EQ(out_obj->GetName(), std::string("charObj")); |
| ASSERT_EQ(2u, out_obj->GetNumElements()); |
| |
| // Testing element at index 0 |
| std::unique_ptr<DiskObject> elem_obj = out_obj->GetElementAt(0); |
| ASSERT_NE(nullptr, elem_obj.get()); |
| TestPrimitiveType(elem_obj.get(), inp_arr, sizeof(inp_arr[0])); |
| |
| // Testing element at index 1 |
| std::unique_ptr<DiskObject> elem_obj1 = out_obj->GetElementAt(1); |
| ASSERT_NE(nullptr, elem_obj1.get()); |
| TestPrimitiveType(elem_obj1.get(), &inp_arr[1], sizeof(inp_arr[1])); |
| |
| // Check out of range elements |
| ASSERT_EQ(nullptr, out_obj->GetElementAt(2).get()); |
| } |
| |
| } // namespace |
| } // namespace disk_inspector |