diff --git a/README.rst b/README.rst
index 0ea5229..04a4b3e 100644
--- a/README.rst
+++ b/README.rst
@@ -35,13 +35,18 @@
 
     In addition, the ``<devstack-repo>/tools/configure_tempest.sh`` script can
     also be used to generate a tempest.conf based on your devstack's rc files.
+    TEMPEST_DIR variable points to location /opt/stack/temptest. Update this
+    variable if the location is different..
 
 Tempest is not tied to any single test runner, but Nose been the most commonly
 used tool. After setting up your configuration file, you can execute
 the set of Tempest tests by using ``nosetests`` ::
-
     $> nosetests tempest
 
+To run one single test  ::
+    $> nosetests -sv tempest.tests.compute.servers.test_server_actions.py:
+       ServerActionsTestJSON.test_rebuild_nonexistent_server
+
 Configuration
 -------------
 
diff --git a/run_tests.sh b/run_tests.sh
index 680f79e..e359caf 100755
--- a/run_tests.sh
+++ b/run_tests.sh
@@ -23,7 +23,7 @@
   esac
 }
 
-noseargs="tempest"
+noseargs=""
 just_pep8=0
 
 export NOSE_WITH_OPENSTACK=1
@@ -37,13 +37,22 @@
   process_option $arg
 done
 
