Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(378)

Side by Side Diff: base/sequence_checker_unittest.cc

Issue 2213263002: Make ThreadChecker::CalledOnValidThread() return true when called from the same task. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: similarity Created 4 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 <stddef.h> 5 #include <stddef.h>
6 6
7 #include <memory> 7 #include <memory>
8 #include <string> 8 #include <string>
9 9
10 #include "base/bind.h" 10 #include "base/bind.h"
11 #include "base/bind_helpers.h" 11 #include "base/bind_helpers.h"
12 #include "base/callback_forward.h" 12 #include "base/callback_forward.h"
13 #include "base/macros.h" 13 #include "base/macros.h"
14 #include "base/message_loop/message_loop.h" 14 #include "base/message_loop/message_loop.h"
15 #include "base/sequence_and_task_token.h"
15 #include "base/sequence_checker_impl.h" 16 #include "base/sequence_checker_impl.h"
16 #include "base/sequence_token.h"
17 #include "base/single_thread_task_runner.h" 17 #include "base/single_thread_task_runner.h"
18 #include "base/test/sequenced_worker_pool_owner.h" 18 #include "base/test/sequenced_worker_pool_owner.h"
19 #include "base/threading/simple_thread.h" 19 #include "base/threading/simple_thread.h"
20 #include "testing/gtest/include/gtest/gtest.h" 20 #include "testing/gtest/include/gtest/gtest.h"
21 21
22 namespace base { 22 namespace base {
23 23
24 namespace { 24 namespace {
25 25
26 constexpr size_t kNumWorkerThreads = 3; 26 constexpr size_t kNumWorkerThreads = 3;
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
72 EXPECT_TRUE(sequence_checker->CalledOnValidSequence()); 72 EXPECT_TRUE(sequence_checker->CalledOnValidSequence());
73 73
74 // Since |sequence_checker| is now bound to the current sequence, another call 74 // Since |sequence_checker| is now bound to the current sequence, another call
75 // to CalledOnValidSequence() should return true. 75 // to CalledOnValidSequence() should return true.
76 EXPECT_TRUE(sequence_checker->CalledOnValidSequence()); 76 EXPECT_TRUE(sequence_checker->CalledOnValidSequence());
77 } 77 }
78 78
79 void ExpectCalledOnValidSequenceWithSequenceToken( 79 void ExpectCalledOnValidSequenceWithSequenceToken(
80 SequenceCheckerImpl* sequence_checker, 80 SequenceCheckerImpl* sequence_checker,
81 SequenceToken sequence_token) { 81 SequenceToken sequence_token) {
82 ScopedSetSequenceTokenForCurrentThread 82 ScopedSetSequenceAndTaskTokenForCurrentThread
83 scoped_set_sequence_token_for_current_thread(sequence_token); 83 scoped_set_sequence_and_task_token_for_current_thread(sequence_token);
84 ExpectCalledOnValidSequence(sequence_checker); 84 ExpectCalledOnValidSequence(sequence_checker);
85 } 85 }
86 86
87 void ExpectNotCalledOnValidSequence(SequenceCheckerImpl* sequence_checker) { 87 void ExpectNotCalledOnValidSequence(SequenceCheckerImpl* sequence_checker) {
88 ASSERT_TRUE(sequence_checker); 88 ASSERT_TRUE(sequence_checker);
89 EXPECT_FALSE(sequence_checker->CalledOnValidSequence()); 89 EXPECT_FALSE(sequence_checker->CalledOnValidSequence());
90 } 90 }
91 91
92 } // namespace 92 } // namespace
93 93
94 TEST_F(SequenceCheckerTest, CallsAllowedOnSameThreadNoSequenceToken) { 94 TEST_F(SequenceCheckerTest, CallsAllowedOnSameThreadNoSequenceToken) {
95 SequenceCheckerImpl sequence_checker; 95 SequenceCheckerImpl sequence_checker;
96 EXPECT_TRUE(sequence_checker.CalledOnValidSequence()); 96 EXPECT_TRUE(sequence_checker.CalledOnValidSequence());
97 } 97 }
98 98
99 TEST_F(SequenceCheckerTest, CallsAllowedOnSameThreadSameSequenceToken) { 99 TEST_F(SequenceCheckerTest, CallsAllowedOnSameThreadSameSequenceToken) {
100 ScopedSetSequenceTokenForCurrentThread 100 ScopedSetSequenceAndTaskTokenForCurrentThread
101 scoped_set_sequence_token_for_current_thread(SequenceToken::Create()); 101 scoped_set_sequence_and_task_token_for_current_thread(
102 SequenceToken::Create());
102 SequenceCheckerImpl sequence_checker; 103 SequenceCheckerImpl sequence_checker;
103 EXPECT_TRUE(sequence_checker.CalledOnValidSequence()); 104 EXPECT_TRUE(sequence_checker.CalledOnValidSequence());
104 } 105 }
105 106
106 TEST_F(SequenceCheckerTest, CallsDisallowedOnDifferentThreadsNoSequenceToken) { 107 TEST_F(SequenceCheckerTest, CallsDisallowedOnDifferentThreadsNoSequenceToken) {
107 SequenceCheckerImpl sequence_checker; 108 SequenceCheckerImpl sequence_checker;
108 RunCallbackThread thread( 109 RunCallbackThread thread(
109 Bind(&ExpectNotCalledOnValidSequence, Unretained(&sequence_checker))); 110 Bind(&ExpectNotCalledOnValidSequence, Unretained(&sequence_checker)));
110 } 111 }
111 112
112 TEST_F(SequenceCheckerTest, CallsAllowedOnDifferentThreadsSameSequenceToken) { 113 TEST_F(SequenceCheckerTest, CallsAllowedOnDifferentThreadsSameSequenceToken) {
113 const SequenceToken sequence_token(SequenceToken::Create()); 114 const SequenceToken sequence_token(SequenceToken::Create());
114 115
115 ScopedSetSequenceTokenForCurrentThread 116 ScopedSetSequenceAndTaskTokenForCurrentThread
116 scoped_set_sequence_token_for_current_thread(sequence_token); 117 scoped_set_sequence_and_task_token_for_current_thread(sequence_token);
117 SequenceCheckerImpl sequence_checker; 118 SequenceCheckerImpl sequence_checker;
118 EXPECT_TRUE(sequence_checker.CalledOnValidSequence()); 119 EXPECT_TRUE(sequence_checker.CalledOnValidSequence());
119 120
120 RunCallbackThread thread(Bind(&ExpectCalledOnValidSequenceWithSequenceToken, 121 RunCallbackThread thread(Bind(&ExpectCalledOnValidSequenceWithSequenceToken,
121 Unretained(&sequence_checker), sequence_token)); 122 Unretained(&sequence_checker), sequence_token));
122 } 123 }
123 124
124 TEST_F(SequenceCheckerTest, CallsDisallowedOnSameThreadDifferentSequenceToken) { 125 TEST_F(SequenceCheckerTest, CallsDisallowedOnSameThreadDifferentSequenceToken) {
125 std::unique_ptr<SequenceCheckerImpl> sequence_checker; 126 std::unique_ptr<SequenceCheckerImpl> sequence_checker;
126 127
127 { 128 {
128 ScopedSetSequenceTokenForCurrentThread 129 ScopedSetSequenceAndTaskTokenForCurrentThread
129 scoped_set_sequence_token_for_current_thread(SequenceToken::Create()); 130 scoped_set_sequence_and_task_token_for_current_thread(
131 SequenceToken::Create());
130 sequence_checker.reset(new SequenceCheckerImpl); 132 sequence_checker.reset(new SequenceCheckerImpl);
131 } 133 }
132 134
133 { 135 {
134 // Different SequenceToken. 136 // Different SequenceToken.
135 ScopedSetSequenceTokenForCurrentThread 137 ScopedSetSequenceAndTaskTokenForCurrentThread
136 scoped_set_sequence_token_for_current_thread(SequenceToken::Create()); 138 scoped_set_sequence_and_task_token_for_current_thread(
139 SequenceToken::Create());
137 EXPECT_FALSE(sequence_checker->CalledOnValidSequence()); 140 EXPECT_FALSE(sequence_checker->CalledOnValidSequence());
138 } 141 }
139 142
140 // No SequenceToken. 143 // No SequenceToken.
141 EXPECT_FALSE(sequence_checker->CalledOnValidSequence()); 144 EXPECT_FALSE(sequence_checker->CalledOnValidSequence());
142 } 145 }
143 146
144 TEST_F(SequenceCheckerTest, DetachFromSequence) { 147 TEST_F(SequenceCheckerTest, DetachFromSequence) {
145 std::unique_ptr<SequenceCheckerImpl> sequence_checker; 148 std::unique_ptr<SequenceCheckerImpl> sequence_checker;
146 149
147 { 150 {
148 ScopedSetSequenceTokenForCurrentThread 151 ScopedSetSequenceAndTaskTokenForCurrentThread
149 scoped_set_sequence_token_for_current_thread(SequenceToken::Create()); 152 scoped_set_sequence_and_task_token_for_current_thread(
153 SequenceToken::Create());
150 sequence_checker.reset(new SequenceCheckerImpl); 154 sequence_checker.reset(new SequenceCheckerImpl);
151 } 155 }
152 156
153 sequence_checker->DetachFromSequence(); 157 sequence_checker->DetachFromSequence();
154 158
155 { 159 {
156 // Verify that CalledOnValidSequence() returns true when called with 160 // Verify that CalledOnValidSequence() returns true when called with
157 // a different sequence token after a call to DetachFromSequence(). 161 // a different sequence token after a call to DetachFromSequence().
158 ScopedSetSequenceTokenForCurrentThread 162 ScopedSetSequenceAndTaskTokenForCurrentThread
159 scoped_set_sequence_token_for_current_thread(SequenceToken::Create()); 163 scoped_set_sequence_and_task_token_for_current_thread(
164 SequenceToken::Create());
160 EXPECT_TRUE(sequence_checker->CalledOnValidSequence()); 165 EXPECT_TRUE(sequence_checker->CalledOnValidSequence());
161 } 166 }
162 } 167 }
163 168
164 TEST_F(SequenceCheckerTest, DetachFromSequenceNoSequenceToken) { 169 TEST_F(SequenceCheckerTest, DetachFromSequenceNoSequenceToken) {
165 SequenceCheckerImpl sequence_checker; 170 SequenceCheckerImpl sequence_checker;
166 sequence_checker.DetachFromSequence(); 171 sequence_checker.DetachFromSequence();
167 172
168 // Verify that CalledOnValidSequence() returns true when called on a 173 // Verify that CalledOnValidSequence() returns true when called on a
169 // different thread after a call to DetachFromSequence(). 174 // different thread after a call to DetachFromSequence().
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
249 FlushSequencedWorkerPoolForTesting(); 254 FlushSequencedWorkerPoolForTesting();
250 255
251 SequencedWorkerPoolOwner second_pool_owner(kNumWorkerThreads, "test2"); 256 SequencedWorkerPoolOwner second_pool_owner(kNumWorkerThreads, "test2");
252 second_pool_owner.pool()->PostNamedSequencedWorkerTask( 257 second_pool_owner.pool()->PostNamedSequencedWorkerTask(
253 "A", FROM_HERE, base::Bind(&ExpectNotCalledOnValidSequence, 258 "A", FROM_HERE, base::Bind(&ExpectNotCalledOnValidSequence,
254 base::Unretained(&sequence_checker))); 259 base::Unretained(&sequence_checker)));
255 second_pool_owner.pool()->FlushForTesting(); 260 second_pool_owner.pool()->FlushForTesting();
256 } 261 }
257 262
258 } // namespace base 263 } // namespace base
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698