1 // Copyright 2013 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #include "chromeos/dbus/cros_disks_client.h"
7 #include "base/memory/scoped_ptr.h"
8 #include "dbus/message.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/cros_system_api/dbus/service_constants.h"
16 // Appends a boolean entry to a dictionary of type "a{sv}"
17 void AppendBoolDictEntry(dbus::MessageWriter
* array_writer
,
18 const std::string
& key
,
20 dbus::MessageWriter
entry_writer(NULL
);
21 array_writer
->OpenDictEntry(&entry_writer
);
22 entry_writer
.AppendString(key
);
23 entry_writer
.AppendVariantOfBool(value
);
24 array_writer
->CloseContainer(&entry_writer
);
27 // Appends a string entry to a dictionary of type "a{sv}"
28 void AppendStringDictEntry(dbus::MessageWriter
* array_writer
,
29 const std::string
& key
,
30 const std::string
& value
) {
31 dbus::MessageWriter
entry_writer(NULL
);
32 array_writer
->OpenDictEntry(&entry_writer
);
33 entry_writer
.AppendString(key
);
34 entry_writer
.AppendVariantOfString(value
);
35 array_writer
->CloseContainer(&entry_writer
);
40 TEST(CrosDisksClientTest
, DiskInfo
) {
41 const std::string kDeviceFile
= "/dev/sdb1";
42 const bool kDeviceIsDrive
= true;
43 const bool kDeviceIsMediaAvailable
= true;
44 const bool kDeviceIsMounted
= true;
45 const bool kDeviceIsOnBootDevice
= true;
46 const bool kDeviceIsReadOnly
= true;
47 const uint32 kDeviceMediaType
= cros_disks::DEVICE_MEDIA_SD
;
48 const std::string kMountPath
= "/media/removable/UNTITLED";
49 const bool kDevicePresentationHide
= false;
50 const uint64 kDeviceSize
= 16005464064;
51 const std::string kDriveModel
= "DriveModel";
52 const std::string kIdLabel
= "UNTITLED";
53 const std::string kIdUuid
= "XXXX-YYYY";
54 const std::string kNativePath
= "/sys/devices/.../sdb/sdb1";
55 const std::string kProductId
= "1234";
56 const std::string kProductName
= "Product Name";
57 const std::string kVendorId
= "0000";
58 const std::string kVendorName
= "Vendor Name";
60 // Construct a fake response of GetDeviceProperties().
61 scoped_ptr
<dbus::Response
> response(dbus::Response::CreateEmpty());
63 dbus::MessageWriter
writer(response
.get());
64 dbus::MessageWriter
array_writer(NULL
);
65 writer
.OpenArray("{sv}", &array_writer
);
67 AppendStringDictEntry(&array_writer
, cros_disks::kDeviceFile
, kDeviceFile
);
68 AppendBoolDictEntry(&array_writer
, cros_disks::kDeviceIsDrive
,
70 AppendBoolDictEntry(&array_writer
, cros_disks::kDeviceIsMediaAvailable
,
71 kDeviceIsMediaAvailable
);
72 AppendBoolDictEntry(&array_writer
, cros_disks::kDeviceIsMounted
,
74 AppendBoolDictEntry(&array_writer
, cros_disks::kDeviceIsOnBootDevice
,
75 kDeviceIsOnBootDevice
);
76 AppendBoolDictEntry(&array_writer
, cros_disks::kDeviceIsReadOnly
,
79 dbus::MessageWriter
entry_writer(NULL
);
80 array_writer
.OpenDictEntry(&entry_writer
);
81 entry_writer
.AppendString(cros_disks::kDeviceMediaType
);
82 entry_writer
.AppendVariantOfUint32(kDeviceMediaType
);
83 array_writer
.CloseContainer(&entry_writer
);
86 std::vector
<std::string
> mounted_paths
;
87 mounted_paths
.push_back(kMountPath
);
89 dbus::MessageWriter
entry_writer(NULL
);
90 array_writer
.OpenDictEntry(&entry_writer
);
91 entry_writer
.AppendString(cros_disks::kDeviceMountPaths
);
92 dbus::MessageWriter
variant_writer(NULL
);
93 entry_writer
.OpenVariant("as", &variant_writer
);
94 variant_writer
.AppendArrayOfStrings(mounted_paths
);
95 entry_writer
.CloseContainer(&variant_writer
);
96 array_writer
.CloseContainer(&entry_writer
);
98 AppendBoolDictEntry(&array_writer
, cros_disks::kDevicePresentationHide
,
99 kDevicePresentationHide
);
101 dbus::MessageWriter
entry_writer(NULL
);
102 array_writer
.OpenDictEntry(&entry_writer
);
103 entry_writer
.AppendString(cros_disks::kDeviceSize
);
104 entry_writer
.AppendVariantOfUint64(kDeviceSize
);
105 array_writer
.CloseContainer(&entry_writer
);
107 AppendStringDictEntry(&array_writer
, cros_disks::kDriveModel
, kDriveModel
);
108 AppendStringDictEntry(&array_writer
, cros_disks::kIdLabel
, kIdLabel
);
109 AppendStringDictEntry(&array_writer
, cros_disks::kIdUuid
, kIdUuid
);
110 AppendStringDictEntry(&array_writer
, cros_disks::kNativePath
, kNativePath
);
111 AppendStringDictEntry(&array_writer
, cros_disks::kProductId
, kProductId
);
112 AppendStringDictEntry(&array_writer
, cros_disks::kProductName
,
114 AppendStringDictEntry(&array_writer
, cros_disks::kVendorId
, kVendorId
);
115 AppendStringDictEntry(&array_writer
, cros_disks::kVendorName
, kVendorName
);
117 writer
.CloseContainer(&array_writer
);
120 // Construct DiskInfo.
121 DiskInfo
result(kDeviceFile
, response
.get());
122 EXPECT_EQ(kDeviceFile
, result
.device_path());
123 EXPECT_EQ(kDeviceIsDrive
, result
.is_drive());
124 EXPECT_EQ(kDeviceIsReadOnly
, result
.is_read_only());
125 // Use EXPECT_TRUE(kDevicePresentationHide == result.is_hidden()) instead of
126 // EXPECT_EQ(kDevicePresentationHide, result.is_hidden()) as gcc 4.7 issues
127 // the following warning on EXPECT_EQ(false, x), which is turned into an error
128 // with -Werror=conversion-null:
130 // converting 'false' to pointer type for argument 1 of
131 // 'char testing::internal::IsNullLiteralHelper(testing::internal::Secret*)'
132 EXPECT_TRUE(kDevicePresentationHide
== result
.is_hidden());
133 EXPECT_EQ(kDeviceIsMediaAvailable
, result
.has_media());
134 EXPECT_EQ(kDeviceIsOnBootDevice
, result
.on_boot_device());
135 EXPECT_EQ(kNativePath
, result
.system_path());
136 EXPECT_EQ(kDeviceFile
, result
.file_path());
137 EXPECT_EQ(kVendorId
, result
.vendor_id());
138 EXPECT_EQ(kVendorName
, result
.vendor_name());
139 EXPECT_EQ(kProductId
, result
.product_id());
140 EXPECT_EQ(kProductName
, result
.product_name());
141 EXPECT_EQ(kDriveModel
, result
.drive_label());
142 EXPECT_EQ(kIdLabel
, result
.label());
143 EXPECT_EQ(kIdUuid
, result
.uuid());
144 EXPECT_EQ(kDeviceSize
, result
.total_size_in_bytes());
145 EXPECT_EQ(DEVICE_TYPE_SD
, result
.device_type());
146 EXPECT_EQ(kMountPath
, result
.mount_path());
149 } // namespace chromeos