@@ -1221,8 +1221,17 @@ TEST_F(CurveFSTest, testGetAllocatedSize) {
12211221 }
12221222}
12231223
1224+ namespace {
1225+ uint64_t TotalSize (const std::map<std::string, uint64_t >& fileSizeMap) {
1226+ uint64_t total = 0 ;
1227+ for (const auto & p : fileSizeMap) {
1228+ total += p.second ;
1229+ }
1230+ return total;
1231+ }
1232+ } // namespace
1233+
12241234TEST_F (CurveFSTest, testGetFileSize) {
1225- uint64_t fileSize;
12261235 FileInfo fileInfo;
12271236 fileInfo.set_id (0 );
12281237 fileInfo.set_filetype (FileType::INODE_PAGEFILE);
@@ -1234,9 +1243,10 @@ TEST_F(CurveFSTest, testGetFileSize) {
12341243 .Times (1 )
12351244 .WillOnce (DoAll (SetArgPointee<2 >(fileInfo),
12361245 Return (StoreStatus::OK)));
1246+ std::map<std::string, uint64_t > fileSizeMap;
12371247 ASSERT_EQ (StatusCode::kOK ,
1238- curvefs_->GetFileSize (" /tests" , &fileSize ));
1239- ASSERT_EQ (10 * kGB , fileSize );
1248+ curvefs_->GetFileSize (" /tests" , &fileSizeMap ));
1249+ ASSERT_EQ (10 * kGB , TotalSize (fileSizeMap) );
12401250 }
12411251 // test directory normal
12421252 {
@@ -1254,17 +1264,19 @@ TEST_F(CurveFSTest, testGetFileSize) {
12541264 .Times (1 )
12551265 .WillOnce (DoAll (SetArgPointee<2 >(files),
12561266 Return (StoreStatus::OK)));
1267+ std::map<std::string, uint64_t > fileSizeMap;
12571268 ASSERT_EQ (StatusCode::kOK ,
1258- curvefs_->GetFileSize (" /tests" , &fileSize ));
1259- ASSERT_EQ (30 * kGB , fileSize );
1269+ curvefs_->GetFileSize (" /tests" , &fileSizeMap ));
1270+ ASSERT_EQ (30 * kGB , TotalSize (fileSizeMap) );
12601271 }
12611272 // test GetFile fail
12621273 {
12631274 EXPECT_CALL (*storage_, GetFile (_, _, _))
12641275 .Times (1 )
12651276 .WillOnce (Return (StoreStatus::KeyNotExist));
1277+ std::map<std::string, uint64_t > fileSizeMap;
12661278 ASSERT_EQ (StatusCode::kFileNotExists ,
1267- curvefs_->GetFileSize (" /tests" , &fileSize ));
1279+ curvefs_->GetFileSize (" /tests" , &fileSizeMap ));
12681280 }
12691281 // test file type not supported
12701282 {
@@ -1274,8 +1286,9 @@ TEST_F(CurveFSTest, testGetFileSize) {
12741286 .Times (1 )
12751287 .WillOnce (DoAll (SetArgPointee<2 >(appendFileInfo),
12761288 Return (StoreStatus::OK)));
1289+ std::map<std::string, uint64_t > fileSizeMap;
12771290 ASSERT_EQ (StatusCode::kNotSupported ,
1278- curvefs_->GetFileSize (" /tests" , &fileSize ));
1291+ curvefs_->GetFileSize (" /tests" , &fileSizeMap ));
12791292 }
12801293 // test list directory fail
12811294 {
@@ -1288,11 +1301,82 @@ TEST_F(CurveFSTest, testGetFileSize) {
12881301 EXPECT_CALL (*storage_, ListFile (_, _, _))
12891302 .Times (1 )
12901303 .WillOnce (Return (StoreStatus::InternalError));
1304+ std::map<std::string, uint64_t > fileSizeMap;
12911305 ASSERT_EQ (StatusCode::kStorageError ,
1292- curvefs_->GetFileSize (" /tests" , &fileSize ));
1306+ curvefs_->GetFileSize (" /tests" , &fileSizeMap ));
12931307 }
12941308}
12951309
1310+ TEST_F (CurveFSTest, testGetFileSizeGroupByPoolset) {
1311+ // /
1312+ // ├──A (no poolset info)
1313+ // └──B
1314+ // ├── C (poolset a)
1315+ // ├── D (poolset b)
1316+ // └── E (poolset a)
1317+ FileInfo root;
1318+ root.set_id (0 );
1319+ root.set_filename (" /" );
1320+ root.set_filetype (FileType::INODE_DIRECTORY);
1321+
1322+ FileInfo fileInfoA;
1323+ fileInfoA.set_id (1 );
1324+ fileInfoA.set_filename (" A" );
1325+ fileInfoA.set_filetype (FileType::INODE_PAGEFILE);
1326+ fileInfoA.set_length (10 * kGB );
1327+
1328+ FileInfo dirB;
1329+ dirB.set_id (2 );
1330+ dirB.set_filename (" B" );
1331+ dirB.set_filetype (FileType::INODE_DIRECTORY);
1332+
1333+ FileInfo fileInfoC;
1334+ fileInfoC.set_id (3 );
1335+ fileInfoC.set_filename (" C" );
1336+ fileInfoC.set_filetype (FileType::INODE_PAGEFILE);
1337+ fileInfoC.set_length (10 * kGB );
1338+ fileInfoC.set_poolset (" poolset-a" );
1339+
1340+ FileInfo fileInfoD;
1341+ fileInfoD.set_id (4 );
1342+ fileInfoD.set_filename (" D" );
1343+ fileInfoD.set_filetype (FileType::INODE_PAGEFILE);
1344+ fileInfoD.set_length (15 * kGB );
1345+ fileInfoD.set_poolset (" poolset-b" );
1346+
1347+ FileInfo fileInfoE;
1348+ fileInfoE.set_id (5 );
1349+ fileInfoE.set_filename (" E" );
1350+ fileInfoE.set_filetype (FileType::INODE_PAGEFILE);
1351+ fileInfoE.set_length (20 * kGB );
1352+ fileInfoE.set_poolset (" poolset-a" );
1353+
1354+ EXPECT_CALL (*storage_, GetFile (_, _, _))
1355+ .WillOnce (DoAll (SetArgPointee<2 >(root), Return (StoreStatus::OK)));
1356+
1357+ std::vector<FileInfo> listRootResults;
1358+ listRootResults.push_back (fileInfoA);
1359+ listRootResults.push_back (dirB);
1360+
1361+ std::vector<FileInfo> listDirBResults;
1362+ listDirBResults.push_back (fileInfoC);
1363+ listDirBResults.push_back (fileInfoD);
1364+ listDirBResults.push_back (fileInfoE);
1365+
1366+ EXPECT_CALL (*storage_, ListFile (_, _, _))
1367+ .WillOnce (
1368+ DoAll (SetArgPointee<2 >(listRootResults), Return (StoreStatus::OK)))
1369+ .WillOnce (
1370+ DoAll (SetArgPointee<2 >(listDirBResults), Return (StoreStatus::OK)));
1371+
1372+ std::map<std::string, uint64_t > fileSizeMap;
1373+ ASSERT_EQ (StatusCode::kOK , curvefs_->GetFileSize (" /" , &fileSizeMap));
1374+ ASSERT_EQ (3 , fileSizeMap.size ());
1375+ ASSERT_EQ (10 * kGB , fileSizeMap[kDefaultPoolsetName ]);
1376+ ASSERT_EQ (30 * kGB , fileSizeMap[" poolset-a" ]);
1377+ ASSERT_EQ (15 * kGB , fileSizeMap[" poolset-b" ]);
1378+ }
1379+
12961380TEST_F (CurveFSTest, testReadDir) {
12971381 FileInfo fileInfo;
12981382 std::vector<FileInfo> items;
0 commit comments