Repository: nifi-minifi-cpp Updated Branches: refs/heads/master 22657c48a -> feec4ea77
MINIFI-329: Ensure boolean value is checked before creating a secure socket This closes #108. Signed-off-by: Aldrin Piri <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/repo Commit: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/commit/feec4ea7 Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/feec4ea7 Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/feec4ea7 Branch: refs/heads/master Commit: feec4ea775a040b53314beef67a1b8374d0e3d84 Parents: 22657c4 Author: Marc Parisi <[email protected]> Authored: Wed May 31 09:20:49 2017 -0400 Committer: Aldrin Piri <[email protected]> Committed: Tue Jun 6 09:01:01 2017 -0400 ---------------------------------------------------------------------- libminifi/src/io/StreamFactory.cpp | 4 +- libminifi/test/unit/SocketTests.cpp | 73 ++++++++++++++------------------ 2 files changed, 33 insertions(+), 44 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/feec4ea7/libminifi/src/io/StreamFactory.cpp ---------------------------------------------------------------------- diff --git a/libminifi/src/io/StreamFactory.cpp b/libminifi/src/io/StreamFactory.cpp index 220883c..7990edd 100644 --- a/libminifi/src/io/StreamFactory.cpp +++ b/libminifi/src/io/StreamFactory.cpp @@ -31,7 +31,6 @@ namespace nifi { namespace minifi { namespace io { - /** * Purpose: Socket Creator is a class that will determine if the provided socket type * exists per the compilation parameters @@ -82,8 +81,7 @@ class SocketCreator : public AbstractStreamFactory { StreamFactory::StreamFactory(const std::shared_ptr<Configure> &configure) { std::string secureStr; bool is_secure = false; - if (configure->get(Configure::nifi_remote_input_secure, secureStr)) { - org::apache::nifi::minifi::utils::StringUtils::StringToBool(secureStr, is_secure); + if (configure->get(Configure::nifi_remote_input_secure, secureStr) && org::apache::nifi::minifi::utils::StringUtils::StringToBool(secureStr, is_secure)) { delegate_ = std::make_shared<SocketCreator<TLSSocket, TLSContext>>(configure); } else { delegate_ = std::make_shared<SocketCreator<Socket, SocketContext>>(configure); http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/feec4ea7/libminifi/test/unit/SocketTests.cpp ---------------------------------------------------------------------- diff --git a/libminifi/test/unit/SocketTests.cpp b/libminifi/test/unit/SocketTests.cpp index 059e3c0..a791b3f 100644 --- a/libminifi/test/unit/SocketTests.cpp +++ b/libminifi/test/unit/SocketTests.cpp @@ -21,28 +21,24 @@ #include <random> #include <chrono> #include <vector> +#include <string> #include <memory> #include <utility> #include "../TestBase.h" +#include "io/StreamFactory.h" #include "io/ClientSocket.h" #include "io/tls/TLSSocket.h" #include "utils/ThreadPool.h" TEST_CASE("TestSocket", "[TestSocket1]") { - org::apache::nifi::minifi::io::Socket socket( - std::make_shared<org::apache::nifi::minifi::io::SocketContext>( - std::make_shared<minifi::Configure>()), - "localhost", 8183); + org::apache::nifi::minifi::io::Socket socket(std::make_shared<org::apache::nifi::minifi::io::SocketContext>(std::make_shared<minifi::Configure>()), "localhost", 8183); REQUIRE(-1 == socket.initialize()); REQUIRE("localhost" == socket.getHostname()); socket.closeStream(); } TEST_CASE("TestSocketWriteTest1", "[TestSocket2]") { - org::apache::nifi::minifi::io::Socket socket( - std::make_shared<org::apache::nifi::minifi::io::SocketContext>( - std::make_shared<minifi::Configure>()), - "localhost", 8183); + org::apache::nifi::minifi::io::Socket socket(std::make_shared<org::apache::nifi::minifi::io::SocketContext>(std::make_shared<minifi::Configure>()), "localhost", 8183); REQUIRE(-1 == socket.initialize()); socket.writeData(0, 0); @@ -58,17 +54,13 @@ TEST_CASE("TestSocketWriteTest1", "[TestSocket2]") { TEST_CASE("TestSocketWriteTest2", "[TestSocket3]") { std::vector<uint8_t> buffer; buffer.push_back('a'); - std::shared_ptr<org::apache::nifi::minifi::io::SocketContext> socket_context = - std::make_shared<org::apache::nifi::minifi::io::SocketContext>( - std::make_shared<minifi::Configure>()); + std::shared_ptr<org::apache::nifi::minifi::io::SocketContext> socket_context = std::make_shared<org::apache::nifi::minifi::io::SocketContext>(std::make_shared<minifi::Configure>()); - org::apache::nifi::minifi::io::Socket server(socket_context, "localhost", - 9183, 1); + org::apache::nifi::minifi::io::Socket server(socket_context, "localhost", 9183, 1); REQUIRE(-1 != server.initialize()); - org::apache::nifi::minifi::io::Socket client(socket_context, "localhost", - 9183); + org::apache::nifi::minifi::io::Socket client(socket_context, "localhost", 9183); REQUIRE(-1 != client.initialize()); @@ -93,17 +85,13 @@ TEST_CASE("TestGetHostName", "[TestSocket4]") { TEST_CASE("TestWriteEndian64", "[TestSocket4]") { std::vector<uint8_t> buffer; buffer.push_back('a'); - std::shared_ptr<org::apache::nifi::minifi::io::SocketContext> socket_context = - std::make_shared<org::apache::nifi::minifi::io::SocketContext>( - std::make_shared<minifi::Configure>()); + std::shared_ptr<org::apache::nifi::minifi::io::SocketContext> socket_context = std::make_shared<org::apache::nifi::minifi::io::SocketContext>(std::make_shared<minifi::Configure>()); - org::apache::nifi::minifi::io::Socket server(socket_context, "localhost", - 9183, 1); + org::apache::nifi::minifi::io::Socket server(socket_context, "localhost", 9183, 1); REQUIRE(-1 != server.initialize()); - org::apache::nifi::minifi::io::Socket client(socket_context, "localhost", - 9183); + org::apache::nifi::minifi::io::Socket client(socket_context, "localhost", 9183); REQUIRE(-1 != client.initialize()); @@ -124,16 +112,12 @@ TEST_CASE("TestWriteEndian32", "[TestSocket5]") { std::vector<uint8_t> buffer; buffer.push_back('a'); - std::shared_ptr<org::apache::nifi::minifi::io::SocketContext> socket_context = - std::make_shared<org::apache::nifi::minifi::io::SocketContext>( - std::make_shared<minifi::Configure>()); + std::shared_ptr<org::apache::nifi::minifi::io::SocketContext> socket_context = std::make_shared<org::apache::nifi::minifi::io::SocketContext>(std::make_shared<minifi::Configure>()); - org::apache::nifi::minifi::io::Socket server(socket_context, "localhost", - 9183, 1); + org::apache::nifi::minifi::io::Socket server(socket_context, "localhost", 9183, 1); REQUIRE(-1 != server.initialize()); - org::apache::nifi::minifi::io::Socket client(socket_context, "localhost", - 9183); + org::apache::nifi::minifi::io::Socket client(socket_context, "localhost", 9183); REQUIRE(-1 != client.initialize()); { @@ -163,17 +147,13 @@ TEST_CASE("TestSocketWriteTestAfterClose", "[TestSocket6]") { std::vector<uint8_t> buffer; buffer.push_back('a'); - std::shared_ptr<org::apache::nifi::minifi::io::SocketContext> socket_context = - std::make_shared<org::apache::nifi::minifi::io::SocketContext>( - std::make_shared<minifi::Configure>()); + std::shared_ptr<org::apache::nifi::minifi::io::SocketContext> socket_context = std::make_shared<org::apache::nifi::minifi::io::SocketContext>(std::make_shared<minifi::Configure>()); - org::apache::nifi::minifi::io::Socket server(socket_context, "localhost", - 9183, 1); + org::apache::nifi::minifi::io::Socket server(socket_context, "localhost", 9183, 1); REQUIRE(-1 != server.initialize()); - org::apache::nifi::minifi::io::Socket client(socket_context, "localhost", - 9183); + org::apache::nifi::minifi::io::Socket client(socket_context, "localhost", 9183); REQUIRE(-1 != client.initialize()); @@ -197,16 +177,13 @@ std::atomic<uint8_t> counter; std::mt19937_64 seed { std::random_device { }() }; bool createSocket() { int mine = counter++; - std::shared_ptr<minifi::Configure> configuration = std::make_shared< - minifi::Configure>(); + std::shared_ptr<minifi::Configure> configuration = std::make_shared<minifi::Configure>(); std::uniform_int_distribution<> distribution { 10, 100 }; std::this_thread::sleep_for(std::chrono::milliseconds { distribution(seed) }); for (int i = 0; i < 50; i++) { - std::shared_ptr<org::apache::nifi::minifi::io::TLSContext> socketA = - std::make_shared<org::apache::nifi::minifi::io::TLSContext>( - configuration); + std::shared_ptr<org::apache::nifi::minifi::io::TLSContext> socketA = std::make_shared<org::apache::nifi::minifi::io::TLSContext>(configuration); socketA->initialize(); } @@ -236,3 +213,17 @@ TEST_CASE("TestTLSContextCreation", "[TestSocket6]") { REQUIRE(20 == counter.load()); } +/** + * MINIFI-329 was created in regards to an option existing but not + * being properly evaluated. + */ +TEST_CASE("TestTLSContextCreation2", "[TestSocket7]") { + std::shared_ptr<minifi::Configure> configure = std::make_shared<minifi::Configure>(); + configure->set("nifi.remote.input.secure", "false"); + minifi::io::StreamFactory factory(configure); + std::string host = "localhost"; + minifi::io::Socket *socket = factory.createSocket(host, 10001).release(); + minifi::io::TLSSocket *tls = dynamic_cast<minifi::io::TLSSocket*>(socket); + REQUIRE(tls == nullptr); +} +
