You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nifi.apache.org by al...@apache.org on 2017/05/18 16:19:22 UTC

nifi-minifi-cpp git commit: MINIFI-304: Update testing strategy

Repository: nifi-minifi-cpp
Updated Branches:
  refs/heads/master c9940e945 -> 1498ec87a


MINIFI-304: Update testing strategy

MINIFI-306: Move Docs and Docker cmake code into a separate module.
this will clean-up the end of the file. We will continue to do cleanup
but this has a great impact to improve the readability of the root
cmake

MINIFI-305: Add header to iOS.cmake module

This closes #96.

Signed-off-by: Aldrin Piri <al...@apache.org>


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/1498ec87
Tree: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/tree/1498ec87
Diff: http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/diff/1498ec87

Branch: refs/heads/master
Commit: 1498ec87a67bc05632a3a99cf870828316fd6c01
Parents: c9940e9
Author: Marc Parisi <ph...@apache.org>
Authored: Mon May 8 19:13:00 2017 -0400
Committer: Aldrin Piri <al...@apache.org>
Committed: Thu May 18 12:18:27 2017 -0400

----------------------------------------------------------------------
 CMakeLists.txt                                 | 195 +---------
 cmake/BuildDocs.cmake                          |  42 ++
 cmake/BuildTests.cmake                         |  90 +++++
 cmake/DockerConfig.cmake                       |  28 ++
 cmake/iOS.cmake                                |  18 +
 libminifi/CMakeLists.txt                       |   2 +-
 libminifi/test/integration/ProcessorTests.cpp  | 411 --------------------
 libminifi/test/integration/SocketTests.cpp     | 185 ---------
 libminifi/test/resource/TestHTTPGet.yml        |  73 ++++
 libminifi/test/resource/TestHTTPPost.yml       |  87 +++++
 libminifi/test/unit/CRCTests.cpp               |   2 +
 libminifi/test/unit/ClassLoaderTests.cpp       |   5 +-
 libminifi/test/unit/ControllerServiceTests.cpp |   1 +
 libminifi/test/unit/InvokeHTTPTests.cpp        |   2 +
 libminifi/test/unit/LoggerTests.cpp            |   2 +-
 libminifi/test/unit/ProcessorTests.cpp         | 411 ++++++++++++++++++++
 libminifi/test/unit/PropertyTests.cpp          |   2 +-
 libminifi/test/unit/ProvenanceTests.cpp        |   1 +
 libminifi/test/unit/RepoTests.cpp              |   2 +-
 libminifi/test/unit/SerializationTests.cpp     |   2 +-
 libminifi/test/unit/Site2SiteTests.cpp         |   1 +
 libminifi/test/unit/SocketTests.cpp            | 185 +++++++++
 libminifi/test/unit/ThreadPoolTests.cpp        |   1 +
 libminifi/test/unit/TimeUtilsTest.cpp          |  21 -
 libminifi/test/unit/YamlCongifurationTests.cpp |   2 +-
 25 files changed, 958 insertions(+), 813 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/CMakeLists.txt b/CMakeLists.txt
index e441c44..bf349a6 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -25,6 +25,7 @@ set(PROJECT_VERSION_MINOR 3)
 set(PROJECT_VERSION_PATCH 0)
 option(test "Build all tests." ON)
 
+
 #### Establish Project Configuration ####
 # Enable usage of the VERSION specifier
 # https://cmake.org/cmake/help/v3.0/policy/CMP0048.html#policy:CMP0048
@@ -135,198 +136,16 @@ set(CPACK_PACKAGE_DESCRIPTION_FILE "${CMAKE_CURRENT_SOURCE_DIR}/README.md")
 set(CPACK_RESOURCE_FILE_LICENSE "${CMAKE_CURRENT_SOURCE_DIR}/LICENSE")
 set(CPACK_PACKAGE_FILE_NAME "${ASSEMBLY_BASE_NAME}")
 set(CPACK_BINARY_TGZ, "ON")
-
 set(CPACK_ARCHIVE_COMPONENT_INSTALL ON)
 set(CPACK_COMPONENTS_ALL bin)
 
