| 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 |