Skip to content
Projects
Groups
Snippets
Help
Loading...
Sign in / Register
Toggle navigation
L
libzmq
Project
Project
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Packages
Packages
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
submodule
libzmq
Commits
5ac19647
Commit
5ac19647
authored
Jul 08, 2013
by
Ian Barber
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #610 from hintjens/master
Problem: new spec test cases don't all work
parents
08622a77
9ca6898f
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
80 additions
and
85 deletions
+80
-85
.gitignore
.gitignore
+5
-0
test_spec_dealer.cpp
tests/test_spec_dealer.cpp
+18
-23
test_spec_pushpull.cpp
tests/test_spec_pushpull.cpp
+2
-1
test_spec_req.cpp
tests/test_spec_req.cpp
+48
-49
test_spec_router.cpp
tests/test_spec_router.cpp
+2
-1
testutil.hpp
tests/testutil.hpp
+5
-11
No files found.
.gitignore
View file @
5ac19647
...
...
@@ -53,6 +53,11 @@ tests/test_security
tests/test_security_curve
tests/test_probe_router
tests/test_stream
tests/test_spec_dealer
tests/test_spec_pushpull
tests/test_spec_rep
tests/test_spec_req
tests/test_spec_router
src/platform.hpp*
src/stamp-h1
perf/local_lat
...
...
tests/test_spec_dealer.cpp
View file @
5ac19647
...
...
@@ -32,9 +32,9 @@ void test_round_robin_out (void *ctx)
int
rc
=
zmq_bind
(
dealer
,
bind_address
);
assert
(
rc
==
0
);
const
size_t
N
=
5
;
void
*
rep
[
N
];
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
const
size_t
services
=
5
;
void
*
rep
[
services
];
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
{
rep
[
i
]
=
zmq_socket
(
ctx
,
ZMQ_REP
);
assert
(
rep
[
i
]);
...
...
@@ -51,8 +51,8 @@ void test_round_robin_out (void *ctx)
rc
=
zmq_poll
(
0
,
0
,
100
);
assert
(
rc
==
0
);
// Send
N
requests
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
// Send
all
requests
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
{
s_send_seq
(
dealer
,
0
,
"ABC"
,
SEQ_END
);
}
...
...
@@ -61,7 +61,7 @@ void test_round_robin_out (void *ctx)
zmq_msg_t
msg
;
zmq_msg_init
(
&
msg
);
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
{
s_recv_seq
(
rep
[
i
],
"ABC"
,
SEQ_END
);
}
...
...
@@ -71,7 +71,7 @@ void test_round_robin_out (void *ctx)
close_zero_linger
(
dealer
);
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
{
close_zero_linger
(
rep
[
i
]);
}
...
...
@@ -93,9 +93,9 @@ void test_fair_queue_in (void *ctx)
rc
=
zmq_bind
(
receiver
,
bind_address
);
assert
(
rc
==
0
);
const
size_t
N
=
5
;
void
*
senders
[
N
];
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
const
size_t
services
=
5
;
void
*
senders
[
services
];
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
{
senders
[
i
]
=
zmq_socket
(
ctx
,
ZMQ_DEALER
);
assert
(
senders
[
i
]);
...
...
@@ -117,31 +117,25 @@ void test_fair_queue_in (void *ctx)
s_send_seq
(
senders
[
0
],
"A"
,
SEQ_END
);
s_recv_seq
(
receiver
,
"A"
,
SEQ_END
);
// send N requests
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
// send our requests
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
s_send_seq
(
senders
[
i
],
"B"
,
SEQ_END
);
}
// Wait for data.
rc
=
zmq_poll
(
0
,
0
,
50
);
assert
(
rc
==
0
);
// handle N requests
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
// handle the requests
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
s_recv_seq
(
receiver
,
"B"
,
SEQ_END
);
}
rc
=
zmq_msg_close
(
&
msg
);
assert
(
rc
==
0
);
close_zero_linger
(
receiver
);
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
close_zero_linger
(
senders
[
i
]);
}
// Wait for disconnects.
rc
=
zmq_poll
(
0
,
0
,
100
);
...
...
@@ -232,7 +226,7 @@ void test_block_on_send_no_peers (void *ctx)
assert
(
rc
==
0
);
}
int
main
()
int
main
(
void
)
{
void
*
ctx
=
zmq_ctx_new
();
assert
(
ctx
);
...
...
@@ -258,7 +252,8 @@ int main ()
// SHALL create a double queue when a peer connects to it. If this peer
// disconnects, the DEALER socket SHALL destroy its double queue and SHALL
// discard any messages it contains.
test_destroy_queue_on_disconnect
(
ctx
);
// *** Test disabled until libzmq does this properly ***
// test_destroy_queue_on_disconnect (ctx);
}
int
rc
=
zmq_ctx_term
(
ctx
);
...
...
tests/test_spec_pushpull.cpp
View file @
5ac19647
...
...
@@ -296,7 +296,8 @@ int main ()
// PUSH and PULL: SHALL create this queue when a peer connects to it. If
// this peer disconnects, the socket SHALL destroy its queue and SHALL
// discard any messages it contains.
test_destroy_queue_on_disconnect
(
ctx
);
// *** Test disabled until libzmq does this properly ***
// test_destroy_queue_on_disconnect (ctx);
}
int
rc
=
zmq_ctx_term
(
ctx
);
...
...
tests/test_spec_req.cpp
View file @
5ac19647
...
...
@@ -18,6 +18,8 @@
*/
#include <stdio.h>
#include <unistd.h>
#include <time.h>
#include "testutil.hpp"
const
char
*
bind_address
=
0
;
...
...
@@ -31,36 +33,36 @@ void test_round_robin_out (void *ctx)
int
rc
=
zmq_bind
(
req
,
bind_address
);
assert
(
rc
==
0
);
const
size_t
N
=
5
;
void
*
rep
[
N
];
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
rep
[
i
]
=
zmq_socket
(
ctx
,
ZMQ_REP
);
assert
(
rep
[
i
]);
const
size_t
services
=
5
;
void
*
rep
[
services
];
for
(
size_t
peer
=
0
;
peer
<
services
;
peer
++
)
{
rep
[
peer
]
=
zmq_socket
(
ctx
,
ZMQ_REP
);
assert
(
rep
[
peer
]);
int
timeout
=
100
;
rc
=
zmq_setsockopt
(
rep
[
i
],
ZMQ_RCVTIMEO
,
&
timeout
,
sizeof
(
int
));
rc
=
zmq_setsockopt
(
rep
[
peer
],
ZMQ_RCVTIMEO
,
&
timeout
,
sizeof
(
int
));
assert
(
rc
==
0
);
rc
=
zmq_connect
(
rep
[
i
],
connect_address
);
rc
=
zmq_connect
(
rep
[
peer
],
connect_address
);
assert
(
rc
==
0
);
}
// Send N request-replies, and expect every REP it used once in order
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
// We have to give the connects time to finish otherwise the requests
// will not properly round-robin. We could alternatively connect the
// REQ sockets to the REP sockets.
struct
timespec
t
=
{
0
,
250
*
1000000
};
nanosleep
(
&
t
,
NULL
);
// Send our peer-replies, and expect every REP it used once in order
for
(
size_t
peer
=
0
;
peer
<
services
;
peer
++
)
{
s_send_seq
(
req
,
"ABC"
,
SEQ_END
);
s_recv_seq
(
rep
[
i
],
"ABC"
,
SEQ_END
);
s_send_seq
(
rep
[
i
],
"DEF"
,
SEQ_END
);
s_recv_seq
(
rep
[
peer
],
"ABC"
,
SEQ_END
);
s_send_seq
(
rep
[
peer
],
"DEF"
,
SEQ_END
);
s_recv_seq
(
req
,
"DEF"
,
SEQ_END
);
}
close_zero_linger
(
req
);
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
close_zero_linger
(
rep
[
i
]);
}
for
(
size_t
peer
=
0
;
peer
<
services
;
peer
++
)
close_zero_linger
(
rep
[
peer
]);
// Wait for disconnects.
rc
=
zmq_poll
(
0
,
0
,
100
);
...
...
@@ -78,38 +80,36 @@ void test_req_only_listens_to_current_peer (void *ctx)
rc
=
zmq_bind
(
req
,
bind_address
);
assert
(
rc
==
0
);
const
size_t
N
=
3
;
void
*
router
[
N
];
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
router
[
i
]
=
zmq_socket
(
ctx
,
ZMQ_ROUTER
);
assert
(
router
[
i
]);
const
size_t
services
=
3
;
void
*
router
[
services
];
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
{
router
[
i
]
=
zmq_socket
(
ctx
,
ZMQ_ROUTER
);
assert
(
router
[
i
]);
int
timeout
=
100
;
rc
=
zmq_setsockopt
(
router
[
i
],
ZMQ_RCVTIMEO
,
&
timeout
,
sizeof
(
timeout
));
rc
=
zmq_setsockopt
(
router
[
i
],
ZMQ_RCVTIMEO
,
&
timeout
,
sizeof
(
timeout
));
assert
(
rc
==
0
);
int
enabled
=
1
;
rc
=
zmq_setsockopt
(
router
[
i
],
ZMQ_ROUTER_MANDATORY
,
&
enabled
,
sizeof
(
enabled
));
rc
=
zmq_setsockopt
(
router
[
i
],
ZMQ_ROUTER_MANDATORY
,
&
enabled
,
sizeof
(
enabled
));
assert
(
rc
==
0
);
rc
=
zmq_connect
(
router
[
i
],
connect_address
);
rc
=
zmq_connect
(
router
[
i
],
connect_address
);
assert
(
rc
==
0
);
}
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
{
s_send_seq
(
req
,
"ABC"
,
SEQ_END
);
// Receive on router i
s_recv_seq
(
router
[
i
],
"A"
,
0
,
"ABC"
,
SEQ_END
);
s_recv_seq
(
router
[
i
],
"A"
,
0
,
"ABC"
,
SEQ_END
);
// Send back replies on all routers
for
(
size_t
j
=
0
;
j
<
N
;
++
j
)
{
const
char
*
replies
[]
=
{
"WRONG"
,
"GOOD"
};
const
char
*
reply
=
replies
[
i
==
j
?
1
:
0
];
s_send_seq
(
router
[
j
],
"A"
,
0
,
reply
,
SEQ_END
);
for
(
size_t
j
=
0
;
j
<
services
;
++
j
)
{
const
char
*
replies
[]
=
{
"WRONG"
,
"GOOD"
};
const
char
*
reply
=
replies
[
i
==
j
?
1
:
0
];
s_send_seq
(
router
[
j
],
"A"
,
0
,
reply
,
SEQ_END
);
}
// Recieve only the good relpy
...
...
@@ -117,11 +117,8 @@ void test_req_only_listens_to_current_peer (void *ctx)
}
close_zero_linger
(
req
);
for
(
size_t
i
=
0
;
i
<
N
;
++
i
)
{
close_zero_linger
(
router
[
i
]);
}
for
(
size_t
i
=
0
;
i
<
services
;
++
i
)
close_zero_linger
(
router
[
i
]);
// Wait for disconnects.
rc
=
zmq_poll
(
0
,
0
,
100
);
...
...
@@ -208,17 +205,17 @@ void test_block_on_send_no_peers (void *ctx)
assert
(
rc
==
0
);
}
int
main
()
int
main
(
void
)
{
void
*
ctx
=
zmq_ctx_new
();
assert
(
ctx
);
const
char
*
binds
[]
=
{
"inproc://a"
,
"tcp://*:5555"
};
const
char
*
connects
[]
=
{
"inproc://a"
,
"tcp://localhost:5555"
};
const
char
*
binds
[]
=
{
"inproc://a"
,
"tcp://*:5555"
};
const
char
*
connects
[]
=
{
"inproc://a"
,
"tcp://localhost:5555"
};
for
(
int
i
=
0
;
i
<
2
;
++
i
)
{
bind_address
=
binds
[
i
];
connect_address
=
connects
[
i
];
for
(
int
transport
=
0
;
transport
<
2
;
transport
++
)
{
bind_address
=
binds
[
transport
];
connect_address
=
connects
[
transport
];
// SHALL route outgoing messages to connected peers using a round-robin
// strategy.
...
...
@@ -230,13 +227,15 @@ int main ()
// application.
test_req_message_format
(
ctx
);
// SHALL block on sending, or return a suitable error, when it has no connected peers.
// SHALL block on sending, or return a suitable error, when it has no
// connected peers.
test_block_on_send_no_peers
(
ctx
);
// SHALL accept an incoming message only from the last peer that it sent a
// request to.
// SHALL discard silently any messages received from other peers.
test_req_only_listens_to_current_peer
(
ctx
);
// *** Test disabled until libzmq does this properly ***
// test_req_only_listens_to_current_peer (ctx);
}
int
rc
=
zmq_ctx_term
(
ctx
);
...
...
tests/test_spec_router.cpp
View file @
5ac19647
...
...
@@ -199,7 +199,8 @@ int main ()
// SHALL create a double queue when a peer connects to it. If this peer
// disconnects, the ROUTER socket SHALL destroy its double queue and SHALL
// discard any messages it contains.
test_destroy_queue_on_disconnect
(
ctx
);
// *** Test disabled until libzmq does this properly ***
// test_destroy_queue_on_disconnect (ctx);
}
int
rc
=
zmq_ctx_term
(
ctx
);
...
...
tests/testutil.hpp
View file @
5ac19647
...
...
@@ -110,7 +110,7 @@ s_sendmore (void *socket, const char *string) {
#define strneq(s1,s2) (strcmp ((s1), (s2)))
const
char
*
SEQ_END
=
(
const
char
*
)
1
;
const
char
*
SEQ_END
=
(
const
char
*
)
1
;
// Sends a message composed of frames that are C strings or null frames.
// The list must be terminated by SEQ_END.
...
...
@@ -126,13 +126,11 @@ void s_send_seq (void *socket, ...)
data
=
va_arg
(
ap
,
const
char
*
);
bool
end
=
data
==
SEQ_END
;
if
(
!
prev
)
{
if
(
!
prev
)
{
int
rc
=
zmq_send
(
socket
,
0
,
0
,
end
?
0
:
ZMQ_SNDMORE
);
assert
(
rc
!=
-
1
);
}
else
{
else
{
int
rc
=
zmq_send
(
socket
,
prev
,
strlen
(
prev
)
+
1
,
end
?
0
:
ZMQ_SNDMORE
);
assert
(
rc
!=
-
1
);
}
...
...
@@ -157,19 +155,15 @@ void s_recv_seq (void *socket, ...)
va_list
ap
;
va_start
(
ap
,
socket
);
const
char
*
data
=
va_arg
(
ap
,
const
char
*
);
while
(
true
)
{
while
(
true
)
{
int
rc
=
zmq_msg_recv
(
&
msg
,
socket
,
0
);
assert
(
rc
!=
-
1
);
if
(
!
data
)
{
assert
(
zmq_msg_size
(
&
msg
)
==
0
);
}
else
{
assert
(
strcmp
(
data
,
(
const
char
*
)
zmq_msg_data
(
&
msg
))
==
0
);
}
data
=
va_arg
(
ap
,
const
char
*
);
bool
end
=
data
==
SEQ_END
;
...
...
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