]>
git.proxmox.com Git - ceph.git/blob - ceph/src/test/common/test_blkdev.cc
1 // -*- mode:C++; tab-width:8; c-basic-offset:2; indent-tabs-mode:t -*-
2 // vim: ts=8 sw=2 smarttab
7 #include <linux/kdev_t.h>
9 #include "include/types.h"
10 #include "common/blkdev.h"
12 #include "gtest/gtest.h"
13 #include "gmock/gmock.h"
17 using namespace testing
;
19 class MockBlkDev
: public BlkDev
{
21 // pass 0 as fd, so it won't try to use the empty devname
22 MockBlkDev() : BlkDev(0) {};
23 virtual ~MockBlkDev() {}
25 MOCK_CONST_METHOD0(sysfsdir
, const char*());
26 MOCK_CONST_METHOD2(wholedisk
, int(char* device
, size_t max
));
30 class BlockDevTest
: public ::testing::Test
{
35 virtual void SetUp() {
36 const char *sda_name
= "sda";
37 const char *sdb_name
= "sdb";
38 const char* env
= getenv("CEPH_ROOT");
39 ASSERT_NE(env
, nullptr) << "Environment Variable CEPH_ROOT not found!";
40 root
= new string(env
);
41 *root
+= "/src/test/common/test_blkdev_sys_block/sys";
43 EXPECT_CALL(sda
, sysfsdir())
44 .WillRepeatedly(Return(root
->c_str()));
45 EXPECT_CALL(sda
, wholedisk(NotNull(), Ge(0ul)))
48 SetArrayArgument
<0>(sda_name
, sda_name
+ strlen(sda_name
) + 1),
51 EXPECT_CALL(sdb
, sysfsdir())
52 .WillRepeatedly(Return(root
->c_str()));
53 EXPECT_CALL(sdb
, wholedisk(NotNull(), Ge(0ul)))
56 SetArrayArgument
<0>(sdb_name
, sdb_name
+ strlen(sdb_name
) + 1),
60 virtual void TearDown() {
67 TEST_F(BlockDevTest
, device_model
)
69 char model
[1000] = {0};
70 int rc
= sda
.model(model
, sizeof(model
));
72 ASSERT_STREQ(model
, "myfancymodel");
75 TEST_F(BlockDevTest
, discard
)
77 EXPECT_TRUE(sda
.support_discard());
78 EXPECT_TRUE(sdb
.support_discard());
81 TEST_F(BlockDevTest
, is_rotational
)
83 EXPECT_FALSE(sda
.is_rotational());
84 EXPECT_TRUE(sdb
.is_rotational());
87 TEST(blkdev
, _decode_model_enc
)
90 const char *foo
[][2] = {
91 { "WDC\\x20WDS200T2B0A-00SM50\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20\\x20",
92 "WDC_WDS200T2B0A-00SM50" },
96 for (unsigned i
= 0; foo
[i
][0]; ++i
) {
97 std::string d
= _decode_model_enc(foo
[i
][0]);
98 cout
<< " '" << foo
[i
][0] << "' -> '" << d
<< "'" << std::endl
;
99 ASSERT_EQ(std::string(foo
[i
][1]), d
);