Prechádzať zdrojové kódy

disable transport layer by default, splitted integration test to check if the transport layer can be disabled

stefan 3 rokov pred
rodič
commit
e5c69849dd
5 zmenil súbory, kde vykonal 88 pridanie a 29 odobranie
  1. 14 0
      api/shellmatta.h
  2. 60 28
      makefile
  3. 10 0
      src/shellmatta.c
  4. 2 1
      src/shellmatta_transport.c
  5. 2 0
      src/shellmatta_utils.h

+ 14 - 0
api/shellmatta.h

@@ -114,6 +114,8 @@ typedef struct shellmatta_cmd
     struct shellmatta_cmd   *next;      /**< pointer to next command or NULL        */
 } shellmatta_cmd_t;
 
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
+
 /**
  * @brief definition of shellmatta transport layer states
  */
@@ -181,6 +183,8 @@ typedef struct
     shellmatta_transport_crc_t      customCrcFct;       /**< use this function to calculate crcs            */
 } shellmatta_transport_layer_t;
 
+#endif
+
 /**
  * @brief structure of one shellmatta instance
  */
@@ -220,17 +224,23 @@ typedef struct
     bool                            cmdListIsConst;     /**< true if the #cmdList was passed during
                                                              initialization                         */
     shellmatta_opt_t                optionParser;       /**< option parser sructure                 */
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
     uint32_t                        transportBusyMark;  /**< transport processing position during 
                                                              busy cmd execution                     */
     shellmatta_transport_layer_t    transportLayer;     /**< transport layer instance               */
+#endif
 } shellmatta_instance_t;
 
 /**
  * @brief helper macro for the send function
  */
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
 #define SHELLMATTA_WRITE(data, length)  inst->transportLayer.active == true ?                                                                   \
                                         shellmatta_transport_write((shellmatta_transport_layer_t*)&inst->transportLayer, (data), (length)) :    \
                                         inst->write((data), (length))
