diff --git a/.gitignore b/.gitignore
index 6a1f015..a9517c0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -6,3 +6,4 @@
 report.xml
 log.html
 report.html
+*.pyc
diff --git a/libraries/DependencyLibrary.py b/libraries/DependencyLibrary.py
new file mode 100644
index 0000000..9d402af
--- /dev/null
+++ b/libraries/DependencyLibrary.py
@@ -0,0 +1,36 @@
+# Copyright 2019 the original author or authors.
+#
+# Licensed under the Apache License, Version 2.0 (the "License");
+# you may not use this file except in compliance with the License.
+# You may obtain a copy of the License at
+#
+#      http://www.apache.org/licenses/LICENSE-2.0
+#
+# Unless required by applicable law or agreed to in writing, software
+# distributed under the License is distributed on an "AS IS" BASIS,
+# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+# See the License for the specific language governing permissions and
+# limitations under the License.
+#
+from robot.libraries.BuiltIn import BuiltIn
+
+class DependencyLibrary(object):
+    ROBOT_LISTENER_API_VERSION = 2
+    ROBOT_LIBRARY_SCOPE = "GLOBAL"
+
+    def __init__(self):
+        self.ROBOT_LIBRARY_LISTENER = self
+        self.test_status = {}
+
+    def require_test_case(self, name):
+        key = name.lower()
+        if (key not in self.test_status):
+            BuiltIn().fail("required test case can't be found: '%s'" % name)
+
+        if (self.test_status[key] != "PASS"):
+            BuiltIn().fail("required test case failed: '%s'" % name)
+
+        return True
+
+    def _end_test(self, name, attrs):
+        self.test_status[name.lower()] = attrs["status"]
diff --git a/tests/sanity/sanity.robot b/tests/sanity/sanity.robot
index fe5e759..78364d6 100644
--- a/tests/sanity/sanity.robot
+++ b/tests/sanity/sanity.robot
@@ -21,6 +21,7 @@
 Suite Teardown    Teardown
 Test Teardown     Execute ONOS CLI Command    ${server_ip}    ${ONOS_SSH_PORT}    flows -s
 Library           OperatingSystem
+Library           ${CURDIR}/../../libraries/DependencyLibrary.py
 Resource          ${CURDIR}/../../libraries/onos.robot
 Resource          ${CURDIR}/../../libraries/voltctl.robot
 Resource          ${CURDIR}/../../libraries/utils.robot
@@ -58,12 +59,14 @@
 Validate OLT Connected to ONOS
     [Documentation]    Verifies the BBSIM-OLT device is activated in onos
     [Tags]    sanity
+    [Setup]    Require test case    Activate Device BBSIM OLT/ONU
     ${of_id}=    Wait Until Keyword Succeeds    ${timeout}    5s    Validate OLT Device in ONOS    ${BBSIM_OLT_SN}
     Set Suite Variable    ${of_id}
 
 Check EAPOL Flows in ONOS
     [Documentation]    Validates eapol flows for the onu are pushed from voltha
     [Tags]    sanity
+    [Setup]    Require test case    Validate OLT Connected to ONOS
     ${num_flows}=    Evaluate    ${num_onus} * 4
     ${flows_str}=    Convert To String    ${num_flows}
     Wait Until Keyword Succeeds    ${timeout}    5s    Verify Eapol Flows Added    ${server_ip}    ${ONOS_SSH_PORT}    ${flows_str}
@@ -71,11 +74,13 @@
 Validate ONU Authenticated in ONOS
     [Documentation]    Validates onu is AUTHORIZED in ONOS as bbsim will attempt to authenticate
     [Tags]    sanity
+    [Setup]    Require test case    Check EAPOL Flows in ONOS
     Wait Until Keyword Succeeds    ${timeout}    1s    Verify Number of AAA-Users    ${server_ip}    ${ONOS_SSH_PORT}    ${num_onus}
 
 Add Subscriber-Access in ONOS
     [Documentation]    Through the olt-app in ONOS, execute 'volt-add-subscriber-access' and validate IP Flows
     [Tags]    sanity
+    [Setup]    Require test case    Validate ONU Authenticated in ONOS
     ##    TODO: this works fine with 1 onu, but with multiple onus, we need to ensure this is executes
     ##    prior to to dhclient starting. possible start a process after first test case to just attempt
     ##    "volt-add-subscriber-access" to all onus periodically?
@@ -85,11 +90,13 @@
 Validate DHCP Assignment in ONOS
     [Documentation]    After IP Flows are pushed to the device, BBSIM will start a dhclient for the ONU.
     [Tags]    sanity
+    [Setup]    Require test case    Add Subscriber-Access in ONOS
     Wait Until Keyword Succeeds    120s    15s    Validate DHCP Allocations    ${server_ip}    ${ONOS_SSH_PORT}    ${num_onus}
 
 Delete Device and Verify
     [Documentation]    Disable -> Delete devices via voltctl and verify its removed
     [Tags]    sanity
+    [Setup]    Require test case    Activate Device BBSIM OLT/ONU
     #disable/delete onu
     ${rc}    ${output}=    Run and Return Rc and Output    ${VOLTCTL_CONFIG}; voltctl device disable ${onu_device_id}
     Should Be Equal As Integers    ${rc}    0
