--- /dev/null
+*** Settings ***
+Documentation Test suite for OpenFlow meter
+Suite Setup Create Session session http://${CONTROLLER}:${RESTCONFPORT} auth=${AUTH} headers=${HEADERS_XML}
+Suite Teardown Delete All Sessions
+Library SSHLibrary
+Library Collections
+Library OperatingSystem
+Library RequestsLibrary
+Library ../../../libraries/Common.py
+Variables ../../../variables/Variables.py
+Resource ../../../libraries/Utils.robot
+
+*** Variables ***
+${REST_CONTEXT} /restconf/operational/opendaylight-inventory:nodes/
+${REST_CONTEXT_CF} /restconf/config/opendaylight-inventory:nodes/node/openflow:1
+${REST_CONTEXT_OP} /restconf/operational/opendaylight-inventory:nodes/node/openflow:1
+${METER} ${CURDIR}/../../../variables/xmls/m4.xml
+${FLOW} ${CURDIR}/../../../variables/xmls/f51.xml
+${METER_NAME} Foo
+${FLOW_NAME} forward
+
+*** Test Cases ***
+Get list of nodes
+ [Documentation] Get the inventory to make sure openflow:1 comes up
+ ${node_list}= Create List openflow:1
+ Wait Until Keyword Succeeds 3s 1s Check For Elements At URI ${REST_CONTEXT_OP} ${node_list}
+
+Add a meter
+ [Documentation] Add a meter using RESTCONF
+ [Tags] Push
+ ${body} OperatingSystem.Get File ${METER}
+ Set Suite Variable ${body}
+ ${resp} RequestsLibrary.Put session ${REST_CONTEXT_CF}/meter/1 headers=${HEADERS_XML} data=${body}
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+
+Verify after adding meter config
+ [Documentation] Get the meter stat in config
+ ${resp} RequestsLibrary.Get session ${REST_CONTEXT_CF}/meter/1
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ Should Contain ${resp.content} ${METER_NAME}
+
+Verify after adding meter operational
+ [Documentation] Get the meter stat in operational
+ ${elements}= Create List meter-statistics meter-config-stats
+ Wait Until Keyword Succeeds 6s 2s Check For Elements At URI ${REST_CONTEXT_OP}/meter/1 ${elements}
+
+Add a flow that includes a meter
+ [Documentation] Push a flow through RESTCONF
+ [Tags] Push
+ ${body} OperatingSystem.Get File ${FLOW}
+ Set Suite Variable ${body}
+ ${resp} RequestsLibrary.Put session ${REST_CONTEXT_CF}/table/0/flow/2 headers=${HEADERS_XML} data=${body}
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+
+Verify after adding flow config
+ [Documentation] Verify the flow
+ [Tags] Get
+ ${resp} RequestsLibrary.Get session ${REST_CONTEXT_CF}/table/0/flow/2
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+ Should Contain ${resp.content} ${FLOW_NAME}
+
+Verify after adding flow operational
+ [Documentation] Verify the flow
+ ${elements}= Create List meter-id flow
+ Wait Until Keyword Succeeds 6s 2s Check For Elements At URI ${REST_CONTEXT_OP}/table/0/flow/2 ${elements}
+
+Remove the flow
+ [Documentation] Remove the flow
+ ${resp} RequestsLibrary.Delete session ${REST_CONTEXT_CF}/table/0/flow/2
+ Should Be Equal As Strings ${resp.status_code} 200
+
+Verify after deleting flow
+ [Documentation] Verify the flow removal
+ [Tags] Get
+ ${resp} RequestsLibrary.Get session ${REST_CONTEXT_CF}/table/0/flow/2
+ Should Not Contain ${resp.content} ${FLOW_NAME}
+
+Delete the meter
+ [Documentation] Remove the meter
+ [Tags] Delete
+ ${resp} RequestsLibrary.Delete session ${REST_CONTEXT_CF}/meter/1
+ Log ${resp.content}
+ Should Be Equal As Strings ${resp.status_code} 200
+
+Verify after deleting meter
+ [Documentation] Verify the flow removal
+ [Tags] Get
+ ${resp} RequestsLibrary.Get session ${REST_CONTEXT_CF}/meter/1
+ Should Not Contain ${resp.content} ${METER_NAME}