Skip to content

Conversation

@KarthikeyanR470
Copy link
Contributor

Extend the suport of the open function to support URL's.

https://github.com/rdkcentral/ut-control/blob/develop/include/ut_kvp.h

Transform function from

ut_kvp_status_t ut_kvp_open(ut_kvp_instance_t *pInstance, char *fileName);
to

ut_kvp_status_t ut_kvp_open(ut_kvp_instance_t *pInstance, char *fileNameOrUrl);

if the filename is prefixed with https/http:// then it's a url
if it's not prefixed then assume it's a file
if it's prefixed with file:// then assume it's a file.

@KarthikeyanR470 KarthikeyanR470 requested a review from a team as a code owner October 8, 2025 12:03
@KarthikeyanR470 KarthikeyanR470 changed the title gh #98 :Extend kvp open function to also support URLs gh #98 Extend kvp open function to also support URLs Oct 8, 2025
@KarthikeyanR470 KarthikeyanR470 linked an issue Oct 8, 2025 that may be closed by this pull request
src/ut_kvp.c Outdated
ut_kvp_instance_internal_t *pInternal = validateInstance(pInstance);
bool url = is_url(fileNameOrUrl);

if ((access(fileNameOrUrl, F_OK) != 0) && url == 0)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you reverse the order here.

url == 0 && (access(fileNameOrUrl, F_OK) != 0)

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add comments what is the purpose of the access(), your flow should be clear by reading the comments on what your doing.

#define KVP_VALID_TEST_SEQUENCE_INCLUDE_YAML "assets/include/sequence-include.yaml"
#define KVP_VALID_TEST_RESOLVE_YAML_TAGS_YAML "assets/yaml_tags.yaml"
#define KVP_VALID_TEST_RESOLVE_YAML_TAGS_IN_SEQUENCE_YAML "assets/yaml_tags_in_sequence.yaml"
#define KVP_VALID_TEST_URL_FILE "https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/2s.yaml"
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

KVP_VALID_TEST_URL_FILE -> rename this variable to KVP_VALID_TEST_URL

otherwise it will be misleading .

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

Copy link
Contributor

@Ulrond Ulrond left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

changes required

src/ut_kvp.c Outdated
ut_kvp_instance_internal_t *pInternal = validateInstance(pInstance);
bool url = is_url(fileNameOrUrl);

if ((access(fileNameOrUrl, F_OK) != 0) && url == 0)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

please add comments what is the purpose of the access(), your flow should be clear by reading the comments on what your doing.

@rdkcentral rdkcentral deleted a comment from KarthikeyanR470 Oct 17, 2025
@rdkcentral rdkcentral deleted a comment from KarthikeyanR470 Oct 17, 2025
@kanjoe24
Copy link
Contributor

Can you also share before and after logs for the latest changes please

@kanjoe24 kanjoe24 requested a review from Ulrond October 17, 2025 10:33
Copy link
Contributor

@Ulrond Ulrond left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

coding standards and some bugs I think.

src/ut_kvp.c Outdated
{
return false;
}
return (strncmp(input, "http://", 7) == 0 || strncmp(input, "https://", 8) == 0);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

coding standard both the usage of MAGIC NUMBERS & the consolidation of functionality for add obfuscation.

Let the compiler consolidate the functionality with optimisation your requirement when you type in code is to make it debug able with breakpoints and also make it completely clear, even if it's longer to write.

all errors should also be checked in all functions with assert, since you've included it..

below is an example where you can code to set breakpoints on any of the return codes for debugging. All code should be walked through in the debugger to ensure it works even if you don't test the function, and you can't test your || case without separating it.

The compiler will optimise it, it's your not your as an engineer to do that, it's your job to make it very readable and clear.

#define UT_KVP_HTTPS_PREFIX "https:///" 
#define UT_KVP_HTTP_PREFIX "http://"
#define UT_KVP_FILE_PREFIX "file://"

// Automatically calculate lengths by subtracting the '\0' null terminator
#define UT_KVP_HTTPS_PREFIX_LEN (sizeof(HTTPS_PREFIX) - 1)
#define UT_KVP_HTTP_PREFIX_LEN (sizeof(HTTP_PREFIX) - 1) 
#define UT_KVP_FILE_PREFIX_LEN (sizeof(FILE_PREFIX) - 1) 

....

/**
 * @brief Checks if an input string is a known URL type.
 * @param input The string to check.
 * @return true if the string starts with http://, https://, or file://, false otherwise.
 */
static bool is_url(const char *input) 
{
   assert( input != NULL );
    if (input == NULL) 
    {
        return false;
    }
    
    // Check for http://
    if (strncmp(input, UT_KVP_HTTP_PREFIX, UT_KVP_HTTP_PREFIX_LEN) == 0)
    {
        return true;
    }
    
    // Check for https://
    if (strncmp(input, UT_KVP_HTTPS_PREFIX, UT_KVP_HTTPS_PREFIX_LEN) == 0)
    {
        return true;
    }

     // No matches found
    return false;
}

