CORD-2450 adding autogenerated xos api tests

Change-Id: I268d43c4a4fc79cad88f0cade647b01762d76044
diff --git a/src/test/cord-api/Framework/utils/utils.py b/src/test/cord-api/Framework/utils/utils.py
index bb825a0..a274274 100644
--- a/src/test/cord-api/Framework/utils/utils.py
+++ b/src/test/cord-api/Framework/utils/utils.py
@@ -27,6 +27,7 @@
 import re
 import yaml
 import glob
+import string
 
 class utils(object):
 
@@ -274,3 +275,19 @@
             names['name']=i
             dnames.append(names.copy())
         return dnames
+
+    def generate_random_value(self, value):
+        if value == 'string':
+                return ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(10))
+        if value == 'bool':
+                return random.choice([True, False])
+        if value == 'int32' or value == 'uint32':
+                return random.randint(1,10000)
+	if value == 'float':
+		return random.uniform(1,10)
+        else:
+                return None
+
+    def generate_random_slice_name(self):
+        random_name = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(10))
+        return 'testloginbase' + random_name
diff --git a/src/test/cord-api/Tests/targets/xosapitests.xtarget b/src/test/cord-api/Tests/targets/xosapitests.xtarget
new file mode 100644
index 0000000..d256dd5
--- /dev/null
+++ b/src/test/cord-api/Tests/targets/xosapitests.xtarget
@@ -0,0 +1,208 @@
+*** Settings ***
+Documentation     Test Suite for XOS APIs
+Suite Setup       Setup
+Suite Teardown    Teardown
+Test Template     Verify API Functionality
+Library           Collections
+Library           String
+Library           OperatingSystem
+Library           XML
+Library           RequestsLibrary
+Library		  HttpLibrary.HTTP
+Library           ../Framework/utils/utils.py
+Library           ../Framework/restApi.py
+Variables         ../Properties/RestApiProperties.py
+
+*** Variables ***
+${xos_service}    core
+
+*** Test Cases ***    TYPE        API
+{%- for m in proto.messages -%}
+{%- if m.name not in  ['XOSBase'] -%}
+{%- if m.name not in ['ServiceMonitoringAgentInfo', 'XOS'] -%}
+{% autoescape false %}
+{% endautoescape %}
+Create {{ m.name }}    CREATE    /xosapi/v1/${xos_service}/{{ m.name | lower}}s    ${json_{{ m.name | lower}}_1}
+
+Update {{ m.name }}    UPDATE    /xosapi/v1/${xos_service}/{{ m.name | lower}}s    ${json_{{ m.name | lower}}_updated_1}    ${id}
+
+Get {{ m.name }}    RETRIEVE    /xosapi/v1/${xos_service}/{{ m.name | lower}}s    ${json_{{ m.name | lower}}_updated_1}    ${id}    ${json_{{ m.name | lower}}_updated_key}
+
+Delete {{ m.name }}    DELETE    /xosapi/v1/${xos_service}/{{ m.name | lower}}s    data_id=${id}
+{% else %}
+Create {{ m.name }}    CREATE    /xosapi/v1/${xos_service}/{{ m.name | lower}}es    ${json_{{ m.name | lower}}_1}
+
+Update {{ m.name }}    UPDATE    /xosapi/v1/${xos_service}/{{ m.name | lower}}es    ${json_{{ m.name | lower}}_updated_1}    ${id}
+
+Get {{ m.name }}    RETRIEVE    /xosapi/v1/${xos_service}/{{ m.name | lower}}es    ${json_{{ m.name | lower}}_updated_1}    ${id}    ${json_{{ m.name | lower}}_updated_key}
+
+Delete {{ m.name }}    DELETE    /xosapi/v1/${xos_service}/{{ m.name | lower}}es    data_id=${id}
+{% endif %}
+{% endif %}
+{% endfor -%}
+
+*** Keywords ***
+Verify API Functionality
+    [Arguments]    ${type}    ${endpoint}    ${data}=${EMPTY}    ${data_id}=${EMPTY}    ${key}=${EMPTY}
+    Run Keyword If    "${type}" == "RETRIEVE"    CORD Get    ${endpoint}    ${data_id}    ${data}    ${key}
+    Run Keyword If    "${type}" == "CREATE"   CORD Post    ${endpoint}    ${data}
+    Run Keyword If    "${type}" == "UPDATE"   CORD Put    ${endpoint}    ${data}    ${data_id}
+    Run Keyword If    "${type}" == "DELETE"    CORD Delete    ${endpoint}    ${data_id}
+
+CORD Get
+    [Documentation]    Make a GET call to the CORD controller
+    [Arguments]    ${service}    ${id}    ${value}    ${key}
+    ${resp}=    Get Request    ${SERVER_IP}    ${service}/${id}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${updated_value}=    Run Keyword If    '${key}' != 'null'    Get Json Value    ${resp.content}    /${key}
+    ${updated_value}=    Run Keyword If    '${key}' != 'null'    Remove String    ${updated_value}    "
+    Run Keyword If    '${key}' != 'null'    Should Contain    "${value}"    ${updated_value}
+    [Return]    ${resp}
+
+CORD Post
+    [Documentation]    Make a POST call to the CORD controller
+    [Arguments]    ${service}    ${data}
+    ${data}=    Evaluate    json.dumps(${data})    json
+    ${resp}=    Post Request    ${SERVER_IP}    uri=${service}    data=${data}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${id}=    Get Json Value    ${resp.content}    /id
+    Set Suite Variable    ${id}
+    [Return]    ${resp}
+
+CORD Put
+    [Documentation]    Make a PUT call to the CORD controller
+    [Arguments]    ${service}    ${data}    ${data_id}
+    ${data}=    Evaluate    json.dumps(${data})    json
+    ${resp}=    Put Request    ${SERVER_IP}    uri=${service}/${data_id}    data=${data}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    ${id}=    Get Json Value    ${resp.content}    /id
+    Set Suite Variable    ${id}
+    [Return]    ${resp}
+
+CORD Delete
+    [Documentation]    Make a DELETE call to the CORD controller
+    [Arguments]    ${service}    ${data_id}
+    ${resp}=    Delete Request    ${SERVER_IP}    uri=${service}/${data_id}
+    Log    ${resp.content}
+    Should Be Equal As Strings    ${resp.status_code}    200
+    [Return]    ${resp}
+
+Generate JSON Data
+    {%- for m in proto.messages -%}
+    {%- if m.name not in  ['XOSBase'] -%}
+    {% autoescape false %}
+    {% endautoescape %}
+    ${json_{{ m.name | lower }}_1}=    Set Variable    { }
+    ${json_{{ m.name | lower }}_updated_1}=    Set Variable    { }
+    ${json_{{ m.name | lower}}_updated_key}=    Set Variable    null
+    Set Suite Variable    ${json_{{ m.name | lower}}_updated_key}
+    # set required fields for {{ m.name | lower }} object
+    {% for f in m.fields -%}
+    {% if f.modifier == "required" -%}
+    {% if f.options.blank == "False" -%}
+    {% if not f.options.default -%}
+    {% if f.link -%}
+    ${tmp_{{ f.options.model | lower }}_id}=    Create {{ f.options.model }}
+    ${json_{{ m.name | lower }}_1}=    Set Json Value    ${json_{{ m.name | lower }}_1}    /{{ f.name }}_id    ${tmp_{{ f.options.model | lower }}_id}
+    {% else -%}
+    ${json_{{ m.name | lower}}_{{ f.name }}_1}=    Generate Random Value    {{ f.type }}
+    ${json_{{ m.name | lower }}_1}=    Set Json Value    ${json_{{ m.name | lower }}_1}    /{{ f.name }}    "${json_{{ m.name | lower }}_{{ f.name }}_1}"
+    {% if loop.index0 == 0 -%}
+    ${json_{{ m.name | lower}}_updated_key}=    Set Variable    {{ f.name }}
+    ${json_{{ m.name | lower}}_{{ f.name }}_updated_1}=    Generate Random Value    {{ f.type }}
+    ${json_{{ m.name | lower }}_updated_1}=    Set Json Value    ${json_{{ m.name | lower }}_updated__1}    /{{ f.name }}    "${json_{{ m.name | lower }}_{{ f.name }}_updated_1}"
+    {% endif -%}
+    {% endif -%}
+    {% endif -%}
+    {% endif -%}
+    {% endif -%}
+    {% endfor -%}
+    {% if  m.name  == "Site" -%}
+    ${json_{{ m.name | lower}}_login_base_tmp}=    Set Variable    testloginbase
+    ${json_{{ m.name | lower}}_1}=    Set Json Value    ${json_{{ m.name | lower }}_1}    /login_base    "${json_{{ m.name | lower }}_login_base_tmp}"
+    {% endif %}
+    {% if  m.name  == "Slice" -%}
+    ${json_{{ m.name | lower}}_name}=    Generate Random Slice Name
+    ${json_{{ m.name | lower}}_1}=    Set Json Value    ${json_{{ m.name | lower }}_1}    /name    "${json_{{ m.name | lower }}_name}"
+    ${json_{{ m.name | lower}}_name_updated_1}=    Generate Random Slice Name
+    ${json_{{ m.name | lower}}_updated_1}=    Set Json Value    ${json_{{ m.name | lower }}_updated_1}    /name    "${json_{{ m.name | lower}}_name_updated_1}"
+    {% endif %}
+    ${json_{{ m.name | lower }}_1}=     To JSON    ${json_{{ m.name | lower }}_1}
+    ${json_{{ m.name | lower }}_updated_1}=     To JSON    ${json_{{ m.name | lower }}_updated_1}
+    Set Suite Variable    ${json_{{ m.name | lower }}_1}
+    Set Suite Variable    ${json_{{ m.name | lower }}_updated_1}
+    {% endif -%}
+    {% endfor %}
+
+{% for m in proto.messages %}
+{%- if m.name not in  ['XOSBase'] -%}
+Create {{ m.name }}
+    ##Creating {{ m.name | lower }} object
+    ${json_{{ m.name | lower }}_tmp}=    Set Variable    { }
+    # set required fields for {{ m.name | lower }} object
+    {% for f in m.fields -%}
+    {% if f.link -%}
+    {% if f.modifier == "required" -%}
+    {% if f.options.blank == "False" -%}
+    # create dependent {{ f.options.model }}
+    ${dependent_{{ f.options.model | lower }}_id}=    Create {{ f.options.model }}
+    ${json_{{ m.name | lower}}_tmp}=    Set Json Value    ${json_{{ m.name | lower }}_tmp}    /{{ f.name }}_id    ${dependent_{{ f.options.model | lower }}_id}
+    {% endif -%}
+    {% endif -%}
+    {% else -%}
+    {% if f.modifier == "required" -%}
+    {% if f.options.blank == "False" -%}
+    {% if not f.options.default -%}
+    ${json_{{ m.name | lower}}_{{ f.name }}_tmp}=    Generate Random Value    {{ f.type }}
+    ${json_{{ m.name | lower}}_tmp}=    Set Json Value    ${json_{{ m.name | lower }}_tmp}    /{{ f.name }}    "${json_{{ m.name | lower}}_{{ f.name }}_tmp}"
+    {% endif -%}
+    {% endif -%}
+    {% endif -%}
+    {% endif -%}
+    {% endfor -%}
+    {% if  m.name  == "Site" -%}
+    ${json_{{ m.name | lower}}_login_base_tmp}=    Set Variable    testloginbase
+    ${json_{{ m.name | lower}}_tmp}=    Set Json Value    ${json_{{ m.name | lower }}_tmp}    /login_base    "${json_{{ m.name | lower }}_login_base_tmp}"
+    {% endif %}
+    {% if  m.name  == "Slice" -%}
+    ${json_{{ m.name | lower}}_name}=    Generate Random Slice Name
+    ${json_{{ m.name | lower}}_tmp}=    Set Json Value    ${json_{{ m.name | lower }}_tmp}    /name    "${json_{{ m.name | lower }}_name}"
+    {% endif %}
+    {% if  m.name  == "Network" -%}
+    ${json_{{ m.name | lower}}_tmp}=    Set Json Value    ${json_{{ m.name | lower }}_tmp}    /permit_all_slices    true
+    {% endif %}
+    ${json_{{ m.name | lower }}_tmp}=     To JSON    ${json_{{ m.name | lower }}_tmp}
+    ${resp}=    CORD Post    /xosapi/v1/${xos_service}/{{ m.name | lower}}s    ${json_{{ m.name | lower }}_tmp}
+    ${id_{{ m.name | lower }}_tmp}=    Get Json Value    ${resp.content}    /id
+    Append To List    ${dependent_{{ m.name | lower }}_ids}    ${id_{{ m.name | lower }}_tmp}
+    [Return]    ${id_{{ m.name | lower }}_tmp}
+{% endif %}
+{% endfor -%}
+
+Setup
+    {% for m in proto.messages %}
+    {%- if m.name not in  ['XOSBase'] -%}
+    ${model}=    Set Variable    {{ m.name | lower }}s
+    @{dependent_{{ m.name | lower }}_ids}=    Create List    ${model}
+    Set Suite Variable    @{dependent_{{ m.name | lower }}_ids}
+    {% endif %}
+    {% endfor -%}
+    @{dependent_models}=    Create List
+    Set Suite Variable    ${dependent_models}
+    ${auth} =    Create List    ${USER}    ${PASSWD}
+    ${HEADERS}    Create Dictionary    Content-Type=application/json
+    Create Session    ${SERVER_IP}    http://${SERVER_IP}:${SERVER_PORT}    auth=${AUTH}    headers=${HEADERS}
+    Generate JSON Data
+
+Teardown
+    {% for m in proto.messages %}
+    {%- if m.name not in  ['XOSBase'] -%}
+    ${len}=    Get Length    ${dependent_{{ m.name | lower }}_ids}
+    : FOR    ${INDEX}    IN RANGE    1    ${len}
+    \    Run Keyword And Ignore Error    CORD Delete    /xosapi/v1/${xos_service}/${dependent_{{ m.name | lower }}_ids[0]}    ${dependent_{{ m.name | lower }}_ids[${INDEX}]}
+    {% endif %}
+    {% endfor -%}
+    Delete All Sessions