Skip to content
New issue

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

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

Already on GitHub? Sign in to your account

PR: gh #66 : Changes for GET Request support in ut-control #68

Open
wants to merge 6 commits into
base: develop
Choose a base branch
from

Conversation

kanjoe24
Copy link
Contributor

Changes for GET Request support in ut-control

@kanjoe24
Copy link
Contributor Author

For easy explanation of how CP works , please find this sequence diag attached.

CP (3)

@kanjoe24 kanjoe24 marked this pull request as ready for review January 20, 2025 16:35
@kanjoe24 kanjoe24 requested a review from a team as a code owner January 20, 2025 16:36
KVP now has a function which emits data in either json or yaml based
on users demand.
Also added tests to check the function
Added curl clients to test GET Requests.
@kanjoe24 kanjoe24 force-pushed the feature/feature/gh66-ut-control branch from ac330de to f62d964 Compare January 20, 2025 16:45
@kanjoe24
Copy link
Contributor Author

ut_control_test.sh results

 ./ut_control_test.sh 
Listing Filename:[/tmp/ut-log_2025-01-20_164610.log-Listing.xml]
Results Filename:[/tmp/ut-log_2025-01-20_164610.log]

2025-01-20-16:46:10, 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-01-20-16:46:11, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:11, LOG   , ut_console.c,   636 : Running Suite : L1 - ut_control function tests
2025-01-20-16:46:11, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Init Exit'
2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,    62 : 
test_ut_control_l1_testInitExit

2025-01-20-16:46:11, ERROR , ut_control_plane.c,   796 : Invalid Handle

2025-01-20-16:46:11, ERROR , ut_control_plane.c,   628 : port cannot be 0

2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,    83 : test_ut_control_l1_testInitExit

2025-01-20-16:46:11, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Init Exit'
2025-01-20-16:46:11, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:11, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp register callback'
2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,   130 : 
test_ut_control_l1_regsiterCallback

2025-01-20-16:46:11, ERROR , ut_control_plane.c,   725 : Invalid Param

2025-01-20-16:46:11, ERROR , ut_control_plane.c,   731 : NULL callbackFunction

2025-01-20-16:46:11, ERROR , ut_control_plane.c,   737 : NULL userData

2025-01-20-16:46:11, ERROR , ut_control_plane.c,   719 : Invalid Handle

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 1

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 2

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 3

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 4

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 5

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 6

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 7

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 8

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 9

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 10

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 11

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 12

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 13

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 14

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 15

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 16

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 17

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 18

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 19

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 20

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 21

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 22

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 23

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 24

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 25

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 26

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 27

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 28

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 29

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 30

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 31

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 32

2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,   166 : test_ut_control_l1_regsiterCallback

2025-01-20-16:46:11, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp register callback'
2025-01-20-16:46:11, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:11, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp websocket service'
2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,    92 : 
test_ut_control_l1_testStartStop

2025-01-20-16:46:11, ERROR , ut_control_plane.c,   796 : Invalid Handle

2025-01-20-16:46:11, ERROR , ut_control_plane.c,   796 : Invalid Handle

2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,    99 : Control Plan Init

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   687 : pthread id = 139676935312960

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   205 : pthread id 2 = 139676926920256

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   215 : EXIT REQUESTED in thread1. Thread1 going to exit

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   242 : Thread2 exitted

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   687 : pthread id = 139676935312960

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   205 : pthread id 2 = 139676926920256

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   215 : EXIT REQUESTED in thread1. Thread1 going to exit

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   242 : Thread2 exitted

2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,   121 : test_ut_control_l1_testStartStop

2025-01-20-16:46:11, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp websocket service'
2025-01-20-16:46:11, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:11, LOG   , ut_console.c,   636 : Running Suite : L2 - ut_control Module tests
2025-01-20-16:46:11, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Init'
2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,   228 : test_ut_control_performInit()

2025-01-20-16:46:11, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Init'
2025-01-20-16:46:11, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:11, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Start'
2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,   237 : UT_ControlPlane_RegisterCallbackOnMessage() client testYAMLCallback - Negative

2025-01-20-16:46:11, ERROR , ut_control_plane.c,   737 : NULL userData
Original Yaml file
---
test:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false
2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,   246 : UT_ControlPlane_RegisterCallbackOnMessage() client testYAMLCallback - Positive

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 1

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   687 : pthread id = 139676935312960
Original Json file
{
  "test": {
    "jsonData": "somevalue",
    "x": 1,
    "on": true
  },
  "test2": {
    "jsonData1": "somevalue1",
    "y": 2,
    "off": false
  }
}

2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,   262 : UT_ControlPlane_RegisterCallbackOnMessage() client testJSONCallback - Positive 

2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   750 : callback_entry_index : 2

2025-01-20-16:46:11, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Start'
2025-01-20-16:46:11, DEBUG , ut_control_plane.c,   205 : pthread id 2 = 139676926920256

2025-01-20-16:46:11, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:11, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp run client'
2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,   279 : Please Run the command `./curl-requests-script.sh` or `test_script_for_curl_request.sh` from another terminal and press return;'

