1 // Copyright (c) 2012 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 "net/disk_cache/blockfile/addr.h"
6 #include "net/disk_cache/blockfile/block_bitmaps_v3.h"
7 #include "net/disk_cache/blockfile/block_files.h"
8 #include "net/disk_cache/blockfile/disk_format_base.h"
9 #include "testing/gtest/include/gtest/gtest.h"
11 // Tests that we add and remove blocks correctly.
12 TEST(DiskCacheBlockBitmaps
, V3AllocationMap
) {
13 disk_cache::BlockBitmaps block_bitmaps
;
14 disk_cache::BlockFilesBitmaps bitmaps
;
16 const int kNumHeaders
= 10;
17 disk_cache::BlockFileHeader headers
[kNumHeaders
];
18 for (int i
= 0; i
< kNumHeaders
; i
++) {
19 memset(&headers
[i
], 0, sizeof(headers
[i
]));
20 headers
[i
].magic
= disk_cache::kBlockMagic
;
21 headers
[i
].version
= disk_cache::kBlockCurrentVersion
;
22 headers
[i
].this_file
= static_cast<int16
>(i
);
23 headers
[i
].empty
[3] = 200;
24 headers
[i
].max_entries
= 800;
25 bitmaps
.push_back(disk_cache::BlockHeader(&headers
[i
]));
28 block_bitmaps
.Init(bitmaps
);
30 // Create a bunch of entries.
31 const int kSize
= 100;
32 disk_cache::Addr address
[kSize
];
33 for (int i
= 0; i
< kSize
; i
++) {
35 int block_size
= i
% 4 + 1;
36 ASSERT_TRUE(block_bitmaps
.CreateBlock(disk_cache::BLOCK_1K
, block_size
,
38 EXPECT_EQ(disk_cache::BLOCK_1K
, address
[i
].file_type());
39 EXPECT_EQ(block_size
, address
[i
].num_blocks());
40 int start
= address
[i
].start_block();
42 // Verify that the allocated entry doesn't cross a 4 block boundary.
43 EXPECT_EQ(start
/ 4, (start
+ block_size
- 1) / 4);
46 for (int i
= 0; i
< kSize
; i
++) {
48 EXPECT_TRUE(block_bitmaps
.IsValid(address
[i
]));
51 // The first part of the allocation map should be completely filled. We used
52 // 10 bits per each of four entries, so 250 bits total. All entries should go
54 uint8
* buffer
= reinterpret_cast<uint8
*>(&headers
[2].allocation_map
);
55 for (int i
= 0; i
< 29; i
++) {
57 EXPECT_EQ(0xff, buffer
[i
]);
60 for (int i
= 0; i
< kSize
; i
++) {
62 block_bitmaps
.DeleteBlock(address
[i
]);
65 // The allocation map should be empty.
66 for (int i
=0; i
< 50; i
++) {
68 EXPECT_EQ(0, buffer
[i
]);