diff --git a/tempest/openstack.py b/tempest/openstack.py
index 18af647..e23373f 100644
--- a/tempest/openstack.py
+++ b/tempest/openstack.py
@@ -31,6 +31,8 @@
 from tempest.services.nova.json.floating_ips_client import FloatingIPsClient
 from tempest.services.nova.json.keypairs_client import KeyPairsClient
 from tempest.services.nova.json.volumes_client import VolumesClient
+from tempest.services.nova.json.console_output_client \
+import ConsoleOutputsClient
 from tempest.services.identity.json.admin_client import AdminClient
 from tempest.services.identity.json.admin_client import TokenClient
 
@@ -82,6 +84,7 @@
         self.security_groups_client = SecurityGroupsClient(*client_args)
         self.floating_ips_client = FloatingIPsClient(*client_args)
         self.volumes_client = VolumesClient(*client_args)
+        self.console_outputs_client = ConsoleOutputsClient(*client_args)
         self.admin_client = AdminClient(*client_args)
         self.token_client = TokenClient(self.config)
         self.network_client = NetworkClient(*client_args)
diff --git a/tempest/services/nova/json/console_output_client.py b/tempest/services/nova/json/console_output_client.py
new file mode 100644
index 0000000..4a8795b
--- /dev/null
+++ b/tempest/services/nova/json/console_output_client.py
@@ -0,0 +1,18 @@
+from tempest.common.rest_client import RestClient
+import json
+
+
+class ConsoleOutputsClient(RestClient):
+
+    def __init__(self, config, username, password, auth_url, tenant_name=None):
+        super(ConsoleOutputsClient, self).__init__(config, username, password,
+                                             auth_url, tenant_name)
+        self.service = self.config.compute.catalog_type
+
+    def get_console_output(self, server_id, length):
+        post_body = {'os-getConsoleOutput': {'length': length}}
+        url = "/servers/%s/action" % server_id
+        post_body = json.dumps(post_body)
+        resp, body = self.post(url, post_body, self.headers)
+        body = json.loads(body)
+        return resp, body['output']
diff --git a/tempest/tests/base_compute_test.py b/tempest/tests/base_compute_test.py
index 2b16d8c..d7dac10 100644
--- a/tempest/tests/base_compute_test.py
+++ b/tempest/tests/base_compute_test.py
@@ -15,6 +15,7 @@
     keypairs_client = os.keypairs_client
     floating_ips_client = os.floating_ips_client
     security_groups_client = os.security_groups_client
+    console_outputs_client = os.console_outputs_client
     limits_client = os.limits_client
     config = os.config
     build_interval = config.compute.build_interval
diff --git a/tempest/tests/test_authorization.py b/tempest/tests/test_authorization.py
index b21e0d3..8a0cf1b 100644
--- a/tempest/tests/test_authorization.py
+++ b/tempest/tests/test_authorization.py
@@ -18,6 +18,7 @@
         cls.images_client = cls.os.images_client
         cls.keypairs_client = cls.os.keypairs_client
         cls.security_client = cls.os.security_groups_client
+        cls.console_outputs_client = cls.os.console_outputs_client
         cls.config = cls.os.config
         cls.image_ref = cls.config.compute.image_ref
         cls.flavor_ref = cls.config.compute.flavor_ref
@@ -42,6 +43,8 @@
                 cls.other_keypairs_client = cls.other_manager.keypairs_client
                 cls.other_security_client = \
                 cls.other_manager.security_groups_client
+                cls.other_console_outputs_client = \
+                cls.other_manager.console_outputs_client
             except exceptions.AuthenticationFailure:
                 # multi_user is already set to false, just fall through
                 pass
@@ -420,3 +423,13 @@
             resp, body = \
             self.images_client.delete_image_metadata_item(self.image['id'],
                                                             'meta1')
+
+    @raises(exceptions.NotFound)
+    @attr(type='negative')
+    @utils.skip_unless_attr('multi_user', 'Second user not configured')
+    def test_get_console_output_of_other_account_server_fails(self):
+        """
+        A Get Console Output for another user's server should fail
+        """
+        self.other_console_outputs_client.get_console_output(self.server['id'],
+                                                                    10)
diff --git a/tempest/tests/test_console_output.py b/tempest/tests/test_console_output.py
new file mode 100644
index 0000000..1aa4a1c
--- /dev/null
+++ b/tempest/tests/test_console_output.py
@@ -0,0 +1,59 @@
+from nose.plugins.attrib import attr
+from tempest import openstack
+from tempest import exceptions
+from base_compute_test import BaseComputeTest
+from tempest.common.utils.data_utils import rand_name
+
+
+class ConsoleOutputTest(BaseComputeTest):
+
+    @classmethod
+    def setUpClass(cls):
+        cls.client = cls.console_outputs_client
+        cls.servers_client = cls.servers_client
+        cls.name = rand_name('server')
+        resp, server = cls.servers_client.create_server(cls.name,
+                                                 cls.image_ref,
+                                                 cls.flavor_ref)
+        cls.server_id = server['id']
+
+        cls.servers_client.wait_for_server_status(cls.server_id, 'ACTIVE')
+
+    @classmethod
+    def tearDownClass(cls):
+        cls.servers_client.delete_server(cls.server_id)
+
+    @attr(type='positive')
+    def test_get_console_output(self):
+            resp, output = self.client.get_console_output(self.server_id, 10)
+            self.assertEqual(200, resp.status)
+            self.assertNotEqual(output, None)
+            lines = len(output.split('\n'))
+            self.assertEqual(lines, 10)
+
+    @attr(type='negative')
+    def test_get_console_output_invalid_server_id(self):
+        try:
+            resp, output = self.client.get_console_output('!@#$%^&*()', 10)
+        except exceptions.NotFound:
+            pass
+
+    @attr(type='positive')
+    def test_get_console_output_server_id_in_reboot_status(self):
+        try:
+            resp, output = self.servers_client.reboot(self.server_id, 'SOFT')
+            self.servers_client.wait_for_server_status(self.server_id,
+                                                        'REBOOT')
+            resp, server = self.servers_client.get_server(self.server_id)
+            if (server['status'] == 'REBOOT'):
+                resp, output = self.client.get_console_output(self.server_id,
+                                                                10)
+                self.assertEqual(200, resp.status)
+                self.assertNotEqual(output, None)
+                lines = len(output.split('\n'))
+                self.assertEqual(lines, 10)
+            else:
+                self.fail("Could not capture instance in Reboot status")
+        finally:
+            self.servers_client.wait_for_server_status(self.server_id,
+                                                        'ACTIVE')
