OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 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 | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "base/memory/scoped_ptr.h" | 5 #include "base/memory/scoped_ptr.h" |
6 #include "net/disk_cache/disk_cache_test_util.h" | 6 #include "net/disk_cache/disk_cache_test_util.h" |
7 #include "net/disk_cache/flash/segment.h" | 7 #include "net/disk_cache/flash/segment.h" |
8 #include "net/disk_cache/flash/storage.h" | 8 #include "net/disk_cache/flash/storage.h" |
9 #include "net/disk_cache/flash/flash_cache_test_base.h" | 9 #include "net/disk_cache/flash/flash_cache_test_base.h" |
10 #include "net/disk_cache/flash/format.h" | 10 #include "net/disk_cache/flash/format.h" |
(...skipping 19 matching lines...) Expand all Loading... |
30 | 30 |
31 typedef Entry<kSmallEntrySize> SmallEntry; | 31 typedef Entry<kSmallEntrySize> SmallEntry; |
32 typedef Entry<kLargeEntrySize> LargeEntry; | 32 typedef Entry<kLargeEntrySize> LargeEntry; |
33 | 33 |
34 const int32 kSegmentFreeSpace = disk_cache::kFlashSegmentSize - | 34 const int32 kSegmentFreeSpace = disk_cache::kFlashSegmentSize - |
35 disk_cache::kFlashSummarySize; | 35 disk_cache::kFlashSummarySize; |
36 | 36 |
37 } // namespace | 37 } // namespace |
38 | 38 |
39 TEST_F(FlashCacheTest, SegmentUserTracking) { | 39 TEST_F(FlashCacheTest, SegmentUserTracking) { |
| 40 disk_cache::Storage storage(path_, kStorageSize); |
| 41 ASSERT_TRUE(storage.Init()); |
| 42 |
40 scoped_ptr<disk_cache::Segment> segment( | 43 scoped_ptr<disk_cache::Segment> segment( |
41 new disk_cache::Segment(0, false, storage_.get())); | 44 new disk_cache::Segment(0, false, &storage)); |
42 EXPECT_TRUE(segment->Init()); | 45 EXPECT_TRUE(segment->Init()); |
43 | 46 |
44 EXPECT_TRUE(segment->HasNoUsers()); | 47 EXPECT_TRUE(segment->HasNoUsers()); |
45 segment->AddUser(); | 48 segment->AddUser(); |
46 segment->AddUser(); | 49 segment->AddUser(); |
47 EXPECT_FALSE(segment->HasNoUsers()); | 50 EXPECT_FALSE(segment->HasNoUsers()); |
48 | 51 |
49 segment->ReleaseUser(); | 52 segment->ReleaseUser(); |
50 EXPECT_FALSE(segment->HasNoUsers()); | 53 EXPECT_FALSE(segment->HasNoUsers()); |
51 segment->ReleaseUser(); | 54 segment->ReleaseUser(); |
52 EXPECT_TRUE(segment->HasNoUsers()); | 55 EXPECT_TRUE(segment->HasNoUsers()); |
53 | 56 |
54 EXPECT_TRUE(segment->Close()); | 57 EXPECT_TRUE(segment->Close()); |
55 } | 58 } |
56 | 59 |
57 TEST_F(FlashCacheTest, SegmentCreateDestroy) { | 60 TEST_F(FlashCacheTest, SegmentCreateDestroy) { |
| 61 disk_cache::Storage storage(path_, kStorageSize); |
| 62 ASSERT_TRUE(storage.Init()); |
| 63 |
58 int32 index = 0; | 64 int32 index = 0; |
59 scoped_ptr<disk_cache::Segment> segment( | 65 scoped_ptr<disk_cache::Segment> segment( |
60 new disk_cache::Segment(index, false, storage_.get())); | 66 new disk_cache::Segment(index, false, &storage)); |
61 EXPECT_TRUE(segment->Init()); | 67 EXPECT_TRUE(segment->Init()); |
62 EXPECT_TRUE(segment->Close()); | 68 EXPECT_TRUE(segment->Close()); |
63 | 69 |
64 index = num_segments_in_storage_ - 1; | 70 index = kNumTestSegments - 1; |
65 segment.reset(new disk_cache::Segment(index, false, storage_.get())); | 71 segment.reset(new disk_cache::Segment(index, false, &storage)); |
66 EXPECT_TRUE(segment->Init()); | 72 EXPECT_TRUE(segment->Init()); |
67 EXPECT_TRUE(segment->Close()); | 73 EXPECT_TRUE(segment->Close()); |
68 | 74 |
69 int32 invalid_index = num_segments_in_storage_; | 75 int32 invalid_index = kNumTestSegments; |
70 segment.reset(new disk_cache::Segment(invalid_index, false, storage_.get())); | 76 segment.reset(new disk_cache::Segment(invalid_index, false, &storage)); |
71 EXPECT_FALSE(segment->Init()); | 77 EXPECT_FALSE(segment->Init()); |
72 | 78 |
73 invalid_index = -1; | 79 invalid_index = -1; |
74 segment.reset(new disk_cache::Segment(invalid_index, false, storage_.get())); | 80 segment.reset(new disk_cache::Segment(invalid_index, false, &storage)); |
75 EXPECT_FALSE(segment->Init()); | 81 EXPECT_FALSE(segment->Init()); |
76 } | 82 } |
77 | 83 |
78 TEST_F(FlashCacheTest, SegmentWriteDataReadData) { | 84 TEST_F(FlashCacheTest, SegmentWriteDataReadData) { |
79 int32 index = rand() % num_segments_in_storage_; | 85 disk_cache::Storage storage(path_, kStorageSize); |
| 86 ASSERT_TRUE(storage.Init()); |
| 87 |
| 88 int32 index = rand() % kNumTestSegments; |
80 scoped_ptr<disk_cache::Segment> segment( | 89 scoped_ptr<disk_cache::Segment> segment( |
81 new disk_cache::Segment(index, false, storage_.get())); | 90 new disk_cache::Segment(index, false, &storage)); |
82 | 91 |
83 EXPECT_TRUE(segment->Init()); | 92 EXPECT_TRUE(segment->Init()); |
84 SmallEntry entry1; | 93 SmallEntry entry1; |
85 EXPECT_TRUE(segment->CanHold(entry1.size)); | 94 EXPECT_TRUE(segment->CanHold(entry1.size)); |
86 int32 offset = segment->write_offset(); | 95 int32 offset = segment->write_offset(); |
87 EXPECT_TRUE(segment->WriteData(entry1.data, entry1.size)); | 96 EXPECT_TRUE(segment->WriteData(entry1.data, entry1.size)); |
88 segment->StoreOffset(offset); | 97 segment->StoreOffset(offset); |
89 EXPECT_TRUE(segment->Close()); | 98 EXPECT_TRUE(segment->Close()); |
90 | 99 |
91 segment.reset(new disk_cache::Segment(index, true, storage_.get())); | 100 segment.reset(new disk_cache::Segment(index, true, &storage)); |
92 EXPECT_TRUE(segment->Init()); | 101 EXPECT_TRUE(segment->Init()); |
93 SmallEntry entry2; | 102 SmallEntry entry2; |
94 EXPECT_TRUE(segment->ReadData(entry2.data, entry2.size, offset)); | 103 EXPECT_TRUE(segment->ReadData(entry2.data, entry2.size, offset)); |
95 EXPECT_EQ(entry1, entry2); | 104 EXPECT_EQ(entry1, entry2); |
96 EXPECT_TRUE(segment->Close()); | 105 EXPECT_TRUE(segment->Close()); |
97 } | 106 } |
98 | 107 |
99 TEST_F(FlashCacheTest, SegmentFillWithSmallEntries) { | 108 TEST_F(FlashCacheTest, SegmentFillWithSmallEntries) { |
100 int32 index = rand() % num_segments_in_storage_; | 109 disk_cache::Storage storage(path_, kStorageSize); |
| 110 ASSERT_TRUE(storage.Init()); |
| 111 |
| 112 int32 index = rand() % kNumTestSegments; |
101 scoped_ptr<disk_cache::Segment> segment( | 113 scoped_ptr<disk_cache::Segment> segment( |
102 new disk_cache::Segment(index, false, storage_.get())); | 114 new disk_cache::Segment(index, false, &storage)); |
103 | 115 |
104 EXPECT_TRUE(segment->Init()); | 116 EXPECT_TRUE(segment->Init()); |
105 SmallEntry entry; | 117 SmallEntry entry; |
106 int32 num_bytes_written = 0; | 118 int32 num_bytes_written = 0; |
107 while (segment->CanHold(entry.size)) { | 119 while (segment->CanHold(entry.size)) { |
108 int32 offset = segment->write_offset(); | 120 int32 offset = segment->write_offset(); |
109 EXPECT_TRUE(segment->WriteData(entry.data, entry.size)); | 121 EXPECT_TRUE(segment->WriteData(entry.data, entry.size)); |
110 segment->StoreOffset(offset); | 122 segment->StoreOffset(offset); |
111 num_bytes_written += entry.size; | 123 num_bytes_written += entry.size; |
112 } | 124 } |
113 int32 space_left = kSegmentFreeSpace - num_bytes_written; | 125 int32 space_left = kSegmentFreeSpace - num_bytes_written; |
114 EXPECT_GE(space_left, entry.size); | 126 EXPECT_GE(space_left, entry.size); |
115 EXPECT_EQ(segment->GetOffsets().size(), disk_cache::kFlashMaxEntryCount); | 127 EXPECT_EQ(segment->GetOffsets().size(), disk_cache::kFlashMaxEntryCount); |
116 EXPECT_TRUE(segment->Close()); | 128 EXPECT_TRUE(segment->Close()); |
117 } | 129 } |
118 | 130 |
119 TEST_F(FlashCacheTest, SegmentFillWithLargeEntries) { | 131 TEST_F(FlashCacheTest, SegmentFillWithLargeEntries) { |
120 int32 index = rand() % num_segments_in_storage_; | 132 disk_cache::Storage storage(path_, kStorageSize); |
| 133 ASSERT_TRUE(storage.Init()); |
| 134 |
| 135 int32 index = rand() % kNumTestSegments; |
121 scoped_ptr<disk_cache::Segment> segment( | 136 scoped_ptr<disk_cache::Segment> segment( |
122 new disk_cache::Segment(index, false, storage_.get())); | 137 new disk_cache::Segment(index, false, &storage)); |
123 | 138 |
124 EXPECT_TRUE(segment->Init()); | 139 EXPECT_TRUE(segment->Init()); |
125 scoped_ptr<LargeEntry> entry(new LargeEntry); | 140 scoped_ptr<LargeEntry> entry(new LargeEntry); |
126 int32 num_bytes_written = 0; | 141 int32 num_bytes_written = 0; |
127 while (segment->CanHold(entry->size)) { | 142 while (segment->CanHold(entry->size)) { |
128 int32 offset = segment->write_offset(); | 143 int32 offset = segment->write_offset(); |
129 EXPECT_TRUE(segment->WriteData(entry->data, entry->size)); | 144 EXPECT_TRUE(segment->WriteData(entry->data, entry->size)); |
130 segment->StoreOffset(offset); | 145 segment->StoreOffset(offset); |
131 num_bytes_written += entry->size; | 146 num_bytes_written += entry->size; |
132 } | 147 } |
133 int32 space_left = kSegmentFreeSpace - num_bytes_written; | 148 int32 space_left = kSegmentFreeSpace - num_bytes_written; |
134 EXPECT_LT(space_left, entry->size); | 149 EXPECT_LT(space_left, entry->size); |
135 EXPECT_LT(segment->GetOffsets().size(), disk_cache::kFlashMaxEntryCount); | 150 EXPECT_LT(segment->GetOffsets().size(), disk_cache::kFlashMaxEntryCount); |
136 EXPECT_TRUE(segment->Close()); | 151 EXPECT_TRUE(segment->Close()); |
137 } | 152 } |
OLD | NEW |