+
+# only add tempest default if we don't specify a test
+if [[ "x$noseargs" =~ "tempest" ]]; then
+  noseargs="$noseargs"
+else
+  noseargs="$noseargs tempest"
+fi
+
+
 function run_tests {
   $NOSETESTS
 }
 
 function run_pep8 {
   echo "Running pep8 ..."
-  PEP8_EXCLUDE="etc,include,tools"
+  PEP8_EXCLUDE="etc,include,tools,*venv"
   PEP8_OPTIONS="--exclude=$PEP8_EXCLUDE --repeat"
   PEP8_INCLUDE="."
   pep8 $PEP8_OPTIONS $PEP8_INCLUDE
diff --git a/tempest/tests/compute/images/test_images_whitebox.py b/tempest/tests/compute/images/test_images_whitebox.py
index f371fe4..40433a7 100644
--- a/tempest/tests/compute/images/test_images_whitebox.py
+++ b/tempest/tests/compute/images/test_images_whitebox.py
@@ -50,7 +50,7 @@
             cls.image_ids.remove(image_id)
 
     @classmethod
-    def update_state(self, server_id, vm_state, task_state, deleted=0):
+    def update_state(self, server_id, vm_state, task_state, deleted=False):
         """Update states of an instance in database for validation"""
         if not task_state:
             task_state = "NULL"
@@ -63,7 +63,7 @@
 
         self.connection.execute(stmt, autocommit=True)
 
-    def _test_create_image_409_base(self, vm_state, task_state, deleted=0):
+    def _test_create_image_409_base(self, vm_state, task_state, deleted=False):
         """Base method for create image tests based on vm and task states"""
         try:
             self.update_state(self.shared_server['id'], vm_state,
diff --git a/tempest/tests/compute/servers/test_server_metadata.py b/tempest/tests/compute/servers/test_server_metadata.py
index f59b609..4022dad 100644
--- a/tempest/tests/compute/servers/test_server_metadata.py
+++ b/tempest/tests/compute/servers/test_server_metadata.py
@@ -18,6 +18,7 @@
 from nose.plugins.attrib import attr
 
 from tempest.common.utils.data_utils import rand_name
+from tempest import exceptions
 from tempest.tests.compute.base import BaseComputeTest
 
 
@@ -69,7 +70,6 @@
         resp, resp_metadata = self.client.list_server_metadata(self.server_id)
         self.assertEqual(resp_metadata, req_metadata)
 
-    @attr(type='negative')
     def test_server_create_metadata_key_too_long(self):
         """
         Attempt to start a server with a meta-data key that is > 255 characters
@@ -79,14 +79,10 @@
             key = "k" * sz
             meta = {key: 'data1'}
             name = rand_name('server')
-            try:
-                resp, server = self.client.create_server(name, self.image_ref,
-                                                         self.flavor_ref,
-                                                         meta=meta)
-            except:
-                pass
-            else:
-                self.fail('Metadata should have been too long')
+            self.assertRaises(exceptions.OverLimit,
+                              self.client.create_server, name, self.image_ref,
+                              self.flavor_ref, meta=meta)
+
         # no teardown - all creates should fail
 
     def test_update_server_metadata(self):
diff --git a/tempest/tests/compute/servers/test_servers_whitebox.py b/tempest/tests/compute/servers/test_servers_whitebox.py
index 152b3f7..980f6cf 100644
--- a/tempest/tests/compute/servers/test_servers_whitebox.py
+++ b/tempest/tests/compute/servers/test_servers_whitebox.py
@@ -63,7 +63,7 @@
         # Set vcpu quota for tenant if not already set
         if not result:
             cores_hard_limit = 2
-            stmt = quotas.insert().values(deleted=0,
+            stmt = quotas.insert().values(deleted=False,
                                           project_id=self.tenant_id,
                                           resource='cores',
                                           hard_limit=cores_hard_limit)
@@ -95,7 +95,7 @@
         # Set memory quota for tenant if not already set
         if not result:
             ram_hard_limit = 1024
-            stmt = quotas.insert().values(deleted=0,
+            stmt = quotas.insert().values(deleted=False,
                                           project_id=self.tenant_id,
                                           resource='ram',
                                           hard_limit=ram_hard_limit)
@@ -116,7 +116,7 @@
             stmt = quotas.delete()
             self.connection.execute(stmt, autocommit=True)
 
-    def update_state(self, server_id, vm_state, task_state, deleted=0):
+    def update_state(self, server_id, vm_state, task_state, deleted=False):
         """Update states of an instance in database for validation"""
         if not task_state:
             task_state = 'NULL'
diff --git a/tempest/tests/compute/test_live_block_migration.py b/tempest/tests/compute/test_live_block_migration.py
index ae8b774..92c2cf6 100644
--- a/tempest/tests/compute/test_live_block_migration.py
+++ b/tempest/tests/compute/test_live_block_migration.py
@@ -81,7 +81,7 @@
         random_name = ''.join(
             random.choice(string.ascii_uppercase) for x in range(20))
 
-        self.assertFalse(random_name in self._get_compute_hostnames())
+        self.assertNotIn(random_name, self._get_compute_hostnames())
 
         return random_name
 
@@ -105,22 +105,15 @@
                      'Block Live migration not available')
     def test_001_live_block_migration(self):
         """Live block migrate an instance to another host"""
-
         if len(self._get_compute_hostnames()) < 2:
             raise nose.SkipTest(
                 "Less than 2 compute nodes, skipping migration test.")
-
         server_id = self._get_an_active_server()
-
         actual_host = self._get_host_for_server(server_id)
-
         target_host = self._get_host_other_than(actual_host)
-
         self._migrate_server_to(server_id, target_host)
-
         self.servers_client.wait_for_server_status(server_id, 'ACTIVE')
-
-        self.assertTrue(target_host == self._get_host_for_server(server_id))
+        self.assertEquals(target_host, self._get_host_for_server(server_id))
 
     @attr(type='positive', bug='lp1051881')
     @unittest.skip('Until bug 1051881 is dealt with.')
@@ -130,12 +123,10 @@
         """Migrating to an invalid host should not change the status"""
 
         server_id = self._get_an_active_server()
-
         target_host = self._get_non_existing_host_name()
 
         with self.assertRaises(exceptions.BadRequest) as cm:
             self._migrate_server_to(server_id, target_host)
-
         self.assertEquals('ACTIVE', self._get_server_status(server_id))
 
     @classmethod
