Skip to content

Commit

Permalink
RDKB-51761 Test scenario to cover multiple rbus_open() call
Browse files Browse the repository at this point in the history
Reason for change: Need to cover test app and unit test to have a test cases which covers multiple rbus_open() with same component name without rbus_close() call.
The test scenario should also cover regDataElements, rbus_set, rbus_get, addrow and methodinvoke after doing multiple rbus_open() function call
Test Procedure: Start rtrouted and ./rbus_test.sh OR verify with unit_test.yml
Risks: Medium
Priority: P1

Signed-off-by: Deepak_m <[email protected]>
  • Loading branch information
dm097 committed Nov 10, 2023
1 parent 797e046 commit f4606e7
Show file tree
Hide file tree
Showing 2 changed files with 52 additions and 38 deletions.
23 changes: 22 additions & 1 deletion src/rbus/rbus.c
Original file line number Diff line number Diff line change
Expand Up @@ -5544,7 +5544,6 @@ rbusError_t rbusMethod_InvokeInternal(
{
RBUSLOG_ERROR("%s failed; Received error %d from RBUS Daemon for the object %s", handle->componentName, err, methodName);
/* Updating the outParmas as RBUS core is returning failure */
rbusObject_Init(outParams, NULL);
rbusValue_Init(&value1);
rbusValue_Init(&value2);

Expand Down Expand Up @@ -5579,8 +5578,30 @@ rbusError_t rbusMethod_Invoke(
rbusObject_t inParams,
rbusObject_t* outParams)
{
rbusValue_t value1 = NULL, value2 = NULL;
rbusObject_Init(outParams, NULL);

rbusValue_Init(&value1);
rbusValue_Init(&value2);
rbusValue_SetInt32(value1, RBUS_ERROR_INVALID_HANDLE);
rbusValue_SetString(value2, rbusError_ToString(RBUS_ERROR_INVALID_HANDLE));
rbusObject_SetValue(*outParams, "error_code", value1);
rbusObject_SetValue(*outParams, "error_string", value2);
rbusValue_Release(value1);
rbusValue_Release(value2);

VERIFY_HANDLE(handle);
struct _rbusHandle* handleInfo = (struct _rbusHandle*)handle;

rbusValue_Init(&value1);
rbusValue_Init(&value2);
rbusValue_SetInt32(value1, RBUS_ERROR_INVALID_INPUT);
rbusValue_SetString(value2, rbusError_ToString(RBUS_ERROR_INVALID_INPUT));
rbusObject_SetValue(*outParams, "error_code", value1);
rbusObject_SetValue(*outParams, "error_string", value2);
rbusValue_Release(value1);
rbusValue_Release(value2);

VERIFY_NULL(handle);
VERIFY_NULL(methodName);

Expand Down
67 changes: 30 additions & 37 deletions test/rbus/multiRbusOpenMethodConsumer/multiRbusOpenMethodConsumer.c
Original file line number Diff line number Diff line change
Expand Up @@ -100,59 +100,52 @@ int main(int argc, char *argv[])
rbusValue_Release(value2);

rc1 = rbusMethod_Invoke(handle1, "Device.Methods.SimpleMethod()", inParams1, &outParams1);
rbusObject_fwrite(outParams1, 1, stdout);
rbusObject_Release(outParams1);
rbusObject_Release(inParams1);

if(rc1 != RBUS_ERROR_INVALID_HANDLE)
{
printf("multiRbusOpenMethodConsumer: rbusMethod_Invoke(Device.Methods.SimpleMethod()) using handle1 return err:%d\n", rc1);
exit(EXIT_FAILURE);
}
rc2 = rbusMethod_Invoke(handle2, "Device.Methods.SimpleMethod()", inParams2, &outParams2);
rbusObject_fwrite(outParams2, 1, stdout);
rbusObject_Release(outParams2);
rbusObject_Release(inParams2);

if(rc2 != RBUS_ERROR_SUCCESS)
{
printf("multiRbusOpenMethodConsumer: rbusMethod_Invoke(Device.Methods.SimpleMethod()) using handle2 return err:%d\n", rc2);
exit(EXIT_FAILURE);
}

if(rc1 == RBUS_ERROR_SUCCESS)
{
rbusObject_fwrite(outParams1, 1, stdout);
rbusObject_Release(outParams1);
}
if(rc2 == RBUS_ERROR_SUCCESS)
{
rbusObject_fwrite(outParams2, 1, stdout);
rbusObject_Release(outParams2);
}
rbusObject_Release(inParams1);
rbusObject_Release(inParams2);

/*Test to check the Outparams error msg handling
This testcase reads the provider specific error code and prints it.
This test is expected to return error */

printf("\n This is a negative test to check the error values generated by the Provider \n");
rc1 = rbusMethod_Invoke(handle1, "Device.Methods.SimpleMethod1()", NULL, &outParams1);
rbusObject_fwrite(outParams1, 1, stdout);
rbusObject_Release(outParams1);

if(rc1 != RBUS_ERROR_INVALID_HANDLE)
{
printf("multiRbusOpenMethodConsumer: rbusMethod_Invoke(Device.Methods.SimpleMethod1()) using handle1 return err:%d\n", rc1);
exit(EXIT_FAILURE);
}

rc2 = rbusMethod_Invoke(handle2, "Device.Methods.SimpleMethod1()", NULL, &outParams2);
if(rc2 != RBUS_ERROR_SUCCESS)
rbusObject_fwrite(outParams2, 1, stdout);
rbusObject_Release(outParams2);

if(rc2 != RBUS_ERROR_INVALID_METHOD)
{
printf("multiRbusOpenMethodConsumer: rbusMethod_Invoke(Device.Methods.SimpleMethod1()) using handle2 %s:%d\n",
rc2 == RBUS_ERROR_SUCCESS ? "success" : "fail",rc2);
rc2 == RBUS_ERROR_INVALID_METHOD ? "success" : "fail",rc2);
exit(EXIT_FAILURE);
}

if(rc1 != RBUS_ERROR_INVALID_HANDLE && rc1 != RBUS_ERROR_SUCCESS)
{
rbusObject_fwrite(outParams1, 1, stdout);
rbusObject_Release(outParams1);
}

if(rc2 != RBUS_ERROR_SUCCESS)
{
rbusObject_fwrite(outParams2, 1, stdout);
rbusObject_Release(outParams2);
}

printf("\n\n");
rbusObject_Init(&inParams1, NULL);

Expand Down Expand Up @@ -180,8 +173,7 @@ int main(int argc, char *argv[])
rbusValue_Release(value2);

rc1 = rbusMethod_InvokeAsync(handle1, "Device.Methods.AsyncMethod()", inParams1, asyncMethodHandler, 0);


rbusObject_Release(inParams1);
printf("multiRbusOpenMethodConsumer: rbusMethod_InvokeAsync(Device.Methods.AsyncMethod()) for handle1 %s with err :%d\n", rc1 == RBUS_ERROR_INVALID_HANDLE ? "success" : "fail",rc1);

rc2 = rbusMethod_InvokeAsync(handle2, "Device.Methods.AsyncMethod()", inParams2, asyncMethodHandler, 0);
Expand All @@ -190,12 +182,14 @@ int main(int argc, char *argv[])


rc2 = rbusMethod_Invoke(handle2, "Device.Methods.AsyncMethod()", inParams2, &outParams2);
printf("multiRbusOpenMethodConsumer negative Test: rbusMethod_Invoke(Device.Methods.AsyncMethod()) using handle2 %s with return:%d\n", rc2 == RBUS_ERROR_SUCCESS ? "success" : "fail",rc2);

if(rc2 == RBUS_ERROR_SUCCESS)
printf("multiRbusOpenMethodConsumer negative Test: rbusMethod_Invoke(Device.Methods.AsyncMethod()) using handle2 %s with return:%d\n", rc2 == RBUS_ERROR_TIMEOUT ? "success" : "fail",rc2);
rbusObject_fwrite(outParams2, 1, stdout);
rbusObject_Release(outParams2);
rbusObject_Release(inParams2);

if(rc2 != RBUS_ERROR_TIMEOUT)
{
rbusObject_fwrite(outParams2, 1, stdout);
rbusObject_Release(outParams2);
exit(EXIT_FAILURE);
}

sleep(10);
Expand All @@ -204,18 +198,17 @@ int main(int argc, char *argv[])
if(rc2 != RBUS_ERROR_SUCCESS)
{
printf("multiRbusOpenMethodConsumer: rbus_close handle2 failed: %d\n", rc2);
exit(EXIT_FAILURE);
}

exit2:
rc1 = rbus_close(handle1);
if(rc1 != RBUS_ERROR_INVALID_HANDLE)
{
printf("multiRbusOpenMethodConsumer: rbus_close handle1 err: %d\n", rc1);
exit(EXIT_FAILURE);
}
exit1:
rbusObject_Release(inParams1);
rbusObject_Release(inParams2);

printf("multiRbusOpenMethodConsumer: exit\n");
return rc2;
}
Expand Down

0 comments on commit f4606e7

Please sign in to comment.