src/ut_kvp.c Outdated
// -------------------- Handle URL-based input -----------------------
if(bFilenameIsAUrl == true)
{
char yamlLocal[UT_KVP_MAX_ELEMENT_SIZE];
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

move the allocation tot he top of the function for visibly in what this function uses from local memory.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated

src/ut_kvp.c Outdated

// Dynamically allocate, since fy_document_build_from_malloc_string()
// will take ownership and free it internally.
char *yaml = strdup(yamlLocal);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why do you strdup the input strings? when you've already got a local copy of it? using yamlLocal

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated

src/ut_kvp.c Outdated
// will take ownership and free it internally.
char *yaml = strdup(yamlLocal);

if (!yaml)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

coding standards if (!) should be avoided it's not clear the intent, but based on the above comment I don't see why your duplicating something that's already duplicated?

if ( yaml == NULL )
{
...
}
``

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

corrected

src/ut_kvp.c Outdated
{
UT_LOG_ERROR("[%s] cannot be accesed", fileName);
// Skip "file://"
fileNameOrUrl = fileNameOrUrl + 7;
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

fileNameOrUrl = fileNameOrUrl + UT_KVP_FILE_PREFIX_LEN;

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated

src/ut_kvp.c Outdated
if (fileNameOrUrl == NULL)
{
UT_LOG_ERROR( "Invalid Param [fileName]" );
UT_LOG_ERROR("Invalid Param [fileNameOrUrl]");
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You should have a NULL error code UT_KVP_STATUS_NULL_PARAM ensure that INVALID_PARAM is used for bounds checking, and NULL param is used for NULLS

UT_LOG_ERROR("NULL PARAM [fileNameOrUrl]");

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

updated

src/ut_kvp.c Outdated
}

if (access(fileName, F_OK) != 0)
ut_kvp_instance_internal_t *pInternal = validateInstance(pInstance);
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

no error checks on pInstance which is also INVALID_INSTANCE & NULL PARAM possible.

@kanjoe24 kanjoe24 requested a review from Copilot October 30, 2025 14:12
@rdkcentral rdkcentral deleted a comment from KarthikeyanR470 Oct 30, 2025
@rdkcentral rdkcentral deleted a comment from KarthikeyanR470 Oct 30, 2025
Copy link

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

This PR enhances the ut_kvp_open function to support URL-based input (HTTP/HTTPS) and file URI schemes, in addition to regular file paths. It also updates the error handling to use a more specific UT_KVP_STATUS_NULL_PARAM status code for null parameter cases.

  • Adds support for HTTP, HTTPS, and file:// URI schemes in ut_kvp_open
  • Changes null parameter error code from UT_KVP_STATUS_INVALID_PARAM to UT_KVP_STATUS_NULL_PARAM
  • Adds an HTTP server in the test runner script to enable local URL testing

Reviewed Changes

Copilot reviewed 4 out of 4 changed files in this pull request and generated 9 comments.

File Description
src/ut_kvp.c Implements URL detection, file URI handling, and refactors ut_kvp_open to support URLs via ut_kvp_openMemory
include/ut_kvp.h Updates function signature to use const char* and renames parameter to fileNameOrUrl
tests/src/ut_test_kvp.c Adds test cases for HTTPS, HTTP, and file:// URI schemes and updates expected error code
tests/src/ut_control_test.sh Adds HTTP server setup and cleanup logic to support URL testing
Comments suppressed due to low confidence (1)

include/ut_kvp.h:79

  • Documentation is outdated: the function now returns UT_KVP_STATUS_NULL_PARAM for null parameters (as shown in src/ut_kvp.c line 146), not UT_KVP_STATUS_INVALID_PARAM. The @RetVal documentation should be updated to reflect this change and add the missing UT_KVP_STATUS_NULL_PARAM retval.
 * @retval UT_KVP_STATUS_INVALID_PARAM - One or more parameters are invalid (e.g., null pointer).

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

@KarthikeyanR470
Copy link
Contributor Author

Result

2025-10-31-12:02:34, LOG   , ut_console.c,   661 :      Test Complete : 'kvp ssequence include support on malloc data'

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     15     15    n/a      0        0
               tests     73     73     73      0        0
             asserts    416    416    416      0      n/a

Elapsed time =    4.402 seconds

@kanjoe24 kanjoe24 requested a review from Ulrond November 5, 2025 09:32
Ulrond
Ulrond previously approved these changes Nov 5, 2025
Copy link
Contributor

@Ulrond Ulrond left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

looks good

Copy link
Contributor

@Ulrond Ulrond left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

more tests required.

Something wrong the fact that your using access() on URL means either the test is not running or something is broken.

it should be failing..


if(fy_document_resolve(srcDoc) != 0)
// Verify that the file is accessible
if (access(fileNameOrUrl, F_OK) != 0)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

doesn't this fail if the filename is a URL? Since the URL hasn't been downloaded you can't call access on it?

Why don't you get the error UT_KVP_STATUS_FILE_OPEN_ERROR on URL? in your testing is there a gap in your testing?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The URL path does not reach the access() check.
The logic flow ensures that:

if(bFilenameIsAUrl == true)

1.If the input is a URL (is_url(...) == true), the function immediately enters the 'if' block, constructs an in-memory YAML string, calls ut_kvp_openMemory(), and returns.
So URLs never fall through to the access() path.

2.The access(fileNameOrUrl, F_OK) check is executed only for non-URL file-based inputs.

So the code does not attempt to call access() on a URL, and therefore we do not get UT_KVP_STATUS_FILE_OPEN_ERROR for URL cases.


UT_LOG_STEP("ut_kvp_open( pInstance, KVP_VALID_TEST_URI_FILE ) - Positive");
status = ut_kvp_open( pInstance, KVP_VALID_TEST_URI_FILE);
UT_ASSERT( status == UT_KVP_STATUS_SUCCESS );
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

You need to add comments on the purpose of each test and what your trying to achieve.

Both Positive & Negative testing are always required.

And add comments to be the goals of the tests specifically.

  1. Valid Filenames, for open file:// &
  2. Valid Filanemes for https:// & http://

Malformed URLS, and invalid filenames must also be checked..

CAPS HTTPS/HTTP/FILE should also be failing and tested.

Ensure that both params are validated.

Whilst you can test the ut_kvp_open() function, how do you know it's read the right data in?
You need to add another tests to ut_kvp_open() & read data to prove it's working then ut_kvp_close().

That's a L2 test, and also if not already existing will require a test, I would suggest having a test for points 1) & 2) above.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

@Ulrond
Copy link
Contributor

Ulrond commented Nov 28, 2025

please resolve & review conversations and resolve as required..
Keep open conversations that are still valid or where a reply has been made and there's an option discussion.

src/ut_kvp.c Outdated
return NULL;
}

if (strncmp(filename, "http:", 5) == 0 || strncmp(filename, "https:", 6) == 0)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

can you correct here also -> if (strncmp(filename, "http:", 5) == 0 || strncmp(filename, "https:", 6) == 0)

Magic numbers where you now have macros to cover it.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Updated

Copy link
Contributor

@Ulrond Ulrond left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

comments

@KarthikeyanR470
Copy link
Contributor Author

Before
Result

2025-10-31-12:02:34, LOG   , ut_console.c,   661 :      Test Complete : 'kvp ssequence include support on malloc data'

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     15     15    n/a      0        0
               tests     73     73     73      0        0
             asserts    416    416    416      0      n/a

Elapsed time =    4.402 seconds

After

(feature/issue98_support_url)$ ./ut_control_test.sh

UT CORE Version: 5.0.0-1-ge343364
Listing Filename:[/tmp/ut-log_2025-12-10_092006.log-Listing.xml]
Results Filename:[/tmp/ut-log_2025-12-10_092006.log]

2025-12-10-09:20:06, LOG   , ut_cunit.c,   147 : ---- start of test run ----

 ut-core: Wrapper framework for testing frameworks

***************** CUNIT CONSOLE - MAIN MENU ******************************
(R)un  (S)elect  (L)ist  (A)ctivate  (F)ailures  (O)ptions  (H)elp  (Q)uit
Enter command: R

2025-12-10-09:20:08, LOG   , ut_console.c,   633 :

2025-12-10-09:20:08, LOG   , ut_console.c,   636 : Running Suite : L1 - ut_control function tests
2025-12-10-09:20:08, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Init Exit'
2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,    62 :
test_ut_control_l1_testInitExit

2025-12-10-09:20:08, ERROR , ut_control_plane.c,   584 : Invalid Handle

2025-12-10-09:20:08, ERROR , ut_control_plane.c,   406 : port cannot be 0

2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,    83 : test_ut_control_l1_testInitExit

2025-12-10-09:20:08, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Init Exit'
2025-12-10-09:20:08, LOG   , ut_console.c,   633 :

2025-12-10-09:20:08, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp register callback'
2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,   130 :
test_ut_control_l1_regsiterCallback

2025-12-10-09:20:08, ERROR , ut_control_plane.c,   513 : Invalid Param

2025-12-10-09:20:08, ERROR , ut_control_plane.c,   519 : NULL callbackFunction

2025-12-10-09:20:08, ERROR , ut_control_plane.c,   525 : NULL userData

2025-12-10-09:20:08, ERROR , ut_control_plane.c,   507 : Invalid Handle

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 1

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 2

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 3

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 4

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 5

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 6

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 7

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 8

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 9

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 10

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 11

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 12

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 13

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 14

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 15

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 16

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 17

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 18

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 19

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 20

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 21

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 22

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 23

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 24

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 25

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 26

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 27

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 28

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 29

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 30

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 31

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 32

2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,   166 : test_ut_control_l1_regsiterCallback

2025-12-10-09:20:08, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp register callback'
2025-12-10-09:20:08, LOG   , ut_console.c,   633 :

2025-12-10-09:20:08, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp websocket service'
2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,    92 :
test_ut_control_l1_testStartStop

2025-12-10-09:20:08, ERROR , ut_control_plane.c,   584 : Invalid Handle

2025-12-10-09:20:08, ERROR , ut_control_plane.c,   584 : Invalid Handle

2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,    99 : Control Plan Init

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   475 : pthread id = 140589101217344

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   203 : pthread id 2 = 140589092824640

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   217 : EXIT REQUESTED in thread1. Thread1 going to exit

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   252 : Thread2 exited

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   475 : pthread id = 140589101217344

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   203 : pthread id 2 = 140589092824640

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   217 : EXIT REQUESTED in thread1. Thread1 going to exit

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   252 : Thread2 exited

2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,   121 : test_ut_control_l1_testStartStop

2025-12-10-09:20:08, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp websocket service'
2025-12-10-09:20:08, LOG   , ut_console.c,   633 :

2025-12-10-09:20:08, LOG   , ut_console.c,   636 : Running Suite : L2 - ut_control Module tests
2025-12-10-09:20:08, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Init'
2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,   228 : test_ut_control_performInit()

2025-12-10-09:20:08, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Init'
2025-12-10-09:20:08, LOG   , ut_console.c,   633 :

2025-12-10-09:20:08, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Start'
2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,   237 : UT_ControlPlane_RegisterCallbackOnMessage() client testYAMLCall
back - Negative

2025-12-10-09:20:08, ERROR , ut_control_plane.c,   525 : NULL userData
Original Yaml file
---
test1:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false
2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,   246 : UT_ControlPlane_RegisterCallbackOnMessage() client testYAMLCall
back - Positive

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 1

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   475 : pthread id = 140589101217344
Original Json file
{
  "test3": {
    "jsonData": "somevalue",
    "x": 1,
    "on": true
  },
  "test4": {
    "jsonData1": "somevalue1",
    "y": 2,
    "off": false
  }
}

2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,   262 : UT_ControlPlane_RegisterCallbackOnMessage() client testJSONCall
back - Positive

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   203 : pthread id 2 = 140589092824640

2025-12-10-09:20:08, DEBUG , ut_control_plane.c,   538 : callback_entry_index : 2

2025-12-10-09:20:08, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Start'
2025-12-10-09:20:08, LOG   , ut_console.c,   633 :

2025-12-10-09:20:08, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp run client'
2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,   279 : Please Run the command `./curl-client-json.sh or/& ./curl-clien
t-yaml.sh or/& ./curl-client-binary.sh` from another terminal and press return;'

2025-12-10-09:20:08, LOG   , ut_test_control_plane.c,   280 : In order to pass the test you need to run each of the curl scri
pts'

2025-12-10-09:20:11, DEBUG , ut_control_plane.c,   310 : LWS_CALLBACK_HTTP

2025-12-10-09:20:11, DEBUG , ut_control_plane.c,   323 : LWS_CALLBACK_HTTP

2025-12-10-09:20:11, DEBUG , ut_control_plane.c,   326 : LWS_CALLBACK_HTTP, perSessionData not NULL

2025-12-10-09:20:11, DEBUG , ut_control_plane.c,   343 : LWS_CALLBACK_HTTP_BODY_COMPLETION

2025-12-10-09:20:11, DEBUG , ut_control_plane.c,   224 : DATA RECEIVED

2025-12-10-09:20:11, LOG   , ut_test_control_plane.c,   198 : **************testJSONCallback is called****************
"test3":
  "jsonData": "somevalue"
  "x": 1
  "on": true
"test4":
  "jsonData1": "somevalue1"
  "y": 2
  "off": false

Original Json file
{
  "test3": {
    "jsonData": "somevalue",
    "x": 1,
    "on": true
  },
  "test4": {
    "jsonData1": "somevalue1",
    "y": 2,
    "off": false
  }
}

2025-12-10-09:20:15, DEBUG , ut_control_plane.c,   310 : LWS_CALLBACK_HTTP

2025-12-10-09:20:15, DEBUG , ut_control_plane.c,   323 : LWS_CALLBACK_HTTP

2025-12-10-09:20:15, DEBUG , ut_control_plane.c,   326 : LWS_CALLBACK_HTTP, perSessionData not NULL

2025-12-10-09:20:15, DEBUG , ut_control_plane.c,   343 : LWS_CALLBACK_HTTP_BODY_COMPLETION

2025-12-10-09:20:15, DEBUG , ut_control_plane.c,   224 : DATA RECEIVED
*******************************Inside testYAMLCallback************************
test1:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false

Original Yaml file
---
test1:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false
2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   310 : LWS_CALLBACK_HTTP

2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   323 : LWS_CALLBACK_HTTP

2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   326 : LWS_CALLBACK_HTTP, perSessionData not NULL

2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   343 : LWS_CALLBACK_HTTP_BODY_COMPLETION

2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   224 : DATA RECEIVED
*******************************Inside testYAMLCallback************************
test1:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false

Original Yaml file
---
test1:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false
2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   310 : LWS_CALLBACK_HTTP

2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   323 : LWS_CALLBACK_HTTP

2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   326 : LWS_CALLBACK_HTTP, perSessionData not NULL

2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   343 : LWS_CALLBACK_HTTP_BODY_COMPLETION

2025-12-10-09:20:19, DEBUG , ut_control_plane.c,   224 : DATA RECEIVED

2025-12-10-09:20:19, LOG   , ut_test_control_plane.c,   198 : **************testJSONCallback is called****************
"test3":
  "jsonData": "somevalue"
  "x": 1
  "on": true
"test4":
  "jsonData1": "somevalue1"
  "y": 2
  "off": false

Original Json file
{
  "test3": {
    "jsonData": "somevalue",
    "x": 1,
    "on": true
  },
  "test4": {
    "jsonData1": "somevalue1",
    "y": 2,
    "off": false
  }
}

2025-12-10-09:20:23, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp run client'
2025-12-10-09:20:23, LOG   , ut_console.c,   633 :

2025-12-10-09:20:23, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Stop'
2025-12-10-09:20:23, LOG   , ut_test_control_plane.c,   310 : test_ut_control_performStop()

2025-12-10-09:20:23, DEBUG , ut_control_plane.c,   217 : EXIT REQUESTED in thread1. Thread1 going to exit

2025-12-10-09:20:38, DEBUG , ut_control_plane.c,   252 : Thread2 exited

2025-12-10-09:20:38, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Stop'
2025-12-10-09:20:38, LOG   , ut_console.c,   633 :

2025-12-10-09:20:38, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Exit'
2025-12-10-09:20:38, LOG   , ut_test_control_plane.c,   316 : test_ut_control_performExit()

2025-12-10-09:20:38, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Exit'
2025-12-10-09:20:38, LOG   , ut_console.c,   633 :

2025-12-10-09:20:38, LOG   , ut_console.c,   636 : Running Suite : L1 - ut_control mapping tests
2025-12-10-09:20:38, LOG   , ut_console.c,   639 :      Running Test : 'ut-control Get Map Value'
2025-12-10-09:20:38, LOG   , ut_test_control_plane.c,   333 : test_ut_control_get_map_value()

2025-12-10-09:20:38, LOG   , ut_console.c,   661 :      Test Complete : 'ut-control Get Map Value'
2025-12-10-09:20:38, LOG   , ut_console.c,   633 :

2025-12-10-09:20:38, LOG   , ut_console.c,   639 :      Running Test : 'ut-control get Map String'
2025-12-10-09:20:38, LOG   , ut_test_control_plane.c,   339 : test_ut_control_get_map_string()

2025-12-10-09:20:38, LOG   , ut_console.c,   661 :      Test Complete : 'ut-control get Map String'
2025-12-10-09:20:38, LOG   , ut_console.c,   633 :

2025-12-10-09:20:38, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test functions
2025-12-10-09:20:38, LOG   , ut_console.c,   639 :      Running Test : 'kvp create / destroy'
2025-12-10-09:20:38, ERROR , ut_kvp.c,   897 : Invalid Handle
2025-12-10-09:20:38, LOG   , ut_console.c,   661 :      Test Complete : 'kvp create / destroy'
2025-12-10-09:20:38, LOG   , ut_console.c,   633 :

2025-12-10-09:20:38, LOG   , ut_console.c,   639 :      Running Test : 'kvp read'
2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   101 : ut_kvp_open( NULL, NULL )
2025-12-10-09:20:38, ERROR , ut_kvp.c,   897 : Invalid Handle
2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   106 : ut_kvp_createInstance
2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   111 : ut_kvp_close( pInstance ) - Not been opened
2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   115 : ut_kvp_open( pInstance, NULL ) - Negative
2025-12-10-09:20:38, ERROR , ut_kvp.c,   143 : NULL PARAM [fileNameOrUrl]
2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   120 : ut_kvp_open( pInstance, assets/this_does_not_exist.yaml - filename doesn'
t exist ) - Negative
2025-12-10-09:20:38, ERROR , ut_kvp.c,   181 : [assets/this_does_not_exist.yaml] cannot be accessed
2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   125 : ut_kvp_open( pInstance, assets/zero_length.yaml - zero length file ) - Ne
gative[ERR]: fy_parse_load_document() failed

2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   130 : ut_kvp_open( pInstance, KVP_VALID_TEST_NOT_VALID_URL_HTTPS ) - Negative
2025-12-10-09:20:38, ERROR , ut_kvp.c,   181 : [HTTPS://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets
/include/2s.yaml] cannot be accessedStatus = 1

2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   136 : ut_kvp_open( pInstance, KVP_VALID_TEST_NOT_VALID_URI_HTTP ) - Negative
2025-12-10-09:20:38, ERROR , ut_kvp.c,   181 : [HTTP://localhost:8000/assets/yaml_tags.yaml] cannot be accessedStatus = 1

2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   142 : ut_kvp_open( pInstance, KVP_VALID_TEST_NOT_VALID_URI_FILE ) - Negative
2025-12-10-09:20:38, ERROR , ut_kvp.c,   181 : [FILE://assets/yaml_tags.yaml] cannot be accessedStatus = 1

2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   148 : ut_kvp_open( pInstance,  KVP_VALID_TEST_YAML_FILE ) - Positive
2025-12-10-09:20:38, STEP  , ut_test_kvp.c,   152 : ut_kvp_open( pInstance,  KVP_VALID_TEST_URL_HTTPS ) - Positive
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   156 : ut_kvp_open( pInstance,  KVP_VALID_TEST_URI_HTTP ) - Positive
2025-12-10-09:20:39, ERROR , ut_kvp.c,  1206 : Error: curl_easy_perform() failed: Server returned nothing (no headers, no dat
a)

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   160 : ut_kvp_open( pInstance,  KVP_VALID_TEST_URI_FILE ) - Positive
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   164 : ut_kvp_open( pInstance, assets/no_data_file.yaml ) - Postive
2025-12-10-09:20:39, ERROR , ut_kvp.c,  1165 : Warning: Cannot merge nodes of incompatible types

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   169 : ut_kvp_destroyInstance(1) - Positive
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   171 : ut_kvp_destroyInstance(2) - Positive
2025-12-10-09:20:39, ERROR , ut_kvp.c,   903 : Invalid Handle - magic failure
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   175 : ut_kvp_close(1) - Positive
2025-12-10-09:20:39, ERROR , ut_kvp.c,   903 : Invalid Handle - magic failure
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   177 : ut_kvp_close(2) - Positive
2025-12-10-09:20:39, ERROR , ut_kvp.c,   903 : Invalid Handle - magic failure
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   181 : ut_kvp_close(3) - Positive
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   185 : ut_kvp_close(3) - Positive
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   187 : ut_kvp_close(4) - Positive
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp read'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder
2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint8'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xff,255].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint8'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint16'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xffff,65535].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint16'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp string'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   403 : ut_kvp_getField() - Check for INVALID_PARAM
2025-12-10-09:20:39, ERROR , ut_kvp.c,   897 : Invalid Handle
2025-12-10-09:20:39, ERROR , ut_kvp.c,   642 : Invalid Param - pszKey
2025-12-10-09:20:39, ERROR , ut_kvp.c,   642 : Invalid Param - pszKey
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   415 : ut_kvp_getStringField() - Check for UT_KVP_STATUS_KEY_NOT_FOUND
2025-12-10-09:20:39, ERROR , ut_kvp.c,   673 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_K
EY_NOT_FOUND
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   428 : ut_kvp_getStringField() - Check String with no quotes for UT_KVP_STATUS_S
UCCESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   432 : checkStringDeadBeefNoQuotes[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   434 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   438 : checkStringDeadBeef[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   440 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   444 : checkStringDeadBeef2[the beef is also dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   446 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   450 : checkStringDeadBeef[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   452 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   456 : checkStringDeadBeef2[the beef is also dead]
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp string'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint32'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xffffffff,4294967295].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint32'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint64'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint64'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp list'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   679 : invalid key
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp list'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp float'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   615 : ut_kvp_getFloatField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   619 : ut_kvp_getFloatField()
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp float'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp double'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   631 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   635 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   639 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   643 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   647 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, ERROR , ut_kvp.c,   573 : Error: Invalid floating-point string: 'invalid_string'

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   651 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, ERROR , ut_kvp.c,   573 : Error: Invalid floating-point string: 'invalid_string'

2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp double'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence'
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp dataByte'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   466 : ut_kvp_getDataBytes() - Check for NULL_PARAM - First Argument
2025-12-10-09:20:39, ERROR , ut_kvp.c,   897 : Invalid Handle
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   471 : ut_kvp_getDataBytes() - Check for NULL_PARAM - Second Argument
2025-12-10-09:20:39, ERROR , ut_kvp.c,   774 : Invalid Param - pszKey
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   476 : ut_kvp_getDataBytes() - Check for NULL_PARAM - Third Argument
2025-12-10-09:20:39, ERROR , ut_kvp.c,   780 : Invalid address passed
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   482 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes
_count = 0, when key is not found
2025-12-10-09:20:39, ERROR , ut_kvp.c,   804 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_K
EY_NOT_FOUND
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   488 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   492 : Parsed 48 bytes:
0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15
0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   497 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   501 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   505 : Parsed 48 bytes:
0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15
0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   510 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   514 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes
_count = 0
2025-12-10-09:20:39, ERROR , ut_kvp.c,   862 : Invalid byte value: ff
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   518 : Parsed 0 bytes:

2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   519 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   523 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   527 : Parsed 4 bytes:
0x00 0xff 0xff 0xff
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   532 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   536 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   540 : Parsed 4 bytes:
0x00 0x37 0xff 0xff
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   545 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   549 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   553 : Parsed 4 bytes:
0x00 0xff 0x37 0xff
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   558 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   562 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   566 : Parsed 4 bytes:
0x00 0xff 0xff 0x37
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   571 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   575 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   579 : Parsed 3 bytes:
0xff 0xdd 0xee
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   584 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   588 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes
_count = 0
2025-12-10-09:20:39, ERROR , ut_kvp.c,   862 : Invalid byte value: 9A
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   592 : Parsed 0 bytes:

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   596 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   600 : Parsed 4 bytes:
0xff 0xed 0x15 0xee
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   605 :

2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp dataByte'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions JSON Decoder
2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp string'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   403 : ut_kvp_getField() - Check for INVALID_PARAM
2025-12-10-09:20:39, ERROR , ut_kvp.c,   897 : Invalid Handle
2025-12-10-09:20:39, ERROR , ut_kvp.c,   642 : Invalid Param - pszKey
2025-12-10-09:20:39, ERROR , ut_kvp.c,   642 : Invalid Param - pszKey
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   415 : ut_kvp_getStringField() - Check for UT_KVP_STATUS_KEY_NOT_FOUND
2025-12-10-09:20:39, ERROR , ut_kvp.c,   673 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_K
EY_NOT_FOUND
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   428 : ut_kvp_getStringField() - Check String with no quotes for UT_KVP_STATUS_S
UCCESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   432 : checkStringDeadBeefNoQuotes[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   434 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   438 : checkStringDeadBeef[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   440 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   444 : checkStringDeadBeef2[the beef is also dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   446 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   450 : checkStringDeadBeef[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   452 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   456 : checkStringDeadBeef2[the beef is also dead]
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp string'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint8'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xff,255].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint8'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint16'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xffff,65535].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint16'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint32'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xffffffff,4294967295].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint32'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint64'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint64'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp list'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   679 : invalid key
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp list'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp float'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   615 : ut_kvp_getFloatField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   619 : ut_kvp_getFloatField()
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp float'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp double'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   631 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   635 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   639 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   643 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   647 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, ERROR , ut_kvp.c,   573 : Error: Invalid floating-point string: 'invalid_string'

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   651 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, ERROR , ut_kvp.c,   573 : Error: Invalid floating-point string: 'invalid_string'

2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp double'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence'
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions Test without Open
2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp read negative'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   683 : ut_kvp_getBoolField() - negative
2025-12-10-09:20:39, ERROR , ut_kvp.c,   903 : Invalid Handle - magic failure
2025-12-10-09:20:39, ERROR , ut_kvp.c,   903 : Invalid Handle - magic failure
2025-12-10-09:20:39, ERROR , ut_kvp.c,   903 : Invalid Handle - magic failure
2025-12-10-09:20:39, ERROR , ut_kvp.c,   903 : Invalid Handle - magic failure
2025-12-10-09:20:39, ERROR , ut_kvp.c,   656 : No Data File open
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp read negative'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder with malloc'd da
ta
2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint8'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xff,255].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint8'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint16'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xffff,65535].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint16'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp string'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   403 : ut_kvp_getField() - Check for INVALID_PARAM
2025-12-10-09:20:39, ERROR , ut_kvp.c,   897 : Invalid Handle
2025-12-10-09:20:39, ERROR , ut_kvp.c,   642 : Invalid Param - pszKey
2025-12-10-09:20:39, ERROR , ut_kvp.c,   642 : Invalid Param - pszKey
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   415 : ut_kvp_getStringField() - Check for UT_KVP_STATUS_KEY_NOT_FOUND
2025-12-10-09:20:39, ERROR , ut_kvp.c,   673 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_K
EY_NOT_FOUND
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   428 : ut_kvp_getStringField() - Check String with no quotes for UT_KVP_STATUS_S
UCCESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   432 : checkStringDeadBeefNoQuotes[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   434 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   438 : checkStringDeadBeef[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   440 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   444 : checkStringDeadBeef2[the beef is also dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   446 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   450 : checkStringDeadBeef[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   452 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   456 : checkStringDeadBeef2[the beef is also dead]
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp string'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint32'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xffffffff,4294967295].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint32'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint64'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint64'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp float'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   615 : ut_kvp_getFloatField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   619 : ut_kvp_getFloatField()
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp float'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp double'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   631 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   635 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   639 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   643 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   647 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, ERROR , ut_kvp.c,   573 : Error: Invalid floating-point string: 'invalid_string'

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   651 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, ERROR , ut_kvp.c,   573 : Error: Invalid floating-point string: 'invalid_string'

2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp double'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence'
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp dataByte'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   466 : ut_kvp_getDataBytes() - Check for NULL_PARAM - First Argument
2025-12-10-09:20:39, ERROR , ut_kvp.c,   897 : Invalid Handle
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   471 : ut_kvp_getDataBytes() - Check for NULL_PARAM - Second Argument
2025-12-10-09:20:39, ERROR , ut_kvp.c,   774 : Invalid Param - pszKey
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   476 : ut_kvp_getDataBytes() - Check for NULL_PARAM - Third Argument
2025-12-10-09:20:39, ERROR , ut_kvp.c,   780 : Invalid address passed
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   482 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes
_count = 0, when key is not found
2025-12-10-09:20:39, ERROR , ut_kvp.c,   804 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_K
EY_NOT_FOUND
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   488 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   492 : Parsed 48 bytes:
0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15
0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   497 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   501 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   505 : Parsed 48 bytes:
0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15
0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   510 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   514 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes
_count = 0
2025-12-10-09:20:39, ERROR , ut_kvp.c,   862 : Invalid byte value: ff
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   518 : Parsed 0 bytes:

2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   519 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   523 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   527 : Parsed 4 bytes:
0x00 0xff 0xff 0xff
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   532 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   536 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   540 : Parsed 4 bytes:
0x00 0x37 0xff 0xff
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   545 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   549 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   553 : Parsed 4 bytes:
0x00 0xff 0x37 0xff
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   558 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   562 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   566 : Parsed 4 bytes:
0x00 0xff 0xff 0x37
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   571 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   575 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   579 : Parsed 3 bytes:
0xff 0xdd 0xee
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   584 :

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   588 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes
_count = 0
2025-12-10-09:20:39, ERROR , ut_kvp.c,   862 : Invalid byte value: 9A
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   592 : Parsed 0 bytes:

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   596 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_
count
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   600 : Parsed 4 bytes:
0xff 0xed 0x15 0xee
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   605 :

2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp dataByte'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions JSON Decoder with malloc'd da
ta
2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp string'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   403 : ut_kvp_getField() - Check for INVALID_PARAM
2025-12-10-09:20:39, ERROR , ut_kvp.c,   897 : Invalid Handle
2025-12-10-09:20:39, ERROR , ut_kvp.c,   642 : Invalid Param - pszKey
2025-12-10-09:20:39, ERROR , ut_kvp.c,   642 : Invalid Param - pszKey
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   415 : ut_kvp_getStringField() - Check for UT_KVP_STATUS_KEY_NOT_FOUND
2025-12-10-09:20:39, ERROR , ut_kvp.c,   673 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_K
EY_NOT_FOUND
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   428 : ut_kvp_getStringField() - Check String with no quotes for UT_KVP_STATUS_S
UCCESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   432 : checkStringDeadBeefNoQuotes[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   434 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   438 : checkStringDeadBeef[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   440 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   444 : checkStringDeadBeef2[the beef is also dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   446 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   450 : checkStringDeadBeef[the beef is dead]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   452 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCC
ESS
2025-12-10-09:20:39, LOG   , ut_test_kvp.c,   456 : checkStringDeadBeef2[the beef is also dead]
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp string'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint8'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xff,255].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint8'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint16'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xffff,65535].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint16'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint32'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, DEBUG , ut_kvp.c,   456 : Value out of range for maxRange [0xffffffff,4294967295].
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint32'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint64'
2025-12-10-09:20:39, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint64'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp float'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   615 : ut_kvp_getFloatField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   619 : ut_kvp_getFloatField()
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp float'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp double'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   631 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   635 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   639 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   643 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   647 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, ERROR , ut_kvp.c,   573 : Error: Invalid floating-point string: 'invalid_string'

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   651 : ut_kvp_getDoubleField()
2025-12-10-09:20:39, ERROR , ut_kvp.c,   573 : Error: Invalid floating-point string: 'invalid_string'

2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp double'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence'
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test kvp_open_memory()
2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp read with malloced data'
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   197 : ut_kvp_openMemory( NULL, NULL, -1 )
2025-12-10-09:20:39, ERROR , ut_kvp.c,   897 : Invalid Handle
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   202 : ut_kvp_openMemory( gpMainTestInstance, NULL, -1 ) - Negative
2025-12-10-09:20:39, ERROR , ut_kvp.c,   264 : Invalid Param [string]
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   207 : ut_kvp_openMemory( gpMainTestInstance,  - memory block for empty string )
 - Negative[ERR]: fy_parse_load_document() failed

2025-12-10-09:20:39, ERROR , ut_kvp.c,   984 : Error : Invalid input, src_node or dst_doc is NULL.

2025-12-10-09:20:39, ERROR , ut_kvp.c,   306 : Unable to process node
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   218 : ut_kvp_openMemory( gpMainTestInstance, assets/zero_length.yaml - zero len
gth file ) - Negative
2025-12-10-09:20:39, ERROR , ut_test_common.c,    36 : zero length file

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   228 : ut_kvp_openMemory( gpMainTestInstance,  assets/test_kvp.yaml ) - Positive
2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   237 : ut_kvp_openMemory( gpMainTestInstance, assets/no_data_file.yaml ) - Posti
ve
2025-12-10-09:20:39, ERROR , ut_kvp.c,  1165 : Warning: Cannot merge nodes of incompatible types

2025-12-10-09:20:39, STEP  , ut_test_kvp.c,   246 : ut_kvp_openMemory( gpMainTestInstance, assets/test_kvp.json ) - Postive
2025-12-10-09:20:39, ERROR , ut_kvp.c,  1153 : Included scalar is NULL
2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp read with malloced data'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder for includes usi
ng build from files
2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp single include file'
===================================================================
Original file content from file:assets/include/single-include-file.yaml
===================================================================

---
"1":
  value: true
include_0: assets/include/2s.yaml
include_1: assets/include/3s.yaml
include_2: assets/include/4s.yaml
include_3: assets/include/5s.yaml
include_4: assets/include/6s.yaml
include_5: assets/include/7s.yaml
include_6: assets/include/8s.yaml
include_7: assets/include/9s.yaml
include_8: assets/include/10s.yaml
include_9: assets/include/11s.yaml
include_10: assets/include/12s.yaml
include_11: assets/include/13s.yaml
include_12: assets/include/14s.yaml
include_13: assets/include/15s.yaml
include_14: assets/include/16s.yaml
include_15: assets/include/17s.yaml
include_16: assets/include/18s.yaml
include_17: assets/include/19s.yaml
include_18: assets/include/20s.yaml
include_19: assets/include/21s.yaml

===================================================================
Output KVP data:
===================================================================

"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true
"6":
  value: true
"7":
  value: true
"8":
  value: true
"9":
  value: true
"10":
  value: true
"11":
  value: true
"12":
  value: true
"13":
  value: true
"14":
  value: true
"15":
  value: true
"16":
  value: true
"17":
  value: true
"18":
  value: true
"19":
  value: true
"20":
  value: true
"21":
  value: true


2025-12-10-09:20:39, LOG   , ut_console.c,   661 :      Test Complete : 'kvp single include file'
2025-12-10-09:20:39, LOG   , ut_console.c,   633 :

2025-12-10-09:20:39, LOG   , ut_console.c,   639 :      Running Test : 'kvp single include url'
===================================================================
Original file content from file:assets/include/single-include-url.yaml
===================================================================

---
"1":
  value: true
include_0: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/2s.yaml
include_1: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/3s.yaml
include_2: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/4s.yaml
include_3: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/5s.yaml
include_4: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/6s.yaml
include_5: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/7s.yaml
include_6: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/8s.yaml
include_7: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/9s.yaml
include_8: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/10s.yaml
include_9: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/11s.yaml
include_10: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/12s.yaml
include_11: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/13s.yaml
include_12: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/14s.yaml
include_13: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/15s.yaml
include_14: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/16s.yaml
include_15: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/17s.yaml
include_16: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/18s.yaml
include_17: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/19s.yaml
include_18: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/20s.yaml
include_19: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/21s.yaml

===================================================================
Output KVP data:
===================================================================

"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true
"6":
  value: true
"7":
  value: true
"8":
  value: true
"9":
  value: true
"10":
  value: true
"11":
  value: true
"12":
  value: true
"13":
  value: true
"14":
  value: true
"15":
  value: true
"16":
  value: true
"17":
  value: true
"18":
  value: true
"19":
  value: true
"20":
  value: true
"21":
  value: true


2025-12-10-09:20:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp single include url'
2025-12-10-09:20:42, LOG   , ut_console.c,   633 :

2025-12-10-09:20:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp include depth check'
===================================================================
Original file content from file:assets/include/depth_check.yaml
===================================================================

---
"1":
  value: true
include: assets/include/2d.yaml


===================================================================
Output KVP data:
===================================================================

"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true


2025-12-10-09:20:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp include depth check'
2025-12-10-09:20:42, LOG   , ut_console.c,   633 :

2025-12-10-09:20:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp resolve aliases, anchors, mergekeys'
===================================================================
Original file content from file:assets/anchor_aliases_mergekey.yaml
===================================================================

# Define a base configuration with an anchor
base: &base
  host: localhost
  port: 80

# Use merge key to include base
server:
  <<: *base
  protocol: http

===================================================================
Output KVP data:
===================================================================

base:
  host: localhost
  port: 80
server:
  port: 80
  host: localhost
  protocol: http


2025-12-10-09:20:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp resolve aliases, anchors, mergekeys'
2025-12-10-09:20:42, LOG   , ut_console.c,   633 :

2025-12-10-09:20:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp resolve yaml tags'
===================================================================
Original file content from file:assets/yaml_tags.yaml
===================================================================

---
"1":
  value: true
plugin:
  - !include assets/include/2s.yaml
  - !include assets/include/3s.yaml
"10": !include assets/include/4s.yaml
"11": !include assets/include/5s.yaml

===================================================================
Output KVP data:
===================================================================

"1":
  value: true
plugin:
- "2":
    value: true
- "3":
    value: true
"10":
  "4":
    value: true
"11":
  "5":
    value: true


2025-12-10-09:20:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp resolve yaml tags'
2025-12-10-09:20:42, LOG   , ut_console.c,   633 :

2025-12-10-09:20:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp resolve yaml tags in sequence'
===================================================================
Original file content from file:assets/yaml_tags_in_sequence.yaml
===================================================================

# A single scalar value included from an external source
configItem:
  value: !include assets/include/2s.yaml

# A list of values, each included from a separate external source
listConfig:
  valueList:
    - !include assets/include/3s.yaml
    - !include assets/include/4s.yaml

===================================================================
Output KVP data:
===================================================================

configItem:
  value:
    "2":
      value: true
listConfig:
  valueList:
  - "3":
      value: true
  - "4":
      value: true


2025-12-10-09:20:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp resolve yaml tags in sequence'
2025-12-10-09:20:42, LOG   , ut_console.c,   633 :

2025-12-10-09:20:42, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder for single inclu
de files using build from Malloced data
2025-12-10-09:20:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp single include file'
===================================================================
Original file content from file:assets/include/single-include-file.yaml
===================================================================

---
"1":
  value: true
include_0: assets/include/2s.yaml
include_1: assets/include/3s.yaml
include_2: assets/include/4s.yaml
include_3: assets/include/5s.yaml
include_4: assets/include/6s.yaml
include_5: assets/include/7s.yaml
include_6: assets/include/8s.yaml
include_7: assets/include/9s.yaml
include_8: assets/include/10s.yaml
include_9: assets/include/11s.yaml
include_10: assets/include/12s.yaml
include_11: assets/include/13s.yaml
include_12: assets/include/14s.yaml
include_13: assets/include/15s.yaml
include_14: assets/include/16s.yaml
include_15: assets/include/17s.yaml
include_16: assets/include/18s.yaml
include_17: assets/include/19s.yaml
include_18: assets/include/20s.yaml
include_19: assets/include/21s.yaml

===================================================================
Output KVP data:
===================================================================

"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true
"6":
  value: true
"7":
  value: true
"8":
  value: true
"9":
  value: true
"10":
  value: true
"11":
  value: true
"12":
  value: true
"13":
  value: true
"14":
  value: true
"15":
  value: true
"16":
  value: true
"17":
  value: true
"18":
  value: true
"19":
  value: true
"20":
  value: true
"21":
  value: true


2025-12-10-09:20:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp single include file'
2025-12-10-09:20:42, LOG   , ut_console.c,   633 :

2025-12-10-09:20:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp single include url'
===================================================================
Original file content from file:assets/include/single-include-url.yaml
===================================================================

---
"1":
  value: true
include_0: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/2s.yaml
include_1: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/3s.yaml
include_2: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/4s.yaml
include_3: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/5s.yaml
include_4: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/6s.yaml
include_5: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/7s.yaml
include_6: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/8s.yaml
include_7: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/9s.yaml
include_8: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/10s.yaml
include_9: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/11s.yaml
include_10: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/12s.yaml
include_11: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/13s.yaml
include_12: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/14s.yaml
include_13: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/15s.yaml
include_14: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/16s.yaml
include_15: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/17s.yaml
include_16: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/18s.yaml
include_17: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/19s.yaml
include_18: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/20s.yaml
include_19: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/21s.yaml

===================================================================
Output KVP data:
===================================================================

"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true
"6":
  value: true
"7":
  value: true
"8":
  value: true
"9":
  value: true
"10":
  value: true
"11":
  value: true
"12":
  value: true
"13":
  value: true
"14":
  value: true
"15":
  value: true
"16":
  value: true
"17":
  value: true
"18":
  value: true
"19":
  value: true
"20":
  value: true
"21":
  value: true


2025-12-10-09:20:44, LOG   , ut_console.c,   661 :      Test Complete : 'kvp single include url'
2025-12-10-09:20:44, LOG   , ut_console.c,   633 :

2025-12-10-09:20:44, LOG   , ut_console.c,   639 :      Running Test : 'kvp include depth check'
===================================================================
Original file content from file:assets/include/depth_check.yaml
===================================================================

---
"1":
  value: true
include: assets/include/2d.yaml


===================================================================
Output KVP data:
===================================================================

"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true


2025-12-10-09:20:44, LOG   , ut_console.c,   661 :      Test Complete : 'kvp include depth check'
2025-12-10-09:20:44, LOG   , ut_console.c,   633 :

2025-12-10-09:20:44, LOG   , ut_console.c,   639 :      Running Test : 'kvp resolve aliases, anchors, mergekeys'
===================================================================
Original file content from file:assets/anchor_aliases_mergekey.yaml
===================================================================

# Define a base configuration with an anchor
base: &base
  host: localhost
  port: 80

# Use merge key to include base
server:
  <<: *base
  protocol: http

===================================================================
Output KVP data:
===================================================================

base:
  host: localhost
  port: 80
server:
  port: 80
  host: localhost
  protocol: http


2025-12-10-09:20:44, LOG   , ut_console.c,   661 :      Test Complete : 'kvp resolve aliases, anchors, mergekeys'
2025-12-10-09:20:44, LOG   , ut_console.c,   633 :

2025-12-10-09:20:44, LOG   , ut_console.c,   639 :      Running Test : 'kvp resolve yaml tags'
===================================================================
Original file content from file:assets/yaml_tags.yaml
===================================================================

---
"1":
  value: true
plugin:
  - !include assets/include/2s.yaml
  - !include assets/include/3s.yaml
"10": !include assets/include/4s.yaml
"11": !include assets/include/5s.yaml

===================================================================
Output KVP data:
===================================================================

"1":
  value: true
plugin:
- "2":
    value: true
- "3":
    value: true
"10":
  "4":
    value: true
"11":
  "5":
    value: true


2025-12-10-09:20:44, LOG   , ut_console.c,   661 :      Test Complete : 'kvp resolve yaml tags'
2025-12-10-09:20:44, LOG   , ut_console.c,   633 :

2025-12-10-09:20:44, LOG   , ut_console.c,   639 :      Running Test : 'kvp resolve yaml tags in sequence'
===================================================================
Original file content from file:assets/yaml_tags_in_sequence.yaml
===================================================================

# A single scalar value included from an external source
configItem:
  value: !include assets/include/2s.yaml

# A list of values, each included from a separate external source
listConfig:
  valueList:
    - !include assets/include/3s.yaml
    - !include assets/include/4s.yaml

===================================================================
Output KVP data:
===================================================================

configItem:
  value:
    "2":
      value: true
listConfig:
  valueList:
  - "3":
      value: true
  - "4":
      value: true


2025-12-10-09:20:44, LOG   , ut_console.c,   661 :      Test Complete : 'kvp resolve yaml tags in sequence'
"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true


2025-12-10-09:20:44, LOG   , ut_console.c,   633 :

2025-12-10-09:20:44, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder for Yaml include
 support
2025-12-10-09:20:44, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool from main yaml'
2025-12-10-09:20:44, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:44, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool from main yaml'
2025-12-10-09:20:44, LOG   , ut_console.c,   633 :

2025-12-10-09:20:44, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence from main yaml'
2025-12-10-09:20:44, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence from main yaml'
2025-12-10-09:20:44, LOG   , ut_console.c,   633 :

2025-12-10-09:20:44, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder for Yaml multipl
e profile inputs
2025-12-10-09:20:44, LOG   , ut_console.c,   639 :      Running Test : 'kvp multiple profile'
2025-12-10-09:20:44, STEP  , ut_test_kvp.c,   856 : ut_kvp_open( pInstance, KVP_VALID_TEST_YAML_CONFIG_FILE )
2025-12-10-09:20:44, STEP  , ut_test_kvp.c,   860 : ut_kvp_open( pInstance, KVP_VALID_TEST_SINGLE_INCLUDE_FILE_YAML )
2025-12-10-09:20:44, STEP  , ut_test_kvp.c,   864 : ut_kvp_open( pInstance, KVP_VALID_TEST_DEPTH_CHECK_INCLUDE_YAML )
decodeTest:
  checkUint8IsDeHex: 0xde
  checkUint8IsDeDec: 222
  checkUint16IsDeadHex: 0xdead
  checkUint16IsDeadDec: 57005
  checkUint32IsDeadBeefHex: 0xdeadbeef
  checkUint32IsDeadBeefDec: 3735928559
  checkUint64IsDeadBeefHex: 0xdeadbeefdeadbeef
  checkUint64IsDeadBeefDec: 16045690984833335023
  checkStringDeadBeef: "the beef is dead"
  checkStringDeadBeef2: the beef is also dead
  checkStringDeadBeefNoQuotes: the beef is dead
  checkBoolFalse: false
  checkBoolFALSE: FALSE
  checkBoolFaLse: FaLSE
  checkBoolTRUE: TRUE
  checkBooltrue: true
  checkBoolTRuE: TRuE
  checkStringList:
  - stringA
  - stringB
  - stringC
  checkUint32List:
  - 720
  - 800
  - 1080
  checkFloat: 5.1
  checkDoublePi: 3.14159265358979323846
  checkDoubleScientific: -4.2e8
  checkDoubleInvalid: invalid_string
  checkBytesSpace: 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0
xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0x01 0x01 0x00 0xff 0xff 0xff 0xff 0xff 0xff 0x00 0x15 0x85 0x1b 0x2a 0x01 0x01 0
x01 0x01
  checkBytesComma: 0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x15,0x85,0x1b,0x2a, 0x01,0x01,0x01,0x01,0x00,0xff,0xff,0xff,0xff,
0xff,0xff,0x00,0x15,0x85,0x1b, 0x2a,0x01,0x01,0x01,0x01,0x00,0xff,0xff,0xff,0xff,0xff,0xff,0x00,0x15,0x85, 0x1b,0x2a,0x01,0x0
1,0x01,0x01
  checkBytesIncorrect: 00 ff ff ff ff ff ff 00 15 85 1b 2a 01 01 01 01 ff 20 01 03 80 7a 45 78 0a ee 91 a3 54 4c 99 26 0f 50
54 21 08 00 31 40 45 40 61 40 71 40 81 80 01 01 01 01 01 01 08 e8 00 30 f2 70 5a 80 b0 58 8a 00 40 84 63 00 00 1e 02 3a 80 18
 71 38 2d 40 58 2c 45 00 40 84 63 00 00 1e 00 00 00 fd 00 17 3e 1e 88 3c 00 0a 20 20 20 20 20 20 00 00 00 fc 00 65 6c 65 6d 6
5 6e 74 20 54 56 0a 20 20 01 6f 02 03 5f f1 53 61 60 10 1f 04 13 05 14 03 02 12 20 21 22 15 01 5d 5e 5f 2c 09 57 03 15 07 50
57 07 00 67 7e 00 6d 03 0c 00 10 00 38 3c 20 00 60 01 02 03 68 d8 5d c4 01 78 88 0b 02 e2 00 cf e3 05 c0 00 e3 06 0d 01 e4 0f
 03 00 00 eb 01 46 d0 00 4d 57 3a 94 34 07 a5 e6 11 46 d0 00 00 00 66 21 50 b0 51 00 1b 30 40 70 36 00 40 84 63 00 00 1e 00 0
0 00 00 00 00 00 00 00 00 00 00 00 00 66
  checkByteCommaSpaces: 0x00, 0xff, 0xff, 0xff
  checkByteSpaceSpaceCommaSpace: 0xff  0xdd,  0xee
  checkBytesDecimalSpace: 00 55 255 255
  checkBytesDecimalComma: 00,255,55,255
  checkBytesDecimalCommaSpace: 00, 255, 255, 55
  checkByteInvalid: 0xFF 9A
  checkBytePrefix: 0xFF 0xed 0X15 0xee
profile: DUMMY_PROFILE
hal version: X.X.X
components:
- name: ComponentManager1
  interfaceVersion: X
  ResourceList1:
  - id: 0
    dummyCapabilities:
    - DUMMY_CAPABILITY_1
    - DUMMY_CAPABILITY_2
    - DUMMY_CAPABILITY_3
    - DUMMY_CAPABILITY_4
    supportsFeatureX: true
  - id: 1
    dummyCapabilities:
    - DUMMY_CAPABILITY_1
    - DUMMY_CAPABILITY_2
    - DUMMY_CAPABILITY_3
    - DUMMY_CAPABILITY_4
    supportsFeatureX: true
- name: ComponentManager2
  interfaceVersion: X
  platformCapabilities:
  - supportsFeatureY: false
    sampleRateHz: 00000
    pcmFormat: DUMMY_FORMAT
    supportsAdditionalFormat: false
  ResourceList2:
  - id: 0
  - id: 1
- name: ComponentManager3
  interfaceVersion: X
  supportedModes:
  - DUMMY_MODE
  ResourceList3:
  - id: 0
    dummyCapabilities:
    - capability: DUMMY_CODEC_1
      maxFrameRate: XX
      maxFrameWidth: XXXX
      maxFrameHeight: XXXX
    - capability: DUMMY_CODEC_2
      maxFrameRate: XX
      maxFrameWidth: XXXX
      maxFrameHeight: XXXX
    supportedRanges:
    - RANGE_1
    - RANGE_2
    - RANGE_3
    supportsFeatureZ: true
  - id: 1
    dummyCapabilities:
    - capability: DUMMY_CODEC_1
      maxFrameRate: XX
      maxFrameWidth: XXXX
      maxFrameHeight: XXXX
    supportedRanges:
    - RANGE_1
    supportsFeatureZ: true
"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true
"6":
  value: true
"7":
  value: true
"8":
  value: true
"9":
  value: true
"10":
  value: true
"11":
  value: true
"12":
  value: true
"13":
  value: true
"14":
  value: true
"15":
  value: true
"16":
  value: true
"17":
  value: true
"18":
  value: true
"19":
  value: true
"20":
  value: true
"21":
  value: true


2025-12-10-09:20:44, LOG   , ut_console.c,   661 :      Test Complete : 'kvp multiple profile'
2025-12-10-09:20:44, LOG   , ut_console.c,   633 :

2025-12-10-09:20:44, LOG   , ut_console.c,   639 :      Running Test : 'kvp multiple profile using open memory'
2025-12-10-09:20:44, STEP  , ut_test_kvp.c,   884 : ut_kvp_openMemory( gpMainTestInstance, assets/config-test.yaml ) - Postiv
e
2025-12-10-09:20:44, STEP  , ut_test_kvp.c,   893 : ut_kvp_openMemory( gpMainTestInstance, assets/include/single-include-file
.yaml ) - Postive
2025-12-10-09:20:44, STEP  , ut_test_kvp.c,   902 : ut_kvp_openMemory( gpMainTestInstance, assets/include/depth_check.yaml )
- Postive
"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true


2025-12-10-09:20:44, LOG   , ut_console.c,   661 :      Test Complete : 'kvp multiple profile using open memory'
===================================================================
Original file content from file:assets/include/sequence-include.yaml
===================================================================

---
"1":
  value: true
plugin:
  - include: assets/include/2s.yaml
  - include: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/3s.yaml
include_0: assets/include/4s.yaml
include_1: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/5s.yaml

===================================================================
Output KVP data:
===================================================================

"1":
  value: true
plugin:
- "2":
    value: true
- "3":
    value: true
"4":
  value: true
"5":
  value: true


2025-12-10-09:20:45, LOG   , ut_console.c,   633 :

2025-12-10-09:20:45, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder for Yaml sequenc
e include support
2025-12-10-09:20:45, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool from main yaml'
2025-12-10-09:20:45, ERROR , ut_kvp.c,   395 : Parsing Error
2025-12-10-09:20:45, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool from main yaml'
2025-12-10-09:20:45, LOG   , ut_console.c,   633 :

2025-12-10-09:20:45, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence from main yaml'
2025-12-10-09:20:45, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence from main yaml'
2025-12-10-09:20:45, LOG   , ut_console.c,   633 :

2025-12-10-09:20:45, LOG   , ut_console.c,   639 :      Running Test : 'kvp ssequence include support on malloc data'
===================================================================
Original file content from file:assets/include/sequence-include.yaml
===================================================================

---
"1":
  value: true
plugin:
  - include: assets/include/2s.yaml
  - include: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/3s.yaml
include_0: assets/include/4s.yaml
include_1: https://raw.githubusercontent.com/rdkcentral/ut-control/main/tests/src/assets/include/5s.yaml

===================================================================
Output KVP data:
===================================================================

"1":
  value: true
plugin:
- "2":
    value: true
- "3":
    value: true
"4":
  value: true
"5":
  value: true


2025-12-10-09:20:45, LOG   , ut_console.c,   661 :      Test Complete : 'kvp ssequence include support on malloc data'

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     15     15    n/a      0        0
               tests     73     73     73      0        0
             asserts    419    419    419      0      n/a

Elapsed time =    4.051 seconds


***************** CUNIT CONSOLE - MAIN MENU ******************************
(R)un  (S)elect  (L)ist  (A)ctivate  (F)ailures  (O)ptions  (H)elp  (Q)uit
Enter command: Q

2025-12-10-09:20:58, LOG   , ut_cunit.c,   177 : Logfile:[/tmp/ut-log_2025-12-10_092006.log]
2025-12-10-09:20:58, LOG   , ut_cunit.c,   185 : ---- end of test run ----
-----------------------------------------------------
Suppressions used:
  count      bytes template
   2910     325789 libfyaml
-----------------------------------------------------

/**!
* @brief Opens and parses a Key-Value Pair (KVP) file into a KVP instance.
*
* This function opens the specified KVP file, reads its contents, and parses the key-value pairs into the given KVP instance.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Also update about url here

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

Successfully merging this pull request may close these issues.

Task:Extend kvp open function to also support URLs

4 participants