OLD | NEW |
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2006-2009 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 // This test is POSIX only. | 5 // This test is POSIX only. |
6 | 6 |
7 #include <unistd.h> | 7 #include <unistd.h> |
8 #include <fcntl.h> | 8 #include <fcntl.h> |
9 | 9 |
10 #include "base/basictypes.h" | 10 #include "base/basictypes.h" |
(...skipping 18 matching lines...) Expand all Loading... |
29 } | 29 } |
30 return true; | 30 return true; |
31 } | 31 } |
32 | 32 |
33 // The FileDescriptorSet will try and close some of the descriptor numbers | 33 // The FileDescriptorSet will try and close some of the descriptor numbers |
34 // which we given it. This is the base descriptor value. It's great enough such | 34 // which we given it. This is the base descriptor value. It's great enough such |
35 // that no real descriptor will accidently be closed. | 35 // that no real descriptor will accidently be closed. |
36 static const int kFDBase = 50000; | 36 static const int kFDBase = 50000; |
37 | 37 |
38 TEST(FileDescriptorSet, BasicAdd) { | 38 TEST(FileDescriptorSet, BasicAdd) { |
39 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 39 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
40 | 40 |
41 ASSERT_EQ(set->size(), 0u); | 41 ASSERT_EQ(set->size(), 0u); |
42 ASSERT_TRUE(set->empty()); | 42 ASSERT_TRUE(set->empty()); |
43 ASSERT_TRUE(set->Add(kFDBase)); | 43 ASSERT_TRUE(set->Add(kFDBase)); |
44 ASSERT_EQ(set->size(), 1u); | 44 ASSERT_EQ(set->size(), 1u); |
45 ASSERT_TRUE(!set->empty()); | 45 ASSERT_TRUE(!set->empty()); |
46 | 46 |
47 // Empties the set and stops a warning about deleting a set with unconsumed | 47 // Empties the set and stops a warning about deleting a set with unconsumed |
48 // descriptors | 48 // descriptors |
49 set->CommitAll(); | 49 set->CommitAll(); |
50 } | 50 } |
51 | 51 |
52 TEST(FileDescriptorSet, BasicAddAndClose) { | 52 TEST(FileDescriptorSet, BasicAddAndClose) { |
53 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 53 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
54 | 54 |
55 ASSERT_EQ(set->size(), 0u); | 55 ASSERT_EQ(set->size(), 0u); |
56 ASSERT_TRUE(set->empty()); | 56 ASSERT_TRUE(set->empty()); |
57 const int fd = GetSafeFd(); | 57 const int fd = GetSafeFd(); |
58 ASSERT_TRUE(set->AddAndAutoClose(fd)); | 58 ASSERT_TRUE(set->AddAndAutoClose(fd)); |
59 ASSERT_EQ(set->size(), 1u); | 59 ASSERT_EQ(set->size(), 1u); |
60 ASSERT_TRUE(!set->empty()); | 60 ASSERT_TRUE(!set->empty()); |
61 | 61 |
62 set->CommitAll(); | 62 set->CommitAll(); |
63 | 63 |
64 ASSERT_TRUE(VerifyClosed(fd)); | 64 ASSERT_TRUE(VerifyClosed(fd)); |
65 } | 65 } |
66 TEST(FileDescriptorSet, MaxSize) { | 66 TEST(FileDescriptorSet, MaxSize) { |
67 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 67 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
68 | 68 |
69 for (unsigned i = 0; | 69 for (unsigned i = 0; |
70 i < FileDescriptorSet::MAX_DESCRIPTORS_PER_MESSAGE; ++i) { | 70 i < FileDescriptorSet::MAX_DESCRIPTORS_PER_MESSAGE; ++i) { |
71 ASSERT_TRUE(set->Add(kFDBase + 1 + i)); | 71 ASSERT_TRUE(set->Add(kFDBase + 1 + i)); |
72 } | 72 } |
73 | 73 |
74 ASSERT_TRUE(!set->Add(kFDBase)); | 74 ASSERT_TRUE(!set->Add(kFDBase)); |
75 | 75 |
76 set->CommitAll(); | 76 set->CommitAll(); |
77 } | 77 } |
78 | 78 |
79 TEST(FileDescriptorSet, SetDescriptors) { | 79 TEST(FileDescriptorSet, SetDescriptors) { |
80 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 80 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
81 | 81 |
82 ASSERT_TRUE(set->empty()); | 82 ASSERT_TRUE(set->empty()); |
83 set->SetDescriptors(NULL, 0); | 83 set->SetDescriptors(NULL, 0); |
84 ASSERT_TRUE(set->empty()); | 84 ASSERT_TRUE(set->empty()); |
85 | 85 |
86 const int fd = GetSafeFd(); | 86 const int fd = GetSafeFd(); |
87 static const int fds[] = {fd}; | 87 static const int fds[] = {fd}; |
88 set->SetDescriptors(fds, 1); | 88 set->SetDescriptors(fds, 1); |
89 ASSERT_TRUE(!set->empty()); | 89 ASSERT_TRUE(!set->empty()); |
90 ASSERT_EQ(set->size(), 1u); | 90 ASSERT_EQ(set->size(), 1u); |
91 | 91 |
92 set->CommitAll(); | 92 set->CommitAll(); |
93 | 93 |
94 ASSERT_TRUE(VerifyClosed(fd)); | 94 ASSERT_TRUE(VerifyClosed(fd)); |
95 } | 95 } |
96 | 96 |
97 TEST(FileDescriptorSet, GetDescriptors) { | 97 TEST(FileDescriptorSet, GetDescriptors) { |
98 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 98 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
99 | 99 |
100 set->GetDescriptors(NULL); | 100 set->GetDescriptors(NULL); |
101 ASSERT_TRUE(set->Add(kFDBase)); | 101 ASSERT_TRUE(set->Add(kFDBase)); |
102 | 102 |
103 int fds[1]; | 103 int fds[1]; |
104 fds[0] = 0; | 104 fds[0] = 0; |
105 set->GetDescriptors(fds); | 105 set->GetDescriptors(fds); |
106 ASSERT_EQ(fds[0], kFDBase); | 106 ASSERT_EQ(fds[0], kFDBase); |
107 set->CommitAll(); | 107 set->CommitAll(); |
108 ASSERT_TRUE(set->empty()); | 108 ASSERT_TRUE(set->empty()); |
109 } | 109 } |
110 | 110 |
111 TEST(FileDescriptorSet, WalkInOrder) { | 111 TEST(FileDescriptorSet, WalkInOrder) { |
112 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 112 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
113 | 113 |
114 ASSERT_TRUE(set->Add(kFDBase)); | 114 ASSERT_TRUE(set->Add(kFDBase)); |
115 ASSERT_TRUE(set->Add(kFDBase + 1)); | 115 ASSERT_TRUE(set->Add(kFDBase + 1)); |
116 ASSERT_TRUE(set->Add(kFDBase + 2)); | 116 ASSERT_TRUE(set->Add(kFDBase + 2)); |
117 | 117 |
118 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); | 118 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); |
119 ASSERT_EQ(set->GetDescriptorAt(1), kFDBase + 1); | 119 ASSERT_EQ(set->GetDescriptorAt(1), kFDBase + 1); |
120 ASSERT_EQ(set->GetDescriptorAt(2), kFDBase + 2); | 120 ASSERT_EQ(set->GetDescriptorAt(2), kFDBase + 2); |
121 | 121 |
122 set->CommitAll(); | 122 set->CommitAll(); |
123 } | 123 } |
124 | 124 |
125 TEST(FileDescriptorSet, WalkWrongOrder) { | 125 TEST(FileDescriptorSet, WalkWrongOrder) { |
126 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 126 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
127 | 127 |
128 ASSERT_TRUE(set->Add(kFDBase)); | 128 ASSERT_TRUE(set->Add(kFDBase)); |
129 ASSERT_TRUE(set->Add(kFDBase + 1)); | 129 ASSERT_TRUE(set->Add(kFDBase + 1)); |
130 ASSERT_TRUE(set->Add(kFDBase + 2)); | 130 ASSERT_TRUE(set->Add(kFDBase + 2)); |
131 | 131 |
132 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); | 132 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); |
133 ASSERT_EQ(set->GetDescriptorAt(2), -1); | 133 ASSERT_EQ(set->GetDescriptorAt(2), -1); |
134 | 134 |
135 set->CommitAll(); | 135 set->CommitAll(); |
136 } | 136 } |
137 | 137 |
138 TEST(FileDescriptorSet, WalkCycle) { | 138 TEST(FileDescriptorSet, WalkCycle) { |
139 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 139 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
140 | 140 |
141 ASSERT_TRUE(set->Add(kFDBase)); | 141 ASSERT_TRUE(set->Add(kFDBase)); |
142 ASSERT_TRUE(set->Add(kFDBase + 1)); | 142 ASSERT_TRUE(set->Add(kFDBase + 1)); |
143 ASSERT_TRUE(set->Add(kFDBase + 2)); | 143 ASSERT_TRUE(set->Add(kFDBase + 2)); |
144 | 144 |
145 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); | 145 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); |
146 ASSERT_EQ(set->GetDescriptorAt(1), kFDBase + 1); | 146 ASSERT_EQ(set->GetDescriptorAt(1), kFDBase + 1); |
147 ASSERT_EQ(set->GetDescriptorAt(2), kFDBase + 2); | 147 ASSERT_EQ(set->GetDescriptorAt(2), kFDBase + 2); |
148 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); | 148 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); |
149 ASSERT_EQ(set->GetDescriptorAt(1), kFDBase + 1); | 149 ASSERT_EQ(set->GetDescriptorAt(1), kFDBase + 1); |
150 ASSERT_EQ(set->GetDescriptorAt(2), kFDBase + 2); | 150 ASSERT_EQ(set->GetDescriptorAt(2), kFDBase + 2); |
151 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); | 151 ASSERT_EQ(set->GetDescriptorAt(0), kFDBase); |
152 ASSERT_EQ(set->GetDescriptorAt(1), kFDBase + 1); | 152 ASSERT_EQ(set->GetDescriptorAt(1), kFDBase + 1); |
153 ASSERT_EQ(set->GetDescriptorAt(2), kFDBase + 2); | 153 ASSERT_EQ(set->GetDescriptorAt(2), kFDBase + 2); |
154 | 154 |
155 set->CommitAll(); | 155 set->CommitAll(); |
156 } | 156 } |
157 | 157 |
158 TEST(FileDescriptorSet, DontClose) { | 158 TEST(FileDescriptorSet, DontClose) { |
159 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 159 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
160 | 160 |
161 const int fd = GetSafeFd(); | 161 const int fd = GetSafeFd(); |
162 ASSERT_TRUE(set->Add(fd)); | 162 ASSERT_TRUE(set->Add(fd)); |
163 set->CommitAll(); | 163 set->CommitAll(); |
164 | 164 |
165 ASSERT_FALSE(VerifyClosed(fd)); | 165 ASSERT_FALSE(VerifyClosed(fd)); |
166 } | 166 } |
167 | 167 |
168 TEST(FileDescriptorSet, DoClose) { | 168 TEST(FileDescriptorSet, DoClose) { |
169 scoped_refptr<FileDescriptorSet> set = new FileDescriptorSet; | 169 scoped_refptr<FileDescriptorSet> set(new FileDescriptorSet); |
170 | 170 |
171 const int fd = GetSafeFd(); | 171 const int fd = GetSafeFd(); |
172 ASSERT_TRUE(set->AddAndAutoClose(fd)); | 172 ASSERT_TRUE(set->AddAndAutoClose(fd)); |
173 set->CommitAll(); | 173 set->CommitAll(); |
174 | 174 |
175 ASSERT_TRUE(VerifyClosed(fd)); | 175 ASSERT_TRUE(VerifyClosed(fd)); |
176 } | 176 } |
177 | 177 |
178 } // namespace | 178 } // namespace |
OLD | NEW |