Skip to content

Commit 323893c

Browse files
committed
Added test for confirm the fix.
1 parent ebde69e commit 323893c

File tree

2 files changed

+118
-0
lines changed

2 files changed

+118
-0
lines changed

test/system/st_connect.cpp

+96
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
#include "combi_test.hpp"
99
#include "checker.hpp"
1010
#include "ordered_caller.hpp"
11+
#include "test_util.hpp"
1112
#include "../common/global_fixture.hpp"
1213

1314
BOOST_AUTO_TEST_SUITE(st_connect)
@@ -1229,6 +1230,101 @@ BOOST_AUTO_TEST_CASE( async_pingresp_timeout ) {
12291230
do_combi_test_async(test);
12301231
}
12311232

1233+
1234+
BOOST_AUTO_TEST_CASE( async_connect_session_present_empty_store ) {
1235+
auto test = [](boost::asio::io_context& ioc, auto& cs, auto finish, auto& b) {
1236+
auto& c = cs[0];
1237+
clear_ordered();
1238+
c->set_client_id("cid1");
1239+
1240+
checker chk = {
1241+
// connect
1242+
cont("h_connack1"),
1243+
// disconnect
1244+
cont("h_close1"),
1245+
// connect
1246+
cont("h_connack2"),
1247+
// disconnect
1248+
cont("h_close2"),
1249+
};
1250+
1251+
switch (c->get_protocol_version()) {
1252+
case MQTT_NS::protocol_version::v3_1_1:
1253+
c->set_connack_handler(
1254+
[&chk, &c]
1255+
(bool sp, MQTT_NS::connect_return_code connack_return_code) {
1256+
auto ret = MQTT_ORDERED(
1257+
[&] {
1258+
MQTT_CHK("h_connack1");
1259+
BOOST_TEST(sp == false);
1260+
BOOST_TEST(connack_return_code == MQTT_NS::connect_return_code::accepted);
1261+
c->async_disconnect();
1262+
},
1263+
[&] {
1264+
MQTT_CHK("h_connack2");
1265+
BOOST_TEST(sp == true);
1266+
BOOST_TEST(connack_return_code == MQTT_NS::connect_return_code::accepted);
1267+
c->async_disconnect();
1268+
}
1269+
);
1270+
BOOST_TEST(ret);
1271+
return true;
1272+
});
1273+
break;
1274+
case MQTT_NS::protocol_version::v5:
1275+
c->set_v5_connack_handler(
1276+
[&chk, &c]
1277+
(bool sp, MQTT_NS::v5::connect_reason_code connect_reason_code, MQTT_NS::v5::properties /*props*/) {
1278+
auto ret = MQTT_ORDERED(
1279+
[&] {
1280+
MQTT_CHK("h_connack1");
1281+
BOOST_TEST(sp == false);
1282+
BOOST_TEST(connect_reason_code == MQTT_NS::v5::connect_reason_code::success);
1283+
c->async_disconnect();
1284+
},
1285+
[&] {
1286+
MQTT_CHK("h_connack2");
1287+
BOOST_TEST(sp == true);
1288+
BOOST_TEST(connect_reason_code == MQTT_NS::v5::connect_reason_code::success);
1289+
c->async_disconnect();
1290+
}
1291+
);
1292+
BOOST_TEST(ret);
1293+
return true;
1294+
});
1295+
break;
1296+
default:
1297+
BOOST_CHECK(false);
1298+
break;
1299+
}
1300+
1301+
c->set_close_handler(
1302+
[&]
1303+
() {
1304+
auto ret = MQTT_ORDERED(
1305+
[&] {
1306+
MQTT_CHK("h_close1");
1307+
async_connect_no_clean(c);
1308+
},
1309+
[&] {
1310+
MQTT_CHK("h_close2");
1311+
finish();
1312+
}
1313+
);
1314+
BOOST_TEST(ret);
1315+
});
1316+
c->set_error_handler(
1317+
[&]
1318+
(MQTT_NS::error_code) {
1319+
BOOST_CHECK(false);
1320+
});
1321+
async_connect_no_clean(c);
1322+
ioc.run();
1323+
BOOST_TEST(chk.all());
1324+
};
1325+
do_combi_test_async(test);
1326+
}
1327+
12321328
BOOST_AUTO_TEST_CASE( connect_prop ) {
12331329
auto test = [](boost::asio::io_context& ioc, auto& cs, auto finish, auto& b) {
12341330
auto& c = cs[0];

test/system/test_util.hpp

+22
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,26 @@ inline void connect_no_clean(Client& c) {
3333
}
3434
}
3535

36+
template <typename Client>
37+
inline void async_connect_no_clean(Client& c) {
38+
c->set_clean_session(false);
39+
switch (c->get_protocol_version()) {
40+
case MQTT_NS::protocol_version::v3_1_1:
41+
c->async_connect();
42+
break;
43+
case MQTT_NS::protocol_version::v5:
44+
c->async_connect(
45+
MQTT_NS::v5::properties{
46+
MQTT_NS::v5::property::session_expiry_interval(
47+
MQTT_NS::session_never_expire
48+
)
49+
}
50+
);
51+
break;
52+
default:
53+
BOOST_CHECK(false);
54+
break;
55+
}
56+
}
57+
3658
#endif // MQTT_TEST_TEST_UTIL_HPP

0 commit comments

Comments
 (0)