Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Contribute to GitLab
Sign in
Toggle navigation
P
paho.mqtt.c
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
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
eclipse
paho.mqtt.c
Commits
b880d34f
Commit
b880d34f
authored
Mar 20, 2017
by
Ian Craggs
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Windows CMake build additions and corrections
parent
526ffc18
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
467 additions
and
499 deletions
+467
-499
CMakeLists.txt
CMakeLists.txt
+1
-0
cbuild.bat
cbuild.bat
+16
-0
CMakeLists.txt
src/CMakeLists.txt
+14
-3
Socket.c
src/Socket.c
+10
-11
Socket.h
src/Socket.h
+10
-3
Thread.c
src/Thread.c
+3
-2
CMakeLists.txt
src/samples/CMakeLists.txt
+4
-0
MQTTClient_publish_async.c
src/samples/MQTTClient_publish_async.c
+4
-5
paho_c_pub.c
src/samples/paho_c_pub.c
+24
-26
paho_cs_pub.c
src/samples/paho_cs_pub.c
+22
-23
CMakeLists.txt
test/CMakeLists.txt
+2
-4
test1.c
test/test1.c
+38
-46
test2.c
test/test2.c
+25
-41
test3.c
test/test3.c
+46
-53
test4.c
test/test4.c
+54
-62
test5.c
test/test5.c
+9
-17
test6.c
test/test6.c
+6
-6
test8.c
test/test8.c
+38
-47
test9.c
test/test9.c
+141
-150
No files found.
CMakeLists.txt
View file @
b880d34f
...
...
@@ -19,6 +19,7 @@
PROJECT
(
"paho"
C
)
CMAKE_MINIMUM_REQUIRED
(
VERSION 3.0
)
MESSAGE
(
STATUS
"CMake version: "
${
CMAKE_VERSION
}
)
MESSAGE
(
STATUS
"CMake system name: "
${
CMAKE_SYSTEM_NAME
}
)
## build settings
SET
(
PAHO_VERSION_MAJOR 1
)
...
...
cbuild.bat
0 → 100644
View file @
b880d34f
setlocal
mkdir build.paho
cd build.paho
call "C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\vcvarsall.bat" x64
cmake -G "NMake Makefiles" -DPAHO_WITH_SSL=FALSE -DPAHO_BUILD_DOCUMENTATION=FALSE -DPAHO_BUILD_SAMPLES=TRUE -DCMAKE_BUILD_TYPE=Release -DCMAKE_VERBOSE_MAKEFILE=TRUE ..
nmake
cd ..
endlocal
src/CMakeLists.txt
View file @
b880d34f
...
...
@@ -28,6 +28,10 @@ CONFIGURE_FILE(VersionInfo.h.in
@ONLY
)
IF
(
WIN32
)
ADD_DEFINITIONS
(
/DCMAKE_BUILD /D_CRT_SECURE_NO_DEPRECATE
)
ENDIF
()
IF
(
PAHO_WITH_SSL
)
SET
(
OPENSSL_LIB_SEARCH_PATH
""
CACHE PATH
"Directory containing OpenSSL libraries"
)
SET
(
OPENSSL_INC_SEARCH_PATH
""
CACHE PATH
"Directory containing OpenSSL includes"
)
...
...
@@ -95,7 +99,12 @@ SET_PROPERTY(TARGET common_obj PROPERTY POSITION_INDEPENDENT_CODE ON)
IF
(
${
CMAKE_SYSTEM_NAME
}
STREQUAL
"Darwin"
)
SET_PROPERTY
(
TARGET common_obj PROPERTY
COMPILE_DEFINITIONS
"OSX=1"
)
ENDIF
(
${
CMAKE_SYSTEM_NAME
}
STREQUAL
"Darwin"
)
ENDIF
()
## IF (${CMAKE_SYSTEM_NAME} STREQUAL "Windows")
## MESSAGE(STATUS "Setting secure_no_warnings")
## SET_PROPERTY(TARGET common_obj PROPERTY
## COMPILE_DEFINITIONS "_CRT_SECURE_NO_DEPRECATE")
## ENDIF ()
ADD_EXECUTABLE
(
MQTTVersion MQTTVersion.c
)
...
...
@@ -165,9 +174,11 @@ IF (PAHO_WITH_SSL)
SET_PROPERTY
(
TARGET common_ssl_obj PROPERTY POSITION_INDEPENDENT_CODE ON
)
IF
(
${
CMAKE_SYSTEM_NAME
}
STREQUAL
"Darwin"
)
SET_PROPERTY
(
TARGET common_ssl_obj PROPERTY COMPILE_DEFINITIONS
"OPENSSL=1;OSX=1"
)
ELSE
(
${
CMAKE_SYSTEM_NAME
}
STREQUAL
"Darwin"
)
ELSIF
(
WIN32
)
SET_PROPERTY
(
TARGET common_ssl_obj PROPERTY COMPILE_DEFINITIONS
"OPENSSL=1;_CRT_SECURE_NO_WARNINGS"
)
ELSE
()
SET_PROPERTY
(
TARGET common_ssl_obj PROPERTY COMPILE_DEFINITIONS
"OPENSSL=1"
)
ENDIF
(
${
CMAKE_SYSTEM_NAME
}
STREQUAL
"Darwin"
)
ENDIF
()
ADD_LIBRARY
(
paho-mqtt3cs SHARED $<TARGET_OBJECTS:common_ssl_obj> MQTTClient.c SSLSocket.c
)
ADD_LIBRARY
(
paho-mqtt3as SHARED $<TARGET_OBJECTS:common_ssl_obj> MQTTAsync.c SSLSocket.c
)
...
...
src/Socket.c
View file @
b880d34f
...
...
@@ -3,11 +3,11 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
...
...
@@ -106,7 +106,7 @@ int Socket_error(char* aString, int sock)
if
(
errno
!=
EINTR
&&
errno
!=
EAGAIN
&&
errno
!=
EINPROGRESS
&&
errno
!=
EWOULDBLOCK
)
{
if
(
strcmp
(
aString
,
"shutdown"
)
!=
0
||
(
errno
!=
ENOTCONN
&&
errno
!=
ECONNRESET
))
Log
(
TRACE_MINIMUM
,
-
1
,
"Socket error %s
in %s for socket %d"
,
strerror
(
errno
)
,
aString
,
sock
);
Log
(
TRACE_MINIMUM
,
-
1
,
"Socket error %s
(%d) in %s for socket %d"
,
strerror
(
errno
),
errno
,
aString
,
sock
);
}
FUNC_EXIT_RC
(
errno
);
return
errno
;
...
...
@@ -499,7 +499,7 @@ exit:
/**
* Add a socket to the pending write list, so that it is checked for writing in select. This is used
* in connect processing when the TCP connect is incomplete, as we need to check the socket for both
* ready to read and write states.
* ready to read and write states.
* @param socket the socket to add
*/
void
Socket_addPendingWrite
(
int
socket
)
...
...
@@ -719,13 +719,13 @@ int Socket_continueWrite(int socket)
FUNC_ENTRY
;
pw
=
SocketBuffer_getWrite
(
socket
);
#if defined(OPENSSL)
if
(
pw
->
ssl
)
{
rc
=
SSLSocket_continueWrite
(
pw
);
goto
exit
;
}
}
#endif
for
(
i
=
0
;
i
<
pw
->
count
;
++
i
)
...
...
@@ -757,7 +757,7 @@ int Socket_continueWrite(int socket)
if
(
pw
->
frees
[
i
])
free
(
pw
->
iovecs
[
i
].
iov_base
);
}
Log
(
TRACE_MIN
,
-
1
,
"ContinueWrite: partial write now complete for socket %d"
,
socket
);
Log
(
TRACE_MIN
,
-
1
,
"ContinueWrite: partial write now complete for socket %d"
,
socket
);
}
else
Log
(
TRACE_MIN
,
-
1
,
"ContinueWrite wrote +%lu bytes on socket %d"
,
bytes
,
socket
);
...
...
@@ -795,7 +795,7 @@ int Socket_continueWrites(fd_set* pwset)
ListNextElement
(
s
.
write_pending
,
&
curpending
);
}
curpending
=
s
.
write_pending
->
current
;
if
(
writecomplete
)
(
*
writecomplete
)(
socket
);
}
...
...
@@ -828,7 +828,7 @@ char* Socket_getaddrname(struct sockaddr* sa, int sock)
#if defined(WIN32) || defined(WIN64)
int
buflen
=
ADDRLEN
*
2
;
wchar_t
buf
[
ADDRLEN
*
2
];
if
(
WSAAddressToString
(
sa
,
sizeof
(
struct
sockaddr_in6
),
NULL
,
buf
,
(
LPDWORD
)
&
buflen
)
==
SOCKET_ERROR
)
if
(
WSAAddressToString
W
(
sa
,
sizeof
(
struct
sockaddr_in6
),
NULL
,
buf
,
(
LPDWORD
)
&
buflen
)
==
SOCKET_ERROR
)
Socket_error
(
"WSAAddressToString"
,
sock
);
else
wcstombs
(
addr_string
,
buf
,
sizeof
(
addr_string
));
...
...
@@ -874,4 +874,3 @@ int main(int argc, char *argv[])
}
#endif
src/Socket.h
View file @
b880d34f
...
...
@@ -3,11 +3,11 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
...
...
@@ -25,12 +25,19 @@
#include <ws2tcpip.h>
#define MAXHOSTNAMELEN 256
#if !defined(SSLSOCKET_H)
#undef EAGAIN
#define EAGAIN WSAEWOULDBLOCK
#undef EINTR
#define EINTR WSAEINTR
#undef EINPROGRESS
#define EINPROGRESS WSAEINPROGRESS
#undef EWOULDBLOCK
#define EWOULDBLOCK WSAEWOULDBLOCK
#undef ENOTCONN
#define ENOTCONN WSAENOTCONN
#undef ECONNRESET
#define ECONNRESET WSAECONNRESET
#undef ETIMEDOUT
#define ETIMEDOUT WAIT_TIMEOUT
#endif
#define ioctl ioctlsocket
...
...
src/Thread.c
View file @
b880d34f
...
...
@@ -90,6 +90,8 @@ mutex_type Thread_create_mutex(void)
FUNC_ENTRY
;
#if defined(WIN32) || defined(WIN64)
mutex
=
CreateMutex
(
NULL
,
0
,
NULL
);
if
(
mutex
==
NULL
)
rc
=
GetLastError
();
#else
mutex
=
malloc
(
sizeof
(
pthread_mutex_t
));
rc
=
pthread_mutex_init
(
mutex
,
NULL
);
...
...
@@ -100,8 +102,7 @@ mutex_type Thread_create_mutex(void)
/**
* Lock a mutex which has already been created, block until ready
* @param mutex the mutex
* Lock a mutex which has alrea
* @return completion code, 0 is success
*/
int
Thread_lock_mutex
(
mutex_type
mutex
)
...
...
src/samples/CMakeLists.txt
View file @
b880d34f
...
...
@@ -24,6 +24,10 @@ INCLUDE_DIRECTORIES(
${
CMAKE_BINARY_DIR
}
)
IF
(
WIN32
)
ADD_DEFINITIONS
(
/DCMAKE_BUILD /D_CRT_SECURE_NO_DEPRECATE
)
ENDIF
()
# sample files c
ADD_EXECUTABLE
(
paho_c_pub paho_c_pub.c
)
ADD_EXECUTABLE
(
paho_c_sub paho_c_sub.c
)
...
...
src/samples/MQTTClient_publish_async.c
View file @
b880d34f
...
...
@@ -3,11 +3,11 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
...
...
@@ -81,7 +81,7 @@ int main(int argc, char* argv[])
exit
(
EXIT_FAILURE
);
}
pubmsg
.
payload
=
PAYLOAD
;
pubmsg
.
payloadlen
=
strlen
(
PAYLOAD
);
pubmsg
.
payloadlen
=
(
int
)
strlen
(
PAYLOAD
);
pubmsg
.
qos
=
QOS
;
pubmsg
.
retained
=
0
;
deliveredtoken
=
0
;
...
...
@@ -94,4 +94,3 @@ int main(int argc, char* argv[])
MQTTClient_destroy
(
&
client
);
return
rc
;
}
src/samples/paho_c_pub.c
View file @
b880d34f
...
...
@@ -3,27 +3,27 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Ian Craggs - initial contribution
* Guilherme Maciel Ferreira - add keep alive option
*******************************************************************************/
/*
stdin publisher
compulsory parameters:
--topic topic to publish on
defaulted parameters:
--host localhost
--port 1883
--qos 0
...
...
@@ -31,10 +31,10 @@
--clientid stdin-publisher-async
--maxdatalen 100
--keepalive 10
--userid none
--password none
*/
#include "MQTTAsync.h"
...
...
@@ -125,7 +125,7 @@ void myconnect(MQTTAsync* client);
void
onConnectFailure
(
void
*
context
,
MQTTAsync_failureData
*
response
)
{
printf
(
"Connect failed, rc %d
\n
"
,
response
?
response
->
code
:
-
1
);
connected
=
-
1
;
connected
=
-
1
;
MQTTAsync
client
=
(
MQTTAsync
)
context
;
myconnect
(
client
);
...
...
@@ -135,8 +135,7 @@ void onConnectFailure(void* context, MQTTAsync_failureData* response)
void
onConnect
(
void
*
context
,
MQTTAsync_successData
*
response
)
{
MQTTAsync
client
=
(
MQTTAsync
)
context
;
int
rc
;
printf
(
"Connected
\n
"
);
connected
=
1
;
}
...
...
@@ -172,7 +171,7 @@ static int published = 0;
void
onPublishFailure
(
void
*
context
,
MQTTAsync_failureData
*
response
)
{
printf
(
"Publish failed, rc %d
\n
"
,
response
?
-
1
:
response
->
code
);
published
=
-
1
;
published
=
-
1
;
}
...
...
@@ -223,13 +222,13 @@ int main(int argc, char** argv)
if
(
argc
<
2
)
usage
();
getopts
(
argc
,
argv
);
sprintf
(
url
,
"%s:%s"
,
opts
.
host
,
opts
.
port
);
if
(
opts
.
verbose
)
printf
(
"URL is %s
\n
"
,
url
);
topic
=
argv
[
1
];
printf
(
"Using topic %s
\n
"
,
topic
);
...
...
@@ -244,13 +243,13 @@ int main(int argc, char** argv)
myconnect
(
&
client
);
buffer
=
malloc
(
opts
.
maxdatalen
);
while
(
!
toStop
)
{
int
data_len
=
0
;
int
delim_len
=
0
;
delim_len
=
strlen
(
opts
.
delimiter
);
delim_len
=
(
int
)
strlen
(
opts
.
delimiter
);
do
{
buffer
[
data_len
++
]
=
getchar
();
...
...
@@ -261,7 +260,7 @@ int main(int argc, char** argv)
break
;
}
}
while
(
data_len
<
opts
.
maxdatalen
);
if
(
opts
.
verbose
)
printf
(
"Publishing data of length %d
\n
"
,
data_len
);
pub_opts
.
onSuccess
=
onPublish
;
...
...
@@ -272,9 +271,9 @@ int main(int argc, char** argv)
}
while
(
rc
!=
MQTTASYNC_SUCCESS
);
}
printf
(
"Stopping
\n
"
);
free
(
buffer
);
disc_opts
.
onSuccess
=
onDisconnect
;
...
...
@@ -299,7 +298,7 @@ int main(int argc, char** argv)
void
getopts
(
int
argc
,
char
**
argv
)
{
int
count
=
2
;
while
(
count
<
argc
)
{
if
(
strcmp
(
argv
[
count
],
"--retained"
)
==
0
)
...
...
@@ -380,6 +379,5 @@ void getopts(int argc, char** argv)
}
count
++
;
}
}
}
src/samples/paho_cs_pub.c
View file @
b880d34f
...
...
@@ -3,36 +3,36 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
* Ian Craggs - initial contribution
*******************************************************************************/
/*
stdin publisher
compulsory parameters:
--topic topic to publish on
defaulted parameters:
--host localhost
--port 1883
--qos 0
--delimiters \n
--clientid stdin_publisher
--maxdatalen 100
--userid none
--password none
*/
#include "MQTTClient.h"
...
...
@@ -128,13 +128,13 @@ int main(int argc, char** argv)
if
(
argc
<
2
)
usage
();
getopts
(
argc
,
argv
);
sprintf
(
url
,
"%s:%s"
,
opts
.
host
,
opts
.
port
);
if
(
opts
.
verbose
)
printf
(
"URL is %s
\n
"
,
url
);
topic
=
argv
[
1
];
printf
(
"Using topic %s
\n
"
,
topic
);
...
...
@@ -152,17 +152,17 @@ int main(int argc, char** argv)
conn_opts
.
password
=
opts
.
password
;
ssl_opts
.
enableServerCertAuth
=
0
;
conn_opts
.
ssl
=
&
ssl_opts
;
myconnect
(
&
client
,
&
conn_opts
);
buffer
=
malloc
(
opts
.
maxdatalen
);
while
(
!
toStop
)
{
int
data_len
=
0
;
int
delim_len
=
0
;
delim_len
=
strlen
(
opts
.
delimiter
);
delim_len
=
(
int
)
strlen
(
opts
.
delimiter
);
do
{
buffer
[
data_len
++
]
=
getchar
();
...
...
@@ -173,7 +173,7 @@ int main(int argc, char** argv)
break
;
}
}
while
(
data_len
<
opts
.
maxdatalen
);
if
(
opts
.
verbose
)
printf
(
"Publishing data of length %d
\n
"
,
data_len
);
rc
=
MQTTClient_publish
(
client
,
topic
,
data_len
,
buffer
,
opts
.
qos
,
opts
.
retained
,
NULL
);
...
...
@@ -185,9 +185,9 @@ int main(int argc, char** argv)
if
(
opts
.
qos
>
0
)
MQTTClient_yield
();
}
printf
(
"Stopping
\n
"
);
free
(
buffer
);
MQTTClient_disconnect
(
client
,
0
);
...
...
@@ -200,7 +200,7 @@ int main(int argc, char** argv)
void
getopts
(
int
argc
,
char
**
argv
)
{
int
count
=
2
;
while
(
count
<
argc
)
{
if
(
strcmp
(
argv
[
count
],
"--retained"
)
==
0
)
...
...
@@ -274,6 +274,5 @@ void getopts(int argc, char** argv)
}
count
++
;
}
}
}
test/CMakeLists.txt
View file @
b880d34f
...
...
@@ -6,7 +6,7 @@ SET(MQTT_SSL_HOSTNAME "localhost" CACHE STRING "Hostname of a test SSL MQTT brok
SET
(
CERTDIR $ENV{TRAVIS_BUILD_DIR}/test/ssl
)
IF
(
WIN32
)
ADD_DEFINITIONS
(
/DCMAKE_BUILD
)
ADD_DEFINITIONS
(
/DCMAKE_BUILD
/D_CRT_SECURE_NO_WARNINGS
)
ENDIF
()
...
...
@@ -22,7 +22,7 @@ TARGET_LINK_LIBRARIES(
IF
(
WIN32
)
ADD_CUSTOM_COMMAND
(
TARGET test1 PRE_BUILD
TARGET test1 PRE_BUILD
COMMAND
${
CMAKE_COMMAND
}
-P
${
CMAKE_CURRENT_SOURCE_DIR
}
/dll-copy.cmake
COMMENT
"Copying DLLs to test directory"
)
...
...
@@ -313,5 +313,3 @@ ADD_TEST(
NAME test9-5-offline-buffering-max-buffered
COMMAND test9
"--test_no"
"5"
"--connection"
${
MQTT_TEST_BROKER
}
"--proxy_connection"
${
MQTT_TEST_PROXY
}
)
test/test1.c
View file @
b880d34f
...
...
@@ -3,11 +3,11 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
...
...
@@ -34,21 +34,13 @@
#include <stdlib.h>
#if !defined(_WINDOWS)
#include <sys/time.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#else
#include <winsock2.h>
#include <ws2tcpip.h>
#define MAXHOSTNAMELEN 256
#define EAGAIN WSAEWOULDBLOCK
#define EINTR WSAEINTR
#define EINPROGRESS WSAEINPROGRESS
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTCONN WSAENOTCONN
#define ECONNRESET WSAECONNRESET
#define setenv(a, b, c) _putenv_s(a, b)
#include <windows.h>
#define setenv(a, b, c) _putenv_s(a, b)
#endif
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
...
...
@@ -84,7 +76,7 @@ struct Options
void
getopts
(
int
argc
,
char
**
argv
)
{
int
count
=
1
;
while
(
count
<
argc
)
{
if
(
strcmp
(
argv
[
count
],
"--test_no"
)
==
0
)
...
...
@@ -171,7 +163,7 @@ void MyLog(int LOGA_level, char* format, ...)
if
(
LOGA_level
==
LOGA_DEBUG
&&
options
.
verbose
==
0
)
return
;
ftime
(
&
ts
);
timeinfo
=
localtime
(
&
ts
.
time
);
strftime
(
msg_buf
,
80
,
"%Y%m%d %H%M%S"
,
timeinfo
);
...
...
@@ -259,11 +251,11 @@ void write_test_result(void)
{
long
duration
=
elapsed
(
global_start_time
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
if
(
cur_output
!=
output
)
{
fprintf
(
xml
,
"%s"
,
output
);
cur_output
=
output
;
cur_output
=
output
;
}
fprintf
(
xml
,
"</testcase>
\n
"
);
}
...
...
@@ -283,11 +275,11 @@ void myassert(char* filename, int lineno, char* description, int value, char* fo
vprintf
(
format
,
args
);
va_end
(
args
);
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
description
,
filename
,
lineno
);
}
else
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
}
...
...
@@ -371,9 +363,9 @@ int test1(struct Options options)
global_start_time
=
start_clock
();
failures
=
0
;
MyLog
(
LOGA_INFO
,
"Starting test 1 - single threaded client using receive"
);
rc
=
MQTTClient_create
(
&
c
,
options
.
connection
,
"single_threaded_test"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTCLIENT_SUCCESS
)
{
...
...
@@ -485,7 +477,7 @@ void test2_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
for
(
i
=
1
;
i
<=
iterations
;
++
i
)
{
if
(
i
%
10
==
0
)
rc
=
MQTTClient_publish
(
c
,
test_topic
,
test2_pubmsg
.
payloadlen
,
test2_pubmsg
.
payload
,
rc
=
MQTTClient_publish
(
c
,
test_topic
,
test2_pubmsg
.
payloadlen
,
test2_pubmsg
.
payload
,
test2_pubmsg
.
qos
,
test2_pubmsg
.
retained
,
NULL
);
else
rc
=
MQTTClient_publishMessage
(
c
,
test_topic
,
&
test2_pubmsg
,
&
dt
);
...
...
@@ -507,7 +499,7 @@ void test2_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
usleep
(
1000000L
);
#endif
}
assert
(
"Message Arrived"
,
wait_seconds
>
0
,
assert
(
"Message Arrived"
,
wait_seconds
>
0
,
"Time out waiting for message %d
\n
"
,
i
);
}
if
(
qos
>
0
)
...
...
@@ -515,7 +507,7 @@ void test2_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
/* MQ Telemetry can send a message to a subscriber before the server has
completed the QoS 2 handshake with the publisher. For QoS 1 and 2,
allow time for the final delivery complete callback before checking
that all expected callbacks have been made */
that all expected callbacks have been made */
wait_seconds
=
10
;
while
((
test2_deliveryCompleted
<
iterations
)
&&
(
wait_seconds
--
>
0
))
{
...
...
@@ -526,8 +518,8 @@ void test2_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
usleep
(
1000000L
);
#endif
}
assert
(
"All Deliveries Complete"
,
wait_seconds
>
0
,
"Number of deliveryCompleted callbacks was %d
\n
"
,
assert
(
"All Deliveries Complete"
,
wait_seconds
>
0
,
"Number of deliveryCompleted callbacks was %d
\n
"
,
test2_deliveryCompleted
);
}
}
...
...
@@ -645,7 +637,7 @@ int test3(struct Options options)
/* authorization failure (RC = 5) */
opts
.
username
=
"Admin"
;
opts
.
password
=
"Admin"
;
/*opts.will = &wopts; "Admin" not authorized to publish to Will topic by default
/*opts.will = &wopts; "Admin" not authorized to publish to Will topic by default
opts.will->message = "will message";
opts.will->qos = 1;
opts.will->retained = 0;
...
...
@@ -694,7 +686,7 @@ int test4_run(int qos)
int
count
=
3
;
int
i
,
rc
;
failures
=
0
;
failures
=
0
;
MyLog
(
LOGA_INFO
,
"Starting test 4 - persistence, qos %d"
,
qos
);
MQTTClient_create
(
&
c
,
options
.
connection
,
"xrctest1_test_4"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
...
...
@@ -724,7 +716,7 @@ int test4_run(int qos)
assert
(
"Good rc from connect"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d"
,
rc
);
return
-
1
;
}
/* subscribe so we can get messages back */
rc
=
MQTTClient_subscribe
(
c
,
topic
,
subsqos
);
assert
(
"Good rc from subscribe"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d"
,
rc
);
...
...
@@ -804,7 +796,7 @@ int test4_run(int qos)
MQTTClient_free
(
topicName
);
}
}
MQTTClient_yield
();
/* allow any unfinished protocol exchanges to finish */
rc
=
MQTTClient_getPendingDeliveryTokens
(
c
,
&
tokens
);
...
...
@@ -829,11 +821,11 @@ int test4(struct Options options)
fprintf
(
xml
,
"<testcase classname=
\"
test1
\"
name=
\"
persistence
\"
"
);
global_start_time
=
start_clock
();
rc
=
test4_run
(
1
)
+
test4_run
(
2
);
fprintf
(
xml
,
" time=
\"
%ld
\"
>
\n
"
,
elapsed
(
global_start_time
)
/
1000
);
fprintf
(
xml
,
" time=
\"
%ld
\"
>
\n
"
,
elapsed
(
global_start_time
)
/
1000
);
if
(
cur_output
!=
output
)
{
fprintf
(
xml
,
"%s"
,
output
);
cur_output
=
output
;
cur_output
=
output
;
}
fprintf
(
xml
,
"</testcase>
\n
"
);
return
rc
;
...
...
@@ -954,13 +946,13 @@ int test6(struct Options options)
MQTTClient_willOptions
wopts
=
MQTTClient_willOptions_initializer
;
MQTTClient_connectOptions
opts2
=
MQTTClient_connectOptions_initializer
;
int
rc
,
count
;
char
*
mqttsas_topic
=
"MQTTSAS topic"
;
char
*
mqttsas_topic
=
"MQTTSAS topic"
;
failures
=
0
;
MyLog
(
LOGA_INFO
,
"Starting test 6 - connectionLost and will messages"
);
fprintf
(
xml
,
"<testcase classname=
\"
test1
\"
name=
\"
connectionLost and will messages
\"
"
);
global_start_time
=
start_clock
();
opts
.
keepAliveInterval
=
2
;
opts
.
cleansession
=
1
;
opts
.
MQTTVersion
=
options
.
MQTTVersion
;
...
...
@@ -1011,7 +1003,7 @@ int test6(struct Options options)
assert
(
"Good rc from subscribe"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
);
/* now send the command which will break the connection and cause the will message to be sent */
rc
=
MQTTClient_publish
(
test6_c1
,
mqttsas_topic
,
strlen
(
"TERMINATE"
),
"TERMINATE"
,
0
,
0
,
NULL
);
rc
=
MQTTClient_publish
(
test6_c1
,
mqttsas_topic
,
(
int
)
strlen
(
"TERMINATE"
),
"TERMINATE"
,
0
,
0
,
NULL
);
assert
(
"Good rc from publish"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
);
MyLog
(
LOGA_INFO
,
"Waiting to receive the will message"
);
...
...
@@ -1030,17 +1022,17 @@ int test6(struct Options options)
"will_message_arrived was %d
\n
"
,
test6_will_message_arrived
);
assert
(
"connection lost called"
,
test6_connection_lost_called
==
1
,
"connection_lost_called %d
\n
"
,
test6_connection_lost_called
);
rc
=
MQTTClient_unsubscribe
(
test6_c2
,
test6_will_topic
);
assert
(
"Good rc from unsubscribe"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d"
,
rc
);
rc
=
MQTTClient_isConnected
(
test6_c2
);
assert
(
"Client-2 still connected"
,
rc
==
1
,
"isconnected is %d"
,
rc
);
rc
=
MQTTClient_isConnected
(
test6_c1
);
assert
(
"Client-1 not connected"
,
rc
==
0
,
"isconnected is %d"
,
rc
);
rc
=
MQTTClient_disconnect
(
test6_c2
,
100L
);
rc
=
MQTTClient_disconnect
(
test6_c2
,
100L
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d"
,
rc
);
MQTTClient_destroy
(
&
test6_c1
);
...
...
@@ -1058,7 +1050,7 @@ int main(int argc, char** argv)
int
rc
=
0
;
int
(
*
tests
[])()
=
{
NULL
,
test1
,
test2
,
test3
,
test4
,
test5
,
test6
};
int
i
;
xml
=
fopen
(
"TEST-test1.xml"
,
"w"
);
fprintf
(
xml
,
"<testsuite name=
\"
test1
\"
tests=
\"
%d
\"
>
\n
"
,
(
int
)(
ARRAY_SIZE
(
tests
)
-
1
));
...
...
@@ -1077,13 +1069,13 @@ int main(int argc, char** argv)
else
rc
=
tests
[
options
.
test_no
](
options
);
/* run just the selected test */
}
if
(
rc
==
0
)
MyLog
(
LOGA_INFO
,
"verdict pass"
);
else
MyLog
(
LOGA_INFO
,
"verdict fail"
);
fprintf
(
xml
,
"</testsuite>
\n
"
);
fclose
(
xml
);
fclose
(
xml
);
return
rc
;
}
test/test2.c
View file @
b880d34f
...
...
@@ -3,11 +3,11 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
...
...
@@ -27,29 +27,13 @@
#if !defined(_WINDOWS)
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <errno.h>
#define WINAPI
#else
#define WIN32_LEAN_AND_MEAN
#if !defined(CMAKE_BUILD)
/*
* These causes the cmake build to fail. In order to prevent affecting
* other builds, remove them only from CMAKE-related builds
*/
#include <winsock2.h>
#include <ws2tcpip.h>
#endif // CMAKE_BUILD
#define MAXHOSTNAMELEN 256
#define EAGAIN WSAEWOULDBLOCK
#define EINTR WSAEINTR
#define EINPROGRESS WSAEINPROGRESS
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTCONN WSAENOTCONN
#define ECONNRESET WSAECONNRESET
#define setenv(a, b, c) _putenv_s(a, b)
#include <windows.h>
#define setenv(a, b, c) _putenv_s(a, b)
#endif
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
...
...
@@ -83,7 +67,7 @@ struct Options
void
getopts
(
int
argc
,
char
**
argv
)
{
int
count
=
1
;
while
(
count
<
argc
)
{
if
(
strcmp
(
argv
[
count
],
"--test_no"
)
==
0
)
...
...
@@ -163,7 +147,7 @@ void MyLog(int LOGA_level, char* format, ...)
if
(
LOGA_level
==
LOGA_DEBUG
&&
options
.
verbose
==
0
)
return
;
ftime
(
&
ts
);
timeinfo
=
localtime
(
&
ts
.
time
);
strftime
(
msg_buf
,
80
,
"%Y%m%d %H%M%S"
,
timeinfo
);
...
...
@@ -251,11 +235,11 @@ void write_test_result(void)
{
long
duration
=
elapsed
(
global_start_time
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
if
(
cur_output
!=
output
)
{
fprintf
(
xml
,
"%s"
,
output
);
cur_output
=
output
;
cur_output
=
output
;
}
fprintf
(
xml
,
"</testcase>
\n
"
);
}
...
...
@@ -275,11 +259,11 @@ void myassert(char* filename, int lineno, char* description, int value, char* fo
vprintf
(
format
,
args
);
va_end
(
args
);
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
description
,
filename
,
lineno
);
}
else
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
}
...
...
@@ -351,7 +335,7 @@ struct thread_parms
};
static
int
iterations
=
50
;
thread_return_type
WINAPI
test1_sendAndReceive
(
void
*
n
)
{
MQTTClient_deliveryToken
dt
;
...
...
@@ -403,7 +387,7 @@ thread_return_type WINAPI test1_sendAndReceive(void* n)
assert
(
"Message Arrived"
,
wait_seconds
>
0
,
"Timed out waiting for message %d
\n
"
,
i
);
}
#if defined(_WINDOWS)
return
0
;
#else
...
...
@@ -424,7 +408,7 @@ int test1(struct Options options)
global_start_time
=
start_clock
();
failures
=
0
;
MyLog
(
LOGA_INFO
,
"Starting test 1 - multiple threads using same client object"
);
rc
=
MQTTClient_create
(
&
c
,
options
.
connection
,
"single_object, multiple threads"
,
MQTTCLIENT_PERSISTENCE_NONE
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
);
...
...
@@ -478,7 +462,7 @@ int test1(struct Options options)
completed the QoS 2 handshake with the publisher. For QoS 1 and 2,
allow time for the final delivery complete callback before checking
that all expected callbacks have been made */
int
wait_seconds
=
90
;
while
(((
test1_arrivedcount
<
iterations
*
3
)
||
(
test1_deliveryCompleted
<
iterations
*
2
))
&&
(
wait_seconds
--
>
0
))
{
...
...
@@ -570,7 +554,7 @@ void test2_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
for
(
i
=
1
;
i
<=
iterations
;
++
i
)
{
if
(
i
%
10
==
0
)
rc
=
MQTTClient_publish
(
c
,
test_topic
,
test2_pubmsg
.
payloadlen
,
test2_pubmsg
.
payload
,
rc
=
MQTTClient_publish
(
c
,
test_topic
,
test2_pubmsg
.
payloadlen
,
test2_pubmsg
.
payload
,
test2_pubmsg
.
qos
,
test2_pubmsg
.
retained
,
NULL
);
else
rc
=
MQTTClient_publishMessage
(
c
,
test_topic
,
&
test2_pubmsg
,
&
dt
);
...
...
@@ -592,7 +576,7 @@ void test2_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
usleep
(
1000000L
);
#endif
}
assert
(
"Message Arrived"
,
wait_seconds
>
0
,
assert
(
"Message Arrived"
,
wait_seconds
>
0
,
"Time out waiting for message %d
\n
"
,
i
);
}
if
(
qos
>
0
)
...
...
@@ -600,7 +584,7 @@ void test2_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
/* MQ Telemetry can send a message to a subscriber before the server has
completed the QoS 2 handshake with the publisher. For QoS 1 and 2,
allow time for the final delivery complete callback before checking
that all expected callbacks have been made */
that all expected callbacks have been made */
wait_seconds
=
40
;
while
((
test2_deliveryCompleted
<
iterations
)
&&
(
wait_seconds
--
>
0
))
{
...
...
@@ -611,8 +595,8 @@ void test2_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
usleep
(
1000000L
);
#endif
}
assert
(
"All Deliveries Complete"
,
test2_deliveryCompleted
==
iterations
,
"Number of deliveryCompleted callbacks was %d
\n
"
,
assert
(
"All Deliveries Complete"
,
test2_deliveryCompleted
==
iterations
,
"Number of deliveryCompleted callbacks was %d
\n
"
,
test2_deliveryCompleted
);
}
}
...
...
@@ -686,7 +670,7 @@ int main(int argc, char** argv)
#if defined(WIN32) || defined(WIN64)
deliveryCompleted_mutex
=
CreateMutex
(
NULL
,
0
,
NULL
);
#endif
xml
=
fopen
(
"TEST-test2.xml"
,
"w"
);
fprintf
(
xml
,
"<testsuite name=
\"
test1
\"
tests=
\"
%d
\"
>
\n
"
,
(
int
)(
ARRAY_SIZE
(
tests
)
-
1
));
...
...
@@ -705,13 +689,13 @@ int main(int argc, char** argv)
else
rc
=
tests
[
options
.
test_no
](
options
);
/* run just the selected test */
}
if
(
rc
==
0
)
MyLog
(
LOGA_INFO
,
"verdict pass"
);
else
MyLog
(
LOGA_INFO
,
"verdict fail"
);
fprintf
(
xml
,
"</testsuite>
\n
"
);
fclose
(
xml
);
fclose
(
xml
);
return
rc
;
}
test/test3.c
View file @
b880d34f
...
...
@@ -3,11 +3,11 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
...
...
@@ -26,19 +26,12 @@
#if !defined(_WINDOWS)
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <errno.h>
#else
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#define MAXHOSTNAMELEN 256
#define EAGAIN WSAEWOULDBLOCK
#define EINTR WSAEINTR
#define EINPROGRESS WSAEINPROGRESS
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTCONN WSAENOTCONN
#define ECONNRESET WSAECONNRESET
#define snprintf _snprintf
#define setenv(a, b, c) _putenv_s(a, b)
#endif
...
...
@@ -134,7 +127,7 @@ char* test_map[] =
void
getopts
(
int
argc
,
char
**
argv
)
{
int
count
=
1
;
while
(
count
<
argc
)
{
if
(
strcmp
(
argv
[
count
],
"--help"
)
==
0
)
...
...
@@ -155,7 +148,7 @@ void getopts(int argc, char** argv)
}
if
(
options
.
test_no
==
0
)
options
.
test_no
=
atoi
(
argv
[
count
]);
}
else
usage
();
...
...
@@ -273,7 +266,7 @@ void MyLog(int LOGA_level, char* format, ...)
if
(
LOGA_level
==
LOGA_DEBUG
&&
options
.
verbose
==
0
)
return
;
ftime
(
&
ts
);
timeinfo
=
localtime
(
&
ts
.
time
);
strftime
(
msg_buf
,
80
,
"%Y%m%d %H%M%S"
,
timeinfo
);
...
...
@@ -363,11 +356,11 @@ void write_test_result(void)
{
long
duration
=
elapsed
(
global_start_time
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
if
(
cur_output
!=
output
)
{
fprintf
(
xml
,
"%s"
,
output
);
cur_output
=
output
;
cur_output
=
output
;
}
fprintf
(
xml
,
"</testcase>
\n
"
);
}
...
...
@@ -387,11 +380,11 @@ int myassert(char* filename, int lineno, char* description, int value, char* for
vprintf
(
format
,
args
);
va_end
(
args
);
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
description
,
filename
,
lineno
);
}
else
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
return
value
;
}
...
...
@@ -513,7 +506,7 @@ void multiThread_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
for
(
i
=
1
;
i
<=
iterations
;
++
i
)
{
if
(
i
%
10
==
0
)
rc
=
MQTTClient_publish
(
c
,
test_topic
,
multiThread_pubmsg
.
payloadlen
,
multiThread_pubmsg
.
payload
,
rc
=
MQTTClient_publish
(
c
,
test_topic
,
multiThread_pubmsg
.
payloadlen
,
multiThread_pubmsg
.
payload
,
multiThread_pubmsg
.
qos
,
multiThread_pubmsg
.
retained
,
NULL
);
else
rc
=
MQTTClient_publishMessage
(
c
,
test_topic
,
&
multiThread_pubmsg
,
&
dt
);
...
...
@@ -535,7 +528,7 @@ void multiThread_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
usleep
(
1000000L
);
#endif
}
assert
(
"Message Arrived"
,
wait_seconds
>
0
,
assert
(
"Message Arrived"
,
wait_seconds
>
0
,
"Time out waiting for message %d
\n
"
,
i
);
}
if
(
qos
>
0
)
...
...
@@ -543,7 +536,7 @@ void multiThread_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
/* MQ Telemetry can send a message to a subscriber before the server has
completed the QoS 2 handshake with the publisher. For QoS 1 and 2,
allow time for the final delivery complete callback before checking
that all expected callbacks have been made */
that all expected callbacks have been made */
wait_seconds
=
10
;
while
((
multiThread_deliveryCompleted
<
iterations
)
&&
(
wait_seconds
--
>
0
))
{
...
...
@@ -554,8 +547,8 @@ void multiThread_sendAndReceive(MQTTClient* c, int qos, char* test_topic)
usleep
(
1000000L
);
#endif
}
assert
(
"All Deliveries Complete"
,
wait_seconds
>
0
,
"Number of deliveryCompleted callbacks was %d
\n
"
,
assert
(
"All Deliveries Complete"
,
wait_seconds
>
0
,
"Number of deliveryCompleted callbacks was %d
\n
"
,
multiThread_deliveryCompleted
);
}
}
...
...
@@ -581,7 +574,7 @@ int test1(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting SSL test 1 - connection to nonSSL MQTT server"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
SSL connect fail to nonSSL MQTT server
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
connection
,
"test1"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -597,7 +590,7 @@ int test1(struct Options options)
}
opts
.
ssl
=
&
sslopts
;
if
(
options
.
server_key_file
!=
NULL
)
if
(
options
.
server_key_file
!=
NULL
)
opts
.
ssl
->
trustStore
=
options
.
server_key_file
;
/*file of certificates trusted by client*/
MyLog
(
LOGA_DEBUG
,
"Connecting"
);
...
...
@@ -636,7 +629,7 @@ int test2a_s(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 2a_s - Mutual SSL authentication - single threaded client using receive"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
test 2a_s
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
server_auth_connection
,
"test2a_s"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -652,12 +645,12 @@ int test2a_s(struct Options options)
}
opts
.
ssl
=
&
sslopts
;
if
(
options
.
server_key_file
)
if
(
options
.
server_key_file
)
opts
.
ssl
->
trustStore
=
options
.
server_key_file
;
/*file of certificates trusted by client*/
opts
.
ssl
->
keyStore
=
options
.
client_key_file
;
/*file of certificate for client to present to server*/
if
(
options
.
client_key_pass
)
if
(
options
.
client_key_pass
)
opts
.
ssl
->
privateKeyPassword
=
options
.
client_key_pass
;
if
(
options
.
client_private_key_file
)
if
(
options
.
client_private_key_file
)
opts
.
ssl
->
privateKey
=
options
.
client_private_key_file
;
MyLog
(
LOGA_DEBUG
,
"Connecting"
);
...
...
@@ -737,12 +730,12 @@ int test2a_m(struct Options options)
}
opts
.
ssl
=
&
sslopts
;
if
(
options
.
server_key_file
)
if
(
options
.
server_key_file
)
opts
.
ssl
->
trustStore
=
options
.
server_key_file
;
/*file of certificates trusted by client*/
opts
.
ssl
->
keyStore
=
options
.
client_key_file
;
/*file of certificate for client to present to server*/
if
(
options
.
client_key_pass
)
if
(
options
.
client_key_pass
)
opts
.
ssl
->
privateKeyPassword
=
options
.
client_key_pass
;
if
(
options
.
client_private_key_file
)
if
(
options
.
client_private_key_file
)
opts
.
ssl
->
privateKey
=
options
.
client_private_key_file
;
//opts.ssl->enabledCipherSuites = "DEFAULT";
//opts.ssl->enabledServerCertAuth = 1;
...
...
@@ -802,7 +795,7 @@ int test2b(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 2b - connection to SSL MQTT server with clientauth=req but server does not have client cert"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
test 2b
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
nocert_mutual_auth_connection
,
"test2b"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -818,12 +811,12 @@ int test2b(struct Options options)
}
opts
.
ssl
=
&
sslopts
;
if
(
options
.
server_key_file
)
if
(
options
.
server_key_file
)
opts
.
ssl
->
trustStore
=
options
.
server_key_file
;
/*file of certificates trusted by client*/
opts
.
ssl
->
keyStore
=
options
.
client_key_file
;
/*file of certificate for client to present to server*/
if
(
options
.
client_key_pass
)
if
(
options
.
client_key_pass
)
opts
.
ssl
->
privateKeyPassword
=
options
.
client_key_pass
;
if
(
options
.
client_private_key_file
)
if
(
options
.
client_private_key_file
)
opts
.
ssl
->
privateKey
=
options
.
client_private_key_file
;
//opts.ssl->enabledCipherSuites = "DEFAULT";
//opts.ssl->enabledServerCertAuth = 0;
...
...
@@ -862,7 +855,7 @@ int test2c(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 2c - connection to SSL MQTT server, server auth enabled but unknown cert"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
test 2c
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
mutual_auth_connection
,
"test2c"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -878,12 +871,12 @@ int test2c(struct Options options)
}
opts
.
ssl
=
&
sslopts
;
//if (options.server_key_file)
//if (options.server_key_file)
// opts.ssl->trustStore = options.server_key_file; /*file of certificates trusted by client*/
opts
.
ssl
->
keyStore
=
options
.
client_key_file
;
/*file of certificate for client to present to server*/
if
(
options
.
client_key_pass
)
if
(
options
.
client_key_pass
)
opts
.
ssl
->
privateKeyPassword
=
options
.
client_key_pass
;
if
(
options
.
client_private_key_file
)
if
(
options
.
client_private_key_file
)
opts
.
ssl
->
privateKey
=
options
.
client_private_key_file
;
//opts.ssl->enabledCipherSuites = "DEFAULT";
//opts.ssl->enabledServerCertAuth = 0;
...
...
@@ -923,7 +916,7 @@ int test3a_s(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 3a_s - Server authentication - single threaded client using receive"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
test 3a_s
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
server_auth_connection
,
"test3a_s"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -939,7 +932,7 @@ int test3a_s(struct Options options)
}
opts
.
ssl
=
&
sslopts
;
if
(
options
.
server_key_file
!=
NULL
)
if
(
options
.
server_key_file
!=
NULL
)
opts
.
ssl
->
trustStore
=
options
.
server_key_file
;
/*file of certificates trusted by client*/
MyLog
(
LOGA_DEBUG
,
"Connecting"
);
...
...
@@ -1018,7 +1011,7 @@ int test3a_m(struct Options options)
}
opts
.
ssl
=
&
sslopts
;
if
(
options
.
server_key_file
!=
NULL
)
if
(
options
.
server_key_file
!=
NULL
)
opts
.
ssl
->
trustStore
=
options
.
server_key_file
;
/*file of certificates trusted by client*/
rc
=
MQTTClient_setCallbacks
(
c
,
NULL
,
NULL
,
multiThread_messageArrived
,
multiThread_deliveryComplete
);
...
...
@@ -1076,7 +1069,7 @@ int test3b(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 3b - connection to SSL MQTT server with clientauth=opt but client does not have server cert"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
test 3b
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
server_auth_connection
,
"test3b"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -1128,7 +1121,7 @@ int test4_s(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 4_s - accept invalid server certificates - single threaded"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
test 4_s
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
server_auth_connection
,
"test4_s"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -1279,7 +1272,7 @@ int test5a(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting SSL test 5a - Anonymous ciphers - server authentication disabled"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
test 5a
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
anon_connection
,
"test5a"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -1358,7 +1351,7 @@ int test5b(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting SSL test 5b - Anonymous ciphers - server authentication enabled"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
test 5b
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
anon_connection
,
"test5b"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -1440,7 +1433,7 @@ int test5c(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting SSL test 5c - Anonymous ciphers - client not using anonymous cipher"
);
fprintf
(
xml
,
"<testcase classname=
\"
test3
\"
name=
\"
test 5c
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTClient_create
(
&
c
,
options
.
anon_connection
,
"test5c"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
persistenceStore
);
if
(
!
(
assert
(
"good rc from create"
,
rc
==
MQTTCLIENT_SUCCESS
,
"rc was %d
\n
"
,
rc
)))
goto
exit
;
...
...
@@ -1528,7 +1521,7 @@ int main(int argc, char** argv)
xml
=
fopen
(
"TEST-test3.xml"
,
"w"
);
fprintf
(
xml
,
"<testsuite name=
\"
test3
\"
tests=
\"
%d
\"
>
\n
"
,
(
int
)(
ARRAY_SIZE
(
tests
)
-
1
));
setenv
(
"MQTT_C_CLIENT_TRACE"
,
"ON"
,
1
);
setenv
(
"MQTT_C_CLIENT_TRACE_LEVEL"
,
"ERROR"
,
0
);
getopts
(
argc
,
argv
);
...
...
@@ -1539,7 +1532,7 @@ int main(int argc, char** argv)
}
else
rc
=
tests
[
options
.
test_no
](
options
);
/* run just the selected test */
MyLog
(
LOGA_INFO
,
"Total tests run: %d"
,
*
numtests
);
if
(
rc
==
0
)
MyLog
(
LOGA_INFO
,
"verdict pass"
);
...
...
@@ -1548,6 +1541,6 @@ int main(int argc, char** argv)
fprintf
(
xml
,
"</testsuite>
\n
"
);
fclose
(
xml
);
return
rc
;
}
test/test4.c
View file @
b880d34f
...
...
@@ -3,11 +3,11 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
...
...
@@ -29,19 +29,11 @@
#if !defined(_WINDOWS)
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <errno.h>
#else
#include <winsock2.h>
#include <ws2tcpip.h>
#define MAXHOSTNAMELEN 256
#define EAGAIN WSAEWOULDBLOCK
#define EINTR WSAEINTR
#define EINPROGRESS WSAEINPROGRESS
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTCONN WSAENOTCONN
#define ECONNRESET WSAECONNRESET
#include <windows.h>
#endif
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
...
...
@@ -73,7 +65,7 @@ struct Options
void
getopts
(
int
argc
,
char
**
argv
)
{
int
count
=
1
;
while
(
count
<
argc
)
{
if
(
strcmp
(
argv
[
count
],
"--test_no"
)
==
0
)
...
...
@@ -139,7 +131,7 @@ void MyLog(int LOGA_level, char* format, ...)
if
(
LOGA_level
==
LOGA_DEBUG
&&
options
.
verbose
==
0
)
return
;
ftime
(
&
ts
);
timeinfo
=
localtime
(
&
ts
.
time
);
strftime
(
msg_buf
,
80
,
"%Y%m%d %H%M%S"
,
timeinfo
);
...
...
@@ -226,11 +218,11 @@ void write_test_result(void)
{
long
duration
=
elapsed
(
global_start_time
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
if
(
cur_output
!=
output
)
{
fprintf
(
xml
,
"%s"
,
output
);
cur_output
=
output
;
cur_output
=
output
;
}
fprintf
(
xml
,
"</testcase>
\n
"
);
}
...
...
@@ -249,11 +241,11 @@ void myassert(char* filename, int lineno, char* description, int value, char* fo
vprintf
(
format
,
args
);
va_end
(
args
);
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
description
,
filename
,
lineno
);
}
else
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
}
volatile
int
test_finished
=
0
;
...
...
@@ -274,7 +266,7 @@ void test1_onUnsubscribe(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_disconnectOptions
opts
=
MQTTAsync_disconnectOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In onUnsubscribe onSuccess callback %p"
,
c
);
opts
.
onSuccess
=
test1_onDisconnect
;
opts
.
context
=
c
;
...
...
@@ -323,7 +315,7 @@ void test1_onSubscribe(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In subscribe onSuccess callback %p granted qos %d"
,
c
,
response
->
alt
.
qos
);
pubmsg
.
payload
=
"a much longer message that we can shorten to the extent that we need to payload up to 11"
;
...
...
@@ -340,7 +332,7 @@ void test1_onConnect(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback, context %p"
,
context
);
opts
.
onSuccess
=
test1_onSubscribe
;
opts
.
context
=
c
;
...
...
@@ -369,9 +361,9 @@ int test1(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 1 - asynchronous connect"
);
fprintf
(
xml
,
"<testcase classname=
\"
test4
\"
name=
\"
asynchronous connect
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTAsync_create
(
&
c
,
options
.
connection
,
"async_test"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -386,7 +378,7 @@ int test1(struct Options options)
opts
.
cleansession
=
1
;
opts
.
username
=
"testuser"
;
opts
.
password
=
"testpassword"
;
opts
.
MQTTVersion
=
options
.
MQTTVersion
;
opts
.
MQTTVersion
=
options
.
MQTTVersion
;
opts
.
will
=
&
wopts
;
opts
.
will
->
message
=
"will message"
;
...
...
@@ -410,7 +402,7 @@ int test1(struct Options options)
Sleep
(
100
);
#else
usleep
(
10000L
);
#endif
#endif
MQTTAsync_destroy
(
&
c
);
...
...
@@ -461,9 +453,9 @@ int test2(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 2 - connect timeout"
);
fprintf
(
xml
,
"<testcase classname=
\"
test4
\"
name=
\"
connect timeout
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTAsync_create
(
&
c
,
"tcp://9.20.96.160:66"
,
"connect timeout"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -503,12 +495,12 @@ int test2(struct Options options)
Sleep
(
100
);
#else
usleep
(
10000L
);
#endif
#endif
MQTTAsync_destroy
(
&
c
);
exit:
assert
(
"Connect onFailure should be called once"
,
test2_onFailure_called
==
1
,
assert
(
"Connect onFailure should be called once"
,
test2_onFailure_called
==
1
,
"connect onFailure was called %d times"
,
test2_onFailure_called
);
MyLog
(
LOGA_INFO
,
"TEST2: test %s. %d tests run, %d failures."
,
...
...
@@ -548,7 +540,7 @@ void test3_onUnsubscribe(void* context, MQTTAsync_successData* response)
client_data
*
cd
=
(
client_data
*
)
context
;
MQTTAsync_disconnectOptions
opts
=
MQTTAsync_disconnectOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In onUnsubscribe onSuccess callback
\"
%s
\"
"
,
cd
->
clientid
);
opts
.
onSuccess
=
test3_onDisconnect
;
opts
.
context
=
cd
;
...
...
@@ -609,7 +601,7 @@ void test3_onSubscribe(void* context, MQTTAsync_successData* response)
client_data
*
cd
=
(
client_data
*
)
context
;
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In subscribe onSuccess callback
\"
%s
\"
"
,
cd
->
clientid
);
pubmsg
.
payload
=
"a much longer message that we can shorten to the extent that we need to payload up to 11"
;
...
...
@@ -627,7 +619,7 @@ void test3_onConnect(void* context, MQTTAsync_successData* response)
client_data
*
cd
=
(
client_data
*
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback,
\"
%s
\"
"
,
cd
->
clientid
);
opts
.
onSuccess
=
test3_onSubscribe
;
opts
.
context
=
cd
;
...
...
@@ -643,7 +635,7 @@ void test3_onFailure(void* context, MQTTAsync_failureData* response)
{
client_data
*
cd
=
(
client_data
*
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
assert
(
"Should have connected"
,
0
,
"%s failed to connect
\n
"
,
cd
->
clientid
);
MyLog
(
LOGA_DEBUG
,
"In connect onFailure callback,
\"
%s
\"
rc %d
\n
"
,
cd
->
clientid
,
response
?
response
->
code
:
-
999
);
if
(
response
&&
response
->
message
)
...
...
@@ -672,7 +664,7 @@ int test3(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 3 - multiple connections"
);
fprintf
(
xml
,
"<testcase classname=
\"
test4
\"
name=
\"
multiple connections
\"
"
);
global_start_time
=
start_clock
();
for
(
i
=
0
;
i
<
num_clients
;
++
i
)
{
sprintf
(
clientdata
[
i
].
clientid
,
"async_test3_num_%d"
,
i
);
...
...
@@ -681,9 +673,9 @@ int test3(struct Options options)
clientdata
[
i
].
message_count
=
0
;
rc
=
MQTTAsync_create
(
&
(
clientdata
[
i
].
c
),
options
.
connection
,
clientdata
[
i
].
clientid
,
MQTTCLIENT_PERSISTENCE_NONE
,
NULL
);
MQTTCLIENT_PERSISTENCE_NONE
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
rc
=
MQTTAsync_setCallbacks
(
clientdata
[
i
].
c
,
&
clientdata
[
i
],
NULL
,
test3_messageArrived
,
NULL
);
assert
(
"Good rc from setCallbacks"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
...
...
@@ -714,7 +706,7 @@ int test3(struct Options options)
Sleep
(
100
);
#else
usleep
(
10000L
);
#endif
#endif
}
MyLog
(
LOGA_DEBUG
,
"TEST3: destroying clients"
);
...
...
@@ -736,7 +728,7 @@ int test4_payloadlen = 0;
void
test4_onPublish
(
void
*
context
,
MQTTAsync_successData
*
response
)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MyLog
(
LOGA_DEBUG
,
"In publish onSuccess callback, context %p"
,
context
);
}
...
...
@@ -810,7 +802,7 @@ void test4_onSubscribe(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
int
rc
,
i
;
MyLog
(
LOGA_DEBUG
,
"In subscribe onSuccess callback %p"
,
c
);
pubmsg
.
payload
=
test4_payload
=
malloc
(
options
.
size
);
...
...
@@ -819,7 +811,7 @@ void test4_onSubscribe(void* context, MQTTAsync_successData* response)
srand
(
33
);
for
(
i
=
0
;
i
<
options
.
size
;
++
i
)
((
char
*
)
pubmsg
.
payload
)[
i
]
=
rand
()
%
256
;
pubmsg
.
qos
=
2
;
pubmsg
.
retained
=
0
;
...
...
@@ -832,7 +824,7 @@ void test4_onConnect(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback, context %p"
,
context
);
opts
.
onSuccess
=
test4_onSubscribe
;
opts
.
context
=
c
;
...
...
@@ -862,9 +854,9 @@ int test4(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 4 - big messages"
);
fprintf
(
xml
,
"<testcase classname=
\"
test4
\"
name=
\"
big messages
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTAsync_create
(
&
c
,
options
.
connection
,
"async_test_4"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -903,7 +895,7 @@ int test4(struct Options options)
Sleep
(
100
);
#else
usleep
(
1000L
);
#endif
#endif
MQTTAsync_destroy
(
&
c
);
...
...
@@ -919,7 +911,7 @@ void test5_onConnectFailure(void* context, MQTTAsync_failureData* response)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
MyLog
(
LOGA_DEBUG
,
"In connect onFailure callback, context %p"
,
context
);
MyLog
(
LOGA_INFO
,
"Connack rc is %d"
,
response
?
response
->
code
:
-
999
);
...
...
@@ -932,7 +924,7 @@ void test5_onConnect(void* context, MQTTAsync_successData* response)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
MyLog
(
LOGA_DEBUG
,
"In connect onFailure callback, context %p"
,
context
);
test_finished
=
1
;
...
...
@@ -957,9 +949,9 @@ int test5(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 5 - connack return codes"
);
fprintf
(
xml
,
"<testcase classname=
\"
test4
\"
name=
\"
connack return codes
\"
"
);
global_start_time
=
start_clock
();
rc
=
MQTTAsync_create
(
&
c
,
options
.
connection
,
"a clientid that is too long to be accepted"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -986,7 +978,7 @@ int test5(struct Options options)
Sleep
(
100
);
#else
usleep
(
10000L
);
#endif
#endif
MQTTAsync_destroy
(
&
c
);
...
...
@@ -1007,7 +999,7 @@ typedef struct
void
test6_onConnectFailure
(
void
*
context
,
MQTTAsync_failureData
*
response
)
{
test6_client_info
cinfo
=
*
(
test6_client_info
*
)
context
;
MyLog
(
LOGA_DEBUG
,
"In connect onFailure callback, context %p"
,
context
);
if
(
response
)
...
...
@@ -1022,9 +1014,9 @@ void test6_onConnectFailure(void* context, MQTTAsync_failureData* response)
void
test6_onConnect
(
void
*
context
,
MQTTAsync_successData
*
response
)
{
test6_client_info
cinfo
=
*
(
test6_client_info
*
)
context
;
MyLog
(
LOGA_DEBUG
,
"In connect success callback, context %p"
,
context
);
assert
(
"Should connect correctly"
,
!
cinfo
.
should_fail
,
"should_fail was %d"
,
cinfo
.
should_fail
);
test_finished
=
1
;
...
...
@@ -1050,11 +1042,11 @@ int test6(struct Options options)
MyLog
(
LOGA_INFO
,
"Starting test 6 - HA connections"
);
fprintf
(
xml
,
"<testcase classname=
\"
test4
\"
name=
\"
HA connections
\"
"
);
global_start_time
=
start_clock
();
test_finished
=
0
;
cinfo
.
should_fail
=
1
;
/* fail to connect */
rc
=
MQTTAsync_create
(
&
cinfo
.
c
,
"tcp://rubbish:1883"
,
"async ha connection"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -1082,12 +1074,12 @@ int test6(struct Options options)
Sleep
(
100
);
#else
usleep
(
10000L
);
#endif
#endif
test_finished
=
0
;
cinfo
.
should_fail
=
0
;
/* should connect */
rc
=
MQTTAsync_create
(
&
cinfo
.
c
,
"tcp://rubbish:1883"
,
"async ha connection"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -1116,7 +1108,7 @@ int test6(struct Options options)
Sleep
(
100
);
#else
usleep
(
10000L
);
#endif
#endif
MQTTAsync_destroy
(
&
cinfo
.
c
);
...
...
@@ -1704,7 +1696,7 @@ int main(int argc, char** argv)
xml
=
fopen
(
"TEST-test4.xml"
,
"w"
);
fprintf
(
xml
,
"<testsuite name=
\"
test4
\"
tests=
\"
%d
\"
>
\n
"
,
(
int
)(
ARRAY_SIZE
(
tests
))
-
1
);
getopts
(
argc
,
argv
);
MQTTAsync_setTraceCallback
(
trace_callback
);
...
...
@@ -1724,7 +1716,7 @@ int main(int argc, char** argv)
{
failures
=
0
;
MQTTAsync_setTraceLevel
(
MQTTASYNC_TRACE_ERROR
);
rc
+=
tests
[
options
.
test_no
](
options
);
/* return number of failures. 0 = test succeeded */
rc
+=
tests
[
options
.
test_no
](
options
);
/* return number of failures. 0 = test succeeded */
}
}
else
...
...
@@ -1741,6 +1733,6 @@ int main(int argc, char** argv)
fprintf
(
xml
,
"</testsuite>
\n
"
);
fclose
(
xml
);
return
rc
;
}
test/test5.c
View file @
b880d34f
...
...
@@ -3,11 +3,11 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
...
...
@@ -37,15 +37,8 @@
#include <unistd.h>
#include <errno.h>
#else
#include <winsock2.h>
#include <ws2tcpip.h>
#include <windows.h>
#define MAXHOSTNAMELEN 256
#define EAGAIN WSAEWOULDBLOCK
#define EINTR WSAEINTR
#define EINPROGRESS WSAEINPROGRESS
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTCONN WSAENOTCONN
#define ECONNRESET WSAECONNRESET
#define snprintf _snprintf
#endif
...
...
@@ -79,7 +72,7 @@ struct Options
int
test_no
;
int
size
;
}
options
=
{
{
"ssl://m2m.eclipse.org:18883"
,
"ssl://m2m.eclipse.org:18884"
,
"ssl://m2m.eclipse.org:18887"
,
...
...
@@ -282,11 +275,11 @@ void write_test_result(void)
{
long
duration
=
elapsed
(
global_start_time
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
if
(
cur_output
!=
output
)
{
fprintf
(
xml
,
"%s"
,
output
);
cur_output
=
output
;
cur_output
=
output
;
}
fprintf
(
xml
,
"</testcase>
\n
"
);
}
...
...
@@ -307,7 +300,7 @@ void myassert(char* filename, int lineno, char* description, int value,
vprintf
(
format
,
args
);
va_end
(
args
);
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
description
,
filename
,
lineno
);
}
else
...
...
@@ -932,7 +925,7 @@ int test2c(struct Options options)
fprintf
(
xml
,
"<testcase classname=
\"
test5
\"
name=
\"
%s
\"
"
,
testname
);
global_start_time
=
start_clock
();
rc
=
MQTTAsync_create
(
&
c
,
options
.
nocert_mutual_auth_connection
,
rc
=
MQTTAsync_create
(
&
c
,
options
.
nocert_mutual_auth_connection
,
"test2c"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -2071,4 +2064,3 @@ int main(int argc, char** argv)
return
rc
;
}
test/test6.c
View file @
b880d34f
...
...
@@ -35,7 +35,7 @@
#include <unistd.h>
#include <signal.h>
#else
#include <win
sock2
.h>
#include <win
dows
.h>
#endif
void
usage
(
void
)
...
...
@@ -332,7 +332,7 @@ int control_send(char* message)
MQTTAsync_responseOptions
ropts
=
MQTTAsync_responseOptions_initializer
;
sprintf
(
buf
,
"%s: %s"
,
opts
.
clientid
,
message
);
rc
=
MQTTAsync_send
(
control_client
,
pub_topic
,
strlen
(
buf
),
rc
=
MQTTAsync_send
(
control_client
,
pub_topic
,
(
int
)
strlen
(
buf
),
buf
,
1
,
0
,
&
ropts
);
MyLog
(
LOGA_DEBUG
,
"Control message sent: %s"
,
buf
);
...
...
@@ -636,7 +636,7 @@ void one_iteration(void)
sprintf
(
payload
,
"message number %d"
,
i
);
rc
=
MQTTAsync_send
(
client
,
opts
.
topic
,
strlen
(
payload
)
+
1
,
payload
,
rc
=
MQTTAsync_send
(
client
,
opts
.
topic
,
(
int
)(
strlen
(
payload
)
+
1
)
,
payload
,
opts
.
qos
,
opts
.
retained
,
NULL
);
while
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -645,7 +645,7 @@ void one_iteration(void)
if
(
stopping
)
goto
exit
;
mqsleep
(
1
);
rc
=
MQTTAsync_send
(
client
,
opts
.
topic
,
strlen
(
payload
)
+
1
,
payload
,
rc
=
MQTTAsync_send
(
client
,
opts
.
topic
,
(
int
)(
strlen
(
payload
)
+
1
)
,
payload
,
opts
.
qos
,
opts
.
retained
,
NULL
);
}
}
...
...
@@ -687,7 +687,7 @@ void one_iteration(void)
ropts
.
onSuccess
=
messageSent
;
seqno
++
;
sprintf
(
payload
,
"message number %d"
,
seqno
);
rc
=
MQTTAsync_send
(
client
,
opts
.
topic
,
strlen
(
payload
)
+
1
,
payload
,
rc
=
MQTTAsync_send
(
client
,
opts
.
topic
,
(
int
)(
strlen
(
payload
)
+
1
)
,
payload
,
opts
.
qos
,
opts
.
retained
,
&
ropts
);
while
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -697,7 +697,7 @@ void one_iteration(void)
if
(
stopping
)
goto
exit
;
mqsleep
(
1
);
rc
=
MQTTAsync_send
(
client
,
opts
.
topic
,
strlen
(
payload
)
+
1
,
payload
,
rc
=
MQTTAsync_send
(
client
,
opts
.
topic
,
(
int
)(
strlen
(
payload
)
+
1
)
,
payload
,
opts
.
qos
,
opts
.
retained
,
&
ropts
);
}
//MyLog(LOGA_DEBUG, "Successful publish with payload %s", payload);
...
...
test/test8.c
View file @
b880d34f
...
...
@@ -29,19 +29,11 @@
#if !defined(_WINDOWS)
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <errno.h>
#else
#include <winsock2.h>
#include <ws2tcpip.h>
#define MAXHOSTNAMELEN 256
#define EAGAIN WSAEWOULDBLOCK
#define EINTR WSAEINTR
#define EINPROGRESS WSAEINPROGRESS
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTCONN WSAENOTCONN
#define ECONNRESET WSAECONNRESET
#include <windows.h>
#endif
#define ARRAY_SIZE(a) (sizeof(a) / sizeof(a[0]))
...
...
@@ -69,7 +61,7 @@ struct Options
void
getopts
(
int
argc
,
char
**
argv
)
{
int
count
=
1
;
while
(
count
<
argc
)
{
if
(
strcmp
(
argv
[
count
],
"--test_no"
)
==
0
)
...
...
@@ -118,7 +110,7 @@ void MyLog(int LOGA_level, char* format, ...)
if
(
LOGA_level
==
LOGA_DEBUG
&&
options
.
verbose
==
0
)
return
;
ftime
(
&
ts
);
timeinfo
=
localtime
(
&
ts
.
time
);
strftime
(
msg_buf
,
80
,
"%Y%m%d %H%M%S"
,
timeinfo
);
...
...
@@ -218,7 +210,7 @@ void myassert(char* filename, int lineno, char* description, int value, char* fo
va_end
(
args
);
}
else
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
MyLog
(
LOGA_DEBUG
,
"Assertion succeeded, file %s, line %d, description: %s"
,
filename
,
lineno
,
description
);
}
volatile
int
test_finished
=
0
;
...
...
@@ -239,7 +231,7 @@ void test1_onUnsubscribe(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_disconnectOptions
opts
=
MQTTAsync_disconnectOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In onUnsubscribe onSuccess callback %p"
,
c
);
opts
.
onSuccess
=
test1_onDisconnect
;
opts
.
context
=
c
;
...
...
@@ -288,7 +280,7 @@ void test1_onSubscribe(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In subscribe onSuccess callback %p granted qos %d"
,
c
,
response
->
alt
.
qos
);
pubmsg
.
payload
=
"a much longer message that we can shorten to the extent that we need to payload up to 11"
;
...
...
@@ -305,7 +297,7 @@ void test1_onConnect(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback, context %p"
,
context
);
opts
.
onSuccess
=
test1_onSubscribe
;
opts
.
context
=
c
;
...
...
@@ -321,8 +313,7 @@ void test1_onConnectFailure(void* context, MQTTAsync_failureData* response)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In connect onFailure callback, context %p"
,
context
);
test_finished
=
1
;
...
...
@@ -346,9 +337,9 @@ int test1(struct Options options)
failures
=
0
;
MyLog
(
LOGA_INFO
,
"Starting test 1 - asynchronous connect"
);
rc
=
MQTTAsync_create
(
&
c
,
options
.
connection
,
"async_test"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -388,7 +379,7 @@ int test1(struct Options options)
Sleep
(
100
);
#else
usleep
(
10000L
);
#endif
#endif
MQTTAsync_destroy
(
&
c
);
...
...
@@ -437,9 +428,9 @@ int test2(struct Options options)
test_finished
=
0
;
MyLog
(
LOGA_INFO
,
"Starting test 2 - connect timeout"
);
rc
=
MQTTAsync_create
(
&
c
,
"tcp://9.20.96.160:66"
,
"connect timeout"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -478,12 +469,12 @@ int test2(struct Options options)
Sleep
(
100
);
#else
usleep
(
10000L
);
#endif
#endif
MQTTAsync_destroy
(
&
c
);
exit:
assert
(
"Connect onFailure should be called once"
,
test2_onFailure_called
==
1
,
assert
(
"Connect onFailure should be called once"
,
test2_onFailure_called
==
1
,
"connect onFailure was called %d times"
,
test2_onFailure_called
);
MyLog
(
LOGA_INFO
,
"TEST2: test %s. %d tests run, %d failures."
,
...
...
@@ -523,7 +514,7 @@ void test3_onUnsubscribe(void* context, MQTTAsync_successData* response)
client_data
*
cd
=
(
client_data
*
)
context
;
MQTTAsync_disconnectOptions
opts
=
MQTTAsync_disconnectOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In onUnsubscribe onSuccess callback
\"
%s
\"
"
,
cd
->
clientid
);
opts
.
onSuccess
=
test3_onDisconnect
;
opts
.
context
=
cd
;
...
...
@@ -584,7 +575,7 @@ void test3_onSubscribe(void* context, MQTTAsync_successData* response)
client_data
*
cd
=
(
client_data
*
)
context
;
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In subscribe onSuccess callback
\"
%s
\"
"
,
cd
->
clientid
);
pubmsg
.
payload
=
"a much longer message that we can shorten to the extent that we need to payload up to 11"
;
...
...
@@ -602,7 +593,7 @@ void test3_onConnect(void* context, MQTTAsync_successData* response)
client_data
*
cd
=
(
client_data
*
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback,
\"
%s
\"
"
,
cd
->
clientid
);
opts
.
onSuccess
=
test3_onSubscribe
;
opts
.
context
=
cd
;
...
...
@@ -618,7 +609,7 @@ void test3_onFailure(void* context, MQTTAsync_failureData* response)
{
client_data
*
cd
=
(
client_data
*
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
assert
(
"Should have connected"
,
0
,
"failed to connect"
,
NULL
);
MyLog
(
LOGA_DEBUG
,
"In connect onFailure callback,
\"
%s
\"
rc %d
\n
"
,
cd
->
clientid
,
response
->
code
);
if
(
response
->
message
)
...
...
@@ -646,7 +637,7 @@ int test3(struct Options options)
test_finished
=
0
;
MyLog
(
LOGA_INFO
,
"Starting test 3 - multiple connections"
);
for
(
i
=
0
;
i
<
num_clients
;
++
i
)
{
sprintf
(
clientdata
[
i
].
clientid
,
"async_test3_num_%d"
,
i
);
...
...
@@ -655,9 +646,9 @@ int test3(struct Options options)
clientdata
[
i
].
message_count
=
0
;
rc
=
MQTTAsync_create
(
&
(
clientdata
[
i
].
c
),
options
.
connection
,
clientdata
[
i
].
clientid
,
MQTTCLIENT_PERSISTENCE_NONE
,
NULL
);
MQTTCLIENT_PERSISTENCE_NONE
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
rc
=
MQTTAsync_setCallbacks
(
clientdata
[
i
].
c
,
&
clientdata
[
i
],
NULL
,
test3_messageArrived
,
NULL
);
assert
(
"Good rc from setCallbacks"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
...
...
@@ -687,7 +678,7 @@ int test3(struct Options options)
Sleep
(
100
);
#else
usleep
(
10000L
);
#endif
#endif
}
MyLog
(
LOGA_DEBUG
,
"TEST3: destroying clients"
);
...
...
@@ -695,7 +686,7 @@ int test3(struct Options options)
for
(
i
=
0
;
i
<
num_clients
;
++
i
)
MQTTAsync_destroy
(
&
clientdata
[
i
].
c
);
exit:
/*exit:*/
MyLog
(
LOGA_INFO
,
"TEST3: test %s. %d tests run, %d failures."
,
(
failures
==
0
)
?
"passed"
:
"failed"
,
tests
,
failures
);
...
...
@@ -709,7 +700,7 @@ int test4_payloadlen = 0;
void
test4_onPublish
(
void
*
context
,
MQTTAsync_successData
*
response
)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MyLog
(
LOGA_DEBUG
,
"In publish onSuccess callback, context %p"
,
context
);
}
...
...
@@ -783,7 +774,7 @@ void test4_onSubscribe(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
int
rc
,
i
;
MyLog
(
LOGA_DEBUG
,
"In subscribe onSuccess callback %p"
,
c
);
pubmsg
.
payload
=
test4_payload
=
malloc
(
options
.
size
);
...
...
@@ -792,7 +783,7 @@ void test4_onSubscribe(void* context, MQTTAsync_successData* response)
srand
(
33
);
for
(
i
=
0
;
i
<
options
.
size
;
++
i
)
((
char
*
)
pubmsg
.
payload
)[
i
]
=
rand
()
%
256
;
pubmsg
.
qos
=
2
;
pubmsg
.
retained
=
0
;
...
...
@@ -805,7 +796,7 @@ void test4_onConnect(void* context, MQTTAsync_successData* response)
MQTTAsync
c
=
(
MQTTAsync
)
context
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
int
rc
;
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback, context %p"
,
context
);
opts
.
onSuccess
=
test4_onSubscribe
;
opts
.
context
=
c
;
...
...
@@ -833,9 +824,9 @@ int test4(struct Options options)
test_finished
=
failures
=
0
;
MyLog
(
LOGA_INFO
,
"Starting test 4 - big messages"
);
rc
=
MQTTAsync_create
(
&
c
,
options
.
connection
,
"async_test_4"
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
{
...
...
@@ -873,7 +864,7 @@ int test4(struct Options options)
Sleep
(
100
);
#else
usleep
(
1000L
);
#endif
#endif
MQTTAsync_destroy
(
&
c
);
...
...
@@ -897,18 +888,18 @@ int main(int argc, char** argv)
int
rc
=
0
;
int
(
*
tests
[])()
=
{
NULL
,
test1
,
test2
,
test3
,
test4
};
/* indexed starting from 1 */
MQTTAsync_nameValue
*
info
;
getopts
(
argc
,
argv
);
MQTTAsync_setTraceCallback
(
trace_callback
);
info
=
MQTTAsync_getVersionInfo
();
while
(
info
->
name
)
{
MyLog
(
LOGA_INFO
,
"%s: %s"
,
info
->
name
,
info
->
value
);
info
++
;
}
}
if
(
options
.
test_no
==
-
1
)
{
/* run all the tests */
...
...
@@ -916,7 +907,7 @@ int main(int argc, char** argv)
{
failures
=
0
;
MQTTAsync_setTraceLevel
(
MQTTASYNC_TRACE_ERROR
);
rc
+=
tests
[
options
.
test_no
](
options
);
/* return number of failures. 0 = test succeeded */
rc
+=
tests
[
options
.
test_no
](
options
);
/* return number of failures. 0 = test succeeded */
}
}
else
...
...
@@ -929,6 +920,6 @@ int main(int argc, char** argv)
MyLog
(
LOGA_INFO
,
"verdict pass"
);
else
MyLog
(
LOGA_INFO
,
"verdict fail"
);
return
rc
;
}
test/test9.c
View file @
b880d34f
...
...
@@ -3,11 +3,11 @@
*
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* and Eclipse Distribution License v1.0 which accompany this distribution.
* and Eclipse Distribution License v1.0 which accompany this distribution.
*
* The Eclipse Public License is available at
* The Eclipse Public License is available at
* http://www.eclipse.org/legal/epl-v10.html
* and the Eclipse Distribution License is available at
* and the Eclipse Distribution License is available at
* http://www.eclipse.org/org/documents/edl-v10.php.
*
* Contributors:
...
...
@@ -30,19 +30,11 @@
#if !defined(_WINDOWS)
#include <sys/time.h>
#include <sys/socket.h>
#include <sys/socket.h>
#include <unistd.h>
#include <errno.h>
#include <errno.h>
#else
#include <winsock2.h>
#include <ws2tcpip.h>
#define MAXHOSTNAMELEN 256
#define EAGAIN WSAEWOULDBLOCK
#define EINTR WSAEINTR
#define EINPROGRESS WSAEINPROGRESS
#define EWOULDBLOCK WSAEWOULDBLOCK
#define ENOTCONN WSAENOTCONN
#define ECONNRESET WSAECONNRESET
#include <windows.h>
#endif
char
unique
[
50
];
// unique suffix/prefix to add to clientid/topic etc
...
...
@@ -72,7 +64,7 @@ struct Options
void
getopts
(
int
argc
,
char
**
argv
)
{
int
count
=
1
;
while
(
count
<
argc
)
{
if
(
strcmp
(
argv
[
count
],
"--test_no"
)
==
0
)
...
...
@@ -212,11 +204,11 @@ void write_test_result(void)
{
long
duration
=
elapsed
(
global_start_time
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
fprintf
(
xml
,
" time=
\"
%ld.%.3ld
\"
>
\n
"
,
duration
/
1000
,
duration
%
1000
);
if
(
cur_output
!=
output
)
{
fprintf
(
xml
,
"%s"
,
output
);
cur_output
=
output
;
cur_output
=
output
;
}
fprintf
(
xml
,
"</testcase>
\n
"
);
}
...
...
@@ -237,7 +229,7 @@ void myassert(char* filename, int lineno, char* description, int value,
vprintf
(
format
,
args
);
va_end
(
args
);
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
cur_output
+=
sprintf
(
cur_output
,
"<failure type=
\"
%s
\"
>file %s, line %d </failure>
\n
"
,
description
,
filename
,
lineno
);
}
else
...
...
@@ -248,46 +240,46 @@ void myassert(char* filename, int lineno, char* description, int value,
/*********************************************************************
Tests: offline buffering - sending messages while disconnected
1. send some messages while disconnected, check that they are sent
2. repeat test 1 using serverURIs
3. repeat test 1 using auto reconnect
4. repeat test 2 using auto reconnect
5. check max-buffered
6. check auto-reconnect parms alter behaviour as expected
Tests: automatic reconnect
- check that connected() is called
- check that connected() is called
- check that reconnect() causes reconnect attempt
- check that reconnect() fails if no connect has been previously attempted
*********************************************************************/
/*********************************************************************
Test1: offline buffering - sending messages while disconnected
1. call connect
2. use proxy to disconnect the client
2. use proxy to disconnect the client
3. while the client is disconnected, send more messages
4. when the client reconnects, check that those messages are sent
*********************************************************************/
int
test1_will_message_received
=
0
;
int
test1_will_message_received
=
0
;
int
test1_messages_received
=
0
;
int
test1_messageArrived
(
void
*
context
,
char
*
topicName
,
int
topicLen
,
MQTTAsync_message
*
message
)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
static
int
message_count
=
0
;
MyLog
(
LOGA_DEBUG
,
"Message received on topic %s,
\"
%.*s
\"
"
,
topicName
,
message
->
payloadlen
,
message
->
payload
);
if
(
memcmp
(
message
->
payload
,
"will message"
,
message
->
payloadlen
)
==
0
)
test1_will_message_received
=
1
;
else
...
...
@@ -325,10 +317,10 @@ void test1cOnConnect(void* context, MQTTAsync_successData* response)
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback for client d, context %p
\n
"
,
context
);
MQTTAsync
c
=
(
MQTTAsync
)
context
;
int
rc
;
/* send a message to the proxy to break the connection */
pubmsg
.
payload
=
"TERMINATE"
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
);
pubmsg
.
payloadlen
=
(
int
)
strlen
(
pubmsg
.
payload
);
pubmsg
.
qos
=
0
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
"MQTTSAS topic"
,
&
pubmsg
,
NULL
);
...
...
@@ -391,7 +383,7 @@ int test1(struct Options options)
char
clientidd
[
50
];
int
i
=
0
;
MQTTAsync_token
*
tokens
;
sprintf
(
willTopic
,
"paho-test9-1-%s"
,
unique
);
sprintf
(
clientidc
,
"paho-test9-1-c-%s"
,
unique
);
sprintf
(
clientidd
,
"paho-test9-1-d-%s"
,
unique
);
...
...
@@ -404,7 +396,7 @@ int test1(struct Options options)
global_start_time
=
start_clock
();
createOptions
.
sendWhileDisconnected
=
1
;
rc
=
MQTTAsync_createWithOptions
(
&
c
,
options
.
proxy_connection
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
rc
=
MQTTAsync_createWithOptions
(
&
c
,
options
.
proxy_connection
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
,
&
createOptions
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -412,7 +404,7 @@ int test1(struct Options options)
MQTTAsync_destroy
(
&
c
);
goto
exit
;
}
rc
=
MQTTAsync_create
(
&
d
,
options
.
connection
,
clientidd
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -425,7 +417,7 @@ int test1(struct Options options)
opts
.
cleansession
=
1
;
//opts.username = "testuser";
//opts.password = "testpassword";
rc
=
MQTTAsync_setCallbacks
(
d
,
d
,
NULL
,
test1_messageArrived
,
NULL
);
assert
(
"Good rc from setCallbacks"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
...
...
@@ -441,16 +433,16 @@ int test1(struct Options options)
failures
++
;
goto
exit
;
}
/* wait until d is ready: connected and subscribed */
count
=
0
;
while
(
!
test1dReady
&&
++
count
<
10000
)
MySleep
(
100
);
assert
(
"Count should be less than 10000"
,
count
<
10000
,
"count was %d"
,
count
);
/* wrong */
rc
=
MQTTAsync_setConnected
(
c
,
c
,
test1cConnected
);
assert
(
"Good rc from setConnectedCallback"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
/* let client c go: connect, and send disconnect command to proxy */
opts
.
will
=
&
wopts
;
opts
.
will
->
message
=
"will message"
;
...
...
@@ -470,24 +462,24 @@ int test1(struct Options options)
failures
++
;
goto
exit
;
}
/* wait for will message */
while
(
!
test1_will_message_received
&&
++
count
<
10000
)
MySleep
(
100
);
MyLog
(
LOGA_DEBUG
,
"Now we can send some messages to be buffered"
);
test1c_connected
=
0
;
/* send some messages. Then reconnect (check connected callback), and check that those messages are received */
for
(
i
=
0
;
i
<
3
;
++
i
)
{
char
buf
[
50
];
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
sprintf
(
buf
,
"QoS %d message"
,
i
);
pubmsg
.
payload
=
buf
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
)
+
1
;
pubmsg
.
payloadlen
=
(
int
)
strlen
(
pubmsg
.
payload
)
+
1
;
pubmsg
.
qos
=
i
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
test_topic
,
&
pubmsg
,
&
opts
);
...
...
@@ -504,14 +496,14 @@ int test1(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 3"
,
i
==
3
,
"i was %d "
,
i
);
rc
=
MQTTAsync_reconnect
(
c
);
assert
(
"Good rc from reconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
/* wait for client to be reconnected */
while
(
!
test1c_connected
&&
++
count
<
10000
)
MySleep
(
100
);
/* wait for success or failure callback */
while
(
test1_messages_received
<
3
&&
++
count
<
10000
)
MySleep
(
100
);
...
...
@@ -526,10 +518,10 @@ int test1(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 0"
,
i
==
0
,
"i was %d "
,
i
);
rc
=
MQTTAsync_disconnect
(
c
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
rc
=
MQTTAsync_disconnect
(
d
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
...
...
@@ -546,24 +538,24 @@ exit:
/*********************************************************************
Test2: offline buffering - sending messages while disconnected
1. call connect
2. use proxy to disconnect the client
2. use proxy to disconnect the client
3. while the client is disconnected, send more messages
4. when the client reconnects, check that those messages are sent
*********************************************************************/
int
test2_will_message_received
=
0
;
int
test2_will_message_received
=
0
;
int
test2_messages_received
=
0
;
int
test2_messageArrived
(
void
*
context
,
char
*
topicName
,
int
topicLen
,
MQTTAsync_message
*
message
)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
static
int
message_count
=
0
;
MyLog
(
LOGA_DEBUG
,
"Message received on topic %s,
\"
%.*s
\"
"
,
topicName
,
message
->
payloadlen
,
message
->
payload
);
if
(
memcmp
(
message
->
payload
,
"will message"
,
message
->
payloadlen
)
==
0
)
test2_will_message_received
=
1
;
else
...
...
@@ -601,10 +593,10 @@ void test2cOnConnect(void* context, MQTTAsync_successData* response)
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback for client d, context %p
\n
"
,
context
);
MQTTAsync
c
=
(
MQTTAsync
)
context
;
int
rc
;
/* send a message to the proxy to break the connection */
pubmsg
.
payload
=
"TERMINATE"
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
);
pubmsg
.
payloadlen
=
(
int
)
strlen
(
pubmsg
.
payload
);
pubmsg
.
qos
=
0
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
"MQTTSAS topic"
,
&
pubmsg
,
NULL
);
...
...
@@ -668,7 +660,7 @@ int test2(struct Options options)
int
i
=
0
;
MQTTAsync_token
*
tokens
;
char
*
URIs
[
2
]
=
{
"rubbish"
,
options
.
proxy_connection
};
sprintf
(
willTopic
,
"paho-test9-2-%s"
,
unique
);
sprintf
(
clientidc
,
"paho-test9-2-c-%s"
,
unique
);
sprintf
(
clientidd
,
"paho-test9-2-d-%s"
,
unique
);
...
...
@@ -681,7 +673,7 @@ int test2(struct Options options)
global_start_time
=
start_clock
();
createOptions
.
sendWhileDisconnected
=
1
;
rc
=
MQTTAsync_createWithOptions
(
&
c
,
"not used"
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
rc
=
MQTTAsync_createWithOptions
(
&
c
,
"not used"
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
,
&
createOptions
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -689,7 +681,7 @@ int test2(struct Options options)
MQTTAsync_destroy
(
&
c
);
goto
exit
;
}
rc
=
MQTTAsync_create
(
&
d
,
options
.
connection
,
clientidd
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -700,7 +692,7 @@ int test2(struct Options options)
opts
.
keepAliveInterval
=
20
;
opts
.
cleansession
=
1
;
rc
=
MQTTAsync_setCallbacks
(
d
,
d
,
NULL
,
test2_messageArrived
,
NULL
);
assert
(
"Good rc from setCallbacks"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
...
...
@@ -716,16 +708,16 @@ int test2(struct Options options)
failures
++
;
goto
exit
;
}
/* wait until d is ready: connected and subscribed */
count
=
0
;
while
(
!
test2dReady
&&
++
count
<
10000
)
MySleep
(
100
);
assert
(
"Count should be less than 10000"
,
count
<
10000
,
"count was %d"
,
count
);
/* wrong */
rc
=
MQTTAsync_setConnected
(
c
,
c
,
test2cConnected
);
assert
(
"Good rc from setConnectedCallback"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
/* let client c go: connect, and send disconnect command to proxy */
opts
.
will
=
&
wopts
;
opts
.
will
->
message
=
"will message"
;
...
...
@@ -747,24 +739,24 @@ int test2(struct Options options)
failures
++
;
goto
exit
;
}
/* wait for will message */
while
(
!
test2_will_message_received
&&
++
count
<
10000
)
MySleep
(
100
);
MyLog
(
LOGA_DEBUG
,
"Now we can send some messages to be buffered"
);
test2c_connected
=
0
;
/* send some messages. Then reconnect (check connected callback), and check that those messages are received */
for
(
i
=
0
;
i
<
3
;
++
i
)
{
char
buf
[
50
];
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
sprintf
(
buf
,
"QoS %d message"
,
i
);
pubmsg
.
payload
=
buf
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
)
+
1
;
pubmsg
.
payloadlen
=
(
int
)(
strlen
(
pubmsg
.
payload
)
+
1
)
;
pubmsg
.
qos
=
i
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
test_topic
,
&
pubmsg
,
&
opts
);
...
...
@@ -781,14 +773,14 @@ int test2(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 3"
,
i
==
3
,
"i was %d "
,
i
);
rc
=
MQTTAsync_reconnect
(
c
);
assert
(
"Good rc from reconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
/* wait for client to be reconnected */
while
(
!
test2c_connected
&&
++
count
<
10000
)
MySleep
(
100
);
/* wait for success or failure callback */
while
(
test2_messages_received
<
3
&&
++
count
<
10000
)
MySleep
(
100
);
...
...
@@ -803,10 +795,10 @@ int test2(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 0"
,
i
==
0
,
"i was %d "
,
i
);
rc
=
MQTTAsync_disconnect
(
c
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
rc
=
MQTTAsync_disconnect
(
d
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
...
...
@@ -822,24 +814,24 @@ exit:
/*********************************************************************
test3: offline buffering - sending messages while disconnected
1. call connect
2. use proxy to disconnect the client
2. use proxy to disconnect the client
3. while the client is disconnected, send more messages
4. when the client auto reconnects, check that those messages are sent
*********************************************************************/
int
test3_will_message_received
=
0
;
int
test3_will_message_received
=
0
;
int
test3_messages_received
=
0
;
int
test3_messageArrived
(
void
*
context
,
char
*
topicName
,
int
topicLen
,
MQTTAsync_message
*
message
)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
static
int
message_count
=
0
;
MyLog
(
LOGA_DEBUG
,
"Message received on topic %s,
\"
%.*s
\"
"
,
topicName
,
message
->
payloadlen
,
message
->
payload
);
if
(
memcmp
(
message
->
payload
,
"will message"
,
message
->
payloadlen
)
==
0
)
test3_will_message_received
=
1
;
else
...
...
@@ -877,10 +869,10 @@ void test3cOnConnect(void* context, MQTTAsync_successData* response)
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback for client d, context %p
\n
"
,
context
);
MQTTAsync
c
=
(
MQTTAsync
)
context
;
int
rc
;
/* send a message to the proxy to break the connection */
pubmsg
.
payload
=
"TERMINATE"
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
);
pubmsg
.
payloadlen
=
(
int
)
strlen
(
pubmsg
.
payload
);
pubmsg
.
qos
=
0
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
"MQTTSAS topic"
,
&
pubmsg
,
NULL
);
...
...
@@ -943,7 +935,7 @@ int test3(struct Options options)
char
clientidd
[
50
];
int
i
=
0
;
MQTTAsync_token
*
tokens
;
sprintf
(
willTopic
,
"paho-test9-3-%s"
,
unique
);
sprintf
(
clientidc
,
"paho-test9-3-c-%s"
,
unique
);
sprintf
(
clientidd
,
"paho-test9-3-d-%s"
,
unique
);
...
...
@@ -956,7 +948,7 @@ int test3(struct Options options)
global_start_time
=
start_clock
();
createOptions
.
sendWhileDisconnected
=
1
;
rc
=
MQTTAsync_createWithOptions
(
&
c
,
options
.
proxy_connection
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
rc
=
MQTTAsync_createWithOptions
(
&
c
,
options
.
proxy_connection
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
,
&
createOptions
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -964,7 +956,7 @@ int test3(struct Options options)
MQTTAsync_destroy
(
&
c
);
goto
exit
;
}
rc
=
MQTTAsync_create
(
&
d
,
options
.
connection
,
clientidd
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -977,7 +969,7 @@ int test3(struct Options options)
opts
.
cleansession
=
1
;
//opts.username = "testuser";
//opts.password = "testpassword";
rc
=
MQTTAsync_setCallbacks
(
d
,
d
,
NULL
,
test3_messageArrived
,
NULL
);
assert
(
"Good rc from setCallbacks"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
...
...
@@ -993,16 +985,16 @@ int test3(struct Options options)
failures
++
;
goto
exit
;
}
/* wait until d is ready: connected and subscribed */
count
=
0
;
while
(
!
test3dReady
&&
++
count
<
10000
)
MySleep
(
100
);
assert
(
"Count should be less than 10000"
,
count
<
10000
,
"count was %d"
,
count
);
/* wrong */
rc
=
MQTTAsync_setConnected
(
c
,
c
,
test3cConnected
);
assert
(
"Good rc from setConnectedCallback"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
/* let client c go: connect, and send disconnect command to proxy */
opts
.
will
=
&
wopts
;
opts
.
will
->
message
=
"will message"
;
...
...
@@ -1023,24 +1015,24 @@ int test3(struct Options options)
failures
++
;
goto
exit
;
}
/* wait for will message */
while
(
!
test3_will_message_received
&&
++
count
<
10000
)
MySleep
(
100
);
MyLog
(
LOGA_DEBUG
,
"Now we can send some messages to be buffered"
);
test3c_connected
=
0
;
/* send some messages. Then reconnect (check connected callback), and check that those messages are received */
for
(
i
=
0
;
i
<
3
;
++
i
)
{
char
buf
[
50
];
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
sprintf
(
buf
,
"QoS %d message"
,
i
);
pubmsg
.
payload
=
buf
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
)
+
1
;
pubmsg
.
payloadlen
=
(
int
)(
strlen
(
pubmsg
.
payload
)
+
1
)
;
pubmsg
.
qos
=
i
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
test_topic
,
&
pubmsg
,
&
opts
);
...
...
@@ -1057,11 +1049,11 @@ int test3(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 3"
,
i
==
3
,
"i was %d "
,
i
);
/* wait for client to be reconnected */
while
(
!
test3c_connected
&&
++
count
<
10000
)
MySleep
(
100
);
/* wait for success or failure callback */
while
(
test3_messages_received
<
3
&&
++
count
<
10000
)
MySleep
(
100
);
...
...
@@ -1076,11 +1068,11 @@ int test3(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 0"
,
i
==
0
,
"i was %d "
,
i
);
rc
=
MQTTAsync_disconnect
(
c
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
rc
=
MQTTAsync_disconnect
(
d
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
...
...
@@ -1096,24 +1088,24 @@ exit:
/*********************************************************************
test4: offline buffering - sending messages while disconnected
1. call connect
2. use proxy to disconnect the client
2. use proxy to disconnect the client
3. while the client is disconnected, send more messages
4. when the client auto reconnects, check that those messages are sent
*********************************************************************/
int
test4_will_message_received
=
0
;
int
test4_will_message_received
=
0
;
int
test4_messages_received
=
0
;
int
test4_messageArrived
(
void
*
context
,
char
*
topicName
,
int
topicLen
,
MQTTAsync_message
*
message
)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
static
int
message_count
=
0
;
MyLog
(
LOGA_DEBUG
,
"Message received on topic %s,
\"
%.*s
\"
"
,
topicName
,
message
->
payloadlen
,
message
->
payload
);
if
(
memcmp
(
message
->
payload
,
"will message"
,
message
->
payloadlen
)
==
0
)
test4_will_message_received
=
1
;
else
...
...
@@ -1151,10 +1143,10 @@ void test4cOnConnect(void* context, MQTTAsync_successData* response)
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback for client d, context %p
\n
"
,
context
);
MQTTAsync
c
=
(
MQTTAsync
)
context
;
int
rc
;
/* send a message to the proxy to break the connection */
pubmsg
.
payload
=
"TERMINATE"
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
);
pubmsg
.
payloadlen
=
(
int
)
strlen
(
pubmsg
.
payload
);
pubmsg
.
qos
=
0
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
"MQTTSAS topic"
,
&
pubmsg
,
NULL
);
...
...
@@ -1218,7 +1210,7 @@ int test4(struct Options options)
int
i
=
0
;
MQTTAsync_token
*
tokens
;
char
*
URIs
[
2
]
=
{
"rubbish"
,
options
.
proxy_connection
};
sprintf
(
willTopic
,
"paho-test9-4-%s"
,
unique
);
sprintf
(
clientidc
,
"paho-test9-4-c-%s"
,
unique
);
sprintf
(
clientidd
,
"paho-test9-4-d-%s"
,
unique
);
...
...
@@ -1231,7 +1223,7 @@ int test4(struct Options options)
global_start_time
=
start_clock
();
createOptions
.
sendWhileDisconnected
=
1
;
rc
=
MQTTAsync_createWithOptions
(
&
c
,
"not used"
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
rc
=
MQTTAsync_createWithOptions
(
&
c
,
"not used"
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
,
&
createOptions
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -1239,7 +1231,7 @@ int test4(struct Options options)
MQTTAsync_destroy
(
&
c
);
goto
exit
;
}
rc
=
MQTTAsync_create
(
&
d
,
options
.
connection
,
clientidd
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -1250,7 +1242,7 @@ int test4(struct Options options)
opts
.
keepAliveInterval
=
20
;
opts
.
cleansession
=
1
;
rc
=
MQTTAsync_setCallbacks
(
d
,
d
,
NULL
,
test4_messageArrived
,
NULL
);
assert
(
"Good rc from setCallbacks"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
...
...
@@ -1266,16 +1258,16 @@ int test4(struct Options options)
failures
++
;
goto
exit
;
}
/* wait until d is ready: connected and subscribed */
count
=
0
;
while
(
!
test4dReady
&&
++
count
<
10000
)
MySleep
(
100
);
assert
(
"Count should be less than 10000"
,
count
<
10000
,
"count was %d"
,
count
);
/* wrong */
rc
=
MQTTAsync_setConnected
(
c
,
c
,
test4cConnected
);
assert
(
"Good rc from setConnectedCallback"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
/* let client c go: connect, and send disconnect command to proxy */
opts
.
will
=
&
wopts
;
opts
.
will
->
message
=
"will message"
;
...
...
@@ -1298,24 +1290,24 @@ int test4(struct Options options)
failures
++
;
goto
exit
;
}
/* wait for will message */
while
(
!
test4_will_message_received
&&
++
count
<
10000
)
MySleep
(
100
);
MyLog
(
LOGA_DEBUG
,
"Now we can send some messages to be buffered"
);
test4c_connected
=
0
;
/* send some messages. Then reconnect (check connected callback), and check that those messages are received */
for
(
i
=
0
;
i
<
3
;
++
i
)
{
char
buf
[
50
];
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
sprintf
(
buf
,
"QoS %d message"
,
i
);
pubmsg
.
payload
=
buf
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
)
+
1
;
pubmsg
.
payloadlen
=
(
int
)(
strlen
(
pubmsg
.
payload
)
+
1
)
;
pubmsg
.
qos
=
i
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
test_topic
,
&
pubmsg
,
&
opts
);
...
...
@@ -1332,11 +1324,11 @@ int test4(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 3"
,
i
==
3
,
"i was %d "
,
i
);
/* wait for client to be reconnected */
while
(
!
test4c_connected
&&
++
count
<
10000
)
MySleep
(
100
);
/* wait for success or failure callback */
while
(
test4_messages_received
<
3
&&
++
count
<
10000
)
MySleep
(
100
);
...
...
@@ -1351,10 +1343,10 @@ int test4(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 0"
,
i
==
0
,
"i was %d "
,
i
);
rc
=
MQTTAsync_disconnect
(
c
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
rc
=
MQTTAsync_disconnect
(
d
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
...
...
@@ -1371,24 +1363,24 @@ exit:
/*********************************************************************
test5: offline buffering - check max buffered
1. call connect
2. use proxy to disconnect the client
2. use proxy to disconnect the client
3. while the client is disconnected, send more messages
4. when the client reconnects, check that those messages are sent
*********************************************************************/
int
test5_will_message_received
=
0
;
int
test5_will_message_received
=
0
;
int
test5_messages_received
=
0
;
int
test5_messageArrived
(
void
*
context
,
char
*
topicName
,
int
topicLen
,
MQTTAsync_message
*
message
)
{
MQTTAsync
c
=
(
MQTTAsync
)
context
;
static
int
message_count
=
0
;
MyLog
(
LOGA_DEBUG
,
"Message received on topic %s,
\"
%.*s
\"
"
,
topicName
,
message
->
payloadlen
,
message
->
payload
);
if
(
memcmp
(
message
->
payload
,
"will message"
,
message
->
payloadlen
)
==
0
)
test5_will_message_received
=
1
;
else
...
...
@@ -1426,10 +1418,10 @@ void test5cOnConnect(void* context, MQTTAsync_successData* response)
MyLog
(
LOGA_DEBUG
,
"In connect onSuccess callback for client d, context %p
\n
"
,
context
);
MQTTAsync
c
=
(
MQTTAsync
)
context
;
int
rc
;
/* send a message to the proxy to break the connection */
pubmsg
.
payload
=
"TERMINATE"
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
);
pubmsg
.
payloadlen
=
(
int
)
strlen
(
pubmsg
.
payload
);
pubmsg
.
qos
=
0
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
"MQTTSAS topic"
,
&
pubmsg
,
NULL
);
...
...
@@ -1492,7 +1484,7 @@ int test5(struct Options options)
char
clientidd
[
50
];
int
i
=
0
;
MQTTAsync_token
*
tokens
;
sprintf
(
willTopic
,
"paho-test9-5-%s"
,
unique
);
sprintf
(
clientidc
,
"paho-test9-5-c-%s"
,
unique
);
sprintf
(
clientidd
,
"paho-test9-5-d-%s"
,
unique
);
...
...
@@ -1506,7 +1498,7 @@ int test5(struct Options options)
createOptions
.
sendWhileDisconnected
=
1
;
createOptions
.
maxBufferedMessages
=
3
;
rc
=
MQTTAsync_createWithOptions
(
&
c
,
options
.
proxy_connection
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
rc
=
MQTTAsync_createWithOptions
(
&
c
,
options
.
proxy_connection
,
clientidc
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
,
&
createOptions
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -1514,7 +1506,7 @@ int test5(struct Options options)
MQTTAsync_destroy
(
&
c
);
goto
exit
;
}
rc
=
MQTTAsync_create
(
&
d
,
options
.
connection
,
clientidd
,
MQTTCLIENT_PERSISTENCE_DEFAULT
,
NULL
);
assert
(
"good rc from create"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d
\n
"
,
rc
);
if
(
rc
!=
MQTTASYNC_SUCCESS
)
...
...
@@ -1527,7 +1519,7 @@ int test5(struct Options options)
opts
.
cleansession
=
1
;
//opts.username = "testuser";
//opts.password = "testpassword";
rc
=
MQTTAsync_setCallbacks
(
d
,
d
,
NULL
,
test5_messageArrived
,
NULL
);
assert
(
"Good rc from setCallbacks"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
...
...
@@ -1543,16 +1535,16 @@ int test5(struct Options options)
failures
++
;
goto
exit
;
}
/* wait until d is ready: connected and subscribed */
count
=
0
;
while
(
!
test5dReady
&&
++
count
<
10000
)
MySleep
(
100
);
assert
(
"Count should be less than 10000"
,
count
<
10000
,
"count was %d"
,
count
);
/* wrong */
rc
=
MQTTAsync_setConnected
(
c
,
c
,
test5cConnected
);
assert
(
"Good rc from setConnectedCallback"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d"
,
rc
);
/* let client c go: connect, and send disconnect command to proxy */
opts
.
will
=
&
wopts
;
opts
.
will
->
message
=
"will message"
;
...
...
@@ -1572,24 +1564,24 @@ int test5(struct Options options)
failures
++
;
goto
exit
;
}
/* wait for will message */
while
(
!
test5_will_message_received
&&
++
count
<
10000
)
MySleep
(
100
);
MyLog
(
LOGA_DEBUG
,
"Now we can send some messages to be buffered"
);
test5c_connected
=
0
;
/* send some messages. Then reconnect (check connected callback), and check that those messages are received */
for
(
i
=
0
;
i
<
5
;
++
i
)
{
char
buf
[
50
];
MQTTAsync_message
pubmsg
=
MQTTAsync_message_initializer
;
MQTTAsync_responseOptions
opts
=
MQTTAsync_responseOptions_initializer
;
sprintf
(
buf
,
"QoS %d message"
,
i
);
pubmsg
.
payload
=
buf
;
pubmsg
.
payloadlen
=
strlen
(
pubmsg
.
payload
)
+
1
;
pubmsg
.
payloadlen
=
(
int
)(
strlen
(
pubmsg
.
payload
)
+
1
)
;
pubmsg
.
qos
=
i
%
3
;
pubmsg
.
retained
=
0
;
rc
=
MQTTAsync_sendMessage
(
c
,
test_topic
,
&
pubmsg
,
&
opts
);
...
...
@@ -1609,14 +1601,14 @@ int test5(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 3"
,
i
==
3
,
"i was %d "
,
i
);
rc
=
MQTTAsync_reconnect
(
c
);
assert
(
"Good rc from reconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
/* wait for client to be reconnected */
while
(
!
test5c_connected
&&
++
count
<
10000
)
MySleep
(
100
);
/* wait for success or failure callback */
while
(
test5_messages_received
<
3
&&
++
count
<
10000
)
MySleep
(
100
);
...
...
@@ -1631,10 +1623,10 @@ int test5(struct Options options)
MQTTAsync_free
(
tokens
);
}
assert
(
"Number of getPendingTokens should be 0"
,
i
==
0
,
"i was %d "
,
i
);
rc
=
MQTTAsync_disconnect
(
c
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
rc
=
MQTTAsync_disconnect
(
d
,
NULL
);
assert
(
"Good rc from disconnect"
,
rc
==
MQTTASYNC_SUCCESS
,
"rc was %d "
,
rc
);
...
...
@@ -1659,12 +1651,12 @@ int main(int argc, char** argv)
int
*
numtests
=
&
tests
;
int
rc
=
0
;
int
(
*
tests
[])()
=
{
NULL
,
test1
,
test2
,
test3
,
test4
,
test5
};
sprintf
(
unique
,
"%u"
,
rand
());
MyLog
(
LOGA_INFO
,
"Random prefix/suffix is %s"
,
unique
);
xml
=
fopen
(
"TEST-test9.xml"
,
"w"
);
fprintf
(
xml
,
"<testsuite name=
\"
test9
\"
tests=
\"
%
lu
\"
>
\n
"
,
ARRAY_SIZE
(
tests
)
-
1
);
fprintf
(
xml
,
"<testsuite name=
\"
test9
\"
tests=
\"
%
d
\"
>
\n
"
,
(
int
)(
ARRAY_SIZE
(
tests
)
-
1
)
);
MQTTAsync_setTraceCallback
(
handleTrace
);
getopts
(
argc
,
argv
);
...
...
@@ -1695,4 +1687,3 @@ int main(int argc, char** argv)
return
rc
;
}
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