OLD | NEW |
| (Empty) |
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. | |
4 | |
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" | |
10 | |
11 // Tests that we add and remove blocks correctly. | |
12 TEST(DiskCacheBlockBitmaps, V3AllocationMap) { | |
13 disk_cache::BlockBitmaps block_bitmaps; | |
14 disk_cache::BlockFilesBitmaps bitmaps; | |
15 | |
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])); | |
26 } | |
27 | |
28 block_bitmaps.Init(bitmaps); | |
29 | |
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++) { | |
34 SCOPED_TRACE(i); | |
35 int block_size = i % 4 + 1; | |
36 ASSERT_TRUE(block_bitmaps.CreateBlock(disk_cache::BLOCK_1K, block_size, | |
37 &address[i])); | |
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(); | |
41 | |
42 // Verify that the allocated entry doesn't cross a 4 block boundary. | |
43 EXPECT_EQ(start / 4, (start + block_size - 1) / 4); | |
44 } | |
45 | |
46 for (int i = 0; i < kSize; i++) { | |
47 SCOPED_TRACE(i); | |
48 EXPECT_TRUE(block_bitmaps.IsValid(address[i])); | |
49 } | |
50 | |
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 | |
53 // to the third file. | |
54 uint8* buffer = reinterpret_cast<uint8*>(&headers[2].allocation_map); | |
55 for (int i = 0; i < 29; i++) { | |
56 SCOPED_TRACE(i); | |
57 EXPECT_EQ(0xff, buffer[i]); | |
58 } | |
59 | |
60 for (int i = 0; i < kSize; i++) { | |
61 SCOPED_TRACE(i); | |
62 block_bitmaps.DeleteBlock(address[i]); | |
63 } | |
64 | |
65 // The allocation map should be empty. | |
66 for (int i =0; i < 50; i++) { | |
67 SCOPED_TRACE(i); | |
68 EXPECT_EQ(0, buffer[i]); | |
69 } | |
70 } | |
OLD | NEW |