Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
A
Actor Framework
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Operations
Operations
Metrics
Environments
Analytics
Analytics
CI / CD
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
cpp-libs
Actor Framework
Commits
060ec2be
Commit
060ec2be
authored
Apr 19, 2016
by
Dominik Charousset
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix actor_pool unit test
parent
67441bc7
Changes
1
Show whitespace changes
Inline
Side-by-side
Showing
1 changed file
with
20 additions
and
13 deletions
+20
-13
libcaf_core/test/actor_pool.cpp
libcaf_core/test/actor_pool.cpp
+20
-13
No files found.
libcaf_core/test/actor_pool.cpp
View file @
060ec2be
...
@@ -82,21 +82,21 @@ CAF_TEST(round_robin_actor_pool) {
...
@@ -82,21 +82,21 @@ CAF_TEST(round_robin_actor_pool) {
auto
w
=
actor_pool
::
make
(
&
context
,
5
,
spawn_worker
,
actor_pool
::
round_robin
());
auto
w
=
actor_pool
::
make
(
&
context
,
5
,
spawn_worker
,
actor_pool
::
round_robin
());
self
->
monitor
(
w
);
self
->
monitor
(
w
);
self
->
send
(
w
,
sys_atom
::
value
,
put_atom
::
value
,
spawn_worker
());
self
->
send
(
w
,
sys_atom
::
value
,
put_atom
::
value
,
spawn_worker
());
std
::
vector
<
actor
_addr
>
workers
;
std
::
vector
<
actor
>
workers
;
for
(
int
i
=
0
;
i
<
6
;
++
i
)
{
for
(
int
i
=
0
;
i
<
6
;
++
i
)
{
self
->
request
(
w
,
infinite
,
i
,
i
).
receive
(
self
->
request
(
w
,
infinite
,
i
,
i
).
receive
(
[
&
](
int
res
)
{
[
&
](
int
res
)
{
CAF_CHECK_EQUAL
(
res
,
i
+
i
);
CAF_CHECK_EQUAL
(
res
,
i
+
i
);
auto
sender
=
self
->
current_sender
();
auto
sender
=
self
->
current_sender
();
self
->
monitor
(
sender
);
self
->
monitor
(
sender
);
workers
.
push_back
(
sender
);
workers
.
push_back
(
actor_cast
<
actor
>
(
sender
)
);
}
}
);
);
}
}
CAF_CHECK_EQUAL
(
workers
.
size
(),
6u
);
CAF_CHECK_EQUAL
(
workers
.
size
(),
6u
);
CAF_CHECK
(
std
::
unique
(
workers
.
begin
(),
workers
.
end
())
==
workers
.
end
());
CAF_CHECK
(
std
::
unique
(
workers
.
begin
(),
workers
.
end
())
==
workers
.
end
());
auto
is_invalid
=
[](
const
actor
_addr
&
addr
)
{
auto
is_invalid
=
[](
const
actor
&
x
)
{
return
addr
==
invalid_actor_add
r
;
return
x
==
invalid_acto
r
;
};
};
CAF_CHECK
(
std
::
none_of
(
workers
.
begin
(),
workers
.
end
(),
is_invalid
));
CAF_CHECK
(
std
::
none_of
(
workers
.
begin
(),
workers
.
end
(),
is_invalid
));
self
->
request
(
w
,
infinite
,
sys_atom
::
value
,
get_atom
::
value
).
receive
(
self
->
request
(
w
,
infinite
,
sys_atom
::
value
,
get_atom
::
value
).
receive
(
...
@@ -110,16 +110,23 @@ CAF_TEST(round_robin_actor_pool) {
...
@@ -110,16 +110,23 @@ CAF_TEST(round_robin_actor_pool) {
anon_send_exit
(
workers
.
back
(),
exit_reason
::
user_shutdown
);
anon_send_exit
(
workers
.
back
(),
exit_reason
::
user_shutdown
);
self
->
receive
(
self
->
receive
(
[
&
](
const
down_msg
&
dm
)
{
[
&
](
const
down_msg
&
dm
)
{
CAF_CHECK_EQUAL
(
dm
.
source
,
workers
.
back
());
CAF_CHECK_EQUAL
(
dm
.
source
,
workers
.
back
()
.
address
()
);
workers
.
pop_back
();
workers
.
pop_back
();
// check whether actor pool removed failed worker
// poll actor pool up to 10 times or until it removes the failed worker
bool
success
=
false
;
size_t
i
=
0
;
while
(
!
success
&&
++
i
<=
10
)
{
self
->
request
(
w
,
infinite
,
sys_atom
::
value
,
get_atom
::
value
).
receive
(
self
->
request
(
w
,
infinite
,
sys_atom
::
value
,
get_atom
::
value
).
receive
(
[
&
](
std
::
vector
<
actor
>&
ws
)
{
[
&
](
std
::
vector
<
actor
>&
ws
)
{
success
=
workers
.
size
()
==
ws
.
size
();
if
(
success
)
{
std
::
sort
(
ws
.
begin
(),
ws
.
end
());
std
::
sort
(
ws
.
begin
(),
ws
.
end
());
CAF_REQUIRE_EQUAL
(
workers
.
size
(),
ws
.
size
()
);
CAF_CHECK_EQUAL
(
workers
,
ws
);
CAF_CHECK
(
std
::
equal
(
workers
.
begin
(),
workers
.
end
(),
ws
.
begin
()));
}
}
}
);
);
}
CAF_REQUIRE
(
success
);
},
},
after
(
std
::
chrono
::
milliseconds
(
250
))
>>
[]
{
after
(
std
::
chrono
::
milliseconds
(
250
))
>>
[]
{
CAF_ERROR
(
"didn't receive a down message"
);
CAF_ERROR
(
"didn't receive a down message"
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment