Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

getting STRICT_EXPECTED_CALL error #258

Open
gc-zoetis opened this issue Jul 18, 2022 · 1 comment
Open

getting STRICT_EXPECTED_CALL error #258

gc-zoetis opened this issue Jul 18, 2022 · 1 comment

Comments

@gc-zoetis
Copy link

Hi,
I working latest device updates sdk code and developed some own unit test for own customized part of code.
Unit test is acting for function which send message to cloud , so it has dependencies to another which is from azure-c-sdk.
To avoid error , i am using umock functionality and mocking dependencies using STRICT_CALL.
But getting error of umock.
Please help me out.

code :

#include "umock_c/umock_c.h"
#include <catch2/catch.hpp>
using Catch::Matchers::Equals;

#include <sstream>
#include <string>

#include "aduc/c_utils.h"
#include "aduc/logging.h"


#define ENABLE_MOCKS
#include "azureiot/iothub_message.h"
#undef ENABLE_MOCKS

TEST_CASE("Test_Case-4: IotClient_SendMessageAsyn Test"){

    ADUC_Logging_Init(ADUC_LOG_DEBUG, "du-agent");
    // umock_c_reset_all_calls();

    REGISTER_UMOCK_ALIAS_TYPE(IOTHUB_MESSAGE_HANDLE, void*);
    
      

    SECTION("Validate Client-handle as null ,Fail")
    {
        bool result = IotClient_SendMessageAsyn((char *)"Hi", NULL, (char *)"test");
        CHECK (result == 0);
    }

    SECTION("Input are Valid and communication fail,Fail")
    {
        bool result = IotClient_SendMessageAsyn((char *)"{\"test\":\"Hi\"}", (IOTHUB_DEVICE_CLIENT_LL_HANDLE)1234, (char *)"test");
        CHECK (result == 0);
    }

    SECTION("Payload Json Invalid ,Fail")
    {
        bool result = IotClient_SendMessageAsyn(NULL, (IOTHUB_DEVICE_CLIENT_LL_HANDLE)1234,(char *)"test");
        CHECK (result == 0);
    }

    SECTION("Payload fail to convert utf-8,Fail")
    {
        
    
        STRICT_EXPECTED_CALL(IoTHubMessage_SetContentEncodingSystemProperty(0,0))
            .SetReturn(IOTHUB_MESSAGE_INVALID_ARG)
            .IgnoreAllArguments();

         bool result = IotClient_SendMessageAsyn((char *)"!@#$", (IOTHUB_DEVICE_CLIENT_LL_HANDLE)123, (char *)"test");
        CHECK (result == 0);
    }

    
   
}

Error while building

-- target architecture: x86_64
-- target architecture: x86_64
-- Configuring done
-- Generating done
-- Build files have been written to: /home/vetscan/accenture/dev_gc/test/adu-service/out
[1/2] Building CXX object src/agent/custom_iot_service/tests/CMakeFiles/custom_iot_service_unit_tests.dir/common_iotclient_communincation_ut.cpp.o
FAILED: src/agent/custom_iot_service/tests/CMakeFiles/custom_iot_service_unit_tests.dir/common_iotclient_communincation_ut.cpp.o
/usr/bin/c++ -DADUC_DOWNLOADS_FOLDER=\"/var/lib/adu/downloads\" -DADUC_INSTALLEDCRITERIA_FILE_PATH=\"/tmp/adu-test-installedcriteria\" -DADUC_LOG_FOLDER=\"/var/log/adu\" -DADUC_USE_ZLOGGING=1 -DADUC_VERSION=\"0.8.1\" -DARCHITECTURE_x86_64=1 -DAUTH_TYPE_0x509 -DAUTH_TYPE_SYM -DAUTH_TYPE_TPM -DFILE_UPLOAD_ENABLE=\"true\" -DTELEMETRY_ENABLE=\"true\" -I/usr/local/inc -I/usr/local/pal/linux -I/usr/include/dbus-1.0 -I/usr/lib/x86_64-linux-gnu/dbus-1.0/include -I/usr/include/glib-2.0 -I/usr/lib/x86_64-linux-gnu/glib-2.0/include -I/usr/include/libmount -I/usr/include/blkid -I../src/agent/custom_iot_service/tests/inc -I../src/agent/custom_iot_service/tests/../../inc -I../src/agent/custom_iot_service/tests/../inc -I../src/agent/hsm_interface/inc -I../src/utils/c_utils/inc -I../src/logging/inc -I../src/logging/zlog/inc -I../src/agent/pnp_helper/inc -I../src/agent/adu_core_interface/inc -I../src/inc -I../src/adu_types/inc -I../src/adu_workflow/inc -I../src/communication_abstraction/inc -I../src/extensions/extension_manager/inc -I../src/extensions/inc -I../src/utils/extension_utils/inc -I../src/utils/hash_utils/inc -I../src/utils/parser_utils/inc -I../src/utils/parson_json_utils/inc -I../src/utils/system_utils/inc -I../src/utils/workflow_utils/inc -I../src/utils/crypto_utils/inc -isystem /usr/local/include/azureiot -Werror -fPIE -D_FORTIFY_SOURCE=2 -fstack-protector-strong -Wformat -Werror=format-security -fno-rtti -Wall -Wextra -Wno-missing-braces -Wno-missing-field-initializers -Wno-unused-function -Wno-unused-parameter -Wno-ignored-qualifiers -g -std=gnu++11 -MD -MT src/agent/custom_iot_service/tests/CMakeFiles/custom_iot_service_unit_tests.dir/common_iotclient_communincation_ut.cpp.o -MF src/agent/custom_iot_service/tests/CMakeFiles/custom_iot_service_unit_tests.dir/common_iotclient_communincation_ut.cpp.o.d -o src/agent/custom_iot_service/tests/CMakeFiles/custom_iot_service_unit_tests.dir/common_iotclient_communincation_ut.cpp.o -c ../src/agent/custom_iot_service/tests/common_iotclient_communincation_ut.cpp
../src/agent/custom_iot_service/tests/common_iotclient_communincation_ut.cpp:21: error: "__cplusplus" redefined [-Werror]
   21 | #define  __cplusplus
      |
<built-in>: note: this is the location of the previous definition
In file included from /usr/local/include/umock_c/umock_c.h:13,
                 from ../src/agent/custom_iot_service/tests/common_iotclient_communincation_ut.cpp:1:
../src/agent/custom_iot_service/tests/common_iotclient_communincation_ut.cpp: In function ‘void ____C_A_T_C_H____T_E_S_T____0()’:
../src/agent/custom_iot_service/tests/common_iotclient_communincation_ut.cpp:154:9: error: ‘get_auto_ignore_args_function_IoTHubMessage_SetContentEncodingSystemProperty’ was not declared in this scope
  154 |         STRICT_EXPECTED_CALL(IoTHubMessage_SetContentEncodingSystemProperty(0,0))
      |         ^~~~~~~~~~~~~~~~~~~~
../src/agent/custom_iot_service/tests/common_iotclient_communincation_ut.cpp:154:9: error: ‘umock_c_strict_expected_IoTHubMessage_SetContentEncodingSystemProperty’ was not declared in this scope; did you mean ‘IoTHubMessage_SetContentEncodingSystemProperty’?
  154 |         STRICT_EXPECTED_CALL(IoTHubMessage_SetContentEncodingSystemProperty(0,0))
      |         ^~~~~~~~~~~~~~~~~~~~
cc1plus: all warnings being treated as errors
ninja: build stopped: subcommand failed.

@dcristoloveanu
Copy link
Member

Hi @gc-zoetis,

It looks like the portion where the MOCKABLE_FUNCTION declaration for IoTHubMessage_SetContentEncodingSystemProperty is not being picked up in the translation unit.

I can suggest 2 things:

  • Preprocess the translation unit so that you can see what the compiler will actually compile. Here is a SO entry on how to generate preprocessor output with gcc (seems like you have a gcc bacsed toolchain). https://stackoverflow.com/questions/3742822/preprocessor-output
  • Alternately if you want to attempt and spend some time to get a minimal repro to not package your entire project I could have a look also provided it's just a couple of steps to build your minimal repro.

Thanks!
/Dan

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants