Modified HBase scripts to run in Lithium Branch.
[integration/test.git] / csit / libraries / TsdrUtils.robot
1 *** Settings ***
2 Library           RequestsLibrary
3 Library           XML
4 Library           OperatingSystem
5 Library           String
6 Library           Collections
7 Library           DateTime
8 Resource          Utils.robot
9 Variables         ../variables/Variables.py
10 Library           json
11 Library           HttpLibrary.HTTP
12 Library           Process
13
14 *** Variables ***
15 ${HBASE_CLIENT}    /tmp/Hbase/hbase-0.94.15/bin
16 ${CASSANDRA_CLIENT}    /tmp/cassandra/apache-cassandra-2.1.12/bin
17 ${final}          ${EMPTY}
18 ${prompt_timeout}    ${EMPTY}
19 ${CASSANDRA_DB_PATH}    /tmp/cassandra/apache-cassandra-2.1.12/
20 ${metric_path}    metricpath
21 ${metric_val}     metricval
22 ${metric_log}     metriclog
23 ${temp_metric_val}    temp_metric_val
24 ${NETFLOW_PORT}    2055
25 ${KARAF_PATH}     ${WORKSPACE}/${BUNDLEFOLDER}
26 ${TSDR_PATH}      ${KARAF_PATH}/tsdr
27 ${PURGE_PATH}     ${KARAF_PATH}/etc/tsdr.data.purge.cfg
28 ${SNMP_PATH}      ${KARAF_PATH}/etc/tsdr.snmp.cfg
29 ${SNMP_COMMUNITY}    mib2dev\/if-mib
30 &{HEADERS_QUERY}    Content-Type=application/json    Content-Type=application/json
31 &{OPER_STATUS}    up=1    down=2    testing=3    unknown=4    dormant=5    notPresent=6    lowerLayerDown=7
32 &{syslog_facility}    kern=0
33 ${MESSAGE}        Oct 29 18:10:31: ODL: %STKUNIT0-M:CP %IFMGR-5-ASTATE_UP: Changed interface Admin state to up: Te 0/0
34 ${MESSAGE_PATTERN}    Changed interface
35
36 *** Keywords ***
37 Start Tsdr Suite
38     [Arguments]    ${switch}=ovsk    ${switch_count}=3
39     [Documentation]    TSDR specific setup/cleanup work that can be done safely before any system.
40     ...    is run.
41     Clean Mininet System
42     ${mininet_conn_id1}=    Open Connection    ${TOOLS_SYSTEM_IP}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=120s
43     Set Suite Variable    ${mininet_conn_id1}
44     Login With Public Key    ${TOOLS_SYSTEM_USER}    ${USER_HOME}/.ssh/${SSH_KEY}    any
45     Execute Command    sudo ovs-vsctl set-manager ptcp:6644
46     ${start}=    Set Variable    sudo mn --controller=remote,ip=${ODL_SYSTEM_IP} --topo=linear,${switch_count} --switch ${switch},protocols=OpenFlow13
47     Log    ${start}
48     Write    ${start}
49     Read Until    mininet>
50
51 Configure Netflow
52     [Arguments]    ${user}=${TOOLS_SYSTEM_USER}
53     [Documentation]    Configure Netflow
54     ${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}
55
56 Ping All Hosts
57     [Arguments]    ${switch}=ovsk
58     [Documentation]    Ping between all hosts in mininet topology.
59     Switch Connection    ${mininet_conn_id1}
60     Write    pingall
61     Read Until    mininet>
62
63 Ping Pair Hosts
64     [Arguments]    ${host1}    ${host2}
65     [Documentation]    Ping between ${host1} and ${host2}
66     Switch Connection    ${mininet_conn_id1}
67     Write    pingpair ${host1} ${host2}
68     Read Until    mininet>
69
70 Ping Pair Hosts Hbase
71     [Arguments]    ${pattern}
72     [Documentation]    Ping between h1 and h2 and check Hbase
73     Ping Pair Hosts    h1    h2
74     ${query_output}=    Query the Data from HBaseClient    count 'NETFLOW'
75     Should Match Regexp    ${query_output}    ${pattern}
76
77 Ping Pair Hosts Cassandra
78     [Arguments]    ${pattern}
79     [Documentation]    Ping between h1 and h2 and check Cassandra
80     Ping Pair Hosts    h1    h2
81     ${query_output}=    Count Cassandra rows    select count(*) from tsdr.metriclog;
82     Should Match Regexp    ${query_output}    ${pattern}
83
84 Ping Pair Hosts HSQLDB
85     [Arguments]    ${pattern}
86     [Documentation]    Iperf between h1 and h2 and check Cassandra
87     Ping Pair Hosts    h1    h2
88     ${query_output}=    Issue Command On Karaf Console    tsdr:list NETFLOW | wc -l
89     Should Match Regexp    ${query_output}    ${pattern}
90
91 Stop Tsdr Suite
92     [Documentation]    Cleanup/Shutdown work that should be done at the completion of all
93     ...    tests
94     Switch Connection    ${mininet_conn_id1}
95     Read
96     Write    exit
97     Read Until    ${DEFAULT_LINUX_PROMPT}
98     Close Connection
99
100 Purge Data
101     [Arguments]    ${HOST}=127.0.0.1    ${purge_enabled}=true    ${purge_time}=00:00:00    ${purge_interval}=1400    ${retention}=0
102     [Documentation]    Write Purge file and copy it to directory.127.0.0.1 refers local controller
103     Create File    purge.cfg    \#TSDR Project Configuration file
104     Append To File    purge.cfg    \n
105     Append To File    purge.cfg    host=${HOST}
106     Append To File    purge.cfg    \n
107     Append To File    purge.cfg    data_purge_enabled=${purge_enabled}
108     Append To File    purge.cfg    \n
109     Append To File    purge.cfg    data_purge_time=${purge_time}
110     Append To File    purge.cfg    \n
111     Append To File    purge.cfg    data_purge_interval_in_minutes=${purge_interval}
112     Append To File    purge.cfg    \n
113     Append To File    purge.cfg    retention_time_in_hours=${retention}
114     Append To File    purge.cfg    \n
115     Move File    purge.cfg    ${PURGE_PATH}
116
117 Initialize the HBase for TSDR
118     [Documentation]    Install and initialize the tsdr tables on HBase Server
119     ${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
120     Log    ${hbase_server}
121     ${hbase_process}=    Run Command On Remote System    ${ODL_SYSTEM_IP}    ps -ef | grep HMaster
122     Log    ${hbase_process}
123
124 Stop the HBase Server
125     [Documentation]    Stop the HBase server
126     ${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
127     Log    ${hbase_server}
128
129 Configure the Queue on Switch
130     [Arguments]    ${queue_interface}    ${user}=${TOOLS_SYSTEM_USER}
131     [Documentation]    Configure the 2 queues on specified openvswitch interface
132     Log    Configure the queue on ${queue_interface}
133     ${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
134     Log    ${output}
135
136 Query the Data from HBaseClient
137     [Arguments]    ${query}    ${remote}=${ODL_SYSTEM_IP}    ${user}=${TOOLS_SYSTEM_USER}    ${prompt_timeout}=120s
138     [Documentation]    Execute the HBase Query and return the result
139     Log    Attempting to execute ${query} on ${remote} via HbaseClient
140     ${conn_id}=    Open Connection    ${remote}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=${prompt_timeout}
141     Login With Public Key    ${user}    ${USER_HOME}/.ssh/${SSH_KEY}    any
142     Write    export JAVA_HOME=/usr
143     Write    ${HBASE_CLIENT}/hbase shell
144     Read Until    hbase(main):001:0>
145     Write    ${query}
146     ${output}=    Read Until    hbase(main):
147     Write    exit
148     LOG    ${output}
149     Comment    ${output}=    Read Until    ${DEFAULT_LINUX_PROMPT}
150     Close Connection
151     [Return]    ${output}
152
153 Verify the Metric is Collected?
154     [Arguments]    ${tsdr_cmd}    ${metric}    ${remote}=${ODL_SYSTEM_IP}    ${user}=${TOOLS_SYSTEM_USER}    ${prompt_timeout}=120s
155     [Documentation]    Verify the ${tsdr_cmd} output contains ${metric}
156     ${output}=    Issue Command On Karaf Console    ${tsdr_cmd}    ${remote}    ${KARAF_SHELL_PORT}    ${prompt_timeout}
157     Should Contain    ${output}    ${metric}
158
159 Prepare HBase Filter
160     [Arguments]    ${left_str}    ${right_str}    ${connector}
161     [Documentation]    Prepare the Hbase Filter from Tsdr List output
162     ${left_str}=    Remove Space on String    ${left_str}
163     ${right_str}=    Remove Space on String    ${right_str}    1
164     ${x}=    Run Keyword If    '${left_str}' == 'MetricID'    Catenate    ${SPACE}    _
165     ...    ELSE IF    '${left_str}' == 'ObjectKeys'    Catenate    ${right_str}    _
166     ...    ELSE IF    '${left_str}' == 'TimeStamp'    Get Epoch Time    ${right_str}
167     ...    ELSE    Catenate    ${SPACE}
168     [Return]    ${x}
169
170 Create the Hbase table row
171     [Arguments]    ${tsdr_line}    ${metrics}
172     [Documentation]    Create the Hbase table row from tsdr:list
173     @{words}=    Split String    ${tsdr_line}    |
174     : FOR    ${li}    IN    @{words}
175     \    ${key}=    Fetch From Left    ${li}    =
176     \    ${value}=    Fetch From Right    ${li}    =
177     \    ${each_value}=    Prepare HBase Filter    ${key}    ${value}    _
178     \    ${final}=    Concatenate the String    ${final}    ${each_value}
179     ${query}=    Concatenate the String    ${metrics}    ${final}
180     ${query}=    Remove Space on String    ${query}
181     [Return]    ${query}
182
183 Initialize Cassandra Tables
184     [Arguments]    ${remote}=${ODL_SYSTEM_IP}    ${user}=${TOOLS_SYSTEM_USER}    ${prompt_timeout}=120s    ${key_table}=metricpath    ${val_table}=metricval
185     [Documentation]    Truncate Existing tables in Cassandra to Start it fresh.
186     Log    Attempting to truncate tables in Cassandra
187     Run Command On Remote System    ${ODL_SYSTEM_IP}    sudo rm -rf ${CASSANDRA_DB_PATH}${key_table}
188     Run Command On Remote System    ${ODL_SYSTEM_IP}    sudo rm -rf ${CASSANDRA_DB_PATH}${val_table}
189     ${conn_id}=    Open Connection    ${remote}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=${prompt_timeout}
190     Login With Public Key    ${user}    ${USER_HOME}/.ssh/${SSH_KEY}    any
191     Write    export JAVA_HOME=/usr
192     Write    ${CASSANDRA_CLIENT}/cqlsh
193     Read Until    cqlsh>
194     Write    TRUNCATE tsdr.${key_table} ;
195     Read Until    cqlsh>
196     Write    TRUNCATE tsdr.${val_table} ;
197     Read Until    cqlsh>
198     Write    exit
199     Close Connection
200
201 Initialize Cassandra Tables Metricval
202     [Arguments]    ${remote}=${ODL_SYSTEM_IP}    ${user}=${TOOLS_SYSTEM_USER}    ${prompt_timeout}=120s    ${key_table}=metricpath    ${val_table}=metricval
203     [Documentation]    Truncate Existing tables in Cassandra to Start it fresh
204     Log    Attempting to truncate tables in Cassandra
205     Run Command On Remote System    ${ODL_SYSTEM_IP}    sudo rm -rf ${CASSANDRA_DB_PATH}${key_table}
206     Run Command On Remote System    ${ODL_SYSTEM_IP}    sudo rm -rf ${CASSANDRA_DB_PATH}${val_table}
207     ${conn_id}=    Open Connection    ${remote}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=${prompt_timeout}
208     Login With Public Key    ${user}    ${USER_HOME}/.ssh/${SSH_KEY}    any
209     Write    export JAVA_HOME=/usr
210     Write    ${CASSANDRA_CLIENT}/cqlsh
211     Read Until    cqlsh>
212     Write    TRUNCATE tsdr.${val_table} ;
213     Read Until    cqlsh>
214     Write    exit
215     Close Connection
216
217 Query Metrics on H2 Datastore
218     [Arguments]    ${category}    ${attribute}    ${nodeid}=openflow:1
219     [Documentation]    Generate the JDBC query for H2 Datastore
220     ${h2_query}=    Concatenate the String    jdbc:query metric "select * from Metric where MetricCategory=    '${category}' and
221     ${h2_query}=    Concatenate the String    ${h2_query}    MetricName = '${attribute}' and NODEID = '${nodeid}' order by ID desc limit 5"
222     ${output}=    Issue Command On Karaf Console    ${h2_query}    ${ODL_SYSTEM_IP}    ${KARAF_SHELL_PORT}    30
223     [Return]    ${output}
224
225 Generate HBase Query
226     [Arguments]    ${table}    ${filter}    ${metric}
227     [Documentation]    Scan the Hbase Table with Filter
228     ${hbase_query}=    Concatenate the String    scan    '${table}'
229     ${hbase_query}=    Concatenate the String    ${hbase_query}    ,{ FILTER =>\"(RowFilter(=,
230     ${hbase_query}=    Concatenate the String    ${hbase_query}    'regexstring:${filter}*\')) AND (RowFilter(=,
231     ${hbase_query}=    Concatenate the String    ${hbase_query}    'regexstring:${metric}*\'))\",LIMIT=>10}
232     [Return]    ${hbase_query}
233
234 Get Metrics Value
235     [Arguments]    ${tsdr_line}
236     [Documentation]    Get Metric Value from tsdr:list
237     ${value}=    Fetch From Right    ${tsdr_line}    |
238     ${value}=    Replace String    ${value}    MetricValue    value
239     ${value}=    Replace String    ${value}    [m    ${EMPTY}
240     ${value}=    Replace String    ${value}    =    \=
241     ${value}=    Remove Space on String    ${value}
242     ${value}=    Convert to String    ${value}
243     [Return]    ${value}
244
245 Verify the Metrics Attributes on Hbase Client
246     [Arguments]    ${attribute}    ${rowfilter}    ${table}=PortStats
247     [Documentation]    Verification on Metrics attributes on Hbase Client
248     ${query}=    Generate HBase Query    ${table}    ${rowfilter}    ${attribute}
249     ${out}=    Query the Data from HBaseClient    ${query}
250     Should Match Regexp    ${out}    (?mui)value
251
252 Verify the Metrics Attributes on Cassandra Client
253     [Arguments]    ${pattern}
254     [Documentation]    Verification on Metrics attributes on Cassandra Client
255     @{metric_row}=    Find Metricval Keys    ${pattern}    metricpath
256     ${keya}=    Get From List    ${metric_row}    1
257     ${keyb}=    Get From List    ${metric_row}    2
258     ${keya_bool}=    Evaluate    ${keya} < 0
259     ${keya}=    Run Keyword If    '${keya_bool}' == 'True'    Catenate    SEPARATOR=    \\    ${keya}
260     ...    ELSE    Catenate    ${keya}
261     ${metricval}=    Create Temporary Key Info    ${keya} ${keyb}
262     @{lines}=    Split to lines    ${metricval}
263     ${mv_len}=    Get Length    ${lines}
264     ${mv_len}=    Evaluate    ${mv_len} - 1
265     ${found_line}=    Get From List    ${lines}    ${mv_len}
266     @{split_line}=    Split String    ${found_line}    ${SPACE}
267     ${metric_count}=    Get From List    ${split_line}    3
268     [Return]    ${metric_count}
269
270 Form Portstats Query Pattern
271     [Arguments]    ${metric}    ${node}    ${port}    ${attribute}
272     [Documentation]    Used for geneating openflow metrics Queries for Cassandra.
273     ${pattern}=    Concatenate the String    ${attribute}    .
274     ${pattern}=    Concatenate the String    ${pattern}    ${metric}
275     ${pattern}=    Concatenate the String    ${pattern}    .
276     ${pattern}=    Concatenate the String    ${pattern}    ${node}
277     ${pattern}=    Concatenate the String    ${pattern}    .
278     ${pattern}=    Concatenate the String    ${pattern}    Node_${node}
279     ${pattern}=    Concatenate the String    ${pattern}    .
280     ${pattern}=    Concatenate the String    ${pattern}    NodeConnector_${node}:${port}
281     ${pattern}=    Remove Space on String    ${pattern}
282     [Return]    ${pattern}
283
284 Create Temporary Key Info
285     [Arguments]    ${pattern}    ${remote}=${ODL_SYSTEM_IP}    ${user}=${TOOLS_SYSTEM_USER}    ${prompt_timeout}=120s    ${val_table}=metricval
286     [Documentation]    Return rows matching keya and keyb
287     ${output}=    Run Command On Remote System    ${ODL_SYSTEM_IP}    cat ${CASSANDRA_DB_PATH}${val_table}|grep "${pattern}"
288     [Return]    ${output}
289
290 Verify Metric Val File
291     [Documentation]    Returns Value for metric matching particular keya,keyb
292     @{metricval}=    Read File and Return Split Lines    ${CASSANDRA_DB_PATH}${temp_metric_val}
293     ${mv_len}=    Get Length    ${metricval}
294     ${mv_len}=    Evaluate    ${mv_len} - 1
295     ${found_line}=    Get From List    ${metricval}    ${mv_len}
296     @{split_line}=    Split String    ${found_line}    ${SPACE}
297     ${metric_count}=    Get From List    ${split_line}    3
298     [Return]    ${metric_count}
299
300 Verify Metric log File
301     [Arguments]    ${metric_log}    ${pattern}
302     [Documentation]    Returns Value for lines in Metriclog matching the pattern
303     ${contents}=    Grep From File    ${CASSANDRA_DB_PATH}${temp_metric_val}    ${pattern}
304     [Return]    ${contents}
305
306 Grep From File
307     [Arguments]    ${file}    ${pattern}
308     [Documentation]    Use cat to grep from the file and return the output
309     ${output}=    Run Command On Remote System    ${ODL_SYSTEM_IP}    cat ${file} | ${pattern}
310     [Return]    ${output}
311
312 Find Metricval Keys
313     [Arguments]    ${pattern}    ${file}
314     [Documentation]    Return list element which has the particular pattern.
315     ${metric_grep}=    Grep From File    ${TSDR_PATH}/tsdrKeyCache.txt    ${pattern}
316     @{split_line}=    Split String    ${metric_grep}    |
317     ${keypath}=    Get From List    ${split_line}    0
318     [Return]    @{split_line}
319
320 Copy TSDR tables
321     [Arguments]    ${remote}=${ODL_SYSTEM_IP}    ${user}=${TOOLS_SYSTEM_USER}    ${prompt_timeout}=120s    ${key_table}=metricpath    ${val_table}=metricval
322     [Documentation]    Copy TSDR files to external File system for text processing.
323     Log    Attempting to truncate tables in Cassandra
324     ${conn_id}=    Open Connection    ${remote}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=${prompt_timeout}
325     Login With Public Key    ${user}    ${USER_HOME}/.ssh/${SSH_KEY}    any
326     Write    export JAVA_HOME=/usr
327     Write    sudo ${CASSANDRA_CLIENT}/cqlsh
328     Read Until    cqlsh>
329     Write    COPY tsdr.${key_table} TO '${CASSANDRA_DB_PATH}${key_table}' WITH DELIMITER = ' ';
330     Read Until    cqlsh>
331     Write    COPY tsdr.${val_table} TO '${CASSANDRA_DB_PATH}${val_table}' WITH DELIMITER = ' ';
332     Read Until    cqlsh>
333     Write    exit
334     Close Connection
335
336 Issue Cassandra Query
337     [Arguments]    ${query}    ${output}    ${remote}=${ODL_SYSTEM_IP}    ${user}=${TOOLS_SYSTEM_USER}    ${prompt_timeout}=120s
338     [Documentation]    Issue query in cqlsh and match it with output which is passed as a argument
339     ${conn_id}=    Open Connection    ${remote}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=${prompt_timeout}
340     Login With Public Key    ${user}    ${USER_HOME}/.ssh/${SSH_KEY}    any
341     Write    export JAVA_HOME=/usr
342     Write    ${CASSANDRA_CLIENT}/cqlsh
343     Read Until    cqlsh>
344     ${query_output}=    Write    ${query}
345     ${query_output}=    Read Until    cqlsh>
346     ${str_output}=    Convert To String    ${output}
347     Should Contain    ${query_output}    ${str_output}
348     Write    exit
349     Close Connection
350
351 Count Cassandra rows
352     [Arguments]    ${query}    ${remote}=${ODL_SYSTEM_IP}    ${user}=${TOOLS_SYSTEM_USER}    ${prompt_timeout}=120s
353     [Documentation]    Issue query in cqlsh and match it with output which is passed as a argument
354     ${conn_id}=    Open Connection    ${remote}    prompt=${DEFAULT_LINUX_PROMPT}    timeout=${prompt_timeout}
355     Login With Public Key    ${user}    ${USER_HOME}/.ssh/${SSH_KEY}    any
356     Write    export JAVA_HOME=/usr
357     Write    ${CASSANDRA_CLIENT}/cqlsh
358     Read Until    cqlsh>
359     ${query_output}=    Write    ${query}
360     ${query_output}=    Read Until    cqlsh>
361     Write    exit
362     Close Connection
363     [Return]    ${query_output}
364
365 Read File and Return Split Lines
366     [Arguments]    ${filename}
367     [Documentation]    Reads the file and returns each line as list
368     ${contents}=    Run Command On Remote System    ${ODL_SYSTEM_IP}    cat ${filename}
369     @{lines}=    Split to lines    ${contents}
370     [Return]    @{lines}
371
372 Get Stats XML
373     [Arguments]    ${query}    ${xpath}
374     [Documentation]    Parse the xml output and returns it.
375     ${sid}=    RequestsLibrary.Create_Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    headers=${SEND_ACCEPT_XML_HEADERS}    auth=${AUTH}
376     ${resp}=    RequestsLibrary.Get Request    session    ${query}    headers=${SEND_ACCEPT_XML_HEADERS}
377     ${resp_xml}=    Parse XML    ${resp.content}
378     ${id1}=    Get Element Text    ${resp_xml}    ${xpath}
379     Delete All Sessions
380     [Return]    ${id1}
381
382 Return all XML matches
383     [Arguments]    ${query}    ${xpath}
384     [Documentation]    Returns all the values from xpath
385     ${sid}=    RequestsLibrary.Create_Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    headers=${SEND_ACCEPT_XML_HEADERS}    auth=${AUTH}
386     ${resp}=    RequestsLibrary.Get Request    session    ${query}    headers=${SEND_ACCEPT_XML_HEADERS}
387     ${resp_xml}=    Parse XML    ${resp.content}
388     @{id1}=    Get Elements Texts    ${resp_xml}    ${xpath}
389     Delete All Sessions
390     [Return]    @{id1}
391
392 Compare Tsdr XML Metrics
393     [Arguments]    ${xml}    ${tsdr}    ${deviation}=10
394     [Documentation]    Compares xml metrics from openflow plugin with TSDR metric values
395     ${val_max}=    Evaluate    ${xml}*${deviation}/100
396     ${val_diff}=    Evaluate    ${tsdr} - ${xml}
397     ${find_negative}=    Evaluate    ${val_diff} < 0
398     ${val_diff}=    Run Keyword If    '${find_negative}' == 'True'    Evaluate    ${val_diff}*-1
399     ...    ELSE    Evaluate    ${val_diff}*1
400     Should Be True    ${val_diff} <= ${val_max}
401
402 Generate Syslog
403     [Arguments]    ${facility}
404     [Documentation]    Uses netcat to generate logs and send it to port ${ODL_SYSTEM_IP}:1514
405     Run    echo "<${facility}>${MESSAGE}" | nc -w 4 -u ${ODL_SYSTEM_IP} 1514
406
407 Verify Metric Val File For Syslog
408     [Documentation]    Returns Value for metric matching particular keya,keyb
409     @{metricval}=    Read File and Return Split Lines    ${CASSANDRA_DB_PATH}${temp_metric_val}
410     [Return]    ${metricval}
411
412 Verify the Metrics Syslog on Cassandra Client
413     [Arguments]    ${pattern}
414     [Documentation]    Getting the keya and keyb for a particular syslog agent and create a temporary file from metriclog
415     @{metric_row}=    Find Metricval Keys    ${pattern}    metricpath
416     ${keya}=    Get From List    ${metric_row}    1
417     ${keyb}=    Get From List    ${metric_row}    2
418     ${keya_bool}=    Evaluate    ${keya} < 0
419     ${keya}=    Run Keyword If    '${keya_bool}' == 'True'    Catenate    SEPARATOR=    \\    ${keya}
420     ...    ELSE    Catenate    ${keya}
421     ${metric_log}=    Create Temporary Key Info    ${keya} ${keyb}    val_table=metriclog
422     [Return]    ${metric_log}
423
424 Iterating over metricpath
425     [Documentation]    Used to traverse over metricpath file and traverse over metricpath file and get the keys
426     @{mp_lines}=    Read File and Return Split Lines    ${CASSANDRA_DB_PATH}${metric_path}
427     : FOR    ${line}    IN    @{mp_lines}
428     \    @{split_line}=    Split String    ${line}    ${SPACE}
429     \    ${keya}=    Get From List    ${split_line}    1
430     \    ${keyb}=    Get From List    ${split_line}    2
431     \    Iterating over metricval    ${keya}    ${keyb}
432
433 Iterating over metricval
434     [Arguments]    ${keya}    ${keyb}
435     [Documentation]    Used to traverse over metricval file and check if keya and keyb are present.
436     ${mv_contents}=    OperatingSystem.Get File    ${CASSANDRA_DB_PATH}${metric_val}
437     Should Contain    ${mv_contents}    ${keya}    ${keyb}
438
439 Check Metric path
440     [Arguments]    ${pattern}
441     [Documentation]    Count the number of rows in metricpath and compare with the pattern.
442     ${query_output}=    Count Cassandra rows    select count(*) from tsdr.metricpath;
443     Should Match Regexp    ${query_output}    ${pattern}
444
445 Check HSQLDB
446     [Arguments]    ${pattern}    ${TYPE}
447     [Documentation]    Count the number of rows in HSQLDB with Metric ${TYPE}
448     ${output}=    Issue Command On Karaf Console    tsdr:list ${TYPE}
449     Should Match Regexp    ${output}    ${pattern}
450
451 Check Metric Val
452     [Arguments]    ${pattern}
453     [Documentation]    Count the number of rows in metricval table and compare with the pattern.
454     ${query_output}=    Count Cassandra rows    select count(*) from tsdr.metricval;
455     Should Match Regexp    ${query_output}    ${pattern}
456
457 Check Metric Log
458     [Arguments]    ${pattern}
459     [Documentation]    Count the number of rows in metriclog and compare with the pattern.
460     ${query_output}=    Count Cassandra rows    select count(*) from tsdr.metriclog;
461     Should Match Regexp    ${query_output}    ${pattern}
462
463 Generate TSDR Query
464     [Arguments]    ${DC}=    ${MN}=    ${NID}=    ${RK}=    ${from}=0    ${until}=now
465     [Documentation]    Issues TSDR Query and returns the list
466     Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS_QUERY}
467     ${resp}=    RequestsLibrary.Get Request    session    /tsdr/metrics/query?tsdrkey="[NID=${NID}][DC=${DC}][MN=${MN}][RK=${RK}]"&from=${from}&until=${until}    headers=${HEADERS_QUERY}
468     @{convert}=    Parse Json    ${resp.content}
469     Delete All Sessions
470     [Return]    @{convert}
471
472 Generate TSDR NBI
473     [Arguments]    ${DC}=    ${MN}=    ${NID}=    ${RK}=    ${from}=0    ${until}=now
474     ...    ${datapts}=1000000
475     [Documentation]    Issues TSDR Query and returns the list
476     Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS_QUERY}
477     ${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}
478     @{convert}=    Parse Json    ${resp.content}
479     ${dict_convert}=    Convert To Dictionary    @{convert}
480     @{dict}=    Get Dictionary Values    ${dict_convert}
481     @{datapoints_list}=    Convert to List    @{dict}[0]
482     Delete All Sessions
483     [Return]    @{datapoints_list}
484
485 Extract PORTSTATS RecordKeys
486     [Arguments]    ${Record_keys}
487     [Documentation]    Dissect Record keys for Portstats
488     ${node_dict}=    Get From List    ${Record_keys}    0
489     ${nc_dict}=    Get From List    ${Record_keys}    1
490     ${NODE}=    Get From Dictionary    ${node_dict}    keyValue
491     ${NC}=    Get From Dictionary    ${nc_dict}    keyValue
492     ${rk_val}=    Set Variable    Node:${NODE},NodeConnector:${NC}
493     [Return]    ${rk_val}
494
495 Extract QUEUESTATS RecordKeys
496     [Arguments]    ${Record_keys}
497     [Documentation]    Dissect Record keys for Queuestats
498     ${node_dict}=    Get From List    ${Record_keys}    0
499     ${connect_dict}=    Get From List    ${Record_keys}    1
500     ${queue_dict}=    Get From List    ${Record_keys}    2
501     ${NODE}=    Get From Dictionary    ${node_dict}    keyValue
502     ${CONNECT}=    Get From Dictionary    ${connect_dict}    keyValue
503     ${QUEUE}=    Get From Dictionary    ${queue_dict}    keyValue
504     ${rk_val}=    Set Variable    Node:${NODE},NodeConnector:${CONNECT},Queue:${QUEUE}
505     [Return]    ${rk_val}
506
507 Extract FLOWSTATS RecordKeys
508     [Arguments]    ${Record_keys}
509     [Documentation]    Dissect Record keys for Flowstats
510     ${node_dict}=    Get From List    ${Record_keys}    0
511     ${table_dict}=    Get From List    ${Record_keys}    1
512     ${flow_dict}=    Get From List    ${Record_keys}    2
513     ${NODE}=    Get From Dictionary    ${node_dict}    keyValue
514     ${TABLE}=    Get From Dictionary    ${table_dict}    keyValue
515     ${FLOW}=    Get From Dictionary    ${flow_dict}    keyValue
516     ${rk_val}=    Set Variable    Node:${NODE},Table:${TABLE},Flow:${FLOW}
517     [Return]    ${rk_val}
518
519 Extract FLOWTABLESTATS RecordKeys
520     [Arguments]    ${Record_keys}
521     [Documentation]    Dissect Record keys for Flowtablestats
522     ${node_dict}=    Get From List    ${Record_keys}    0
523     ${table_dict}=    Get From List    ${Record_keys}    1
524     ${NODE}=    Get From Dictionary    ${node_dict}    keyValue
525     ${TABLE}=    Get From Dictionary    ${table_dict}    keyValue
526     ${rk_val}=    Set Variable    Node:${NODE},Table:${TABLE}
527     [Return]    ${rk_val}
528
529 Extract Row Values from TSDR Query
530     [Arguments]    ${row_dict}    ${tsdr_row}    ${nbi_row}    ${DATA_CATEGORY}
531     [Documentation]    Extract the row values from query and generate it in DB format
532     ${nbi_value}=    Get From List    ${nbi_row}    0
533     ${nbi_time}=    Get From List    ${nbi_row}    1
534     ${MN}=    Get From Dictionary    ${row_dict}    metricName
535     ${MV}=    Get From Dictionary    ${row_dict}    metricValue
536     ${NID}=    Get From Dictionary    ${row_dict}    nodeID
537     ${RK}=    Get From Dictionary    ${row_dict}    recordKeys
538     ${time}=    Get From Dictionary    ${row_dict}    timeStamp
539     ${DC}=    Get From Dictionary    ${row_dict}    tsdrDataCategory
540     ${RK_VAL}=    Run Keyword If    '${DATA_CATEGORY}'=='PORTSTATS'    Extract PORTSTATS RecordKeys    ${RK}
541     ...    ELSE IF    '${DATA_CATEGORY}'=='FLOWSTATS'    Extract FLOWSTATS RecordKeys    ${RK}
542     ...    ELSE IF    '${DATA_CATEGORY}'=='FLOWTABLESTATS'    Extract FLOWTABLESTATS RecordKeys    ${RK}
543     ...    ELSE IF    '${DATA_CATEGORY}'=='QUEUESTATS'    Extract QUEUESTATS RecordKeys    ${RK}
544     ${epoch_time}=    Convert Date    ${time}    epoch    date_format=%a %b %d %H:%M:%S %Z %Y
545     ${epoch_time_int}=    Convert To Integer    ${epoch_time}
546     Should Match    ${tsdr_row}    *${NID}*
547     Should Match    ${tsdr_row}    *${DC}*
548     Should Match    ${tsdr_row}    *${MN}*
549     Should Match    ${tsdr_row}    *${RK_VAL}*
550     Should Match    ${tsdr_row}    *[${MV}]*
551     Should Match    ${tsdr_row}    *${epoch_time_int}*
552     Should Be Equal As Numbers    ${nbi_time}    ${epoch_time_int}
553     Should Be Equal As Numbers    ${nbi_value}    ${MV}
554
555 Evaluate Datasets Length
556     [Arguments]    ${tsdr_lines}    ${query_output}    ${nbi_output}
557     [Documentation]    Compare the outputs returned from all Data Stores
558     ${query_count}=    Get Length    ${query_output}
559     ${tsdr_count}=    Get Length    ${tsdr_lines}
560     ${nbi_count}=    Get Length    ${nbi_output}
561     Should Be Equal As Numbers    ${query_count}    ${tsdr_count}
562     Should Be Equal As Numbers    ${nbi_count}    ${tsdr_count}
563
564 Evaluate Datasets Value
565     [Arguments]    ${tsdr_lines}    ${query_output}    ${nbi_output}    ${TYPE}
566     [Documentation]    Compare the outputs returned from all Data Stores
567     : FOR    ${q_item}    ${t_item}    ${n_item}    IN ZIP    ${query_output}    ${tsdr_lines}
568     ...    ${nbi_output}
569     \    ${query_row}=    Extract Row Values from TSDR Query    ${q_item}    ${t_item}    ${n_item}    ${TYPE}
570     : FOR    ${found_line}    IN    @{matching_list}
571     \    @{split_line}=    Split String    ${found_line}    |
572     \    ${hex_name}=    Get From List    ${split_line}    2
573     \    ${if_desc}=    Decode Bytes To String    ${hex_name}    HEX
574     \    Append To List    ${ifdesc_list}    ${if_desc}
575     [Return]    @{ifdesc_list}
576
577 Write SNMP config
578     [Arguments]    ${HOST}=127.0.0.1    ${community}=${SNMP_COMMUNITY}
579     [Documentation]    Write SNMP Config File
580     Create File    snmp.cfg    credentials=[${HOST},${community}]
581     Append To File    snmp.cfg    \n
582     Move File    snmp.cfg    ${SNMP_PATH}
583
584 Bringup Netflow
585     [Documentation]    Brings up basic netflow setup .
586     Verify Feature Is Installed    odl-tsdr-netflow-statistics-collector
587     Wait Until Keyword Succeeds    24x    10 sec    Check Karaf Log Has Messages    NetFlow Data Colletor Initialized
588     Start Tsdr Suite
589     Ping All Hosts
590     Configure Netflow
591
592 Collect Data from SNMP Agent
593     [Arguments]    ${SNMP_IP}=127.0.0.1    ${SNMP_AGENT_COMM}=${SNMP_COMMUNITY}
594     [Documentation]    Poll for SNMP Agent OID
595     ${snmpagentinfo}    Create Dictionary    ip-address=${SNMP_IP}    community=${SNMP_AGENT_COMM}
596     ${snmpagentcreate}    Create Dictionary    input=${snmpagentinfo}
597     ${snmpagentcreate_json}=    json.dumps    ${snmpagentcreate}
598     Create Session    session    http://${ODL_SYSTEM_IP}:${RESTCONFPORT}    auth=${AUTH}    headers=${HEADERS_QUERY}
599     ${resp}=    RequestsLibrary.Post Request    session    /restconf/operations/snmp:get-interfaces    data=${snmpagentcreate_json}
600     ${convert}=    To Json    ${resp.content}
601     @{dict1}=    Get Dictionary Keys    ${convert}
602     ${dict1_0}=    Get From List    ${dict1}    0
603     ${dict1_val}=    Get From Dictionary    ${convert}    ${dict1_0}
604     @{ifEntry}=    Get From Dictionary    ${dict1_val}    ifEntry
605     @{SNMP_ENTRY}=    Create List
606     @{SNMP_VALUES}=    Create List
607     : FOR    ${int}    IN    @{ifEntry}
608     \    ${ifindex}=    Get From Dictionary    ${int}    ifIndex
609     \    ${ifOutDiscards}=    Get From Dictionary    ${int}    ifOutDiscards
610     \    ${ifInDiscards}=    Get From Dictionary    ${int}    ifInDiscards
611     \    ${ifType}=    Get From Dictionary    ${int}    ifType
612     \    ${ifInOctets}=    Get From Dictionary    ${int}    ifInOctets
613     \    ${ifSpeed}=    Get From Dictionary    ${int}    ifSpeed
614     \    ${ifOutQLen}=    Get From Dictionary    ${int}    ifOutQLen
615     \    ${ifOutErrors}=    Get From Dictionary    ${int}    ifOutErrors
616     \    ${ifPhysAddress}=    Get From Dictionary    ${int}    ifPhysAddress
617     \    ${ifInUcastPkts}=    Get From Dictionary    ${int}    ifInUcastPkts
618     \    ${ifOutNUcastPkts}=    Get From Dictionary    ${int}    ifOutNUcastPkts
619     \    ${ifInErrors}=    Get From Dictionary    ${int}    ifInErrors
620     \    ${ifOutOctets}=    Get From Dictionary    ${int}    ifOutOctets
621     \    ${ifAdminStatus1}=    Get From Dictionary    ${int}    ifAdminStatus
622     \    ${ifAdminStatus}=    Get From Dictionary    ${OPER_STATUS}    ${ifAdminStatus1}
623     \    ${ifInUnknownProtos}=    Get From Dictionary    ${int}    ifInUnknownProtos
624     \    ${ifOutUcastPkts}=    Get From Dictionary    ${int}    ifOutUcastPkts
625     \    ${ifInNUcastPkts}=    Get From Dictionary    ${int}    ifInNUcastPkts
626     \    ${ifMtu}=    Get From Dictionary    ${int}    ifMtu
627     \    ${ifOperStatus1}=    Get From Dictionary    ${int}    ifOperStatus
628     \    ${ifOperStatus}=    Get From Dictionary    ${OPER_STATUS}    ${ifOperStatus1}
629     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutDiscards | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutDiscards
630     \    Append To List    ${SNMP_VALUES}    ${ifOutDiscards}
631     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInDiscards | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInDiscards
632     \    Append To List    ${SNMP_VALUES}    ${ifInDiscards}
633     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInOctets | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInOctets
634     \    Append To List    ${SNMP_VALUES}    ${ifInOctets}
635     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutQLen | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutQLen
636     \    Append To List    ${SNMP_VALUES}    ${ifOutQLen}
637     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutErrors | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutErrors
638     \    Append To List    ${SNMP_VALUES}    ${ifOutErrors}
639     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInUcastPkts | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInUcastPkts
640     \    Append To List    ${SNMP_VALUES}    ${ifInUcastPkts}
641     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutNUcastPkts | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutNUcastPkts
642     \    Append To List    ${SNMP_VALUES}    ${ifOutNUcastPkts}
643     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInErrors | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInErrors
644     \    Append To List    ${SNMP_VALUES}    ${ifInErrors}
645     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutOctets | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutOctets
646     \    Append To List    ${SNMP_VALUES}    ${ifOutOctets}
647     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfAdminStatus | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfAdminStatus
648     \    Append To List    ${SNMP_VALUES}    ${ifAdminStatus}
649     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInUnknownProtos | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInUnknownProtos
650     \    Append To List    ${SNMP_VALUES}    ${ifInUnknownProtos}
651     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOutUcastPkts | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOutUcastPkts
652     \    Append To List    ${SNMP_VALUES}    ${ifOutUcastPkts}
653     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfInNUcastPkts | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfInNUcastPkts
654     \    Append To List    ${SNMP_VALUES}    ${ifInNUcastPkts}
655     \    Append To List    ${SNMP_ENTRY}    grep NID=${SNMP_IP} | grep DC=SNMPINTERFACES | grep MN=IfOperStatus | grep RK=ifIndex:${ifindex},ifName:Iso88023Csmacd,SnmpMetric:IfOperStatus
656     \    Append To List    ${SNMP_VALUES}    ${ifOperStatus}
657     [Return]    ${SNMP_ENTRY}    ${SNMP_VALUES}