| Index: net/disk_cache/v3/block_bitmaps_unittest.cc
|
| ===================================================================
|
| --- net/disk_cache/v3/block_bitmaps_unittest.cc (revision 0)
|
| +++ net/disk_cache/v3/block_bitmaps_unittest.cc (revision 0)
|
| @@ -0,0 +1,70 @@
|
| +// Copyright (c) 2012 The Chromium Authors. All rights reserved.
|
| +// Use of this source code is governed by a BSD-style license that can be
|
| +// found in the LICENSE file.
|
| +
|
| +#include "net/disk_cache/addr.h"
|
| +#include "net/disk_cache/block_files.h"
|
| +#include "net/disk_cache/disk_format_base.h"
|
| +#include "net/disk_cache/v3/block_bitmaps.h"
|
| +#include "testing/gtest/include/gtest/gtest.h"
|
| +
|
| +// Tests that we add and remove blocks correctly.
|
| +TEST(DiskCacheBlockBitmaps, V3AllocationMap) {
|
| + disk_cache::BlockBitmaps block_bitmaps(NULL);
|
| + disk_cache::BlockFilesBitmaps bitmaps;
|
| +
|
| + const int kNumHeaders = 10;
|
| + disk_cache::BlockFileHeader headers[kNumHeaders];
|
| + for (int i = 0; i < kNumHeaders; i++) {
|
| + memset(&headers[i], 0, sizeof(headers[i]));
|
| + headers[i].magic = disk_cache::kBlockMagic;
|
| + headers[i].version = disk_cache::kBlockCurrentVersion;
|
| + headers[i].this_file = static_cast<int16>(i);
|
| + headers[i].empty[3] = 200;
|
| + headers[i].max_entries = 800;
|
| + bitmaps.push_back(disk_cache::BlockHeader(&headers[i]));
|
| + }
|
| +
|
| + block_bitmaps.Init(bitmaps);
|
| +
|
| + // Create a bunch of entries.
|
| + const int kSize = 100;
|
| + disk_cache::Addr address[kSize];
|
| + for (int i = 0; i < kSize; i++) {
|
| + SCOPED_TRACE(i);
|
| + int block_size = i % 4 + 1;
|
| + ASSERT_TRUE(block_bitmaps.CreateBlock(disk_cache::BLOCK_1K, block_size,
|
| + &address[i]));
|
| + EXPECT_EQ(disk_cache::BLOCK_1K, address[i].file_type());
|
| + EXPECT_EQ(block_size, address[i].num_blocks());
|
| + int start = address[i].start_block();
|
| +
|
| + // Verify that the allocated entry doesn't cross a 4 block boundary.
|
| + EXPECT_EQ(start / 4, (start + block_size - 1) / 4);
|
| + }
|
| +
|
| + for (int i = 0; i < kSize; i++) {
|
| + SCOPED_TRACE(i);
|
| + EXPECT_TRUE(block_bitmaps.IsValid(address[i]));
|
| + }
|
| +
|
| + // The first part of the allocation map should be completely filled. We used
|
| + // 10 bits per each of four entries, so 250 bits total. All entries should go
|
| + // to the third file.
|
| + uint8* buffer = reinterpret_cast<uint8*>(&headers[2].allocation_map);
|
| + for (int i = 0; i < 29; i++) {
|
| + SCOPED_TRACE(i);
|
| + EXPECT_EQ(0xff, buffer[i]);
|
| + }
|
| +
|
| + for (int i = 0; i < kSize; i++) {
|
| + SCOPED_TRACE(i);
|
| + block_bitmaps.DeleteBlock(address[i]);
|
| + }
|
| +
|
| + // The allocation map should be empty.
|
| + for (int i =0; i < 50; i++) {
|
| + SCOPED_TRACE(i);
|
| + EXPECT_EQ(0, buffer[i]);
|
| + }
|
| +}
|
|
|
| Property changes on: net\disk_cache\v3\block_bitmaps_unittest.cc
|
| ___________________________________________________________________
|
| Added: svn:eol-style
|
| + LF
|
|
|
|
|