+++ /dev/null
-*** Settings ***
-Library RequestsLibrary
-Library XML
-Library OperatingSystem
-Library String
-Library Collections
-Library DateTime
-Resource Utils.robot
-Variables ../variables/Variables.py
-Library json
-Library Process
-
-
-*** Variables ***
-${HBASE_CLIENT} /tmp/Hbase/hbase-0.94.27/bin
-${CASSANDRA_CLIENT} /tmp/cassandra/apache-cassandra-2.1.16/bin
-${final} ${EMPTY}
-${prompt_timeout} ${EMPTY}
-${CASSANDRA_DB_PATH} /tmp/cassandra/apache-cassandra-2.1.16/
-${metric_path} metricpath
-${metric_val} metricval
-${metric_log} metriclog
-${temp_metric_val} temp_metric_val
-${NETFLOW_PORT} 2055
-${KARAF_PATH} ${WORKSPACE}/${BUNDLEFOLDER}
-${TSDR_PATH} ${KARAF_PATH}/tsdr
-${PURGE_PATH} ${KARAF_PATH}/etc/tsdr.data.purge.cfg
-${SNMP_PATH} ${KARAF_PATH}/etc/tsdr.snmp.cfg
-${SNMP_COMMUNITY} mib2dev\/if-mib
-&{HEADERS_QUERY} Content-Type=application/json Content-Type=application/json
-&{OPER_STATUS} up=1 down=2 testing=3 unknown=4 dormant=5 notPresent=6 lowerLayerDown=7
-&{syslog_facility} kern=0
-${MESSAGE}
-... Oct 29 18:10:31: ODL: %STKUNIT0-M:CP %IFMGR-5-ASTATE_UP: Changed interface Admin state to up: Te 0/0
-${MESSAGE_PATTERN} Changed interface
-
-
-*** Keywords ***
-Start Tsdr Suite
- [Documentation] TSDR specific setup/cleanup work that can be done safely before any system.
- ... is run.
- [Arguments] ${switch}=ovsk ${switch_count}=3
- Clean Mininet System
- ${mininet_conn_id1}= Open Connection ${TOOLS_SYSTEM_IP} prompt=${DEFAULT_LINUX_PROMPT} timeout=120s
- Set Suite Variable ${mininet_conn_id1}
- Login With Public Key ${TOOLS_SYSTEM_USER} ${USER_HOME}/.ssh/${SSH_KEY} any
- Execute Command sudo ovs-vsctl set-manager ptcp:6644
- ${start}= Set Variable
- ... sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo=linear,${switch_count} --switch ${switch},protocols=OpenFlow13
- Log ${start}
- Write ${start}
- Read Until mininet>
-
-Configure Netflow
- [Documentation] Configure Netflow
- [Arguments] ${user}=${TOOLS_SYSTEM_USER}
- ${output}= Run Command On Controller
- ... ${TOOLS_SYSTEM_IP}
- ... sudo ovs-vsctl -- set Bridge s1 netflow=@nf -- --id=@nf create NetFlow target=\\"${ODL_SYSTEM_IP}:${NETFLOW_PORT}\\" active-timeout=10
- ... ${user}
-
-Ping All Hosts
- [Documentation] Ping between all hosts in mininet topology.
- [Arguments] ${switch}=ovsk
- Switch Connection ${mininet_conn_id1}
- Write pingall
- Read Until mininet>
-
-Ping Pair Hosts
- [Documentation] Ping between ${host1} and ${host2}
- [Arguments] ${host1} ${host2}
- Switch Connection ${mininet_conn_id1}
- Write pingpair ${host1} ${host2}
- Read Until mininet>
-
-Ping Pair Hosts Hbase
- [Documentation] Ping between h1 and h2 and check Hbase
- [Arguments] ${pattern}
- Ping Pair Hosts h1 h2
- ${query_output}= Query the Data from HBaseClient count 'NETFLOW'
- Should Match Regexp ${query_output} ${pattern}
-
-Ping Pair Hosts Cassandra
- [Documentation] Ping between h1 and h2 and check Cassandra
- [Arguments] ${pattern}
- Ping Pair Hosts h1 h2
- ${query_output}= Count Cassandra rows select count(*) from tsdr.metriclog;
- Should Match Regexp ${query_output} ${pattern}
-
-Ping Pair Hosts HSQLDB
- [Documentation] Iperf between h1 and h2 and check Cassandra
- [Arguments] ${pattern}
- Ping Pair Hosts h1 h2
- ${query_output}= Issue Command On Karaf Console tsdr:list NETFLOW | wc -l
- Should Match Regexp ${query_output} ${pattern}
-
-Stop Tsdr Suite
- [Documentation] Cleanup/Shutdown work that should be done at the completion of all
- ... tests
- Switch Connection ${mininet_conn_id1}
- Read
- Write exit
- Read Until ${DEFAULT_LINUX_PROMPT}
- Close Connection
-
-Purge Data
- [Documentation] Write Purge file and copy it to directory.127.0.0.1 refers local controller
- [Arguments] ${HOST}=127.0.0.1 ${purge_enabled}=true ${purge_time}=00:00:00 ${purge_interval}=1400 ${retention}=0
- Create File purge.cfg \#TSDR Project Configuration file
- Append To File purge.cfg \n
- Append To File purge.cfg host=${HOST}
- Append To File purge.cfg \n
- Append To File purge.cfg data_purge_enabled=${purge_enabled}
- Append To File purge.cfg \n
- Append To File purge.cfg data_purge_time=${purge_time}
- Append To File purge.cfg \n
- Append To File purge.cfg data_purge_interval_in_minutes=${purge_interval}
- Append To File purge.cfg \n
- Append To File purge.cfg retention_time_in_hours=${retention}
- Append To File purge.cfg \n
- Move File purge.cfg ${PURGE_PATH}
-
-Initialize the HBase for TSDR
- [Documentation] Install and initialize the tsdr tables on HBase Server
- ${hbase_server}= Run Command On Remote System
- ... ${ODL_SYSTEM_IP}
- ... export JAVA_HOME=/usr && ${HBASE_CLIENT}/start-hbase.sh
- ... ${TOOLS_SYSTEM_USER}
- ... ${prompt_timeout}=120
- Log ${hbase_server}
- ${hbase_process}= Run Command On Remote System ${ODL_SYSTEM_IP} ps -ef | grep HMaster
- Log ${hbase_process}
-
-Stop the HBase Server
- [Documentation] Stop the HBase server
- ${hbase_server}= Run Command On Remote System
- ... ${ODL_SYSTEM_IP}
- ... export JAVA_HOME=/usr && ${HBASE_CLIENT}/stop-hbase.sh
- ... ${TOOLS_SYSTEM_USER}
- ... ${prompt_timeout}=90
- Log ${hbase_server}
-
-Configure the Queue on Switch
- [Documentation] Configure the 2 queues on specified openvswitch interface
- [Arguments] ${queue_interface} ${user}=${TOOLS_SYSTEM_USER}
- Log Configure the queue on ${queue_interface}
- ${output}= Run Command On Remote System
- ... ${TOOLS_SYSTEM_IP}
- ... sudo ovs-vsctl set port ${queue_interface} qos=@newqos -- --id=@newqos create qos type=linux-htb other-config:max-rate=200000000 queues=0=@q0,1=@q1,2=@q2 -- --id=@q0 create queue other-config:min-rate=100000 other-config:max-rate=200000 -- --id=@q1 create queue other-config:min-rate=10001 other-config:max-rate=300000 -- --id=@q2 create queue other-config:min-rate=300001 other-config:max-rate=200000000
- Log ${output}
-
-Query the Data from HBaseClient
- [Documentation] Execute the HBase Query and return the result
- [Arguments] ${query} ${remote}=${ODL_SYSTEM_IP} ${user}=${TOOLS_SYSTEM_USER} ${prompt_timeout}=120s
- Log Attempting to execute ${query} on ${remote} via HbaseClient
- ${conn_id}= Open Connection ${remote} prompt=${DEFAULT_LINUX_PROMPT} timeout=${prompt_timeout}
- Login With Public Key ${user} ${USER_HOME}/.ssh/${SSH_KEY} any
- Write export JAVA_HOME=/usr
- Write ${HBASE_CLIENT}/hbase shell
- Read Until hbase(main):001:0>
- Write ${query}
- ${output}= Read Until hbase(main):
- Write exit
- LOG ${output}
- Comment ${output}= Read Until ${DEFAULT_LINUX_PROMPT}
- Close Connection
- RETURN ${output}
-
-Verify the Metric is Collected?
- [Documentation] Verify the ${tsdr_cmd} output contains ${metric}
- [Arguments] ${tsdr_cmd} ${metric} ${remote}=${ODL_SYSTEM_IP} ${user}=${TOOLS_SYSTEM_USER} ${prompt_timeout}=120s
- ${output}= Issue Command On Karaf Console
- ... ${tsdr_cmd}
- ... ${remote}
- ... ${KARAF_SHELL_PORT}
- ... ${prompt_timeout}
- Should Contain ${output} ${metric}
-
-Prepare HBase Filter
- [Documentation] Prepare the Hbase Filter from Tsdr List output
- [Arguments] ${left_str} ${right_str} ${connector}
- ${left_str}= Remove Space on String ${left_str}
- ${right_str}= Remove Space on String ${right_str} 1
- IF '${left_str}' == 'MetricID'
- ${x}= Catenate ${SPACE} _
- ELSE IF '${left_str}' == 'ObjectKeys'
- ${x}= Catenate ${right_str} _
- ELSE IF '${left_str}' == 'TimeStamp'
- ${x}= Get Epoch Time ${right_str}
- ELSE
- ${x}= Catenate ${SPACE}
- END
- RETURN ${x}
-
-Create the Hbase table row
- [Documentation] Create the Hbase table row from tsdr:list
- [Arguments] ${tsdr_line} ${metrics}
- @{words}= Split String ${tsdr_line} |
- FOR ${li} IN @{words}
- ${key}= Fetch From Left ${li} =
- ${value}= Fetch From Right ${li} =
- ${each_value}= Prepare HBase Filter ${key} ${value} _
- ${final}= Concatenate the String ${final} ${each_value}
- END
- ${query}= Concatenate the String ${metrics} ${final}
- ${query}= Remove Space on String ${query}
- RETURN ${query}
-
-Initialize Cassandra Tables
- [Documentation] Truncate Existing tables in Cassandra to Start it fresh.
- [Arguments] ${remote}=${ODL_SYSTEM_IP} ${user}=${TOOLS_SYSTEM_USER} ${prompt_timeout}=120s ${key_table}=metricpath ${val_table}=metricval
- Log Attempting to truncate tables in Cassandra
- Run Command On Remote System ${ODL_SYSTEM_IP} sudo rm -rf ${CASSANDRA_DB_PATH}${key_table}
- Run Command On Remote System ${ODL_SYSTEM_IP} sudo rm -rf ${CASSANDRA_DB_PATH}${val_table}
- ${conn_id}= Open Connection ${remote} prompt=${DEFAULT_LINUX_PROMPT} timeout=${prompt_timeout}
- Login With Public Key ${user} ${USER_HOME}/.ssh/${SSH_KEY} any
- Write export JAVA_HOME=/usr
- Write ${CASSANDRA_CLIENT}/cqlsh
- Read Until cqlsh>
- Write TRUNCATE tsdr.${key_table} ;
- Read Until cqlsh>
- Write TRUNCATE tsdr.${val_table} ;
- Read Until cqlsh>
- Write exit
- Close Connection
-
-Initialize Cassandra Tables Metricval
- [Documentation] Truncate Existing tables in Cassandra to Start it fresh
- [Arguments] ${remote}=${ODL_SYSTEM_IP} ${user}=${TOOLS_SYSTEM_USER} ${prompt_timeout}=120s ${key_table}=metricpath ${val_table}=metricval
- Log Attempting to truncate tables in Cassandra
- Run Command On Remote System ${ODL_SYSTEM_IP} sudo rm -rf ${CASSANDRA_DB_PATH}${key_table}
- Run Command On Remote System ${ODL_SYSTEM_IP} sudo rm -rf ${CASSANDRA_DB_PATH}${val_table}
- ${conn_id}= Open Connection ${remote} prompt=${DEFAULT_LINUX_PROMPT} timeout=${prompt_timeout}
- Login With Public Key ${user} ${USER_HOME}/.ssh/${SSH_KEY} any
- Write export JAVA_HOME=/usr
- Write ${CASSANDRA_CLIENT}/cqlsh
- Read Until cqlsh>
- Write TRUNCATE tsdr.${val_table} ;
- Read Until cqlsh>
- Write exit
- Close Connection
-
-Query Metrics on H2 Datastore
- [Documentation] Generate the JDBC query for H2 Datastore
- [Arguments] ${category} ${attribute} ${nodeid}=openflow:1
- ${h2_query}= Concatenate the String
- ... jdbc:query metric "select * from Metric where MetricCategory=
- ... '${category}' and
- ${h2_query}= Concatenate the String
- ... ${h2_query}
- ... MetricName = '${attribute}' and NODEID = '${nodeid}' order by ID desc limit 5"
- ${output}= Issue Command On Karaf Console ${h2_query} ${ODL_SYSTEM_IP} ${KARAF_SHELL_PORT} 30
- RETURN ${output}
-
-Generate HBase Query
- [Documentation] Scan the Hbase Table with Filter
- [Arguments] ${table} ${filter} ${metric}
- ${hbase_query}= Concatenate the String scan '${table}'
- ${hbase_query}= Concatenate the String ${hbase_query} ,{ FILTER =>\"(RowFilter(=,
- ${hbase_query}= Concatenate the String ${hbase_query} 'regexstring:${filter}*\')) AND (RowFilter(=,
- ${hbase_query}= Concatenate the String ${hbase_query} 'regexstring:${metric}*\'))\",LIMIT=>10}
- RETURN ${hbase_query}
-
-Get Metrics Value
- [Documentation] Get Metric Value from tsdr:list
- [Arguments] ${tsdr_line}
- ${value}= Fetch From Right ${tsdr_line} |
- ${value}= Replace String ${value} MetricValue value
- ${value}= Replace String ${value} [m ${EMPTY}
- ${value}= Replace String ${value} = \=
- ${value}= Remove Space on String ${value}
- ${value}= Convert to String ${value}
- RETURN ${value}
-
-Verify the Metrics Attributes on Hbase Client
- [Documentation] Verification on Metrics attributes on Hbase Client
- [Arguments] ${attribute} ${rowfilter} ${table}=PortStats
- ${query}= Generate HBase Query ${table} ${rowfilter} ${attribute}
- ${out}= Query the Data from HBaseClient ${query}
- Should Match Regexp ${out} (?mui)value
-
-Verify the Metrics Attributes on Cassandra Client
- [Documentation] Verification on Metrics attributes on Cassandra Client
- [Arguments] ${pattern}
- @{metric_row}= Find Metricval Keys ${pattern} metricpath
- ${keya}= Get From List ${metric_row} 1
- ${keyb}= Get From List ${metric_row} 2
- ${keya_bool}= Evaluate ${keya} < 0
- IF '${keya_bool}' == 'True'
- ${keya}= Catenate SEPARATOR= \\ ${keya}
- ELSE
- ${keya}= Catenate ${keya}
- END
- ${metricval}= Create Temporary Key Info ${keya} ${keyb}
- @{lines}= Split to lines ${metricval}
- ${mv_len}= Get Length ${lines}
- ${mv_len}= Evaluate ${mv_len} - 1
- ${found_line}= Get From List ${lines} ${mv_len}
- @{split_line}= Split String ${found_line} ${SPACE}
- ${metric_count}= Get From List ${split_line} 3
- RETURN ${metric_count}
-
-Form Portstats Query Pattern
- [Documentation] Used for geneating openflow metrics Queries for Cassandra.
- [Arguments] ${metric} ${node} ${port} ${attribute}
- ${pattern}= Concatenate the String ${attribute} .
- ${pattern}= Concatenate the String ${pattern} ${metric}
- ${pattern}= Concatenate the String ${pattern} .
- ${pattern}= Concatenate the String ${pattern} ${node}
- ${pattern}= Concatenate the String ${pattern} .
- ${pattern}= Concatenate the String ${pattern} Node_${node}
- ${pattern}= Concatenate the String ${pattern} .
- ${pattern}= Concatenate the String ${pattern} NodeConnector_${node}:${port}
- ${pattern}= Remove Space on String ${pattern}
- RETURN ${pattern}
-
-Create Temporary Key Info
- [Documentation] Return rows matching keya and keyb
- [Arguments] ${pattern} ${remote}=${ODL_SYSTEM_IP} ${user}=${TOOLS_SYSTEM_USER} ${prompt_timeout}=120s ${val_table}=metricval
- ${output}= Run Command On Remote System
- ... ${ODL_SYSTEM_IP}
- ... cat ${CASSANDRA_DB_PATH}${val_table}|grep "${pattern}"
- RETURN ${output}
-
-Verify Metric Val File
- [Documentation] Returns Value for metric matching particular keya,keyb
- @{metricval}= Read File and Return Split Lines ${CASSANDRA_DB_PATH}${temp_metric_val}
- ${mv_len}= Get Length ${metricval}
- ${mv_len}= Evaluate ${mv_len} - 1
- ${found_line}= Get From List ${metricval} ${mv_len}
- @{split_line}= Split String ${found_line} ${SPACE}
- ${metric_count}= Get From List ${split_line} 3
- RETURN ${metric_count}
-
-Verify Metric log File
- [Documentation] Returns Value for lines in Metriclog matching the pattern
- [Arguments] ${metric_log} ${pattern}
- ${contents}= Grep From File ${CASSANDRA_DB_PATH}${temp_metric_val} ${pattern}
- RETURN ${contents}
-
-Grep From File
- [Documentation] Use cat to grep from the file and return the output
- [Arguments] ${file} ${pattern}
- ${output}= Run Command On Remote System ${ODL_SYSTEM_IP} cat ${file} | ${pattern}
- RETURN ${output}
-
-Find Metricval Keys
- [Documentation] Return list element which has the particular pattern.
- [Arguments] ${pattern} ${file}
- ${metric_grep}= Grep From File ${TSDR_PATH}/tsdrKeyCache.txt ${pattern}
- @{split_line}= Split String ${metric_grep} |
- ${keypath}= Get From List ${split_line} 0
- RETURN @{split_line}
-
-Copy TSDR tables
- [Documentation] Copy TSDR files to external File system for text processing.
- [Arguments] ${remote}=${ODL_SYSTEM_IP} ${user}=${TOOLS_SYSTEM_USER} ${prompt_timeout}=120s ${key_table}=metricpath ${val_table}=metricval
- Log Attempting to truncate tables in Cassandra
- ${conn_id}= Open Connection ${remote} prompt=${DEFAULT_LINUX_PROMPT} timeout=${prompt_timeout}
- Login With Public Key ${user} ${USER_HOME}/.ssh/${SSH_KEY} any
- Write export JAVA_HOME=/usr
- Write sudo ${CASSANDRA_CLIENT}/cqlsh
- Read Until cqlsh>
- Write COPY tsdr.${key_table} TO '${CASSANDRA_DB_PATH}${key_table}' WITH DELIMITER = ' ';
- Read Until cqlsh>
- Write COPY tsdr.${val_table} TO '${CASSANDRA_DB_PATH}${val_table}' WITH DELIMITER = ' ';
- Read Until cqlsh>
- Write exit
- Close Connection
-
-Issue Cassandra Query
- [Documentation] Issue query in cqlsh and match it with output which is passed as a argument
- [Arguments] ${query} ${output} ${remote}=${ODL_SYSTEM_IP} ${user}=${TOOLS_SYSTEM_USER} ${prompt_timeout}=120s
- ${conn_id}= Open Connection ${remote} prompt=${DEFAULT_LINUX_PROMPT} timeout=${prompt_timeout}
- Login With Public Key ${user} ${USER_HOME}/.ssh/${SSH_KEY} any
- Write export JAVA_HOME=/usr
- Write ${CASSANDRA_CLIENT}/cqlsh
- Read Until cqlsh>
- ${query_output}= Write ${query}
- ${query_output}= Read Until cqlsh>
- ${str_output}= Convert To String ${output}
- Should Contain ${query_output} ${str_output}
- Write exit
- Close Connection
-
-Count Cassandra rows
- [Documentation] Issue query in cqlsh and match it with output which is passed as a argument
- [Arguments] ${query} ${remote}=${ODL_SYSTEM_IP} ${user}=${TOOLS_SYSTEM_USER} ${prompt_timeout}=120s
- ${conn_id}= Open Connection ${remote} prompt=${DEFAULT_LINUX_PROMPT} timeout=${prompt_timeout}
- Login With Public Key ${user} ${USER_HOME}/.ssh/${SSH_KEY} any
- Write export JAVA_HOME=/usr
- Write ${CASSANDRA_CLIENT}/cqlsh
- Read Until cqlsh>
- ${query_output}= Write ${query}
- ${query_output}= Read Until cqlsh>
- Write exit
- Close Connection
- RETURN ${query_output}
-
-Read File and Return Split Lines
- [Documentation] Reads the file and returns each line as list
- [Arguments] ${filename}
- ${contents}= Run Command On Remote System ${ODL_SYSTEM_IP} cat ${filename}
- @{lines}= Split to lines ${contents}
- RETURN @{lines}
-
-Get Stats XML
- [Documentation] Parse the xml output and returns it.
- [Arguments] ${query} ${xpath}
- ${sid}= RequestsLibrary.Create_Session
- ... session
- ... http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
- ... headers=${SEND_ACCEPT_XML_HEADERS}
- ... auth=${AUTH}
- ${resp}= RequestsLibrary.Get Request session ${query} headers=${SEND_ACCEPT_XML_HEADERS}
- ${resp_xml}= Parse XML ${resp.text}
- ${id1}= Get Element Text ${resp_xml} ${xpath}
- Delete All Sessions
- RETURN ${id1}
-
-Return all XML matches
- [Documentation] Returns all the values from xpath
- [Arguments] ${query} ${xpath}
- ${sid}= RequestsLibrary.Create_Session
- ... session
- ... http://${ODL_SYSTEM_IP}:${RESTCONFPORT}
- ... headers=${SEND_ACCEPT_XML_HEADERS}
- ... auth=${AUTH}
- ${resp}= RequestsLibrary.Get Request session ${query} headers=${SEND_ACCEPT_XML_HEADERS}
- ${resp_xml}= Parse XML ${resp.text}
- @{id1}= Get Elements Texts ${resp_xml} ${xpath}
- Delete All Sessions
- RETURN @{id1}
-
-Compare Tsdr XML Metrics
- [Documentation] Compares xml metrics from openflow plugin with TSDR metric values
- [Arguments] ${xml} ${tsdr} ${deviation}=10
- ${val_max}= Evaluate ${xml}*${deviation}/100
- ${val_diff}= Evaluate ${tsdr} - ${xml}
- ${find_negative}= Evaluate ${val_diff} < 0
- IF '${find_negative}' == 'True'
- ${val_diff}= Evaluate ${val_diff}*-1
- ELSE
- ${val_diff}= Evaluate ${val_diff}*1
- END
- Should Be True ${val_diff} <= ${val_max}
-
-Generate Syslog
- [Documentation] Uses netcat to generate logs and send it to port ${ODL_SYSTEM_IP}:1514
- [Arguments] ${facility}
- Run echo "<${facility}>${MESSAGE}" | nc -w 4 -u ${ODL_SYSTEM_IP} 1514
-
-Verify Metric Val File For Syslog
- [Documentation] Returns Value for metric matching particular keya,keyb
- @{metricval}= Read File and Return Split Lines ${CASSANDRA_DB_PATH}${temp_metric_val}
- RETURN ${metricval}
-
-Verify the Metrics Syslog on Cassandra Client
- [Documentation] Getting the keya and keyb for a particular syslog agent and create a temporary file from metriclog
- [Arguments] ${pattern}
- @{metric_row}= Find Metricval Keys ${pattern} metricpath
- ${keya}= Get From List ${metric_row} 1
- ${keyb}= Get From List ${metric_row} 2
- ${keya_bool}= Evaluate ${keya} < 0
- IF '${keya_bool}' == 'True'
- ${keya}= Catenate SEPARATOR= \\ ${keya}
- ELSE
- ${keya}= Catenate ${keya}
- END
- ${metric_log}= Create Temporary Key Info ${keya} ${keyb} val_table=metriclog
- RETURN ${metric_log}
-
-Iterating over metricpath
- [Documentation] Used to traverse over metricpath file and traverse over metricpath file and get the keys
- @{mp_lines}= Read File and Return Split Lines ${CASSANDRA_DB_PATH}${metric_path}
- FOR ${line} IN @{mp_lines}
- @{split_line}= Split String ${line} ${SPACE}
- ${keya}= Get From List ${split_line} 1
- ${keyb}= Get From List ${split_line} 2
- Iterating over metricval ${keya} ${keyb}
- END
-
-Iterating over metricval
- [Documentation] Used to traverse over metricval file and check if keya and keyb are present.
- [Arguments] ${keya} ${keyb}
- ${mv_contents}= OperatingSystem.Get File ${CASSANDRA_DB_PATH}${metric_val}
- Should Contain ${mv_contents} ${keya} ${keyb}
-
-Check Metric path
- [Documentation] Count the number of rows in metricpath and compare with the pattern.
- [Arguments] ${pattern}
- ${query_output}= Count Cassandra rows select count(*) from tsdr.metricpath;
- Should Match Regexp ${query_output} ${pattern}
-
-Check HSQLDB
- [Documentation] Count the number of rows in HSQLDB with Metric ${TYPE}
- [Arguments] ${pattern} ${TYPE}
- ${output}= Issue Command On Karaf Console tsdr:list ${TYPE}
- Should Match Regexp ${output} ${pattern}
-
-Check Metric Val
- [Documentation] Count the number of rows in metricval table and compare with the pattern.
- [Arguments] ${pattern}
- ${query_output}= Count Cassandra rows select count(*) from tsdr.metricval;
- Should Match Regexp ${query_output} ${pattern}
-
-Check Metric Log
- [Documentation] Count the number of rows in metriclog and compare with the pattern.
- [Arguments] ${pattern}
- ${query_output}= Count Cassandra rows select count(*) from tsdr.metriclog;
- Should Match Regexp ${query_output} ${pattern}
-
-Generate TSDR Query
- [Documentation] Issues TSDR Query and returns the list
- [Arguments] ${DC}= ${MN}= ${NID}= ${RK}= ${from}=0 ${until}=now
- Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_QUERY}
- ${resp}= RequestsLibrary.Get Request
- ... session
- ... /tsdr/metrics/query?tsdrkey="[NID=${NID}][DC=${DC}][MN=${MN}][RK=${RK}]"&from=${from}&until=${until}
- ... headers=${HEADERS_QUERY}
- @{convert}= Parse Json ${resp.text}
- Delete All Sessions
- RETURN @{convert}
-
-Generate TSDR NBI
- [Documentation] Issues TSDR Query and returns the list
- [Arguments] ${DC}= ${MN}= ${NID}= ${RK}= ${from}=0 ${until}=now
- ... ${datapts}=1000000
- Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_QUERY}
- ${resp}= RequestsLibrary.Get Request
- ... session
- ... /tsdr/nbi/render?target="[NID=${NID}][DC=${DC}][MN=${MN}][RK=${RK}]"&from=${from}&until=${until}&maxDataPoints=${datapts}
- ... headers=${HEADERS_QUERY}
- @{convert}= Parse Json ${resp.text}
- ${dict_convert}= Convert To Dictionary @{convert}
- @{dict}= Get Dictionary Values ${dict_convert}
- ${datapoints_list}= Convert to List ${dict}[0]
- Delete All Sessions
- RETURN @{datapoints_list}
-
-Extract PORTSTATS RecordKeys
- [Documentation] Dissect Record keys for Portstats
- [Arguments] ${Record_keys}
- ${node_dict}= Get From List ${Record_keys} 0
- ${nc_dict}= Get From List ${Record_keys} 1
- ${NODE}= Get From Dictionary ${node_dict} keyValue
- ${NC}= Get From Dictionary ${nc_dict} keyValue
- ${rk_val}= Set Variable Node:${NODE},NodeConnector:${NC}
- RETURN ${rk_val}
-
-Extract QUEUESTATS RecordKeys
- [Documentation] Dissect Record keys for Queuestats
- [Arguments] ${Record_keys}
- ${node_dict}= Get From List ${Record_keys} 0
- ${connect_dict}= Get From List ${Record_keys} 1
- ${queue_dict}= Get From List ${Record_keys} 2
- ${NODE}= Get From Dictionary ${node_dict} keyValue
- ${CONNECT}= Get From Dictionary ${connect_dict} keyValue
- ${QUEUE}= Get From Dictionary ${queue_dict} keyValue
- ${rk_val}= Set Variable Node:${NODE},NodeConnector:${CONNECT},Queue:${QUEUE}
- RETURN ${rk_val}
-
-Extract FLOWSTATS RecordKeys
- [Documentation] Dissect Record keys for Flowstats
- [Arguments] ${Record_keys}
- ${node_dict}= Get From List ${Record_keys} 0
- ${table_dict}= Get From List ${Record_keys} 1
- ${flow_dict}= Get From List ${Record_keys} 2
- ${NODE}= Get From Dictionary ${node_dict} keyValue
- ${TABLE}= Get From Dictionary ${table_dict} keyValue
- ${FLOW}= Get From Dictionary ${flow_dict} keyValue
- ${rk_val}= Set Variable Node:${NODE},Table:${TABLE},Flow:${FLOW}
- RETURN ${rk_val}
-
-Extract FLOWTABLESTATS RecordKeys
- [Documentation] Dissect Record keys for Flowtablestats
- [Arguments] ${Record_keys}
- ${node_dict}= Get From List ${Record_keys} 0
- ${table_dict}= Get From List ${Record_keys} 1
- ${NODE}= Get From Dictionary ${node_dict} keyValue
- ${TABLE}= Get From Dictionary ${table_dict} keyValue
- ${rk_val}= Set Variable Node:${NODE},Table:${TABLE}
- RETURN ${rk_val}
-
-Extract Row Values from TSDR Query
- [Documentation] Extract the row values from query and generate it in DB format
- [Arguments] ${row_dict} ${tsdr_row} ${nbi_row} ${DATA_CATEGORY}
- ${nbi_value}= Get From List ${nbi_row} 0
- ${nbi_time}= Get From List ${nbi_row} 1
- ${MN}= Get From Dictionary ${row_dict} metricName
- ${MV}= Get From Dictionary ${row_dict} metricValue
- ${NID}= Get From Dictionary ${row_dict} nodeID
- ${RK}= Get From Dictionary ${row_dict} recordKeys
- ${time}= Get From Dictionary ${row_dict} timeStamp
- ${DC}= Get From Dictionary ${row_dict} tsdrDataCategory
- IF '${DATA_CATEGORY}'=='PORTSTATS'
- ${RK_VAL}= Extract PORTSTATS RecordKeys ${RK}
- ELSE IF '${DATA_CATEGORY}'=='FLOWSTATS'
- ${RK_VAL}= Extract FLOWSTATS RecordKeys ${RK}
- ELSE IF '${DATA_CATEGORY}'=='FLOWTABLESTATS'
- ${RK_VAL}= Extract FLOWTABLESTATS RecordKeys ${RK}
- ELSE IF '${DATA_CATEGORY}'=='QUEUESTATS'
- ${RK_VAL}= Extract QUEUESTATS RecordKeys ${RK}
- ELSE
- ${RK_VAL}= Set Variable ${None}
- END
- ${epoch_time}= Convert Date ${time} epoch date_format=%a %b %d %H:%M:%S %Z %Y
- ${epoch_time_int}= Convert To Integer ${epoch_time}
- Should Match ${tsdr_row} *${NID}*
- Should Match ${tsdr_row} *${DC}*
- Should Match ${tsdr_row} *${MN}*
- Should Match ${tsdr_row} *${RK_VAL}*
- Should Match ${tsdr_row} *[${MV}]*
- Should Match ${tsdr_row} *${epoch_time_int}*
- Should Be Equal As Numbers ${nbi_time} ${epoch_time_int}
- Should Be Equal As Numbers ${nbi_value} ${MV}
-
-Evaluate Datasets Length
- [Documentation] Compare the outputs returned from all Data Stores
- [Arguments] ${tsdr_lines} ${query_output} ${nbi_output}
- ${query_count}= Get Length ${query_output}
- ${tsdr_count}= Get Length ${tsdr_lines}
- ${nbi_count}= Get Length ${nbi_output}
- Should Be Equal As Numbers ${query_count} ${tsdr_count}
- Should Be Equal As Numbers ${nbi_count} ${tsdr_count}
-
-Evaluate Datasets Value
- [Documentation] Compare the outputs returned from all Data Stores
- [Arguments] ${tsdr_lines} ${query_output} ${nbi_output} ${TYPE}
- FOR ${q_item} ${t_item} ${n_item} IN ZIP ${query_output} ${tsdr_lines}
- ... ${nbi_output}
- ${query_row}= Extract Row Values from TSDR Query ${q_item} ${t_item} ${n_item} ${TYPE}
- END
- FOR ${found_line} IN @{matching_list}
- @{split_line}= Split String ${found_line} |
- ${hex_name}= Get From List ${split_line} 2
- ${if_desc}= Decode Bytes To String ${hex_name} HEX
- Append To List ${ifdesc_list} ${if_desc}
- END
- RETURN @{ifdesc_list}
-
-Write SNMP config
- [Documentation] Write SNMP Config File
- [Arguments] ${HOST}=127.0.0.1 ${community}=${SNMP_COMMUNITY}
- Create File snmp.cfg credentials=[${HOST},${community}]
- Append To File snmp.cfg \n
- Move File snmp.cfg ${SNMP_PATH}
-
-Bringup Netflow
- [Documentation] Brings up basic netflow setup .
- Verify Feature Is Installed odl-tsdr-netflow-statistics-collector
- Wait Until Keyword Succeeds 24x 10 sec Check Karaf Log Has Messages NetFlow Data Colletor Initialized
- Start Tsdr Suite
- Ping All Hosts
- Configure Netflow
-
-Collect Data from SNMP Agent
- [Documentation] Poll for SNMP Agent OID
- [Arguments] ${SNMP_IP}=127.0.0.1 ${SNMP_AGENT_COMM}=${SNMP_COMMUNITY}
- ${snmpagentinfo}= Create Dictionary ip-address=${SNMP_IP} community=${SNMP_AGENT_COMM}
- ${snmpagentcreate}= Create Dictionary input=${snmpagentinfo}
- ${snmpagentcreate_json}= json.dumps ${snmpagentcreate}
- Create Session session http://${ODL_SYSTEM_IP}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_QUERY}
- ${resp}= RequestsLibrary.Post Request
- ... session
- ... /restconf/operations/snmp:get-interfaces
- ... data=${snmpagentcreate_json}
- ${convert}= To Json ${resp.text}
- @{dict1}= Get Dictionary Keys ${convert}
- ${dict1_0}= Get From List ${dict1} 0
- ${dict1_val}= Get From Dictionary ${convert} ${dict1_0}
- @{ifEntry}= Get From Dictionary ${dict1_val} ifEntry
- @{SNMP_ENTRY}= Create List
- @{SNMP_VALUES}= Create List
- FOR ${int} IN @{ifEntry}
- ${ifindex}= Get From Dictionary ${int} ifIndex
- ${ifOutDiscards}= Get From Dictionary ${int} ifOutDiscards
- ${ifInDiscards}= Get From Dictionary ${int} ifInDiscards
- ${ifType}= Get From Dictionary ${int} ifType
- ${ifInOctets}= Get From Dictionary ${int} ifInOctets
- ${ifSpeed}= Get From Dictionary ${int} ifSpeed
- ${ifOutQLen}= Get From Dictionary ${int} ifOutQLen
- ${ifOutErrors}= Get From Dictionary ${int} ifOutErrors
- ${ifPhysAddress}= Get From Dictionary ${int} ifPhysAddress
- ${ifInUcastPkts}= Get From Dictionary ${int} ifInUcastPkts
- ${ifOutNUcastPkts}= Get From Dictionary ${int} ifOutNUcastPkts
- ${ifInErrors}= Get From Dictionary ${int} ifInErrors
- ${ifOutOctets}= Get From Dictionary ${int} ifOutOctets
- ${ifAdminStatus1}= Get From Dictionary ${int} ifAdminStatus
- ${ifAdminStatus}= Get From Dictionary ${OPER_STATUS} ${ifAdminStatus1}
- ${ifInUnknownProtos}= Get From Dictionary ${int} ifInUnknownProtos
- ${ifOutUcastPkts}= Get From Dictionary ${int} ifOutUcastPkts
- ${ifInNUcastPkts}= Get From Dictionary ${int} ifInNUcastPkts
- ${ifMtu}= Get From Dictionary ${int} ifMtu
- ${ifOperStatus1}= Get From Dictionary ${int} ifOperStatus
- ${ifOperStatus}= Get From Dictionary ${OPER_STATUS} ${ifOperStatus1}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutDiscards | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutDiscards
- Append To List ${SNMP_VALUES} ${ifOutDiscards}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInDiscards | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInDiscards
- Append To List ${SNMP_VALUES} ${ifInDiscards}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInOctets | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInOctets
- Append To List ${SNMP_VALUES} ${ifInOctets}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutQLen | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutQLen
- Append To List ${SNMP_VALUES} ${ifOutQLen}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutErrors | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutErrors
- Append To List ${SNMP_VALUES} ${ifOutErrors}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInUcastPkts | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInUcastPkts
- Append To List ${SNMP_VALUES} ${ifInUcastPkts}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutNUcastPkts | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutNUcastPkts
- Append To List ${SNMP_VALUES} ${ifOutNUcastPkts}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInErrors | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInErrors
- Append To List ${SNMP_VALUES} ${ifInErrors}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutOctets | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutOctets
- Append To List ${SNMP_VALUES} ${ifOutOctets}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfAdminStatus | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfAdminStatus
- Append To List ${SNMP_VALUES} ${ifAdminStatus}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInUnknownProtos | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInUnknownProtos
- Append To List ${SNMP_VALUES} ${ifInUnknownProtos}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutUcastPkts | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutUcastPkts
- Append To List ${SNMP_VALUES} ${ifOutUcastPkts}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInNUcastPkts | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInNUcastPkts
- Append To List ${SNMP_VALUES} ${ifInNUcastPkts}
- Append To List
- ... ${SNMP_ENTRY}
- ... grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOperStatus | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOperStatus
- Append To List ${SNMP_VALUES} ${ifOperStatus}
- END
- RETURN ${SNMP_ENTRY} ${SNMP_VALUES}
-
-Retrieve Value From Elasticsearch
- [Documentation] Retrieve the last record of Elastic Search from index TSDR. Query is done by data category, metricname and node ID
- [Arguments] ${data_category} ${metric_name} ${node_id} ${rk_node_id}
- Create Session session http://${ODL_SYSTEM_IP}:${ELASTICPORT} auth=${AUTH} headers=${HEADERS_QUERY}
- ${els_query}= create_query_string_search ${data_category} ${metric_name} ${node_id} ${rk_node_id}
- ${els_JSON_request}= build_elastic_search_JSON_request ${els_query}
- ${resp}= RequestsLibrary.Post_Request session _search?pretty data=${els_JSON_request}
- Should Be Equal As Strings ${resp.status_code} 200
- @{convert}= Parse Json ${resp.text}
- ${json}= RequestsLibrary.To Json ${resp.text}
- ${result}= extract_metric_value_search ${json}
- RETURN ${result}
- [Teardown] Delete All Sessions
-
-Check Available values from Elasticsearch
- [Documentation] Check whether data were sent to Elastic Search. We retrieve all data by data category and then compare its count
- [Arguments] ${data_category} ${number_items}
- Create Session session http://${ODL_SYSTEM_IP}:${ELASTICPORT} auth=${AUTH} headers=${HEADERS_QUERY}
- ${els_query}= create_query_string_count ${data_category}
- ${els_JSON_request}= build_elastic_search_JSON_request ${els_query}
- ${resp}= RequestsLibrary.Post_Request session _search?pretty data=${els_JSON_request}
- Should Be Equal As Strings ${resp.status_code} 200
- @{convert}= Parse Json ${resp.text}
- ${json}= RequestsLibrary.To Json ${resp.text}
- ${result}= extract_metric_value_count ${json}
- Log To Console Elasticsearch: Check number of elements
- Should Be True ${result} > ${number_items}
- [Teardown] Delete All Sessions
-
-Clear Elasticsearch Datastore
- [Documentation] Clear Elastic Search Datastore
- Create Session session http://${ODL_SYSTEM_IP}:${ELASTICPORT} auth=${AUTH} headers=${HEADERS_QUERY}
- ${resp}= RequestsLibrary.Delete_Request session tsdr
- Should Be Equal As Strings ${resp.status_code} 200
- RETURN ${resp.status_code}
- [Teardown] Delete All Sessions