diff --git a/ext/testlib/handlers.py b/ext/testlib/handlers.py
index 7530f9b..6f76940 100644
--- a/ext/testlib/handlers.py
+++ b/ext/testlib/handlers.py
@@ -166,6 +166,18 @@
         self._closed = True
         self._save()
 
+    def unsuccessful(self):
+        '''
+        Performs an or reduce on all of the results.
+        Returns true if at least one test is unsuccessful, false when all tests
+        pass
+        '''
+        for suite_result in self.internal_results:
+            if suite_result.unsuccessful:
+                return True
+        # If all are successful, then this wasn't "unsuccessful"
+        return False
+
 
 #TODO Change from a handler to an internal post processor so it can be used
 # to reprint results
diff --git a/ext/testlib/main.py b/ext/testlib/main.py
index 7e5f208..ac79547 100644
--- a/ext/testlib/main.py
+++ b/ext/testlib/main.py
@@ -78,6 +78,14 @@
     def close(self):
         self.mp_handler.close()
 
+    def unsuccessful(self):
+        '''
+        Performs an or reduce on all of the results.
+        Returns true if at least one test is unsuccessful, false when all tests
+        pass
+        '''
+        return self.result_handler.unsuccessful()
+
 def get_config_tags():
     return getattr(config.config,
             config.StorePositionalTagsAction.position_kword)
@@ -225,6 +233,8 @@
         qrunner.list_tests()
         qrunner.list_tags()
 
+    return 0
+
 def run_schedule(test_schedule, log_handler):
     '''
     Test Phases
@@ -273,8 +283,12 @@
         library_runner = runner.LibraryRunner(test_schedule)
     library_runner.run()
 
+    failed = log_handler.unsuccessful()
+
     log_handler.finish_testing()
 
+    return 1 if failed else 0
+
 def do_run():
     # Initialize early parts of the log.
     with RunLogHandler() as log_handler:
@@ -297,8 +311,7 @@
             # Filter tests based on tags
             filter_with_config_tags(test_schedule)
         # Execute the tests
-        run_schedule(test_schedule, log_handler)
-
+        return run_schedule(test_schedule, log_handler)
 
 def do_rerun():
     # Init early parts of log
@@ -308,21 +321,25 @@
                 os.path.join(config.config.result_path,
                 config.constants.pickle_filename))
 
-        rerun_suites = (suite.uid for suite in results if suite.unsucessful)
+        rerun_suites = (suite.uid for suite in results if suite.unsuccessful)
 
         # Use loader to load suites
         loader = loader_mod.Loader()
         test_schedule = loader.load_schedule_for_suites(*rerun_suites)
 
         # Execute the tests
-        run_schedule(test_schedule, log_handler)
+        return run_schedule(test_schedule, log_handler)
 
 def main():
     '''
     Main entrypoint for the testlib test library.
+    Returns 0 on success and 1 otherwise so it can be used as a return code
+    for scripts.
     '''
     config.initialize_config()
 
     # 'do' the given command.
-    globals()['do_'+config.config.command]()
+    result = globals()['do_'+config.config.command]()
     log.test_log.close()
+
+    return result
diff --git a/ext/testlib/result.py b/ext/testlib/result.py
index 8e3f38d..22c0248 100644
--- a/ext/testlib/result.py
+++ b/ext/testlib/result.py
@@ -58,7 +58,7 @@
         self._metadata.result = result
 
     @property
-    def unsucessful(self):
+    def unsuccessful(self):
         return self._metadata.result.value != state.Result.Passed
 
 
diff --git a/tests/main.py b/tests/main.py
index 779445d..5cd68e9 100755
--- a/tests/main.py
+++ b/tests/main.py
@@ -21,4 +21,4 @@
 import testlib.helper as helper
 
 config.basedir = helper.absdirpath(__file__)
-testlib()
+sys.exit(testlib())