2025-01-20-16:46:11, LOG   , ut_test_control_plane.c,   280 : In order to pass the test you need to run each of the curl scripts'

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   366 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   378 : Requested URI: /api/getKVP
lws_hdr_copy: WSI_TOKEN_HTTP_URI_ARGS toklen 17

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   386 : Query String: key=test/yamlData

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   393 : Parsed Query Parameter: key=test/yamlData

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   410 : Accept Header: application/x-yaml

2025-01-20-16:46:18, ERROR , ut_kvp.c,   549 : node not found for key = [test/yamlData] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   366 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   378 : Requested URI: /api/getKVP
lws_hdr_copy: WSI_TOKEN_HTTP_URI_ARGS toklen 17

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   386 : Query String: key=test/jsonData

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   393 : Parsed Query Parameter: key=test/jsonData

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   410 : Accept Header: application/json

2025-01-20-16:46:18, ERROR , ut_kvp.c,   549 : node not found for key = [test/jsonData] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   366 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   378 : Requested URI: /api/getKVP
lws_hdr_copy: WSI_TOKEN_HTTP_URI_ARGS toklen 17

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   386 : Query String: key=test/yamlData

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   393 : Parsed Query Parameter: key=test/yamlData

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   410 : Accept Header: */*

2025-01-20-16:46:18, ERROR , ut_control_plane.c,   508 : Invalid key value or unsupported Accept header

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   366 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   378 : Requested URI: /api/getKVP
lws_hdr_copy: WSI_TOKEN_HTTP_URI_ARGS toklen 8

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   386 : Query String: key=test

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   393 : Parsed Query Parameter: key=test

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   410 : Accept Header: application/json

2025-01-20-16:46:18, ERROR , ut_kvp.c,   555 : invalid key
2025-01-20-16:46:18, ERROR , ut_kvp.c,   555 : invalid key
2025-01-20-16:46:18, ERROR , ut_control_plane.c,   430 : Failed to create response

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   366 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   378 : Requested URI: /api/getKVP
lws_hdr_copy: WSI_TOKEN_HTTP_URI_ARGS toklen 8

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   386 : Query String: key=test

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   393 : Parsed Query Parameter: key=test

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   410 : Accept Header: application/x-yaml

2025-01-20-16:46:18, ERROR , ut_kvp.c,   555 : invalid key
2025-01-20-16:46:18, ERROR , ut_kvp.c,   555 : invalid key
2025-01-20-16:46:18, ERROR , ut_control_plane.c,   471 : Failed to create response

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   366 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   378 : Requested URI: /api/postKVP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   533 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   536 : LWS_CALLBACK_HTTP, perSessionData not NULL

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   554 : LWS_CALLBACK_HTTP_BODY_COMPLETION

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   557 : LWS_CALLBACK_HTTP_BODY_COMPLETION, perSessionData not NULL

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   222 : DATA RECEIVED
*******************************Inside testYAMLCallback************************
---
test:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false

Original Yaml file
---
test:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false
2025-01-20-16:46:18, ERROR , ut_kvp.c,   549 : node not found for key = [test2/jsonData1] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   366 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   378 : Requested URI: /api/postKVP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   533 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   536 : LWS_CALLBACK_HTTP, perSessionData not NULL

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   554 : LWS_CALLBACK_HTTP_BODY_COMPLETION

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   557 : LWS_CALLBACK_HTTP_BODY_COMPLETION, perSessionData not NULL

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   222 : DATA RECEIVED

2025-01-20-16:46:18, ERROR , ut_kvp.c,   549 : node not found for key = [test/yamlData] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:18, LOG   , ut_test_control_plane.c,   198 : **************testJSONCallback is called****************
{
  "test": {
    "jsonData": "somevalue",
    "x": 1,
    "on": true
  },
  "test2": {
    "jsonData1": "somevalue1",
    "y": 2,
    "off": false
  }
}

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

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   366 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   378 : Requested URI: /api/postKVP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   533 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   536 : LWS_CALLBACK_HTTP, perSessionData not NULL

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   554 : LWS_CALLBACK_HTTP_BODY_COMPLETION

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   557 : LWS_CALLBACK_HTTP_BODY_COMPLETION, perSessionData not NULL

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   222 : DATA RECEIVED
*******************************Inside testYAMLCallback************************
---
test:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false

Original Yaml file
---
test:
  yamlData: somevalue
  x: 1
  on: true
test2:
  yamlData1: somevalue1
  y: 2
  off: false
2025-01-20-16:46:18, ERROR , ut_kvp.c,   549 : node not found for key = [test2/jsonData1] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   366 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   378 : Requested URI: /api/postKVP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   533 : LWS_CALLBACK_HTTP

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   536 : LWS_CALLBACK_HTTP, perSessionData not NULL

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   554 : LWS_CALLBACK_HTTP_BODY_COMPLETION

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   557 : LWS_CALLBACK_HTTP_BODY_COMPLETION, perSessionData not NULL

2025-01-20-16:46:18, DEBUG , ut_control_plane.c,   222 : DATA RECEIVED

2025-01-20-16:46:18, ERROR , ut_kvp.c,   549 : node not found for key = [test/yamlData] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:18, LOG   , ut_test_control_plane.c,   198 : **************testJSONCallback is called****************
{
  "test": {
    "jsonData": "somevalue",
    "x": 1,
    "on": true
  },
  "test2": {
    "jsonData1": "somevalue1",
    "y": 2,
    "off": false
  }
}

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

2025-01-20-16:46:26, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp run client'
2025-01-20-16:46:26, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:26, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Stop'
2025-01-20-16:46:26, LOG   , ut_test_control_plane.c,   310 : test_ut_control_performStop()

2025-01-20-16:46:26, DEBUG , ut_control_plane.c,   215 : EXIT REQUESTED in thread1. Thread1 going to exit

2025-01-20-16:46:41, DEBUG , ut_control_plane.c,   242 : Thread2 exitted

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Stop'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'ut-cp Exit'
2025-01-20-16:46:41, LOG   , ut_test_control_plane.c,   316 : test_ut_control_performExit()

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'ut-cp Exit'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   636 : Running Suite : L1 - ut_control mapping tests
2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'ut-control Get Map Value'
2025-01-20-16:46:41, LOG   , ut_test_control_plane.c,   333 : test_ut_control_get_map_value()

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'ut-control Get Map Value'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'ut-control get Map String'
2025-01-20-16:46:41, LOG   , ut_test_control_plane.c,   339 : test_ut_control_get_map_string()

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'ut-control get Map String'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test functions 
2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp create / destroy'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   816 : Invalid Handle
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp create / destroy'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp read'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,    90 : ut_kvp_open( NULL, NULL )
2025-01-20-16:46:41, ERROR , ut_kvp.c,   816 : Invalid Handle
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,    95 : ut_kvp_createInstance
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   100 : ut_kvp_close( pInstance ) - Not been opened
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   104 : ut_kvp_open( pInstance, NULL ) - Negative
2025-01-20-16:46:41, ERROR , ut_kvp.c,   110 : Invalid Param [fileName]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   109 : ut_kvp_open( pInstance, assets/this_does_not_exist.yaml - filename doesn't exist ) - Negative
2025-01-20-16:46:41, ERROR , ut_kvp.c,   116 : [assets/this_does_not_exist.yaml] cannot be accesed
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   114 : ut_kvp_open( pInstance, assets/zero_length.yaml - zero length file ) - Negative[ERR]: fy_parse_load_document() failed

2025-01-20-16:46:41, ERROR , ut_kvp.c,   131 : Unable to parse file/memory
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   119 : ut_kvp_open( pInstance,  KVP_VALID_TEST_YAML_FILE ) - Positive
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   123 : ut_kvp_open( pInstance, assets/no_data_file.yaml ) - Postive
2025-01-20-16:46:41, ERROR , ut_kvp.c,   981 : Warning: Cannot merge nodes of incompatible types

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   128 : ut_kvp_destroyInstance(1) - Positive
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   130 : ut_kvp_destroyInstance(2) - Positive
2025-01-20-16:46:41, ERROR , ut_kvp.c,   822 : Invalid Handle - magic failure
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   134 : ut_kvp_close(1) - Positive
2025-01-20-16:46:41, ERROR , ut_kvp.c,   822 : Invalid Handle - magic failure
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   136 : ut_kvp_close(2) - Positive
2025-01-20-16:46:41, ERROR , ut_kvp.c,   822 : Invalid Handle - magic failure
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   140 : ut_kvp_close(3) - Positive
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   144 : ut_kvp_close(3) - Positive
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   146 : ut_kvp_close(4) - Positive
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp read'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder 
2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint8'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xff,255].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint8'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint16'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xffff,65535].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint16'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp string'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   352 : ut_kvp_getField() - Check for INVALID_PARAM
2025-01-20-16:46:41, ERROR , ut_kvp.c,   816 : Invalid Handle
2025-01-20-16:46:41, ERROR , ut_kvp.c,   518 : Invalid Param - pszKey
2025-01-20-16:46:41, ERROR , ut_kvp.c,   518 : Invalid Param - pszKey
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   364 : ut_kvp_getStringField() - Check for UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:41, ERROR , ut_kvp.c,   549 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   377 : ut_kvp_getStringField() - Check String with no quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   381 : checkStringDeadBeefNoQuotes[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   383 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   387 : checkStringDeadBeef[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   389 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   393 : checkStringDeadBeef2[the beef is also dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   395 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   399 : checkStringDeadBeef[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   401 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   405 : checkStringDeadBeef2[the beef is also dead]
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp string'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint32'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xffffffff,4294967295].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint32'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint64'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint64'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp list'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   555 : invalid key
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp list'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp float'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   569 : ut_kvp_getFloatField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   573 : ut_kvp_getFloatField() 
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp float'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp double'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   585 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   589 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   593 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   597 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   601 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, ERROR , ut_kvp.c,   449 : Error: Invalid floating-point string: 'invalid_string'

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   605 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, ERROR , ut_kvp.c,   449 : Error: Invalid floating-point string: 'invalid_string'

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp double'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence'
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp dataByte'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   416 : ut_kvp_getDataBytes() - Check for NULL_PARAM - First Argument
2025-01-20-16:46:41, ERROR , ut_kvp.c,   816 : Invalid Handle
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   421 : ut_kvp_getDataBytes() - Check for NULL_PARAM - Second Argument
2025-01-20-16:46:41, ERROR , ut_kvp.c,   650 : Invalid Param - pszKey
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   426 : ut_kvp_getDataBytes() - Check for NULL_PARAM - Third Argument
2025-01-20-16:46:41, ERROR , ut_kvp.c,   656 : Invalid address passed
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   432 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes_count = 0, when key is not found
2025-01-20-16:46:41, ERROR , ut_kvp.c,   680 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_KEY_NOT_FOUND
YAML file is = 
---
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 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
  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,0x01,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 65
    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 00
    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

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   442 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   446 : 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-01-20-16:46:41, LOG   , ut_test_kvp.c,   451 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   455 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   459 : 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-01-20-16:46:41, LOG   , ut_test_kvp.c,   464 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   468 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes_count = 0
2025-01-20-16:46:41, ERROR , ut_kvp.c,   738 : Invalid byte value: ff
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   472 : Parsed 0 bytes:

2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   473 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   477 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   481 : Parsed 4 bytes:
0x00 0xff 0xff 0xff 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   486 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   490 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   494 : Parsed 4 bytes:
0x00 0x37 0xff 0xff 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   499 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   503 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   507 : Parsed 4 bytes:
0x00 0xff 0x37 0xff 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   512 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   516 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   520 : Parsed 4 bytes:
0x00 0xff 0xff 0x37 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   525 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   529 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   533 : Parsed 3 bytes:
0xff 0xdd 0xee 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   538 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   542 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes_count = 0
2025-01-20-16:46:41, ERROR , ut_kvp.c,   738 : Invalid byte value: 9A
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   546 : Parsed 0 bytes:

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   550 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   554 : Parsed 4 bytes:
0xff 0xed 0x15 0xee 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   559 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp dataByte'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp get JSON data'{
  "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 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",
    "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,0x01,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 65 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 00 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"
  }
}


2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp get JSON data'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions JSON Decoder 
2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp string'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   352 : ut_kvp_getField() - Check for INVALID_PARAM
2025-01-20-16:46:41, ERROR , ut_kvp.c,   816 : Invalid Handle
2025-01-20-16:46:41, ERROR , ut_kvp.c,   518 : Invalid Param - pszKey
2025-01-20-16:46:41, ERROR , ut_kvp.c,   518 : Invalid Param - pszKey
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   364 : ut_kvp_getStringField() - Check for UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:41, ERROR , ut_kvp.c,   549 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   377 : ut_kvp_getStringField() - Check String with no quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   381 : checkStringDeadBeefNoQuotes[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   383 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   387 : checkStringDeadBeef[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   389 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   393 : checkStringDeadBeef2[the beef is also dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   395 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   399 : checkStringDeadBeef[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   401 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   405 : checkStringDeadBeef2[the beef is also dead]
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp string'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint8'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xff,255].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint8'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint16'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xffff,65535].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint16'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint32'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xffffffff,4294967295].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint32'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint64'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint64'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp list'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   555 : invalid key
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp list'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp float'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   569 : ut_kvp_getFloatField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   573 : ut_kvp_getFloatField() 
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp float'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp double'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   585 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   589 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   593 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   597 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   601 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, ERROR , ut_kvp.c,   449 : Error: Invalid floating-point string: 'invalid_string'

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   605 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, ERROR , ut_kvp.c,   449 : Error: Invalid floating-point string: 'invalid_string'

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp double'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence'
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp get Yaml data'{
  "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"
  }
}


2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp get Yaml data'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions Test without Open 
2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp read negative'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   637 : ut_kvp_getBoolField() - negative
2025-01-20-16:46:41, ERROR , ut_kvp.c,   822 : Invalid Handle - magic failure
2025-01-20-16:46:41, ERROR , ut_kvp.c,   822 : Invalid Handle - magic failure
2025-01-20-16:46:41, ERROR , ut_kvp.c,   822 : Invalid Handle - magic failure
2025-01-20-16:46:41, ERROR , ut_kvp.c,   822 : Invalid Handle - magic failure
2025-01-20-16:46:41, ERROR , ut_kvp.c,   532 : No Data File open
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp read negative'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder with malloc'd data
2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint8'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xff,255].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint8'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint16'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xffff,65535].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint16'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp string'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   352 : ut_kvp_getField() - Check for INVALID_PARAM
2025-01-20-16:46:41, ERROR , ut_kvp.c,   816 : Invalid Handle
2025-01-20-16:46:41, ERROR , ut_kvp.c,   518 : Invalid Param - pszKey
2025-01-20-16:46:41, ERROR , ut_kvp.c,   518 : Invalid Param - pszKey
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   364 : ut_kvp_getStringField() - Check for UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:41, ERROR , ut_kvp.c,   549 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   377 : ut_kvp_getStringField() - Check String with no quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   381 : checkStringDeadBeefNoQuotes[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   383 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   387 : checkStringDeadBeef[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   389 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   393 : checkStringDeadBeef2[the beef is also dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   395 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   399 : checkStringDeadBeef[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   401 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   405 : checkStringDeadBeef2[the beef is also dead]
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp string'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint32'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xffffffff,4294967295].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint32'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint64'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint64'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp float'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   569 : ut_kvp_getFloatField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   573 : ut_kvp_getFloatField() 
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp float'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp double'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   585 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   589 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   593 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   597 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   601 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, ERROR , ut_kvp.c,   449 : Error: Invalid floating-point string: 'invalid_string'

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   605 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, ERROR , ut_kvp.c,   449 : Error: Invalid floating-point string: 'invalid_string'

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp double'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence'
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp dataByte'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   416 : ut_kvp_getDataBytes() - Check for NULL_PARAM - First Argument
2025-01-20-16:46:41, ERROR , ut_kvp.c,   816 : Invalid Handle
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   421 : ut_kvp_getDataBytes() - Check for NULL_PARAM - Second Argument
2025-01-20-16:46:41, ERROR , ut_kvp.c,   650 : Invalid Param - pszKey
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   426 : ut_kvp_getDataBytes() - Check for NULL_PARAM - Third Argument
2025-01-20-16:46:41, ERROR , ut_kvp.c,   656 : Invalid address passed
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   432 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes_count = 0, when key is not found
2025-01-20-16:46:41, ERROR , ut_kvp.c,   680 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_KEY_NOT_FOUND
YAML file is = 
---
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 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
  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,0x01,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 65
    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 00
    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

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   442 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   446 : 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-01-20-16:46:41, LOG   , ut_test_kvp.c,   451 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   455 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   459 : 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-01-20-16:46:41, LOG   , ut_test_kvp.c,   464 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   468 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes_count = 0
2025-01-20-16:46:41, ERROR , ut_kvp.c,   738 : Invalid byte value: ff
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   472 : Parsed 0 bytes:

2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   473 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   477 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   481 : Parsed 4 bytes:
0x00 0xff 0xff 0xff 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   486 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   490 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   494 : Parsed 4 bytes:
0x00 0x37 0xff 0xff 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   499 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   503 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   507 : Parsed 4 bytes:
0x00 0xff 0x37 0xff 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   512 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   516 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   520 : Parsed 4 bytes:
0x00 0xff 0xff 0x37 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   525 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   529 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   533 : Parsed 3 bytes:
0xff 0xdd 0xee 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   538 : 

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   542 : ut_kvp_getDataBytes() - checkBytesSpace for output_bytes = NULL and bytes_count = 0
2025-01-20-16:46:41, ERROR , ut_kvp.c,   738 : Invalid byte value: 9A
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   546 : Parsed 0 bytes:

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   550 : ut_kvp_getDataBytes() - checkBytesSpace for valid output_bytes and bytes_count
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   554 : Parsed 4 bytes:
0xff 0xed 0x15 0xee 
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   559 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp dataByte'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions JSON Decoder with malloc'd data
2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp string'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   352 : ut_kvp_getField() - Check for INVALID_PARAM
2025-01-20-16:46:41, ERROR , ut_kvp.c,   816 : Invalid Handle
2025-01-20-16:46:41, ERROR , ut_kvp.c,   518 : Invalid Param - pszKey
2025-01-20-16:46:41, ERROR , ut_kvp.c,   518 : Invalid Param - pszKey
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   364 : ut_kvp_getStringField() - Check for UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:41, ERROR , ut_kvp.c,   549 : node not found for key = [shouldNotWork/checkStringDeadBeef] : UT_KVP_STATUS_KEY_NOT_FOUND
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   377 : ut_kvp_getStringField() - Check String with no quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   381 : checkStringDeadBeefNoQuotes[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   383 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   387 : checkStringDeadBeef[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   389 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   393 : checkStringDeadBeef2[the beef is also dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   395 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   399 : checkStringDeadBeef[the beef is dead]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   401 : ut_kvp_getStringField() - Check String with Quotes for UT_KVP_STATUS_SUCCESS
2025-01-20-16:46:41, LOG   , ut_test_kvp.c,   405 : checkStringDeadBeef2[the beef is also dead]
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp string'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint8'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xff,255].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint8'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint16'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xffff,65535].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint16'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint32'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, DEBUG , ut_kvp.c,   332 : Value out of range for maxRange [0xffffffff,4294967295].
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint32'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp uint64'
2025-01-20-16:46:41, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp uint64'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp float'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   569 : ut_kvp_getFloatField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   573 : ut_kvp_getFloatField() 
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp float'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp double'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   585 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   589 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   593 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   597 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   601 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, ERROR , ut_kvp.c,   449 : Error: Invalid floating-point string: 'invalid_string'

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   605 : ut_kvp_getDoubleField() 
2025-01-20-16:46:41, ERROR , ut_kvp.c,   449 : Error: Invalid floating-point string: 'invalid_string'

2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp double'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence'
2025-01-20-16:46:41, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence'
2025-01-20-16:46:41, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:41, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test kvp_open_memory()
2025-01-20-16:46:41, LOG   , ut_console.c,   639 :      Running Test : 'kvp read with malloced data'
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   155 : ut_kvp_openMemory( NULL, NULL, -1 )
2025-01-20-16:46:41, ERROR , ut_kvp.c,   816 : Invalid Handle
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   160 : ut_kvp_openMemory( gpMainTestInstance, NULL, -1 ) - Negative
2025-01-20-16:46:41, ERROR , ut_kvp.c,   161 : Invalid Param [string]
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   165 : ut_kvp_openMemory( gpMainTestInstance,  - memory block for empty string ) - Negative[ERR]: fy_parse_load_document() failed

2025-01-20-16:46:41, ERROR , ut_kvp.c,   176 : Unable to parse file/memory
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   175 : ut_kvp_openMemory( gpMainTestInstance, assets/zero_length.yaml - zero length file ) - Negative
2025-01-20-16:46:41, ERROR , ut_test_common.c,    36 : zero length file

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   183 : ut_kvp_openMemory( gpMainTestInstance,  assets/test_kvp.yaml ) - Positive
2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   190 : ut_kvp_openMemory( gpMainTestInstance, assets/no_data_file.yaml ) - Postive
2025-01-20-16:46:41, ERROR , ut_kvp.c,   981 : Warning: Cannot merge nodes of incompatible types

2025-01-20-16:46:41, STEP  , ut_test_kvp.c,   197 : ut_kvp_openMemory( gpMainTestInstance, assets/test_kvp.json ) - Postive
2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp read with malloced data'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder for includes using build from files
2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp single include file'---
"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true


2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp single include file'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp single include url'---
"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true


2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp single include url'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp include depth check'---
"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true


2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp include depth check'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder for single include files using build from Malloced data
2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp single include file'---
"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true


2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp single include file'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp single include url'---
"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true


2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp single include url'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp include depth check'---
"1":
  value: true
"2":
  value: true
"3":
  value: true
"4":
  value: true
"5":
  value: true


2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp include depth check'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder for Yaml include support
2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp bool from main yaml'
2025-01-20-16:46:42, ERROR , ut_kvp.c,   271 : Parsing Error
2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp bool from main yaml'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp node presence from main yaml'
2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp node presence from main yaml'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   636 : Running Suite : ut-kvp - test main functions YAML Decoder for Yaml multiple profile inputs
2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp multiple profile'
2025-01-20-16:46:42, STEP  , ut_test_kvp.c,   750 : ut_kvp_open( pInstance, KVP_VALID_TEST_YAML_CONFIG_FILE )
2025-01-20-16:46:42, STEP  , ut_test_kvp.c,   754 : ut_kvp_open( pInstance, KVP_VALID_TEST_SINGLE_INCLUDE_FILE_YAML )
2025-01-20-16:46:42, STEP  , ut_test_kvp.c,   758 : 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 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
  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,0x01,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 65 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 00 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


2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp multiple profile'
2025-01-20-16:46:42, LOG   , ut_console.c,   633 : 

2025-01-20-16:46:42, LOG   , ut_console.c,   639 :      Running Test : 'kvp multiple profile using open memory'
2025-01-20-16:46:42, STEP  , ut_test_kvp.c,   778 : ut_kvp_openMemory( gpMainTestInstance, assets/config-test.yaml ) - Postive
2025-01-20-16:46:42, STEP  , ut_test_kvp.c,   785 : ut_kvp_openMemory( gpMainTestInstance, assets/include/single-include-file.yaml ) - Postive
2025-01-20-16:46:42, STEP  , ut_test_kvp.c,   792 : ut_kvp_openMemory( gpMainTestInstance, assets/include/depth_check.yaml ) - Postive---
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 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
  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,0x01,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 65 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 00 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
- 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


2025-01-20-16:46:42, LOG   , ut_console.c,   661 :      Test Complete : 'kvp multiple profile using open memory'

Run Summary:    Type  Total    Ran Passed Failed Inactive
              suites     14     14    n/a      0        0
               tests     66     66     66      0        0
             asserts    395    395    395      0      n/a

Elapsed time =    0.315 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-01-20-16:47:05, LOG   , ut_cunit.c,   177 : Logfile:[/tmp/ut-log_2025-01-20_164610.log]
2025-01-20-16:47:05, LOG   , ut_cunit.c,   185 : ---- end of test run ----

@kanjoe24
Copy link
Contributor Author

Also results from curl script:

./test_script_for_curl_request.sh 
Running: ./curl-get-client-yaml.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   101  100   101    0     0  59272      0 --:--:-- --:--:-- --:--:--   98k
Test Passed: Output matches expected result.
---------------------------------
Running: ./curl-get-client-json.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   154  100   154    0     0   115k      0 --:--:-- --:--:-- --:--:--  150k
Test Passed: Output matches expected result.
---------------------------------
Running: ./curl-get-client-no-header.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    54  100    54    0     0  34394      0 --:--:-- --:--:-- --:--:-- 54000
Test Passed: Output matches expected result.
---------------------------------
Running: ./curl-get-client-json-incorrect.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    34  100    34    0     0  26254      0 --:--:-- --:--:-- --:--:-- 34000
Test Passed: Output matches expected result.
---------------------------------
Running: ./curl-get-client-yaml-incorrect.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100    29  100    29    0     0  22762      0 --:--:-- --:--:-- --:--:-- 29000
Test Passed: Output matches expected result.
---------------------------------
Running: ./curl-push-client-binary.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   100    0     0  100   100      0  65789 --:--:-- --:--:-- --:--:--   97k
curl: (52) Empty reply from server
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   154    0     0  100   154      0   158k --:--:-- --:--:-- --:--:--  150k
curl: (52) Empty reply from server
Test Passed: Output matches expected result.
---------------------------------
Running: ./curl-push-client-yaml.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   100    0     0  100   100      0  98135 --:--:-- --:--:-- --:--:--   97k
curl: (52) Empty reply from server
Test Passed: Output matches expected result.
---------------------------------
Running: ./curl-push-client-json.sh
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100   142    0     0  100   142      0   140k --:--:-- --:--:-- --:--:--  138k
curl: (52) Empty reply from server
Test Passed: Output matches expected result.
---------------------------------

src/ut_kvp.c Show resolved Hide resolved
src/ut_control_plane.c Outdated Show resolved Hide resolved
src/ut_control_plane.c Outdated Show resolved Hide resolved
@kanjoe24 kanjoe24 force-pushed the feature/feature/gh66-ut-control branch from 078491d to 6bd937b Compare January 28, 2025 16:17
@kanjoe24 kanjoe24 requested a review from Ulrond January 28, 2025 16:21
Copy link
Collaborator

@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.

naming is confusing, you should know what the function does from reading it's name

e.g. -> https://github.com/rdkcentral/ut-core/wiki/1.1.-Standards:-Principles-from-Code-Complete#2-naming-conventions

include/ut_control_plane.h Outdated Show resolved Hide resolved
include/ut_control_plane.h Outdated Show resolved Hide resolved
include/ut_control_plane.h Outdated Show resolved Hide resolved
src/ut_control_plane.c Outdated Show resolved Hide resolved
src/ut_control_plane.c Outdated Show resolved Hide resolved
src/ut_control_plane.c Outdated Show resolved Hide resolved
src/ut_control_plane.c Outdated Show resolved Hide resolved
src/ut_control_plane.c Outdated Show resolved Hide resolved
tests/src/ut_test_control_plane.c Outdated Show resolved Hide resolved
@kanjoe24 kanjoe24 requested a review from Ulrond January 30, 2025 11:33
src/ut_control_plane.c Outdated Show resolved Hide resolved
include/ut_control_plane.h Outdated Show resolved Hide resolved
include/ut_control_plane.h Outdated Show resolved Hide resolved
include/ut_control_plane.h Outdated Show resolved Hide resolved
*
* @returns A status code indicating the success or failure of the registration.
*/
ut_control_plane_status_t UT_ControlPlane_RegisterAPIEndpointHandler(
Copy link
Collaborator

Choose a reason for hiding this comment

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

if we're going to use the words GET & POST then I guess this one as you said should be renamed from Endpoint to GET

Copy link
Contributor Author

Choose a reason for hiding this comment

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

since we are now deprecating the other register function(as discussed), this register function will now handle both GET and POST requests. Hence keeping the same name. I have changed its documentation to reflect the same.

Copy link
Collaborator

Choose a reason for hiding this comment

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

you can't have a single function because the user case is different.

  • GET function is for the server to register with
  • POST function is for the client to register with.

src/ut_control_plane.c Outdated Show resolved Hide resolved
tests/src/ut_test_control_plane.c Outdated Show resolved Hide resolved
tests/src/ut_test_control_plane.c Outdated Show resolved Hide resolved
tests/src/ut_test_control_plane.c Outdated Show resolved Hide resolved
tests/src/ut_test_control_plane.c Outdated Show resolved Hide resolved
@kanjoe24 kanjoe24 force-pushed the feature/feature/gh66-ut-control branch from 74cb6d9 to 492553d Compare January 31, 2025 23:22
@kanjoe24 kanjoe24 requested a review from Ulrond January 31, 2025 23:25
@kanjoe24 kanjoe24 force-pushed the feature/feature/gh66-ut-control branch from 492553d to d710c52 Compare February 3, 2025 10:12
Copy link
Collaborator

@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.

nearly

include/ut_control_plane.h Outdated Show resolved Hide resolved
include/ut_control_plane.h Show resolved Hide resolved
*
* @returns A status code indicating the success or failure of the registration.
*/
ut_control_plane_status_t UT_ControlPlane_RegisterAPIEndpointHandler(
Copy link
Collaborator

Choose a reason for hiding this comment

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

you can't have a single function because the user case is different.

  • GET function is for the server to register with
  • POST function is for the client to register with.

include/ut_control_plane.h Outdated Show resolved Hide resolved
include/ut_control_plane.h Outdated Show resolved Hide resolved
include/ut_control_plane.h Outdated Show resolved Hide resolved
src/ut_control_plane.c Outdated Show resolved Hide resolved
tests/src/ut_test_control_plane.c Outdated Show resolved Hide resolved
@kanjoe24 kanjoe24 requested a review from Ulrond February 4, 2025 10:37
@kanjoe24 kanjoe24 force-pushed the feature/feature/gh66-ut-control branch from ef4672b to a86303b Compare February 4, 2025 10:49
@kanjoe24 kanjoe24 force-pushed the feature/feature/gh66-ut-control branch from a86303b to 5fedbd3 Compare February 4, 2025 10:58
*/
typedef void (*ut_control_on_message_callback_t)(char *triggerKey, ut_kvp_instance_t *instance, void *userData);

/**
Copy link
Collaborator

Choose a reason for hiding this comment

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

what about this ->

/**
 * @brief Callback function for handling HTTP requests to a specific REST API endpoint.
 *
 * This callback is invoked by the UT control server when an HTTP request (GET, POST, PUT, DELETE, etc.)
 * is received and the requested REST API endpoint matches the `restAPI` parameter.
 *
 * @param restAPI The name of the REST API endpoint being called.
 * @param httpMethod The HTTP method of the request (e.g., "GET", "POST", "PUT", "DELETE").
 * @param userData User-defined data passed during registration of the callback.  This can be used to
 *                 pass context or state to the callback function.
 *
 * @return A dynamically allocated character string containing the JSON response from the API endpoint.
 *         The caller is responsible for freeing the returned string using `free()`.  Returns `NULL` on error.
 */
typedef char *(*ut_control_endpoint_callback_t)(const char *restAPI, const char *httpMethod, void *userData);

Copy link
Collaborator

Choose a reason for hiding this comment

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

Request Type URL Headers Body (Data) Parameter Type restAPI Parameter Value (Example) httpMethod Parameter Value pData
POST /products Content-Type: application/json {"name": "...", "description": "...", "price": ..., "category": "..."} Body /products POST Body
GET (Specific) /products/123 (None usually needed) (None usually needed) Path /products/123 GET NULL
GET (Filtered) /products?category=X&price_lt=Y (None usually needed) (None usually needed) Query /products GET category=X&price_lt=Y

Copy link
Collaborator

Choose a reason for hiding this comment

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

ignoring the incorrectly defined types

typedef char *(*ut_control_endpoint_callback_t)(const char *restAPI, const char *httpRequestType, ut_kvp_instance_t *pData, void *userData);

In the cast of POST -> Body Data is used for pData
In the case of GET -> it will be the pData itself

* @param instance The key-value pair instance containing the incoming data.
* @param userData User-defined data passed to the callback function.
*/
typedef void (*ut_control_on_message_callback_t)(char *triggerKey, ut_kvp_instance_t *instance, void *userData);
Copy link
Collaborator

Choose a reason for hiding this comment

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

what about this ->

/**
 * @brief Callback function type for handling incoming messages or events received via POST requests.
 *
 * This callback is invoked by the UT control server when a POST request is received
 * and a specific trigger key within the message data matches the registered `triggerKey`.
 *
 * @param triggerKey The trigger key that was matched within the incoming message data.
 * @param instance A pointer to the key-value pair instance containing the parsed message data.
 *                 The structure and contents of this instance are defined by the `ut_kvp_instance_t` type.
 *                 Consult the documentation for `ut_kvp_instance_t` for details on accessing the data.
 * @param userData User-defined data passed during registration of the callback. This can be used to
 *                 provide context or state to the callback function.
 */
typedef void (*ut_control_on_message_callback_t)(const char *triggerKey, const ut_kvp_instance_t *instance, void *userData);

* @retval UT_CONTROL_PLANE_STATUS_INVALID_PARAM - Invalid parameter passed
* @retval UT_CONTROL_PLANE_STATUS_CALLBACK_LIST_FULL - Callback list is full
*/
ut_control_plane_status_t UT_ControlPlane_RegisterEndPointCallback(
Copy link
Collaborator

Choose a reason for hiding this comment

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

does this work better?

/**
 * @brief Registers a callback for a REST API endpoint (GET) or POST message key.
 *
 * Registers a callback function to be invoked when a GET request is made to the
 * specified `restAPI` endpoint, or when a POST request is received with
 * `restAPI` as the message key.
 *
 * @param[in] pInstance Pointer to the control plane instance.
 * @param[in] httpRequestType The HTTP request type ("GET" or "POST").
 * @param[in] restAPI The REST API endpoint for GET requests, or the message key
 *                   for POST requests. For example, "/users" for a GET
 *                   request, or "status" for a POST request.
 * @param[in] callbackFunction Pointer to the callback function. The function
 *                             type depends on the request type:
 *                             `ut_control_endpoint_callback_t` for GET requests,
 *                             or `ut_control_on_message_callback_t` for POST
 *                             requests.
 * @param[in] userData Pointer to user-provided data that will be passed to the
 *                     callback function. This can be used, for example, to
 *                     pass a pointer to context data.
 * @returns A status code indicating the result of the operation.
 * @retval UT_CONTROL_PLANE_STATUS_OK Success.
 * @retval UT_CONTROL_PLANE_STATUS_INVALID_HANDLE Invalid `pInstance`.
 * @retval UT_CONTROL_PLANE_STATUS_INVALID_PARAM Invalid `restAPI` or
 *                                               `callbackFunction`.
 * @retval UT_CONTROL_PLANE_STATUS_CALLBACK_LIST_FULL Callback list is full.
 */
ut_control_plane_status_t UT_ControlPlane_RegisterEndPointCallback(
    ut_controlPlane_instance_t *pInstance,
    const char *httpRequestType,
    char *restAPI, ut_control_endpoint_callback_t *callbackFunction,
    void *userData);

* @param instance The key-value pair instance containing the incoming data.
* @param userData User-defined data passed to the callback function.
*/
typedef void (*ut_control_on_message_callback_t)(char *triggerKey, ut_kvp_instance_t *instance, void *userData);
Copy link
Collaborator

Choose a reason for hiding this comment

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

let's deprecate this function

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request
Projects
Status: Todo
2 participants