-include(CPack)
-
-enable_testing(test)
-    file(GLOB LIBMINIFI_TEST_SOURCES "libminifi/test/unit/*.cpp")
-    add_executable(unit_tests ${LIBMINIFI_TEST_SOURCES} ${SPD_SOURCES})
-    target_include_directories(unit_tests PRIVATE BEFORE "thirdparty/catch")
-    target_include_directories(unit_tests PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
-    target_include_directories(unit_tests PRIVATE BEFORE "thirdparty/jsoncpp/include")
-    target_include_directories(unit_tests PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
-    target_include_directories(unit_tests PRIVATE BEFORE "include")
-    target_include_directories(unit_tests PRIVATE BEFORE "libminifi/include/")
-    target_include_directories(unit_tests PRIVATE BEFORE "libminifi/include/core")
-    target_include_directories(unit_tests PRIVATE BEFORE "libminifi/include/core/controller")
-    target_include_directories(unit_tests PRIVATE BEFORE "libminifi/include/core/repository")
-    target_include_directories(unit_tests PRIVATE BEFORE "libminifi/include/core/yaml")
-    target_include_directories(unit_tests PRIVATE BEFORE "libminifi/include/io")
-    target_include_directories(unit_tests PRIVATE BEFORE "libminifi/include/utils")
-    target_include_directories(unit_tests PRIVATE BEFORE "libminifi/include/processors")
-    target_include_directories(unit_tests PRIVATE BEFORE "libminifi/include/provenance")
-    target_link_libraries(unit_tests ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
-    if (CURL_FOUND)
-        target_include_directories(unit_tests PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
-                target_link_libraries(unit_tests ${CURL_LIBRARIES})
-        endif(CURL_FOUND)
-    add_test(NAME LibMinifiUnitTests COMMAND unit_tests)
-            
-    
-    file(GLOB LIBMINIFI_TEST_CS "libminifi/test/integration/ControllerServiceIntegrationTests.cpp")
-    add_executable(testControllerServices ${LIBMINIFI_TEST_CS} ${SPD_SOURCES})
-    target_include_directories(testControllerServices PRIVATE BEFORE "thirdparty/catch")
-    target_include_directories(testControllerServices PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
-    target_include_directories(testControllerServices PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
-    target_include_directories(testControllerServices PRIVATE BEFORE "include")
-    target_include_directories(testControllerServices PRIVATE BEFORE "libminifi/include/")
-    target_include_directories(testControllerServices PRIVATE BEFORE "libminifi/include/core")
-    target_include_directories(testControllerServices PRIVATE BEFORE "libminifi/include/core/controller")
-    target_include_directories(testControllerServices PRIVATE BEFORE "libminifi/include/core/repository")
-    target_include_directories(testControllerServices PRIVATE BEFORE "libminifi/include/io")
-    target_include_directories(testControllerServices PRIVATE BEFORE "libminifi/include/utils")
-    target_include_directories(testControllerServices PRIVATE BEFORE "libminifi/include/processors")
-    target_include_directories(testControllerServices PRIVATE BEFORE "libminifi/include/provenance")
-    target_link_libraries(testControllerServices ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
-    add_test(NAME TestControllerServices COMMAND testControllerServices "${CMAKE_SOURCE_DIR}/libminifi/test/resources/TestControllerServices.yml" "${CMAKE_SOURCE_DIR}/libminifi/test/resources/")
-    
-     
-    file(GLOB LIBMINIFI_TEST_CS "libminifi/test/integration/HttpGetIntegrationTest.cpp")
-    add_executable(testHttpGet ${LIBMINIFI_TEST_CS} ${SPD_SOURCES})
-    target_include_directories(testHttpGet PRIVATE BEFORE "thirdparty/catch")
-    target_include_directories(testHttpGet PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
-    target_include_directories(testHttpGet PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
-    target_include_directories(testHttpGet PRIVATE BEFORE "include")
-    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/")
-    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/core")
-    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/core/controller")
-    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/core/repository")
-    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/io")
-    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/utils")
-    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/processors")
-    target_include_directories(testHttpGet PRIVATE BEFORE "libminifi/include/provenance")
-    target_link_libraries(testHttpGet ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
-    if (CURL_FOUND)
-        target_include_directories(testHttpGet PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
-                target_link_libraries(testHttpGet ${CURL_LIBRARIES})
-        endif(CURL_FOUND)
-    add_test(NAME testHttpGet COMMAND testHttpGet "${CMAKE_SOURCE_DIR}/libminifi/test/resources/TestHTTPGet.yml"  "${CMAKE_SOURCE_DIR}/libminifi/test/resources/")
-    add_test(NAME testHttpGetSecure COMMAND testHttpGet "${CMAKE_SOURCE_DIR}/libminifi/test/resources/TestHTTPGetSecure.yml"  "${CMAKE_SOURCE_DIR}/libminifi/test/resources/")
-    
-    file(GLOB LIBMINIFI_TEST_CS "libminifi/test/integration/HttpPostIntegrationTest.cpp")
-    add_executable(testHttpPost ${LIBMINIFI_TEST_CS} ${SPD_SOURCES})
-    target_include_directories(testHttpPost PRIVATE BEFORE "thirdparty/catch")
-    target_include_directories(testHttpPost PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
-    target_include_directories(testHttpPost PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
-    target_include_directories(testHttpPost PRIVATE BEFORE "include")
-    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/")
-    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/core")
-    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/core/controller")
-    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/core/repository")
-    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/io")
-    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/utils")
-    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/processors")
-    target_include_directories(testHttpPost PRIVATE BEFORE "libminifi/include/provenance")
-    target_link_libraries(testHttpPost ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
-    if (CURL_FOUND)
-        target_include_directories(testHttpPost PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
-    	target_link_libraries(testHttpPost ${CURL_LIBRARIES})
-    endif(CURL_FOUND)
-    add_test(NAME testHttpPost COMMAND testHttpPost "${CMAKE_SOURCE_DIR}/libminifi/test/resources/TestHTTPPost.yml")
-    
-    
-    file(GLOB LIBMINIFI_TEST_EXECUTE_PROCESS "libminifi/test/integration/TestExecuteProcess.cpp")
-    add_executable(testExecuteProcess ${LIBMINIFI_TEST_EXECUTE_PROCESS} ${SPD_SOURCES})
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "include")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/core")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/core/controller")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/core/repository")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/core/yaml")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/io")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/utils")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/processors")
-    target_include_directories(testExecuteProcess PRIVATE BEFORE "libminifi/include/provenance")
-    if (CURL_FOUND)
-        target_include_directories(testExecuteProcess PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
-    	target_link_libraries(testExecuteProcess ${CURL_LIBRARIES})
-    endif(CURL_FOUND)
-    target_link_libraries(testExecuteProcess ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
-    add_test(NAME ExecuteProcess COMMAND testExecuteProcess)
-    
-    file(GLOB LIBMINIFI_TEST_SOCKETS "libminifi/test/integration/SocketTests.cpp")
-    add_executable(testSockets ${LIBMINIFI_TEST_SOCKETS} ${SPD_SOURCES})
-    target_include_directories(testSockets PRIVATE BEFORE "thirdparty/catch")
-    target_include_directories(testSockets PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
-    target_include_directories(testSockets PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
-    target_include_directories(testSockets PRIVATE BEFORE "include")
-    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/")
-    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/core")
-    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/core/repository")
-    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/io")
-    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/utils")
-    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/processors")
-    target_include_directories(testSockets PRIVATE BEFORE "libminifi/include/provenance")
-    if (CURL_FOUND)
-        target_include_directories(testSockets PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
-    	target_link_libraries(testSockets ${CURL_LIBRARIES})
-    endif(CURL_FOUND)
-    target_link_libraries(testSockets ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
-    add_test(NAME TestSockets COMMAND testSockets)
-    
-    file(GLOB LIBMINIFI_TEST_PROCESSORS "libminifi/test/integration/ProcessorTests.cpp")
-    add_executable(testProcessors ${LIBMINIFI_TEST_PROCESSORS} ${SPD_SOURCES})
-    target_include_directories(testProcessors PRIVATE BEFORE "thirdparty/catch")
-    target_include_directories(testProcessors PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
-    target_include_directories(testProcessors PRIVATE BEFORE "thirdparty/jsoncpp/include")
-    target_include_directories(testProcessors PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
-    target_include_directories(testProcessors PRIVATE BEFORE "include")
-    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/")
-    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/core")
-    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/core/repository")
-    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/io")
-    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/utils")
-    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/processors")
-    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/core/reporting")
-    target_include_directories(testProcessors PRIVATE BEFORE "libminifi/include/provenance")
-    if (CURL_FOUND)
-        target_include_directories(testProcessors PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
-    	target_link_libraries(testProcessors ${CURL_LIBRARIES})
-    endif(CURL_FOUND)
-    target_link_libraries(testProcessors ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
-    add_test(NAME TestProcessors COMMAND testProcessors)
-    
-
-
-# Create a custom build target called "docker" that will invoke DockerBuild.sh and create the NiFi-MiNiFi-CPP Docker image
-add_custom_target(
-    docker
-    COMMAND ${CMAKE_SOURCE_DIR}/docker/DockerBuild.sh 1000 1000 ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} minificppsource ${CMAKE_SOURCE_DIR}
-    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docker/)
-
-# Create a custom build target that will run the linter.
-add_custom_target(
-    linter
-    COMMAND ${CMAKE_SOURCE_DIR}/thirdparty/google-styleguide/run_linter.sh ${CMAKE_SOURCE_DIR}/libminifi/include/ ${CMAKE_SOURCE_DIR}/libminifi/src/ )
+### include modules
 
+include(CPack)
 
-FIND_PACKAGE(Doxygen)
-
-if(DOXYGEN_FOUND)
-if(EXISTS ${DOXYGEN_EXECUTABLE})
-
-MESSAGE("Creating API Documentation ${DOXYGEN_EXECUTABLE}")
-SET(DOXYGEN_INPUT "../docs/Doxyfile")
-SET(DOXYGEN_OUTPUT "../docs")
+include(BuildTests)
+       
+include(BuildDocs)
 
-ADD_CUSTOM_COMMAND(
-  OUTPUT ${DOXYGEN_OUTPUT}
-  COMMAND ${CMAKE_COMMAND} -E echo_append "Building LibMiNiFi API Documentation..."
-  COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_INPUT}
-  COMMAND ${CMAKE_COMMAND} -E echo "Done."
-  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
-  DEPENDS ${DOXYGEN_INPUT}
-  )
+include(DockerConfig)
 
-ADD_CUSTOM_TARGET(docs ${DOXYGEN_EXECUTABLE} ${DOXYGEN_INPUT})
-else()
-ADD_CUSTOM_TARGET(docs echo "Doxygen binary does not exist. Cannot create documentation... Please install Doxygen or verify correct installation.")
-endif()
-else()
-ADD_CUSTOM_TARGET(docs echo "Doxygen does not exist. Please install it. Cannot create documentation...")
-endif(DOXYGEN_FOUND)

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/cmake/BuildDocs.cmake
----------------------------------------------------------------------
diff --git a/cmake/BuildDocs.cmake b/cmake/BuildDocs.cmake
new file mode 100644
index 0000000..bb75604
--- /dev/null
+++ b/cmake/BuildDocs.cmake
@@ -0,0 +1,42 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+FIND_PACKAGE(Doxygen)
+
+if(DOXYGEN_FOUND)
+if(EXISTS ${DOXYGEN_EXECUTABLE})
+
+MESSAGE("-- Creating API Documentation using ${DOXYGEN_EXECUTABLE}")
+SET(DOXYGEN_INPUT "../docs/Doxyfile")
+SET(DOXYGEN_OUTPUT "../docs")
+
+ADD_CUSTOM_COMMAND(
+  OUTPUT ${DOXYGEN_OUTPUT}
+  COMMAND ${CMAKE_COMMAND} -E echo_append "Building LibMiNiFi API Documentation..."
+  COMMAND ${DOXYGEN_EXECUTABLE} ${DOXYGEN_INPUT}
+  COMMAND ${CMAKE_COMMAND} -E echo "Done."
+  WORKING_DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}
+  DEPENDS ${DOXYGEN_INPUT}
+  )
+
+ADD_CUSTOM_TARGET(docs ${DOXYGEN_EXECUTABLE} ${DOXYGEN_INPUT})
+else()
+ADD_CUSTOM_TARGET(docs echo "Doxygen binary does not exist. Cannot create documentation... Please install Doxygen or verify correct installation.")
+endif()
+else()
+ADD_CUSTOM_TARGET(docs echo "Doxygen does not exist. Please install it. Cannot create documentation...")
+endif(DOXYGEN_FOUND)
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/cmake/BuildTests.cmake
----------------------------------------------------------------------
diff --git a/cmake/BuildTests.cmake b/cmake/BuildTests.cmake
new file mode 100644
index 0000000..84cbf58
--- /dev/null
+++ b/cmake/BuildTests.cmake
@@ -0,0 +1,90 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
+### test functions
+MACRO(GETSOURCEFILES result curdir)
+  FILE(GLOB children RELATIVE ${curdir} ${curdir}/*)
+  SET(dirlist "")
+  FOREACH(child ${children})
+    IF( "${curdir}/${child}" MATCHES .*\\.cpp)
+  
+      LIST(APPEND dirlist ${child})
+    ENDIF()
+  ENDFOREACH()
+  SET(${result} ${dirlist})
+ENDMACRO()
+
+function(createTests testName)
+  message ("File name is ${testName}")
+    target_include_directories(${testName} PRIVATE BEFORE ${UUID_INCLUDE_DIRS})
+    target_include_directories(${testName} PRIVATE BEFORE "thirdparty/catch")
+    target_include_directories(${testName} PRIVATE BEFORE "thirdparty/yaml-cpp-yaml-cpp-0.5.3/include")
+    target_include_directories(${testName} PRIVATE BEFORE "thirdparty/jsoncpp/include")
+    target_include_directories(${testName} PRIVATE BEFORE ${LEVELDB_INCLUDE_DIRS})
+    target_include_directories(${testName} PRIVATE BEFORE "include")
+    target_include_directories(${testName} PRIVATE BEFORE "libminifi/include/")
+    target_include_directories(${testName} PRIVATE BEFORE "libminifi/include/core")
+    target_include_directories(${testName} PRIVATE BEFORE "libminifi/include/core/controller")
+    target_include_directories(${testName} PRIVATE BEFORE "libminifi/include/core/repository")
+    target_include_directories(${testName} PRIVATE BEFORE "libminifi/include/core/yaml")
+    target_include_directories(${testName} PRIVATE BEFORE "libminifi/include/io")
+    target_include_directories(${testName} PRIVATE BEFORE "libminifi/include/utils")
+    target_include_directories(${testName} PRIVATE BEFORE "libminifi/include/processors")
+    target_include_directories(${testName} PRIVATE BEFORE "libminifi/include/provenance")
+    target_link_libraries(${testName} ${CMAKE_THREAD_LIBS_INIT} ${UUID_LIBRARIES} ${LEVELDB_LIBRARIES} ${OPENSSL_LIBRARIES} minifi yaml-cpp c-library civetweb-cpp ${JSON_CPP_LIB})
+     if (CURL_FOUND)
+        target_include_directories(${testName} PRIVATE BEFORE ${CURL_INCLUDE_DIRS})
+                target_link_libraries(${testName} ${CURL_LIBRARIES})
+        endif(CURL_FOUND)
+endfunction()
+
+
+enable_testing(test)
+
+GETSOURCEFILES(UNIT_TESTS "${CMAKE_SOURCE_DIR}/libminifi/test/unit/")
+GETSOURCEFILES(INTEGRATION_TESTS "${CMAKE_SOURCE_DIR}/libminifi/test/integration/")
+
+SET(UNIT_TEST_COUNT 0)
+FOREACH(testfile ${UNIT_TESTS})
+	get_filename_component(testfilename "${testfile}" NAME_WE)
+	add_executable("${testfilename}" "${CMAKE_SOURCE_DIR}/libminifi/test/unit/${testfile}" ${SPD_SOURCES})
+	createTests("${testfilename}")
+ 	MATH(EXPR UNIT_TEST_COUNT "${UNIT_TEST_COUNT}+1")
+	add_test(NAME "${testfilename}" COMMAND "${testfilename}")
+ENDFOREACH()
+message("-- Finished building ${UNIT_TEST_COUNT} unit test file(s)...")
+
+SET(INT_TEST_COUNT 0)
+FOREACH(testfile ${INTEGRATION_TESTS})
+	get_filename_component(testfilename "${testfile}" NAME_WE)
+	add_executable("${testfilename}" "${CMAKE_SOURCE_DIR}/libminifi/test/integration/${testfile}" ${SPD_SOURCES})
+	createTests("${testfilename}")
+	#message("Adding ${testfilename} from ${testfile}")
+	MATH(EXPR INT_TEST_COUNT "${INT_TEST_COUNT}+1")
+ENDFOREACH()
+message("-- Finished building ${INT_TEST_COUNT} integration test file(s)...")
+
+add_test(NAME ControllerServiceIntegrationTests COMMAND ControllerServiceIntegrationTests "${CMAKE_SOURCE_DIR}/libminifi/test/resources/TestControllerServices.yml" "${CMAKE_SOURCE_DIR}/libminifi/test/resources/") 
+
+add_test(NAME HttpGetIntegrationTest COMMAND HttpGetIntegrationTest "${CMAKE_SOURCE_DIR}/libminifi/test/resources/TestHTTPGet.yml"  "${CMAKE_SOURCE_DIR}/libminifi/test/resources/")
+
+add_test(NAME HttpGetIntegrationTestSecure COMMAND HttpGetIntegrationTest "${CMAKE_SOURCE_DIR}/libminifi/test/resources/TestHTTPGetSecure.yml"  "${CMAKE_SOURCE_DIR}/libminifi/test/resources/")
+
+add_test(NAME HttpPostIntegrationTest COMMAND HttpPostIntegrationTest "${CMAKE_SOURCE_DIR}/libminifi/test/resources/TestHTTPPost.yml" )
+
+add_test(NAME TestExecuteProcess COMMAND TestExecuteProcess )

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/cmake/DockerConfig.cmake
----------------------------------------------------------------------
diff --git a/cmake/DockerConfig.cmake b/cmake/DockerConfig.cmake
new file mode 100644
index 0000000..78a1140
--- /dev/null
+++ b/cmake/DockerConfig.cmake
@@ -0,0 +1,28 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+# Create a custom build target called "docker" that will invoke DockerBuild.sh and create the NiFi-MiNiFi-CPP Docker image
+add_custom_target(
+    docker
+    COMMAND ${CMAKE_SOURCE_DIR}/docker/DockerBuild.sh 1000 1000 ${PROJECT_VERSION_MAJOR}.${PROJECT_VERSION_MINOR}.${PROJECT_VERSION_PATCH} minificppsource ${CMAKE_SOURCE_DIR}
+    WORKING_DIRECTORY ${CMAKE_SOURCE_DIR}/docker/)
+
+# Create a custom build target that will run the linter.
+add_custom_target(
+    linter
+    COMMAND ${CMAKE_SOURCE_DIR}/thirdparty/google-styleguide/run_linter.sh ${CMAKE_SOURCE_DIR}/libminifi/include/ ${CMAKE_SOURCE_DIR}/libminifi/src/ )
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/cmake/iOS.cmake
----------------------------------------------------------------------
diff --git a/cmake/iOS.cmake b/cmake/iOS.cmake
index 57b82f9..b390a97 100644
--- a/cmake/iOS.cmake
+++ b/cmake/iOS.cmake
@@ -1,3 +1,21 @@
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+
+
 # This file is based off of the Platform/Darwin.cmake and Platform/UnixPaths.cmake
 # files which are included with CMake 2.8.4
 # It has been altered for iOS development

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/CMakeLists.txt
----------------------------------------------------------------------
diff --git a/libminifi/CMakeLists.txt b/libminifi/CMakeLists.txt
index 7e260d3..a0ec75f 100644
--- a/libminifi/CMakeLists.txt
+++ b/libminifi/CMakeLists.txt
@@ -71,7 +71,7 @@ add_library(spdlog STATIC ${SPD_SOURCES})
 add_library(minifi STATIC ${SOURCES})
 
 add_dependencies(minifi jsoncpp_project)
-target_link_libraries(minifi ${JSONCPP_LIB})
+target_link_libraries(minifi ${UUID_LIBRARIES} ${JSONCPP_LIB})
 
 find_package(ZLIB REQUIRED)
 include_directories(${ZLIB_INCLUDE_DIRS})

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/integration/ProcessorTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/integration/ProcessorTests.cpp b/libminifi/test/integration/ProcessorTests.cpp
deleted file mode 100644
index 1c447a8..0000000
--- a/libminifi/test/integration/ProcessorTests.cpp
+++ /dev/null
@@ -1,411 +0,0 @@
-
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
-#include <uuid/uuid.h>
-#include <fstream>
-#include "../unit/ProvenanceTestHelper.h"
-#include "../TestBase.h"
-#include "core/logging/LogAppenders.h"
-#include "core/logging/BaseLogger.h"
-#include "processors/ListenHTTP.h"
-#include "processors/LogAttribute.h"
-#include "processors/GetFile.h"
-#include "core/Core.h"
-#include "core/FlowFile.h"
-#include "core/Processor.h"
-#include "core/ProcessContext.h"
-#include "core/ProcessSession.h"
-#include "core/ProcessorNode.h"
-#include "core/reporting/SiteToSiteProvenanceReportingTask.h"
-
-
-
-TEST_CASE("Test Creation of GetFile", "[getfileCreate]") {
-  std::shared_ptr<core::Processor> processor = std::make_shared<
-        org::apache::nifi::minifi::processors::GetFile>("processorname");
-  REQUIRE(processor->getName() == "processorname");
-}
-
-TEST_CASE("Test Find file", "[getfileCreate2]") {
-
-  TestController testController;
-
-  testController.enableDebug();
-
-  std::shared_ptr<core::Processor> processor = std::make_shared<
-      org::apache::nifi::minifi::processors::GetFile>("getfileCreate2");
-
-  std::shared_ptr<core::Processor> processorReport =
-      std::make_shared<
-          org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask>(std::make_shared<org::apache::nifi::minifi::io::StreamFactory>(std::make_shared<org::apache::nifi::minifi::Configure>()));
-
-  std::shared_ptr<core::Repository> test_repo =
-      std::make_shared<TestRepository>();
-
-  std::shared_ptr<TestRepository> repo =
-      std::static_pointer_cast<TestRepository>(test_repo);
-
-  char format[] = "/tmp/gt.XXXXXX";
-  char *dir = testController.createTempDirectory(format);
-
-  uuid_t processoruuid;
-  REQUIRE(true == processor->getUUID(processoruuid));
-
-  std::shared_ptr<minifi::Connection> connection = std::make_shared<
-      minifi::Connection>(test_repo, "getfileCreate2Connection");
-  connection->setRelationship(core::Relationship("success", "description"));
-
-  // link the connections so that we can test results at the end for this
-  connection->setSource(processor);
-  connection->setDestination(processor);
-
-  connection->setSourceUUID(processoruuid);
-  connection->setDestinationUUID(processoruuid);
-
-  processor->addConnection(connection);
-  REQUIRE(dir != NULL);
-
-  core::ProcessorNode node(processor);
-  std::shared_ptr<core::controller::ControllerServiceProvider> controller_services_provider =
-      nullptr;
-  core::ProcessContext context(node, controller_services_provider, test_repo);
-  core::ProcessSessionFactory factory(&context);
-  context.setProperty(org::apache::nifi::minifi::processors::GetFile::Directory,
-                      dir);
-  core::ProcessSession session(&context);
-
-  processor->onSchedule(&context, &factory);
-  REQUIRE(processor->getName() == "getfileCreate2");
-
-  std::shared_ptr<core::FlowFile> record;
-  processor->setScheduledState(core::ScheduledState::RUNNING);
-  processor->onTrigger(&context, &session);
-
-  provenance::ProvenanceReporter *reporter = session.getProvenanceReporter();
-  std::set<provenance::ProvenanceEventRecord*> records = reporter->getEvents();
-  record = session.get();
-  REQUIRE(record == nullptr);
-  REQUIRE(records.size() == 0);
-
-  std::fstream file;
-  std::stringstream ss;
-  ss << dir << "/" << "tstFile.ext";
-  file.open(ss.str(), std::ios::out);
-  file << "tempFile";
-  file.close();
-
-  processor->incrementActiveTasks();
-  processor->setScheduledState(core::ScheduledState::RUNNING);
-  processor->onTrigger(&context, &session);
-  unlink(ss.str().c_str());
-  reporter = session.getProvenanceReporter();
-
-  REQUIRE(processor->getName() == "getfileCreate2");
-
-  records = reporter->getEvents();
-
-  for (provenance::ProvenanceEventRecord *provEventRecord : records) {
-    REQUIRE(provEventRecord->getComponentType() == processor->getName());
-  }
-  session.commit();
-  std::shared_ptr<core::FlowFile> ffr = session.get();
-
-  ffr->getResourceClaim()->decreaseFlowFileRecordOwnedCount();
-  REQUIRE(2 == repo->getRepoMap().size());
-
-  for (auto entry : repo->getRepoMap()) {
-    provenance::ProvenanceEventRecord newRecord;
-    newRecord.DeSerialize((uint8_t*) entry.second.data(),
-                          entry.second.length());
-
-    bool found = false;
-    for (auto provRec : records) {
-      if (provRec->getEventId() == newRecord.getEventId()) {
-        REQUIRE(provRec->getEventId() == newRecord.getEventId());
-        REQUIRE(provRec->getComponentId() == newRecord.getComponentId());
-        REQUIRE(provRec->getComponentType() == newRecord.getComponentType());
-        REQUIRE(provRec->getDetails() == newRecord.getDetails());
-        REQUIRE(provRec->getEventDuration() == newRecord.getEventDuration());
-        found = true;
-        break;
-      }
-    }
-    if (!found)
-      throw std::runtime_error("Did not find record");
-
-  }
-
-  core::ProcessorNode nodeReport(processorReport);
-  core::ProcessContext contextReport(nodeReport,controller_services_provider, test_repo);
-  core::ProcessSessionFactory factoryReport(&contextReport);
-  core::ProcessSession sessionReport(&contextReport);
-  processorReport->onSchedule(&contextReport, &factoryReport);
-  std::shared_ptr<
-      org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask> taskReport =
-      std::static_pointer_cast<
-          org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask>(
-          processorReport);
-  taskReport->setBatchSize(1);
-  std::vector<std::shared_ptr<provenance::ProvenanceEventRecord>> recordsReport;
-  processorReport->incrementActiveTasks();
-  processorReport->setScheduledState(core::ScheduledState::RUNNING);
-  std::string jsonStr;
-  repo->getProvenanceRecord(recordsReport, 1);
-  taskReport->getJsonReport(&contextReport, &sessionReport, recordsReport,
-                            jsonStr);
-  REQUIRE(recordsReport.size() == 1);
-  REQUIRE(
-      taskReport->getName()
-          == std::string(
-              org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask::ReportTaskName));
-  REQUIRE(
-      jsonStr.find("\"componentType\" : \"getfileCreate2\"")
-          != std::string::npos);
-}
-
-TEST_CASE("Test GetFileLikeIt'sThreaded", "[getfileCreate3]") {
-
-  TestController testController;
-
-  testController.enableDebug();
-
-  std::shared_ptr<core::Processor> processor = std::make_shared<
-      org::apache::nifi::minifi::processors::GetFile>("getfileCreate2");
-
-  std::shared_ptr<core::Repository> test_repo =
-      std::make_shared<TestRepository>();
-
-  std::shared_ptr<TestRepository> repo =
-      std::static_pointer_cast<TestRepository>(test_repo);
-
-  char format[] = "/tmp/gt.XXXXXX";
-  char *dir = testController.createTempDirectory(format);
-
-  uuid_t processoruuid;
-  REQUIRE(true == processor->getUUID(processoruuid));
-
-  std::shared_ptr<minifi::Connection> connection = std::make_shared<
-      minifi::Connection>(test_repo, "getfileCreate2Connection");
-  connection->setRelationship(core::Relationship("success", "description"));
-
-  // link the connections so that we can test results at the end for this
-  connection->setSource(processor);
-  connection->setDestination(processor);
-
-  connection->setSourceUUID(processoruuid);
-  connection->setDestinationUUID(processoruuid);
-
-  processor->addConnection(connection);
-  REQUIRE(dir != NULL);
-
-  core::ProcessorNode node(processor);
-  std::shared_ptr<core::controller::ControllerServiceProvider> controller_services_provider =
-      nullptr;
-  core::ProcessContext context(node, controller_services_provider, test_repo);
-  core::ProcessSessionFactory factory(&context);
-  context.setProperty(org::apache::nifi::minifi::processors::GetFile::Directory,
-                      dir);
-  // replicate 10 threads
-  processor->setScheduledState(core::ScheduledState::RUNNING);
-  processor->onSchedule(&context, &factory);
-
-  int prev = 0;
-  for (int i = 0; i < 10; i++) {
-
-    core::ProcessSession session(&context);
-    REQUIRE(processor->getName() == "getfileCreate2");
-
-    std::shared_ptr<core::FlowFile> record;
-
-    processor->onTrigger(&context, &session);
-
-    provenance::ProvenanceReporter *reporter = session.getProvenanceReporter();
-    std::set<provenance::ProvenanceEventRecord*> records =
-        reporter->getEvents();
-    record = session.get();
-    REQUIRE(record == nullptr);
-    REQUIRE(records.size() == 0);
-
-    std::fstream file;
-    std::stringstream ss;
-    ss << dir << "/" << "tstFile.ext";
-    file.open(ss.str(), std::ios::out);
-    file << "tempFile";
-    file.close();
-
-    processor->incrementActiveTasks();
-    processor->setScheduledState(core::ScheduledState::RUNNING);
-    processor->onTrigger(&context, &session);
-    unlink(ss.str().c_str());
-    reporter = session.getProvenanceReporter();
-
-    REQUIRE(processor->getName() == "getfileCreate2");
-
-    records = reporter->getEvents();
-
-    for (provenance::ProvenanceEventRecord *provEventRecord : records) {
-      REQUIRE(provEventRecord->getComponentType() == processor->getName());
-    }
-    session.commit();
-    std::shared_ptr<core::FlowFile> ffr = session.get();
-
-    REQUIRE((repo->getRepoMap().size() % 2) == 0);
-    REQUIRE(repo->getRepoMap().size() == (prev + 2));
-    prev += 2;
-
-  }
-
-}
-
-TEST_CASE("LogAttributeTest", "[getfileCreate3]") {
-  std::ostringstream oss;
-  std::unique_ptr<logging::BaseLogger> outputLogger = std::unique_ptr<
-      logging::BaseLogger>(
-      new org::apache::nifi::minifi::core::logging::OutputStreamAppender(oss,
-                                                                         0));
-  std::shared_ptr<logging::Logger> logger = logging::Logger::getLogger();
-  logger->updateLogger(std::move(outputLogger));
-
-  TestController testController;
-
-  testController.enableDebug();
-
-  std::shared_ptr<core::Repository> repo = std::make_shared<TestRepository>();
-
-  std::shared_ptr<core::Processor> processor = std::make_shared<
-      org::apache::nifi::minifi::processors::GetFile>("getfileCreate2");
-
-  std::shared_ptr<core::Processor> logAttribute = std::make_shared<
-      org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
-
-  char format[] = "/tmp/gt.XXXXXX";
-  char *dir = testController.createTempDirectory(format);
-
-  uuid_t processoruuid;
-  REQUIRE(true == processor->getUUID(processoruuid));
-
-  uuid_t logattribute_uuid;
-  REQUIRE(true == logAttribute->getUUID(logattribute_uuid));
-
-  std::shared_ptr<minifi::Connection> connection = std::make_shared<
-      minifi::Connection>(repo, "getfileCreate2Connection");
-  connection->setRelationship(core::Relationship("success", "description"));
-
-  std::shared_ptr<minifi::Connection> connection2 = std::make_shared<
-      minifi::Connection>(repo, "logattribute");
-  connection2->setRelationship(core::Relationship("success", "description"));
-
-  // link the connections so that we can test results at the end for this
-  connection->setSource(processor);
-
-  // link the connections so that we can test results at the end for this
-  connection->setDestination(logAttribute);
-
-  connection2->setSource(logAttribute);
-
-  connection2->setSourceUUID(logattribute_uuid);
-  connection->setSourceUUID(processoruuid);
-  connection->setDestinationUUID(logattribute_uuid);
-
-  processor->addConnection(connection);
-  logAttribute->addConnection(connection);
-  logAttribute->addConnection(connection2);
-  REQUIRE(dir != NULL);
-
-  core::ProcessorNode node(processor);
-  core::ProcessorNode node2(logAttribute);
-  std::shared_ptr<core::controller::ControllerServiceProvider> controller_services_provider =
-      nullptr;
-  core::ProcessContext context(node, controller_services_provider, repo);
-  core::ProcessContext context2(node2, controller_services_provider, repo);
-  context.setProperty(org::apache::nifi::minifi::processors::GetFile::Directory,
-                      dir);
-  core::ProcessSession session(&context);
-  core::ProcessSession session2(&context2);
-
-  REQUIRE(processor->getName() == "getfileCreate2");
-
-  std::shared_ptr<core::FlowFile> record;
-  processor->setScheduledState(core::ScheduledState::RUNNING);
-
-  core::ProcessSessionFactory factory(&context);
-  processor->onSchedule(&context, &factory);
-  processor->onTrigger(&context, &session);
-
-  logAttribute->incrementActiveTasks();
-  logAttribute->setScheduledState(core::ScheduledState::RUNNING);
-  core::ProcessSessionFactory factory2(&context2);
-  logAttribute->onSchedule(&context2, &factory2);
-  logAttribute->onTrigger(&context2, &session2);
-
-  provenance::ProvenanceReporter *reporter = session.getProvenanceReporter();
-  std::set<provenance::ProvenanceEventRecord*> records = reporter->getEvents();
-  record = session.get();
-  REQUIRE(record == nullptr);
-  REQUIRE(records.size() == 0);
-
-  std::fstream file;
-  std::stringstream ss;
-  ss << dir << "/" << "tstFile.ext";
-  file.open(ss.str(), std::ios::out);
-  file << "tempFile";
-  file.close();
-
-  processor->incrementActiveTasks();
-  processor->setScheduledState(core::ScheduledState::RUNNING);
-  processor->onTrigger(&context, &session);
-  unlink(ss.str().c_str());
-  reporter = session.getProvenanceReporter();
-
-  records = reporter->getEvents();
-  session.commit();
-  oss.str("");
-  oss.clear();
-
-  logAttribute->incrementActiveTasks();
-  logAttribute->setScheduledState(core::ScheduledState::RUNNING);
-  logAttribute->onTrigger(&context2, &session2);
-
-  //session2.commit();
-  records = reporter->getEvents();
-
-  std::string log_attribute_output = oss.str();
-  REQUIRE(
-      log_attribute_output.find("key:absolute.path value:" + ss.str())
-          != std::string::npos);
-  REQUIRE(log_attribute_output.find("Size:8 Offset:0") != std::string::npos);
-  REQUIRE(
-      log_attribute_output.find("key:path value:" + std::string(dir))
-          != std::string::npos);
-
-  outputLogger = std::unique_ptr<logging::BaseLogger>(
-      new org::apache::nifi::minifi::core::logging::NullAppender());
-  logger->updateLogger(std::move(outputLogger));
-
-}
-
-int fileSize(const char *add) {
-  std::ifstream mySource;
-  mySource.open(add, std::ios_base::binary);
-  mySource.seekg(0, std::ios_base::end);
-  int size = mySource.tellg();
-  mySource.close();
-  return size;
-}
-

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/integration/SocketTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/integration/SocketTests.cpp b/libminifi/test/integration/SocketTests.cpp
deleted file mode 100644
index 157e685..0000000
--- a/libminifi/test/integration/SocketTests.cpp
+++ /dev/null
@@ -1,185 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
-
-#include "../TestBase.h"
-#include "io/ClientSocket.h"
-
-using namespace org::apache::nifi::minifi::io;
-TEST_CASE("TestSocket", "[TestSocket1]") {
-
-  Socket socket(std::make_shared<SocketContext>(std::make_shared<minifi::Configure>()), "localhost", 8183);
-  REQUIRE(-1 == socket.initialize());
-  REQUIRE("localhost" == socket.getHostname());
-  socket.closeStream();
-
-}
-
-TEST_CASE("TestSocketWriteTest1", "[TestSocket2]") {
-
-  Socket socket(std::make_shared<SocketContext>(std::make_shared<minifi::Configure>()), "localhost", 8183);
-  REQUIRE(-1 == socket.initialize());
-
-  socket.writeData(0, 0);
-
-  std::vector<uint8_t> buffer;
-  buffer.push_back('a');
-
-  REQUIRE(-1 == socket.writeData(buffer, 1));
-
-  socket.closeStream();
-
-}
-
-TEST_CASE("TestSocketWriteTest2", "[TestSocket3]") {
-
-  std::vector<uint8_t> buffer;
-  buffer.push_back('a');
-  
-  std::shared_ptr<SocketContext> socket_context = std::make_shared<SocketContext>(std::make_shared<minifi::Configure>());
-
-  Socket server(socket_context, "localhost", 9183, 1);
-
-  REQUIRE(-1 != server.initialize());
-
-  Socket client(socket_context, "localhost", 9183);
-
-  REQUIRE(-1 != client.initialize());
-
-  REQUIRE(1 == client.writeData(buffer, 1));
-
-  std::vector<uint8_t> readBuffer;
-  readBuffer.resize(1);
-
-  REQUIRE(1 == server.readData(readBuffer, 1));
-
-  REQUIRE(readBuffer == buffer);
-
-  server.closeStream();
-
-  client.closeStream();
-
-}
-
-TEST_CASE("TestGetHostName", "[TestSocket4]") {
-
-  REQUIRE(Socket::getMyHostName().length() > 0);
-
-}
-
-TEST_CASE("TestWriteEndian64", "[TestSocket4]") {
-
-  std::vector<uint8_t> buffer;
-  buffer.push_back('a');
-  
-  std::shared_ptr<SocketContext> socket_context = std::make_shared<SocketContext>(std::make_shared<minifi::Configure>());
-
-  Socket server(socket_context, "localhost", 9183, 1);
-
-  REQUIRE(-1 != server.initialize());
-
-  Socket client(socket_context, "localhost", 9183);
-
-  REQUIRE(-1 != client.initialize());
-
-  uint64_t negative_one = -1;
-  REQUIRE(8 == client.write(negative_one));
-
-  uint64_t negative_two = 0;
-  REQUIRE(8 == server.read(negative_two));
-
-  REQUIRE(negative_two == negative_one);
-
-  server.closeStream();
-
-  client.closeStream();
-
-}
-
-TEST_CASE("TestWriteEndian32", "[TestSocket5]") {
-
-  std::vector<uint8_t> buffer;
-  buffer.push_back('a');
-
-  std::shared_ptr<SocketContext> socket_context = std::make_shared<SocketContext>(std::make_shared<minifi::Configure>());
-  
-  Socket server(socket_context, "localhost", 9183, 1);
-
-  REQUIRE(-1 != server.initialize());
-
-  Socket client(socket_context, "localhost", 9183);
-
-  REQUIRE(-1 != client.initialize());
-
-  {
-    uint32_t negative_one = -1;
-    REQUIRE(4 == client.write(negative_one));
-
-    uint32_t negative_two = 0;
-    REQUIRE(4 == server.read(negative_two));
-
-    REQUIRE(negative_two == negative_one);
-  }
-
-  {
-    uint16_t negative_one = -1;
-    REQUIRE(2 == client.write(negative_one));
-
-    uint16_t negative_two = 0;
-    REQUIRE(2 == server.read(negative_two));
-
-    REQUIRE(negative_two == negative_one);
-  }
-  server.closeStream();
-
-  client.closeStream();
-
-}
-
-TEST_CASE("TestSocketWriteTestAfterClose", "[TestSocket6]") {
-
-  std::vector<uint8_t> buffer;
-  buffer.push_back('a');
-
-  std::shared_ptr<SocketContext> socket_context = std::make_shared<SocketContext>(std::make_shared<minifi::Configure>());
-  
-  Socket server(socket_context, "localhost", 9183, 1);
-
-  REQUIRE(-1 != server.initialize());
-
-  Socket client(socket_context, "localhost", 9183);
-
-  REQUIRE(-1 != client.initialize());
-
-  REQUIRE(1 == client.writeData(buffer, 1));
-
-  std::vector<uint8_t> readBuffer;
-  readBuffer.resize(1);
-
-  REQUIRE(1 == server.readData(readBuffer, 1));
-
-  REQUIRE(readBuffer == buffer);
-
-  client.closeStream();
-
-  REQUIRE(-1 == client.writeData(buffer, 1));
-
-  server.closeStream();
-
-}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/resource/TestHTTPGet.yml
----------------------------------------------------------------------
diff --git a/libminifi/test/resource/TestHTTPGet.yml b/libminifi/test/resource/TestHTTPGet.yml
new file mode 100644
index 0000000..0783b8e
--- /dev/null
+++ b/libminifi/test/resource/TestHTTPGet.yml
@@ -0,0 +1,73 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+Flow Controller:
+    name: MiNiFi Flow
+    id: 2438e3c8-015a-1000-79ca-83af40ec1990
+Processors:
+    - name: invoke
+      id: 2438e3c8-015a-1000-79ca-83af40ec1991
+      class: org.apache.nifi.processors.standard.InvokeHTTP
+      max concurrent tasks: 1
+      scheduling strategy: TIMER_DRIVEN
+      scheduling period: 1 sec
+      penalization period: 30 sec
+      yield period: 1 sec
+      run duration nanos: 0
+      auto-terminated relationships list:
+      Properties:
+          HTTP Method: GET
+          Remote URL: https://curl.haxx.se/libcurl/c/httpput.html
+    - name: OhJeez
+      id: 2438e3c8-015a-1000-79ca-83af40ec1992
+      class: org.apache.nifi.processors.standard.LogAttribute
+      max concurrent tasks: 1
+      scheduling strategy: TIMER_DRIVEN
+      scheduling period: 1 sec
+      penalization period: 30 sec
+      yield period: 1 sec
+      run duration nanos: 0
+      auto-terminated relationships list: response
+      Properties:
+        Log Level: info
+        Log Payload: true
+
+Connections:
+    - name: TransferFilesToRPG
+      id: 2438e3c8-015a-1000-79ca-83af40ec1997
+      source name: invoke
+      source id: 2438e3c8-015a-1000-79ca-83af40ec1991
+      source relationship name: success
+      destination name: OhJeez
+      destination id: 2438e3c8-015a-1000-79ca-83af40ec1992
+      max work queue size: 0
+      max work queue data size: 1 MB
+      flowfile expiration: 60 sec
+    - name: TransferFilesToRPG2
+      id: 2438e3c8-015a-1000-79ca-83af40ec1917
+      source name: OhJeez
+      source id: 2438e3c8-015a-1000-79ca-83af40ec1992
+      destination name: OhJeez
+      destination id: 2438e3c8-015a-1000-79ca-83af40ec1992  
+      source relationship name: success
+      max work queue size: 0
+      max work queue data size: 1 MB
+      flowfile expiration: 60 sec
+
+Remote Processing Groups:
+    
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/resource/TestHTTPPost.yml
----------------------------------------------------------------------
diff --git a/libminifi/test/resource/TestHTTPPost.yml b/libminifi/test/resource/TestHTTPPost.yml
new file mode 100644
index 0000000..837194d
--- /dev/null
+++ b/libminifi/test/resource/TestHTTPPost.yml
@@ -0,0 +1,87 @@
+#
+# Licensed to the Apache Software Foundation (ASF) under one
+# or more contributor license agreements.  See the NOTICE file
+# distributed with this work for additional information
+# regarding copyright ownership.  The ASF licenses this file
+# to you under the Apache License, Version 2.0 (the
+# "License"); you may not use this file except in compliance
+# with the License.  You may obtain a copy of the License at
+#
+#   http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing,
+# software distributed under the License is distributed on an
+# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+# KIND, either express or implied.  See the License for the
+# specific language governing permissions and limitations
+# under the License.
+#
+Flow Controller:
+    name: MiNiFi Flow
+    id: 2438e3c8-015a-1000-79ca-83af40ec1990
+Processors:
+    - name: invoke
+      id: 2438e3c8-015a-1000-79ca-83af40ec1991
+      class: org.apache.nifi.processors.standard.GetFile
+      max concurrent tasks: 1
+      scheduling strategy: TIMER_DRIVEN
+      scheduling period: 1 sec
+      penalization period: 30 sec
+      yield period: 1 sec
+      run duration nanos: 0
+      auto-terminated relationships list:
+      Properties:
+          Input Directory: /tmp/aljr39
+          Keep Source File: false
+
+    - name: OhJeez
+      id: 2438e3c8-015a-1000-79ca-83af40ec1992
+      class: org.apache.nifi.processors.standard.InvokeHTTP
+      max concurrent tasks: 1
+      scheduling strategy: TIMER_DRIVEN
+      scheduling period: 1 sec
+      penalization period: 30 sec
+      yield period: 1 sec
+      run duration nanos: 0
+      auto-terminated relationships list: response
+      Properties:
+          HTTP Method: POST
+          Remote URL: http://requestb.in/u8ax9uu8
+          
+    - name: Loggit
+      id: 2438e3c8-015a-1000-79ca-83af40ec1993
+      class: org.apache.nifi.processors.standard.LogAttribute
+      max concurrent tasks: 1
+      scheduling strategy: TIMER_DRIVEN
+      scheduling period: 1 sec
+      penalization period: 30 sec
+      yield period: 1 sec
+      run duration nanos: 0
+      auto-terminated relationships list: response
+      Properties:
+          LogLevel: info
+
+Connections:
+    - name: TransferFilesToRPG
+      id: 2438e3c8-015a-1000-79ca-83af40ec1997
+      source name: invoke
+      source id: 2438e3c8-015a-1000-79ca-83af40ec1991
+      source relationship name: success
+      destination name: OhJeez
+      destination id: 2438e3c8-015a-1000-79ca-83af40ec1992
+      max work queue size: 0
+      max work queue data size: 1 MB
+      flowfile expiration: 60 sec
+    - name: TransferFilesToRPG2
+      id: 2438e3c8-015a-1000-79ca-83af40ec1917
+      source name: OhJeez
+      source id: 2438e3c8-015a-1000-79ca-83af40ec1992
+      destination name: OhJeez
+      destination id: 2438e3c8-015a-1000-79ca-83af40ec1993
+      source relationship name: success
+      max work queue size: 0
+      max work queue data size: 1 MB
+      flowfile expiration: 60 sec
+
+Remote Processing Groups:
+    
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/CRCTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/CRCTests.cpp b/libminifi/test/unit/CRCTests.cpp
index 54f27bc..74279f4 100644
--- a/libminifi/test/unit/CRCTests.cpp
+++ b/libminifi/test/unit/CRCTests.cpp
@@ -16,6 +16,8 @@
  * limitations under the License.
  */
 
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
+
 #include <string>
 #include <vector>
 #include "io/CRCStream.h"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/ClassLoaderTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/ClassLoaderTests.cpp b/libminifi/test/unit/ClassLoaderTests.cpp
index f5cb6e9..d2d2664 100644
--- a/libminifi/test/unit/ClassLoaderTests.cpp
+++ b/libminifi/test/unit/ClassLoaderTests.cpp
@@ -15,8 +15,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
-#include "../../include/core/ClassLoader.h"
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
+#include <uuid/uuid.h>
+#include "core/ClassLoader.h"
 #include "../TestBase.h"
 #include "io/ClientSocket.h"
 #include "core/Processor.h"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/ControllerServiceTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/ControllerServiceTests.cpp b/libminifi/test/unit/ControllerServiceTests.cpp
index e8fb4ce..d657d87 100644
--- a/libminifi/test/unit/ControllerServiceTests.cpp
+++ b/libminifi/test/unit/ControllerServiceTests.cpp
@@ -15,6 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include <uuid/uuid.h>
 #include <fstream>
 #include "FlowController.h"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/InvokeHTTPTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/InvokeHTTPTests.cpp b/libminifi/test/unit/InvokeHTTPTests.cpp
index 0200710..f5df8d8 100644
--- a/libminifi/test/unit/InvokeHTTPTests.cpp
+++ b/libminifi/test/unit/InvokeHTTPTests.cpp
@@ -15,6 +15,8 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
+
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include <uuid/uuid.h>
 #include <fstream>
 #include "FlowController.h"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/LoggerTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/LoggerTests.cpp b/libminifi/test/unit/LoggerTests.cpp
index 48942f0..b083671 100644
--- a/libminifi/test/unit/LoggerTests.cpp
+++ b/libminifi/test/unit/LoggerTests.cpp
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include <memory>
 #include <ctime>
 #include "../TestBase.h"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/ProcessorTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/ProcessorTests.cpp b/libminifi/test/unit/ProcessorTests.cpp
new file mode 100644
index 0000000..1c447a8
--- /dev/null
+++ b/libminifi/test/unit/ProcessorTests.cpp
@@ -0,0 +1,411 @@
+
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
+#include <uuid/uuid.h>
+#include <fstream>
+#include "../unit/ProvenanceTestHelper.h"
+#include "../TestBase.h"
+#include "core/logging/LogAppenders.h"
+#include "core/logging/BaseLogger.h"
+#include "processors/ListenHTTP.h"
+#include "processors/LogAttribute.h"
+#include "processors/GetFile.h"
+#include "core/Core.h"
+#include "core/FlowFile.h"
+#include "core/Processor.h"
+#include "core/ProcessContext.h"
+#include "core/ProcessSession.h"
+#include "core/ProcessorNode.h"
+#include "core/reporting/SiteToSiteProvenanceReportingTask.h"
+
+
+
+TEST_CASE("Test Creation of GetFile", "[getfileCreate]") {
+  std::shared_ptr<core::Processor> processor = std::make_shared<
+        org::apache::nifi::minifi::processors::GetFile>("processorname");
+  REQUIRE(processor->getName() == "processorname");
+}
+
+TEST_CASE("Test Find file", "[getfileCreate2]") {
+
+  TestController testController;
+
+  testController.enableDebug();
+
+  std::shared_ptr<core::Processor> processor = std::make_shared<
+      org::apache::nifi::minifi::processors::GetFile>("getfileCreate2");
+
+  std::shared_ptr<core::Processor> processorReport =
+      std::make_shared<
+          org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask>(std::make_shared<org::apache::nifi::minifi::io::StreamFactory>(std::make_shared<org::apache::nifi::minifi::Configure>()));
+
+  std::shared_ptr<core::Repository> test_repo =
+      std::make_shared<TestRepository>();
+
+  std::shared_ptr<TestRepository> repo =
+      std::static_pointer_cast<TestRepository>(test_repo);
+
+  char format[] = "/tmp/gt.XXXXXX";
+  char *dir = testController.createTempDirectory(format);
+
+  uuid_t processoruuid;
+  REQUIRE(true == processor->getUUID(processoruuid));
+
+  std::shared_ptr<minifi::Connection> connection = std::make_shared<
+      minifi::Connection>(test_repo, "getfileCreate2Connection");
+  connection->setRelationship(core::Relationship("success", "description"));
+
+  // link the connections so that we can test results at the end for this
+  connection->setSource(processor);
+  connection->setDestination(processor);
+
+  connection->setSourceUUID(processoruuid);
+  connection->setDestinationUUID(processoruuid);
+
+  processor->addConnection(connection);
+  REQUIRE(dir != NULL);
+
+  core::ProcessorNode node(processor);
+  std::shared_ptr<core::controller::ControllerServiceProvider> controller_services_provider =
+      nullptr;
+  core::ProcessContext context(node, controller_services_provider, test_repo);
+  core::ProcessSessionFactory factory(&context);
+  context.setProperty(org::apache::nifi::minifi::processors::GetFile::Directory,
+                      dir);
+  core::ProcessSession session(&context);
+
+  processor->onSchedule(&context, &factory);
+  REQUIRE(processor->getName() == "getfileCreate2");
+
+  std::shared_ptr<core::FlowFile> record;
+  processor->setScheduledState(core::ScheduledState::RUNNING);
+  processor->onTrigger(&context, &session);
+
+  provenance::ProvenanceReporter *reporter = session.getProvenanceReporter();
+  std::set<provenance::ProvenanceEventRecord*> records = reporter->getEvents();
+  record = session.get();
+  REQUIRE(record == nullptr);
+  REQUIRE(records.size() == 0);
+
+  std::fstream file;
+  std::stringstream ss;
+  ss << dir << "/" << "tstFile.ext";
+  file.open(ss.str(), std::ios::out);
+  file << "tempFile";
+  file.close();
+
+  processor->incrementActiveTasks();
+  processor->setScheduledState(core::ScheduledState::RUNNING);
+  processor->onTrigger(&context, &session);
+  unlink(ss.str().c_str());
+  reporter = session.getProvenanceReporter();
+
+  REQUIRE(processor->getName() == "getfileCreate2");
+
+  records = reporter->getEvents();
+
+  for (provenance::ProvenanceEventRecord *provEventRecord : records) {
+    REQUIRE(provEventRecord->getComponentType() == processor->getName());
+  }
+  session.commit();
+  std::shared_ptr<core::FlowFile> ffr = session.get();
+
+  ffr->getResourceClaim()->decreaseFlowFileRecordOwnedCount();
+  REQUIRE(2 == repo->getRepoMap().size());
+
+  for (auto entry : repo->getRepoMap()) {
+    provenance::ProvenanceEventRecord newRecord;
+    newRecord.DeSerialize((uint8_t*) entry.second.data(),
+                          entry.second.length());
+
+    bool found = false;
+    for (auto provRec : records) {
+      if (provRec->getEventId() == newRecord.getEventId()) {
+        REQUIRE(provRec->getEventId() == newRecord.getEventId());
+        REQUIRE(provRec->getComponentId() == newRecord.getComponentId());
+        REQUIRE(provRec->getComponentType() == newRecord.getComponentType());
+        REQUIRE(provRec->getDetails() == newRecord.getDetails());
+        REQUIRE(provRec->getEventDuration() == newRecord.getEventDuration());
+        found = true;
+        break;
+      }
+    }
+    if (!found)
+      throw std::runtime_error("Did not find record");
+
+  }
+
+  core::ProcessorNode nodeReport(processorReport);
+  core::ProcessContext contextReport(nodeReport,controller_services_provider, test_repo);
+  core::ProcessSessionFactory factoryReport(&contextReport);
+  core::ProcessSession sessionReport(&contextReport);
+  processorReport->onSchedule(&contextReport, &factoryReport);
+  std::shared_ptr<
+      org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask> taskReport =
+      std::static_pointer_cast<
+          org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask>(
+          processorReport);
+  taskReport->setBatchSize(1);
+  std::vector<std::shared_ptr<provenance::ProvenanceEventRecord>> recordsReport;
+  processorReport->incrementActiveTasks();
+  processorReport->setScheduledState(core::ScheduledState::RUNNING);
+  std::string jsonStr;
+  repo->getProvenanceRecord(recordsReport, 1);
+  taskReport->getJsonReport(&contextReport, &sessionReport, recordsReport,
+                            jsonStr);
+  REQUIRE(recordsReport.size() == 1);
+  REQUIRE(
+      taskReport->getName()
+          == std::string(
+              org::apache::nifi::minifi::core::reporting::SiteToSiteProvenanceReportingTask::ReportTaskName));
+  REQUIRE(
+      jsonStr.find("\"componentType\" : \"getfileCreate2\"")
+          != std::string::npos);
+}
+
+TEST_CASE("Test GetFileLikeIt'sThreaded", "[getfileCreate3]") {
+
+  TestController testController;
+
+  testController.enableDebug();
+
+  std::shared_ptr<core::Processor> processor = std::make_shared<
+      org::apache::nifi::minifi::processors::GetFile>("getfileCreate2");
+
+  std::shared_ptr<core::Repository> test_repo =
+      std::make_shared<TestRepository>();
+
+  std::shared_ptr<TestRepository> repo =
+      std::static_pointer_cast<TestRepository>(test_repo);
+
+  char format[] = "/tmp/gt.XXXXXX";
+  char *dir = testController.createTempDirectory(format);
+
+  uuid_t processoruuid;
+  REQUIRE(true == processor->getUUID(processoruuid));
+
+  std::shared_ptr<minifi::Connection> connection = std::make_shared<
+      minifi::Connection>(test_repo, "getfileCreate2Connection");
+  connection->setRelationship(core::Relationship("success", "description"));
+
+  // link the connections so that we can test results at the end for this
+  connection->setSource(processor);
+  connection->setDestination(processor);
+
+  connection->setSourceUUID(processoruuid);
+  connection->setDestinationUUID(processoruuid);
+
+  processor->addConnection(connection);
+  REQUIRE(dir != NULL);
+
+  core::ProcessorNode node(processor);
+  std::shared_ptr<core::controller::ControllerServiceProvider> controller_services_provider =
+      nullptr;
+  core::ProcessContext context(node, controller_services_provider, test_repo);
+  core::ProcessSessionFactory factory(&context);
+  context.setProperty(org::apache::nifi::minifi::processors::GetFile::Directory,
+                      dir);
+  // replicate 10 threads
+  processor->setScheduledState(core::ScheduledState::RUNNING);
+  processor->onSchedule(&context, &factory);
+
+  int prev = 0;
+  for (int i = 0; i < 10; i++) {
+
+    core::ProcessSession session(&context);
+    REQUIRE(processor->getName() == "getfileCreate2");
+
+    std::shared_ptr<core::FlowFile> record;
+
+    processor->onTrigger(&context, &session);
+
+    provenance::ProvenanceReporter *reporter = session.getProvenanceReporter();
+    std::set<provenance::ProvenanceEventRecord*> records =
+        reporter->getEvents();
+    record = session.get();
+    REQUIRE(record == nullptr);
+    REQUIRE(records.size() == 0);
+
+    std::fstream file;
+    std::stringstream ss;
+    ss << dir << "/" << "tstFile.ext";
+    file.open(ss.str(), std::ios::out);
+    file << "tempFile";
+    file.close();
+
+    processor->incrementActiveTasks();
+    processor->setScheduledState(core::ScheduledState::RUNNING);
+    processor->onTrigger(&context, &session);
+    unlink(ss.str().c_str());
+    reporter = session.getProvenanceReporter();
+
+    REQUIRE(processor->getName() == "getfileCreate2");
+
+    records = reporter->getEvents();
+
+    for (provenance::ProvenanceEventRecord *provEventRecord : records) {
+      REQUIRE(provEventRecord->getComponentType() == processor->getName());
+    }
+    session.commit();
+    std::shared_ptr<core::FlowFile> ffr = session.get();
+
+    REQUIRE((repo->getRepoMap().size() % 2) == 0);
+    REQUIRE(repo->getRepoMap().size() == (prev + 2));
+    prev += 2;
+
+  }
+
+}
+
+TEST_CASE("LogAttributeTest", "[getfileCreate3]") {
+  std::ostringstream oss;
+  std::unique_ptr<logging::BaseLogger> outputLogger = std::unique_ptr<
+      logging::BaseLogger>(
+      new org::apache::nifi::minifi::core::logging::OutputStreamAppender(oss,
+                                                                         0));
+  std::shared_ptr<logging::Logger> logger = logging::Logger::getLogger();
+  logger->updateLogger(std::move(outputLogger));
+
+  TestController testController;
+
+  testController.enableDebug();
+
+  std::shared_ptr<core::Repository> repo = std::make_shared<TestRepository>();
+
+  std::shared_ptr<core::Processor> processor = std::make_shared<
+      org::apache::nifi::minifi::processors::GetFile>("getfileCreate2");
+
+  std::shared_ptr<core::Processor> logAttribute = std::make_shared<
+      org::apache::nifi::minifi::processors::LogAttribute>("logattribute");
+
+  char format[] = "/tmp/gt.XXXXXX";
+  char *dir = testController.createTempDirectory(format);
+
+  uuid_t processoruuid;
+  REQUIRE(true == processor->getUUID(processoruuid));
+
+  uuid_t logattribute_uuid;
+  REQUIRE(true == logAttribute->getUUID(logattribute_uuid));
+
+  std::shared_ptr<minifi::Connection> connection = std::make_shared<
+      minifi::Connection>(repo, "getfileCreate2Connection");
+  connection->setRelationship(core::Relationship("success", "description"));
+
+  std::shared_ptr<minifi::Connection> connection2 = std::make_shared<
+      minifi::Connection>(repo, "logattribute");
+  connection2->setRelationship(core::Relationship("success", "description"));
+
+  // link the connections so that we can test results at the end for this
+  connection->setSource(processor);
+
+  // link the connections so that we can test results at the end for this
+  connection->setDestination(logAttribute);
+
+  connection2->setSource(logAttribute);
+
+  connection2->setSourceUUID(logattribute_uuid);
+  connection->setSourceUUID(processoruuid);
+  connection->setDestinationUUID(logattribute_uuid);
+
+  processor->addConnection(connection);
+  logAttribute->addConnection(connection);
+  logAttribute->addConnection(connection2);
+  REQUIRE(dir != NULL);
+
+  core::ProcessorNode node(processor);
+  core::ProcessorNode node2(logAttribute);
+  std::shared_ptr<core::controller::ControllerServiceProvider> controller_services_provider =
+      nullptr;
+  core::ProcessContext context(node, controller_services_provider, repo);
+  core::ProcessContext context2(node2, controller_services_provider, repo);
+  context.setProperty(org::apache::nifi::minifi::processors::GetFile::Directory,
+                      dir);
+  core::ProcessSession session(&context);
+  core::ProcessSession session2(&context2);
+
+  REQUIRE(processor->getName() == "getfileCreate2");
+
+  std::shared_ptr<core::FlowFile> record;
+  processor->setScheduledState(core::ScheduledState::RUNNING);
+
+  core::ProcessSessionFactory factory(&context);
+  processor->onSchedule(&context, &factory);
+  processor->onTrigger(&context, &session);
+
+  logAttribute->incrementActiveTasks();
+  logAttribute->setScheduledState(core::ScheduledState::RUNNING);
+  core::ProcessSessionFactory factory2(&context2);
+  logAttribute->onSchedule(&context2, &factory2);
+  logAttribute->onTrigger(&context2, &session2);
+
+  provenance::ProvenanceReporter *reporter = session.getProvenanceReporter();
+  std::set<provenance::ProvenanceEventRecord*> records = reporter->getEvents();
+  record = session.get();
+  REQUIRE(record == nullptr);
+  REQUIRE(records.size() == 0);
+
+  std::fstream file;
+  std::stringstream ss;
+  ss << dir << "/" << "tstFile.ext";
+  file.open(ss.str(), std::ios::out);
+  file << "tempFile";
+  file.close();
+
+  processor->incrementActiveTasks();
+  processor->setScheduledState(core::ScheduledState::RUNNING);
+  processor->onTrigger(&context, &session);
+  unlink(ss.str().c_str());
+  reporter = session.getProvenanceReporter();
+
+  records = reporter->getEvents();
+  session.commit();
+  oss.str("");
+  oss.clear();
+
+  logAttribute->incrementActiveTasks();
+  logAttribute->setScheduledState(core::ScheduledState::RUNNING);
+  logAttribute->onTrigger(&context2, &session2);
+
+  //session2.commit();
+  records = reporter->getEvents();
+
+  std::string log_attribute_output = oss.str();
+  REQUIRE(
+      log_attribute_output.find("key:absolute.path value:" + ss.str())
+          != std::string::npos);
+  REQUIRE(log_attribute_output.find("Size:8 Offset:0") != std::string::npos);
+  REQUIRE(
+      log_attribute_output.find("key:path value:" + std::string(dir))
+          != std::string::npos);
+
+  outputLogger = std::unique_ptr<logging::BaseLogger>(
+      new org::apache::nifi::minifi::core::logging::NullAppender());
+  logger->updateLogger(std::move(outputLogger));
+
+}
+
+int fileSize(const char *add) {
+  std::ifstream mySource;
+  mySource.open(add, std::ios_base::binary);
+  mySource.seekg(0, std::ios_base::end);
+  int size = mySource.tellg();
+  mySource.close();
+  return size;
+}
+

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/PropertyTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/PropertyTests.cpp b/libminifi/test/unit/PropertyTests.cpp
index dee809f..cd686a1 100644
--- a/libminifi/test/unit/PropertyTests.cpp
+++ b/libminifi/test/unit/PropertyTests.cpp
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include "../../include/core/Property.h"
 #include "utils/StringUtils.h"
 #include "../TestBase.h"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/ProvenanceTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/ProvenanceTests.cpp b/libminifi/test/unit/ProvenanceTests.cpp
index 6a134ed..947932e 100644
--- a/libminifi/test/unit/ProvenanceTests.cpp
+++ b/libminifi/test/unit/ProvenanceTests.cpp
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include "../TestBase.h"
 #include "../unit/ProvenanceTestHelper.h"
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/RepoTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/RepoTests.cpp b/libminifi/test/unit/RepoTests.cpp
index c8deb89..83ea49d 100644
--- a/libminifi/test/unit/RepoTests.cpp
+++ b/libminifi/test/unit/RepoTests.cpp
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include "../TestBase.h"
 #include "../unit/ProvenanceTestHelper.h"
 

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/SerializationTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/SerializationTests.cpp b/libminifi/test/unit/SerializationTests.cpp
index 039ed57..d9cea0f 100644
--- a/libminifi/test/unit/SerializationTests.cpp
+++ b/libminifi/test/unit/SerializationTests.cpp
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include "io/BaseStream.h"
 #include "Site2SitePeer.h"
 #include "Site2SiteClientProtocol.h"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/Site2SiteTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/Site2SiteTests.cpp b/libminifi/test/unit/Site2SiteTests.cpp
index 5af86d5..43afa0e 100644
--- a/libminifi/test/unit/Site2SiteTests.cpp
+++ b/libminifi/test/unit/Site2SiteTests.cpp
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include "io/BaseStream.h"
 #include "Site2SitePeer.h"
 #include "Site2SiteClientProtocol.h"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/SocketTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/SocketTests.cpp b/libminifi/test/unit/SocketTests.cpp
new file mode 100644
index 0000000..157e685
--- /dev/null
+++ b/libminifi/test/unit/SocketTests.cpp
@@ -0,0 +1,185 @@
+/**
+ *
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
+
+#include "../TestBase.h"
+#include "io/ClientSocket.h"
+
+using namespace org::apache::nifi::minifi::io;
+TEST_CASE("TestSocket", "[TestSocket1]") {
+
+  Socket socket(std::make_shared<SocketContext>(std::make_shared<minifi::Configure>()), "localhost", 8183);
+  REQUIRE(-1 == socket.initialize());
+  REQUIRE("localhost" == socket.getHostname());
+  socket.closeStream();
+
+}
+
+TEST_CASE("TestSocketWriteTest1", "[TestSocket2]") {
+
+  Socket socket(std::make_shared<SocketContext>(std::make_shared<minifi::Configure>()), "localhost", 8183);
+  REQUIRE(-1 == socket.initialize());
+
+  socket.writeData(0, 0);
+
+  std::vector<uint8_t> buffer;
+  buffer.push_back('a');
+
+  REQUIRE(-1 == socket.writeData(buffer, 1));
+
+  socket.closeStream();
+
+}
+
+TEST_CASE("TestSocketWriteTest2", "[TestSocket3]") {
+
+  std::vector<uint8_t> buffer;
+  buffer.push_back('a');
+  
+  std::shared_ptr<SocketContext> socket_context = std::make_shared<SocketContext>(std::make_shared<minifi::Configure>());
+
+  Socket server(socket_context, "localhost", 9183, 1);
+
+  REQUIRE(-1 != server.initialize());
+
+  Socket client(socket_context, "localhost", 9183);
+
+  REQUIRE(-1 != client.initialize());
+
+  REQUIRE(1 == client.writeData(buffer, 1));
+
+  std::vector<uint8_t> readBuffer;
+  readBuffer.resize(1);
+
+  REQUIRE(1 == server.readData(readBuffer, 1));
+
+  REQUIRE(readBuffer == buffer);
+
+  server.closeStream();
+
+  client.closeStream();
+
+}
+
+TEST_CASE("TestGetHostName", "[TestSocket4]") {
+
+  REQUIRE(Socket::getMyHostName().length() > 0);
+
+}
+
+TEST_CASE("TestWriteEndian64", "[TestSocket4]") {
+
+  std::vector<uint8_t> buffer;
+  buffer.push_back('a');
+  
+  std::shared_ptr<SocketContext> socket_context = std::make_shared<SocketContext>(std::make_shared<minifi::Configure>());
+
+  Socket server(socket_context, "localhost", 9183, 1);
+
+  REQUIRE(-1 != server.initialize());
+
+  Socket client(socket_context, "localhost", 9183);
+
+  REQUIRE(-1 != client.initialize());
+
+  uint64_t negative_one = -1;
+  REQUIRE(8 == client.write(negative_one));
+
+  uint64_t negative_two = 0;
+  REQUIRE(8 == server.read(negative_two));
+
+  REQUIRE(negative_two == negative_one);
+
+  server.closeStream();
+
+  client.closeStream();
+
+}
+
+TEST_CASE("TestWriteEndian32", "[TestSocket5]") {
+
+  std::vector<uint8_t> buffer;
+  buffer.push_back('a');
+
+  std::shared_ptr<SocketContext> socket_context = std::make_shared<SocketContext>(std::make_shared<minifi::Configure>());
+  
+  Socket server(socket_context, "localhost", 9183, 1);
+
+  REQUIRE(-1 != server.initialize());
+
+  Socket client(socket_context, "localhost", 9183);
+
+  REQUIRE(-1 != client.initialize());
+
+  {
+    uint32_t negative_one = -1;
+    REQUIRE(4 == client.write(negative_one));
+
+    uint32_t negative_two = 0;
+    REQUIRE(4 == server.read(negative_two));
+
+    REQUIRE(negative_two == negative_one);
+  }
+
+  {
+    uint16_t negative_one = -1;
+    REQUIRE(2 == client.write(negative_one));
+
+    uint16_t negative_two = 0;
+    REQUIRE(2 == server.read(negative_two));
+
+    REQUIRE(negative_two == negative_one);
+  }
+  server.closeStream();
+
+  client.closeStream();
+
+}
+
+TEST_CASE("TestSocketWriteTestAfterClose", "[TestSocket6]") {
+
+  std::vector<uint8_t> buffer;
+  buffer.push_back('a');
+
+  std::shared_ptr<SocketContext> socket_context = std::make_shared<SocketContext>(std::make_shared<minifi::Configure>());
+  
+  Socket server(socket_context, "localhost", 9183, 1);
+
+  REQUIRE(-1 != server.initialize());
+
+  Socket client(socket_context, "localhost", 9183);
+
+  REQUIRE(-1 != client.initialize());
+
+  REQUIRE(1 == client.writeData(buffer, 1));
+
+  std::vector<uint8_t> readBuffer;
+  readBuffer.resize(1);
+
+  REQUIRE(1 == server.readData(readBuffer, 1));
+
+  REQUIRE(readBuffer == buffer);
+
+  client.closeStream();
+
+  REQUIRE(-1 == client.writeData(buffer, 1));
+
+  server.closeStream();
+
+}

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/ThreadPoolTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/ThreadPoolTests.cpp b/libminifi/test/unit/ThreadPoolTests.cpp
index 5c85e19..cd34293 100644
--- a/libminifi/test/unit/ThreadPoolTests.cpp
+++ b/libminifi/test/unit/ThreadPoolTests.cpp
@@ -16,6 +16,7 @@
  * limitations under the License.
  */
 
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include <future>
 #include "../TestBase.h"
 #include "utils/ThreadPool.h"

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/TimeUtilsTest.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/TimeUtilsTest.cpp b/libminifi/test/unit/TimeUtilsTest.cpp
deleted file mode 100644
index 9470338..0000000
--- a/libminifi/test/unit/TimeUtilsTest.cpp
+++ /dev/null
@@ -1,21 +0,0 @@
-/**
- *
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-
-

http://git-wip-us.apache.org/repos/asf/nifi-minifi-cpp/blob/1498ec87/libminifi/test/unit/YamlCongifurationTests.cpp
----------------------------------------------------------------------
diff --git a/libminifi/test/unit/YamlCongifurationTests.cpp b/libminifi/test/unit/YamlCongifurationTests.cpp
index 0c229d0..f598f38 100644
--- a/libminifi/test/unit/YamlCongifurationTests.cpp
+++ b/libminifi/test/unit/YamlCongifurationTests.cpp
@@ -15,7 +15,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-
+#define CATCH_CONFIG_MAIN  // This tells Catch to provide a main() - only do this in one cpp file
 #include <memory>
 #include <string>
 #include <core/RepositoryFactory.h>