+#else
+#define SHELLMATTA_WRITE(data, length)  inst->write((data), (length))
+#endif
 
 shellmatta_retCode_t shellmatta_doInit( shellmatta_instance_t   *inst,
                                         shellmatta_handle_t     *handle,
@@ -280,6 +290,8 @@ shellmatta_retCode_t shellmatta_opt_long(   shellmatta_handle_t         handle,
                                             char                        **argument,
                                             uint32_t                    *argLen);
 
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
+
 shellmatta_retCode_t shellmatta_transport_configure(shellmatta_handle_t         handle,
                                                     bool                        mandatory,
                                                     bool                        disableAutoFlush,
@@ -289,6 +301,8 @@ shellmatta_retCode_t shellmatta_transport_reset(shellmatta_handle_t     handle);
 
 shellmatta_retCode_t shellmatta_transport_flush(shellmatta_handle_t     handle);
 
+#endif
+
 #ifndef SHELLMATTA_STRIP_PRINTF
 shellmatta_retCode_t shellmatta_printf(     shellmatta_handle_t handle,
                                             const char          *fmt,

+ 60 - 28
makefile

@@ -9,6 +9,8 @@
 OBJ_DIR := output/
 INTEGRATIONTEST_CPP_OBJ_DIR := $(OBJ_DIR)test/integrationtest/
 INTEGRATIONTEST_C_OBJ_DIR := $(INTEGRATIONTEST_CPP_OBJ_DIR)
+INTEGRATIONTEST_CPP_OBJ_DIR_TRANSPORT := $(OBJ_DIR)test/integrationtest_transport/
+INTEGRATIONTEST_C_OBJ_DIR_TRANSPORT := $(INTEGRATIONTEST_CPP_OBJ_DIR_TRANSPORT)
 UNITTEST_OBJ_DIR := $(OBJ_DIR)test/unittest/
 
 CC  := gcc
@@ -20,9 +22,12 @@ SOURCES :=  src/shellmatta.c                \
             src/shellmatta_history.c        \
             src/shellmatta_utils.c          \
             src/shellmatta_escape.c         \
-            src/shellmatta_opt.c            \
-            src/shellmatta_transport.c      \
-            src/shellmatta_crc.c
+            src/shellmatta_opt.c
+
+
+SOURCES_TRANPORT_LAYER  :=  $(SOURCES)                      \
+                            src/shellmatta_transport.c      \
+                            src/shellmatta_crc.c
 
 INCLUDES    := api .
 
@@ -54,32 +59,43 @@ INTEGRATIONTEST_SOURCES :=  test/integrationtest/test_main.cpp
                             test/integrationtest/test_integration_continue.cpp  \
                             test/integrationtest/test_integration_busy.cpp      \
                             test/integrationtest/test_integration_history.cpp   \
-                            test/integrationtest/test_integration_help.cpp      \
-                            test/integrationtest/test_integration_transport.cpp
+                            test/integrationtest/test_integration_help.cpp
+
+INTEGRATIONTEST_TRANSPORT_SOURCES  :=  $(INTEGRATIONTEST_SOURCES)                           \
+                                       test/integrationtest/test_integration_transport.cpp
 
 UNITTEST_CPPOBJ  := $(patsubst %.cpp,$(UNITTEST_OBJ_DIR)%.o,$(UNITTEST_SOURCES))
 
 INTEGRATIONTEST_CPPOBJ  :=  $(patsubst %.cpp,$(INTEGRATIONTEST_CPP_OBJ_DIR)%.o,$(INTEGRATIONTEST_SOURCES))
 INTEGRATIONTEST_COBJ    :=  $(patsubst %.c,$(INTEGRATIONTEST_CPP_OBJ_DIR)%.o,$(SOURCES))
 
-CFLAGS      := $(INCLUDES:%=-I%) -g -Wall -Werror -Wextra -pedantic -DSHELLMATTA_HELP_ALIAS=\(char*\)\"?\"
-TESTFLAGS   := $(CFLAGS) -fprofile-arcs -ftest-coverage
-TESTLFLAGS  := -fprofile-arcs -Wl,--allow-multiple-definition
+INTEGRATIONTEST_TRANSPORT_CPPOBJ    :=  $(patsubst %.cpp,$(INTEGRATIONTEST_CPP_OBJ_DIR_TRANSPORT)%.o,$(INTEGRATIONTEST_TRANSPORT_SOURCES))
+INTEGRATIONTEST_TRANSPORT_COBJ     	:=  $(patsubst %.c,$(INTEGRATIONTEST_CPP_OBJ_DIR_TRANSPORT)%.o,$(SOURCES_TRANPORT_LAYER))
 
-DEPEND      = -MT $@ -MF "$(@:%.o=%.d)" -MG -MM
+CFLAGS                  := $(INCLUDES:%=-I%) -g -Wall -Werror -Wextra -pedantic
+CFLAGS                  += -DSHELLMATTA_HELP_ALIAS=\(char*\)\"?\"
+TESTFLAGS               := $(CFLAGS) -fprofile-arcs -ftest-coverage
+TESTLFLAGS              := -fprofile-arcs -Wl,--allow-multiple-definition
+TESTFLAGS_TRANSPORT     := $(TESTFLAGS) -DSHELLMATTA_TRANSPORT_ENABLE
+TESTLFLAGS_TRANSPORT    := $(TESTLFLAGS)
+EXAMPLE_CFLAGS          := $(CFLAGS) -DSHELLMATTA_TRANSPORT_ENABLE
+DEPEND                  = -MT $@ -MF "$(@:%.o=%.d)" -MG -MM
 
-COBJ    := $(patsubst %.c,$(OBJ_DIR)%.o,$(SOURCES))
-
-EXAMPLE_SOURCES := example/main.c
+EXAMPLE_SOURCES  := example/main.c $(SOURCES_TRANPORT_LAYER)
 EXAMPLE_COBJ     := $(patsubst %.c,$(OBJ_DIR)%.o,$(EXAMPLE_SOURCES))
 
-EXAMPLE_TARGET  := $(OBJ_DIR)example/example
-
-UNITTEST_TARGET     := $(OBJ_DIR)test/unittest/unittest
 
-INTEGRATIONTEST_TARGET     := $(OBJ_DIR)test/integrationtest/integrationtest
+EXAMPLE_TARGET                      := $(OBJ_DIR)example/example
+UNITTEST_TARGET                     := $(OBJ_DIR)test/unittest/unittest
+INTEGRATIONTEST_TARGET              := $(OBJ_DIR)test/integrationtest/integrationtest
+INTEGRATIONTEST_TRANSPORT_TARGET    := $(OBJ_DIR)test/integrationtest_transport/integrationtest_transport
 
-OBJ     := $(COBJ) $(EXAMPLE_COBJ) $(UNITTEST_CPPOBJ) $(INTEGRATIONTEST_CPPOBJ) $(INTEGRATIONTEST_COBJ)
+OBJ     := $(EXAMPLE_COBJ)                      \
+           $(UNITTEST_CPPOBJ)                   \
+           $(INTEGRATIONTEST_CPPOBJ)            \
+           $(INTEGRATIONTEST_COBJ)              \
+           $(INTEGRATIONTEST_TRANSPORT_CPPOBJ)  \
+           $(INTEGRATIONTEST_TRANSPORT_COBJ)
 DEPS    := $(OBJ:%.o=%.d)
 
 export
@@ -94,7 +110,7 @@ help:
 	@echo example   - build example
 	@echo -----------------------------------------------
 
-test: unittest integrationtest
+test: unittest integrationtest integrationtest_transport
 
 cppcheck:
 	- @mkdir -p output/cppcheck/html
@@ -124,6 +140,17 @@ integrationtest: $(INTEGRATIONTEST_TARGET)
 #	-rm -rf $(OBJ_DIR)test/unittest/report/*
 	gcovr --html-details --output $(OBJ_DIR)test/integrationtest/report/report.html output/test/integrationtest -f src -f api -d
 
+integrationtest_transport: $(INTEGRATIONTEST_TRANSPORT_TARGET)
+	- @mkdir -p output/test/integrationtest_transport/report
+	@echo running test:
+#	remove coverage from former run
+#	@-find . -name "*.gcda" -type f -delete
+	-$(INTEGRATIONTEST_TRANSPORT_TARGET)
+
+	#	remove report from former run
+#	-rm -rf $(OBJ_DIR)test/unittest/report/*
+	gcovr --html-details --output $(OBJ_DIR)test/integrationtest_transport/report/report.html output/test/integrationtest_transport -f src -f api -d
+
 example: $(EXAMPLE_TARGET)
 	@echo building example
 
@@ -135,7 +162,7 @@ doc:
 clean:
 	- rm -rf $(OBJ_DIR)
 
-$(EXAMPLE_TARGET): $(COBJ) $(EXAMPLE_COBJ)
+$(EXAMPLE_TARGET): $(EXAMPLE_COBJ)
 	- @mkdir -p $(@D)
 	$(CC) $(LFLAGS) $(LIB_PATH) -o $@ $^ $(LIBS)
 
@@ -146,20 +173,15 @@ $(UNITTEST_TARGET): $(UNITTEST_CPPOBJ)
 $(INTEGRATIONTEST_TARGET): $(INTEGRATIONTEST_CPPOBJ) $(INTEGRATIONTEST_COBJ)
 	- @mkdir -p $(@D)
 	$(CPP) $(TESTLFLAGS) $(LIB_PATH) -o $@ $^ $(LIBS)
-
-$(TARGET): $(OBJ)
-	- @mkdir -p $(@D)
-	$(CC) $(LFLAGS) $(LIB_PATH) -o $@ $^ $(LIBS)
 	
-$(COBJ):
+$(INTEGRATIONTEST_TRANSPORT_TARGET): $(INTEGRATIONTEST_TRANSPORT_CPPOBJ) $(INTEGRATIONTEST_TRANSPORT_COBJ)
 	- @mkdir -p $(@D)
-	@$(CC) -c $(CFLAGS)  $(DEPEND) -o $@  $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
-	$(CC) -c $(CFLAGS) -o $@  $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
+	$(CPP) $(TESTLFLAGS_TRANSPORT) $(LIB_PATH) -o $@ $^ $(LIBS)
 
 $(EXAMPLE_COBJ):
 	- @mkdir -p $(@D)
-	@$(CC) -c $(CFLAGS) $(DEPEND) -o $@  $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
-	$(CC) -c $(CFLAGS) -o $@  $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
+	@$(CC) -c $(EXAMPLE_CFLAGS) $(DEPEND) -o $@  $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
+	$(CC) -c $(EXAMPLE_CFLAGS) -o $@  $(subst $(OBJ_DIR), ,$(@:%.o=%.c))
 
 $(UNITTEST_CPPOBJ):
 	- @mkdir -p $(@D)
@@ -176,6 +198,16 @@ $(INTEGRATIONTEST_COBJ):
 	@$(CC) -c $(TESTFLAGS) $(DEPEND) -o $@  $(subst $(INTEGRATIONTEST_C_OBJ_DIR), ,$(@:%.o=%.c))
 	$(CC) -c $(TESTFLAGS) -o $@  $(subst $(INTEGRATIONTEST_C_OBJ_DIR), ,$(@:%.o=%.c))
 
+$(INTEGRATIONTEST_TRANSPORT_CPPOBJ):
+	- @mkdir -p $(@D)
+	@$(CPP) -c $(TESTFLAGS_TRANSPORT) $(DEPEND) -o $@  $(subst $(INTEGRATIONTEST_CPP_OBJ_DIR_TRANSPORT), ,$(@:%.o=%.cpp))
+	$(CPP) -c $(TESTFLAGS_TRANSPORT) -o $@  $(subst $(INTEGRATIONTEST_CPP_OBJ_DIR_TRANSPORT), ,$(@:%.o=%.cpp))
+
+$(INTEGRATIONTEST_TRANSPORT_COBJ):
+	- @mkdir -p $(@D)
+	@$(CC) -c $(TESTFLAGS_TRANSPORT) $(DEPEND) -o $@  $(subst $(INTEGRATIONTEST_C_OBJ_DIR_TRANSPORT), ,$(@:%.o=%.c))
+	$(CC) -c $(TESTFLAGS_TRANSPORT) -o $@  $(subst $(INTEGRATIONTEST_C_OBJ_DIR_TRANSPORT), ,$(@:%.o=%.c))
+
 %.o: %.cpp
 	- @mkdir -p $(@D)
 	@$(CPP) -c $(CFLAGS) $(DEPEND) -o $@  $(subst $(OBJ_DIR), ,$(@:%.o=%.c))

+ 10 - 0
src/shellmatta.c

@@ -23,7 +23,9 @@
 #include "shellmatta_utils.h"
 #include "shellmatta_escape.h"
 #include "shellmatta_opt.h"
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
 #include "shellmatta_transport.h"
+#endif
 #include <stddef.h>
 #include <stdint.h>
 #include <string.h>
@@ -463,9 +465,11 @@ shellmatta_retCode_t shellmatta_doInit(
         inst->magic = SHELLMATTA_MAGIC;
         *handle     = (shellmatta_handle_t)inst;
 
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
         /* init transport layer */
         inst->transportBusyMark = 0u;
         shellmatta_transport_init(&inst->transportLayer, inst->write);
+#endif
 
         /** -# print the first prompt */
         utils_terminateInput(inst);
@@ -723,15 +727,18 @@ shellmatta_retCode_t shellmatta_processData(shellmatta_handle_t     handle,
 {
     shellmatta_retCode_t    ret   = SHELLMATTA_OK;
     shellmatta_instance_t   *inst = (shellmatta_instance_t*)handle;
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
     char                    *tmpData;
     uint32_t                tmpSize = 0;
     uint32_t                i;
     bool                    processingDone = false;
+#endif
 
     /** -# check parameters for plausibility  */
     if(     (NULL               != inst)
         &&  (SHELLMATTA_MAGIC   == inst->magic))
     {
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
         for (i = inst->transportBusyMark; i < size; i ++)
         {
             ret = shellmatta_transport_process(&inst->transportLayer, data[i], &tmpData, &tmpSize);
@@ -771,6 +778,9 @@ shellmatta_retCode_t shellmatta_processData(shellmatta_handle_t     handle,
         {
             (void)shellmatta_transport_flush(handle);
         }
+#else
+        ret = shellmatta_processDataInt(handle, data, size);
+#endif
     }
     else
     {

+ 2 - 1
src/shellmatta_transport.c

@@ -3,7 +3,7 @@
  * @brief   transport layer functions of shellmatta
  * @author  Simon Fischer <fischer.simon.1991@gmail.com>
  */
-
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
 #include "shellmatta_transport.h"
 #include "shellmatta.h"
 #include "shellmatta_crc.h"
@@ -396,3 +396,4 @@ shellmatta_retCode_t shellmatta_transport_flush(shellmatta_handle_t handle)
 
     return ret;
 }
+#endif

+ 2 - 0
src/shellmatta_utils.h

@@ -19,7 +19,9 @@
 #ifndef _SHELLMATTA_UTILS_H_
 #define _SHELLMATTA_UTILS_H_
 
+#ifdef SHELLMATTA_TRANSPORT_ENABLE
 #include "shellmatta_transport.h"
+#endif
 #include "shellmatta.h"
 #include <stdint.h>