Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...


IssueNotesDecision
1Does request body need to declare "publicCmHandleProperties"?

Do we need to explicitly declare "publicCmHandleProperties"? 

Will there be another possible variation to this in the future?

Code Block
languageyml
{
  "publicCmHandleProperties" : {
          "Colour": "red",
          "Size": "large"
   }
}


Yes
2

Are public properties always stored (in postgress) in the format of "name" : x, "value": y?

(does NOT affect implementation)

In the fragment table there are example that follow this format 

Code Block
languageyml
{
	"name": "Colour",
	"value": "red"
},
{
	"name": "Size",
	"value": "large"
}


Yes. But all this is hidden when using CpsPath type query

3Will there only ever be 1 kv pairs in public properties (in the DB)?
Yes, as each property is stored in a separate list-item Fragment
But all this is hidden when using CpsPath type query
4Does the order matter?

Does

Code Block
languageyml
{
  "publicCmHandleProperties" : {
          "Colour" : "green",
          "Size" : "small"
   }
}

==

Code Block
languageyml
{
  "publicCmHandleProperties" : {
          "Size" : "small"
          "Colour" : "green",
     }
}


No
But all this is hidden when using CpsPath type query
5Should search be case sensitive?

depend on CPSPath functionality - may be case-sensitive

https://docs.onap.org/projects/onap-cps/en/latest/cps-path.html

Yes, that is the currently implement as such CpsPath type query. Given it is mostly machine-to-machine type queries this is good enough and performs better
6What format should the response take?

We have two options currently:


  1. Return List<String>
Code Block
languageyml
[
    "cmHandle1",
    "cmHandle2",
    ...,
    "cmHandleN"
]


2. Return CM Handle Objects

    1. Already defined in CPS
    2. <Example Pending>

Contact Tony Finnerty & kieran mccarthy regarding this.
Tony Finnerty Has no opinion on this matter


7what if we have valid entries and one entry  is empty?

We would return all cm handles and others that match would be included in this list anyway.

→ To avoid this should we first check the entries int map for empty entries as further processing is unnecessary in this case.

Discussed with Toine Siebelink and implementation changes are required for handling edges cases. we will handle empty and unknown properties separately.


Analysis/Implementation Proposal

...

  • Null name, Value
  • Empty name, Value
  • no key value pairs at all 


Manual Testing


Data

Image RemovedImage Added


Code Block
languagesql
titleinsert sql
collapsetrue
INSERT INTO public.fragment (xpath, "attributes") VALUES('/dmi-registry/cm-handles[@id=''PNFDemo'']/public-properties[@name=''Contact'']', '{"name": "Contact", "value": "newemailforstore@bookstore.com"}');
INSERT INTO public.fragment (xpath, "attributes") VALUES('/dmi-registry/cm-handles[@id=''Bookstore4'']/public-properties[@name=''color'']', '{"name": "color", "value": ""}');
INSERT INTO public.fragment (xpath, "attributes") VALUES('/dmi-registry/cm-handles[@id=''Bookstore3'']/public-properties[@name=''color'']', '{"name": "color", "value": "red"}');
INSERT INTO public.fragment (xpath, "attributes") VALUES('/dmi-registry/cm-handles[@id=''Bookstore2'']/public-properties[@name=''Contact'']', '{"name": "Contact", "value": "newemailforstore2@bookstore.com"}');
INSERT INTO public.fragment (xpath, "attributes") VALUES('/dmi-registry/cm-handles[@id=''Bookstore1'']/public-properties[@name=''Contact'']', '{"name": "Contact", "value": "newemailforstore@bookstore.com"}');

...

http://localhost:8883/ncmp/v1/data/ch/searches


Results

Happy Path
#ScenarioRequestResponse
1

Both properties match

(Return CM Handles Returned that Match

{
    "publicCmHandleProperties": {
        "Contact""newemailforstore@bookstore.com"
    }
}

[
    "Bookstore1",
    "PNFDemo"
]

2

No properties given - all cm handles returned

(that contain public properties

{

    "publicCmHandleProperties": {
    }
}

[
    "Bookstore4",
    "Bookstore1",
    "Bookstore2",
    "Bookstore3",
    "PNFDemo"
]


Edge Cases
4
#ScenarioRequestResponse
1

Value doesn't match 

(Nothing Returned

{
    "publicCmHandleProperties": {
        "Contact""newemailforstore@bookstore.comnotAValidValue"
    }
}

[ ]
32

Unknown properties given - NO cm handles returned

(Return Empty Response)

{
    "publicCmHandleProperties": {
        "UnknwnProperty""doesnt matter"
    }
}

[ ]
3

Empty property name

Return 400

(BAD_REQUEST)

{

    "publicCmHandleProperties": {
        """doesnt matter "
    }
}

5

No properties given - all cm handles returned

(that contain public properties

{
    "publicCmHandlePropertiesstatus"{
    }
}[
    "Bookstore1"400 BAD_REQUEST",
    "Bookstore2message""Invalid data",
    "Bookstore3",
    "PNFDemo"
]details""Missing property - please supply a valid property"
}

4

Empty value 

(Return CM Handles Returned that Match

6

Property is empty 

(BAD_REQUEST

{

    "publicCmHandleProperties"

[

{
        "color"

,

: "

newemailforstore@bookstore.com

"
    

]

}
}

[
    "Bookstore4"
]


Future Example (Out-of-scope)

...