diff --git a/oslo_messaging/hacking/checks.py b/oslo_messaging/hacking/checks.py
index 2df8fb919..5cb4b3b64 100644
--- a/oslo_messaging/hacking/checks.py
+++ b/oslo_messaging/hacking/checks.py
@@ -20,6 +20,8 @@ import six
 oslo_namespace_imports_dot = re.compile(r"import[\s]+oslo[.][^\s]+")
 oslo_namespace_imports_from_dot = re.compile(r"from[\s]+oslo[.]")
 oslo_namespace_imports_from_root = re.compile(r"from[\s]+oslo[\s]+import[\s]+")
+mock_imports_directly = re.compile(r"import[\s]+mock")
+mock_imports_direclty_from = re.compile(r"from[\s]+mock[\s]+import[\s]+")
 
 
 def check_oslo_namespace_imports(logical_line):
@@ -40,6 +42,17 @@ def check_oslo_namespace_imports(logical_line):
         yield(0, msg)
 
 
+def check_mock_imports(logical_line):
+    if re.match(mock_imports_directly, logical_line):
+        msg = ("O324: '%s' must be used instead of '%s'.") % (
+            logical_line.replace('import mock', 'from six.moves import mock'),
+            logical_line)
+        yield(0, msg)
+    elif re.match(mock_imports_direclty_from, logical_line):
+        msg = "O324: Use mock from six.moves."
+        yield(0, msg)
+
+
 class BaseASTChecker(ast.NodeVisitor):
     """Provides a simple framework for writing AST-based checks.
 
@@ -347,3 +360,4 @@ class CheckForLoggingIssues(BaseASTChecker):
 def factory(register):
     register(CheckForLoggingIssues)
     register(check_oslo_namespace_imports)
+    register(check_mock_imports)
diff --git a/oslo_messaging/tests/__init__.py b/oslo_messaging/tests/__init__.py
index 25e8f9721..7564f2688 100644
--- a/oslo_messaging/tests/__init__.py
+++ b/oslo_messaging/tests/__init__.py
@@ -16,5 +16,8 @@
 import eventlet
 eventlet.monkey_patch()
 
-# Import oslotest before importing test submodules to setup six.moves for mock
+# oslotest prepares mock for six in oslotest/__init__.py as follow:
+# six.add_move(six.MovedModule('mock', 'mock', 'unittest.mock')) and
+# oslo.messaging imports oslotest before importing test submodules to
+# setup six.moves for mock, then "from six.moves import mock" works well.
 import oslotest
diff --git a/oslo_messaging/tests/drivers/pika/test_message.py b/oslo_messaging/tests/drivers/pika/test_message.py
index 40d2c51b7..3722f875a 100644
--- a/oslo_messaging/tests/drivers/pika/test_message.py
+++ b/oslo_messaging/tests/drivers/pika/test_message.py
@@ -16,11 +16,10 @@ import functools
 import unittest
 
 from concurrent import futures
-from mock import mock
-from mock import patch
 from oslo_serialization import jsonutils
 from oslo_utils import timeutils
 import pika
+from six.moves import mock
 
 import oslo_messaging
 from oslo_messaging._drivers.pika_driver import pika_commons as pika_drv_cmns
@@ -151,8 +150,8 @@ class RpcPikaIncomingMessageTestCase(unittest.TestCase):
         self.assertEqual("payload_value",
                          message.message.get("payload_key", None))
 
-    @patch(("oslo_messaging._drivers.pika_driver.pika_message."
-            "PikaOutgoingMessage.send"))
+    @mock.patch(("oslo_messaging._drivers.pika_driver.pika_message."
+                 "PikaOutgoingMessage.send"))
     def test_reply_for_cast_message(self, send_reply_mock):
         message = pika_drv_msg.RpcPikaIncomingMessage(
             self._pika_engine, self._channel, self._method, self._properties,
@@ -171,9 +170,9 @@ class RpcPikaIncomingMessageTestCase(unittest.TestCase):
 
         self.assertEqual(0, send_reply_mock.call_count)
 
-    @patch("oslo_messaging._drivers.pika_driver.pika_message."
-           "RpcReplyPikaOutgoingMessage")
-    @patch("tenacity.retry")
+    @mock.patch("oslo_messaging._drivers.pika_driver.pika_message."
+                "RpcReplyPikaOutgoingMessage")
+    @mock.patch("tenacity.retry")
     def test_positive_reply_for_call_message(self,
                                              retry_mock,
                                              outgoing_message_mock):
@@ -206,9 +205,9 @@ class RpcPikaIncomingMessageTestCase(unittest.TestCase):
             stop=mock.ANY, retry=mock.ANY, wait=mock.ANY
         )
 
-    @patch("oslo_messaging._drivers.pika_driver.pika_message."
-           "RpcReplyPikaOutgoingMessage")
-    @patch("tenacity.retry")
+    @mock.patch("oslo_messaging._drivers.pika_driver.pika_message."
+                "RpcReplyPikaOutgoingMessage")
+    @mock.patch("tenacity.retry")
     def test_negative_reply_for_call_message(self,
                                              retry_mock,
                                              outgoing_message_mock):
@@ -319,8 +318,8 @@ class PikaOutgoingMessageTestCase(unittest.TestCase):
         self._message = {"msg_type": 1, "msg_str": "hello"}
         self._context = {"request_id": 555, "token": "it is a token"}
 
-    @patch("oslo_serialization.jsonutils.dump_as_bytes",
-           new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
+    @mock.patch("oslo_serialization.jsonutils.dump_as_bytes",
+                new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
     def test_send_with_confirmation(self):
         message = pika_drv_msg.PikaOutgoingMessage(
             self._pika_engine, self._message, self._context
@@ -363,8 +362,8 @@ class PikaOutgoingMessageTestCase(unittest.TestCase):
         self.assertEqual({'version': '1.0'}, props.headers)
         self.assertTrue(props.message_id)
 
-    @patch("oslo_serialization.jsonutils.dump_as_bytes",
-           new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
+    @mock.patch("oslo_serialization.jsonutils.dump_as_bytes",
+                new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
     def test_send_without_confirmation(self):
         message = pika_drv_msg.PikaOutgoingMessage(
             self._pika_engine, self._message, self._context
@@ -421,8 +420,8 @@ class RpcPikaOutgoingMessageTestCase(unittest.TestCase):
         self._message = {"msg_type": 1, "msg_str": "hello"}
         self._context = {"request_id": 555, "token": "it is a token"}
 
-    @patch("oslo_serialization.jsonutils.dump_as_bytes",
-           new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
+    @mock.patch("oslo_serialization.jsonutils.dump_as_bytes",
+                new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
     def test_send_cast_message(self):
         message = pika_drv_msg.RpcPikaOutgoingMessage(
             self._pika_engine, self._message, self._context
@@ -467,8 +466,8 @@ class RpcPikaOutgoingMessageTestCase(unittest.TestCase):
         self.assertIsNone(props.reply_to)
         self.assertTrue(props.message_id)
 
-    @patch("oslo_serialization.jsonutils.dump_as_bytes",
-           new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
+    @mock.patch("oslo_serialization.jsonutils.dump_as_bytes",
+                new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
     def test_send_call_message(self):
         message = pika_drv_msg.RpcPikaOutgoingMessage(
             self._pika_engine, self._message, self._context
@@ -542,8 +541,8 @@ class RpcReplyPikaOutgoingMessageTestCase(unittest.TestCase):
 
         self._msg_id = 12345567
 
-    @patch("oslo_serialization.jsonutils.dump_as_bytes",
-           new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
+    @mock.patch("oslo_serialization.jsonutils.dump_as_bytes",
+                new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
     def test_success_message_send(self):
         message = pika_drv_msg.RpcReplyPikaOutgoingMessage(
             self._pika_engine, self._msg_id, reply="all_fine"
@@ -571,9 +570,9 @@ class RpcReplyPikaOutgoingMessageTestCase(unittest.TestCase):
         self.assertIsNone(props.reply_to)
         self.assertTrue(props.message_id)
 
-    @patch("traceback.format_exception", new=lambda x, y, z: z)
-    @patch("oslo_serialization.jsonutils.dump_as_bytes",
-           new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
+    @mock.patch("traceback.format_exception", new=lambda x, y, z: z)
+    @mock.patch("oslo_serialization.jsonutils.dump_as_bytes",
+                new=functools.partial(jsonutils.dump_as_bytes, sort_keys=True))
     def test_failure_message_send(self):
         failure_info = (oslo_messaging.MessagingException,
                         oslo_messaging.MessagingException("Error message"),
diff --git a/oslo_messaging/tests/drivers/pika/test_poller.py b/oslo_messaging/tests/drivers/pika/test_poller.py
index 445b33860..7957bec8d 100644
--- a/oslo_messaging/tests/drivers/pika/test_poller.py
+++ b/oslo_messaging/tests/drivers/pika/test_poller.py
@@ -17,7 +17,7 @@ import time
 import unittest
 
 from concurrent import futures
-import mock
+from six.moves import mock
 
 from oslo_messaging._drivers.pika_driver import pika_exceptions as pika_drv_exc
 from oslo_messaging._drivers.pika_driver import pika_poller
diff --git a/oslo_messaging/tests/drivers/test_impl_kafka.py b/oslo_messaging/tests/drivers/test_impl_kafka.py
index 8d76cdc13..0d90faf66 100644
--- a/oslo_messaging/tests/drivers/test_impl_kafka.py
+++ b/oslo_messaging/tests/drivers/test_impl_kafka.py
@@ -13,7 +13,7 @@
 # under the License.
 import kafka
 import kafka.errors
-import mock
+from six.moves import mock
 import testscenarios
 
 import oslo_messaging
@@ -117,7 +117,7 @@ class TestKafkaDriver(test_utils.BaseTestCase):
         self.driver.listeners.extend(listeners)
         self.driver.cleanup()
         for listener in listeners:
-            listener.close.assert_called_once()
+            listener.close.assert_called_once_with()
 
 
 class TestKafkaConnection(test_utils.BaseTestCase):
diff --git a/oslo_messaging/tests/drivers/zmq/test_zmq_ack_manager.py b/oslo_messaging/tests/drivers/zmq/test_zmq_ack_manager.py
index bea9870ec..918de2792 100644
--- a/oslo_messaging/tests/drivers/zmq/test_zmq_ack_manager.py
+++ b/oslo_messaging/tests/drivers/zmq/test_zmq_ack_manager.py
@@ -12,7 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import mock
+from six.moves import mock
 import testtools
 import time
 
diff --git a/oslo_messaging/tests/drivers/zmq/test_zmq_async.py b/oslo_messaging/tests/drivers/zmq/test_zmq_async.py
index 5d8159deb..a4dccd9ec 100644
--- a/oslo_messaging/tests/drivers/zmq/test_zmq_async.py
+++ b/oslo_messaging/tests/drivers/zmq/test_zmq_async.py
@@ -10,7 +10,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import mock
+from six.moves import mock
 import testtools
 
 from oslo_messaging._drivers.zmq_driver.poller import green_poller
diff --git a/oslo_messaging/tests/drivers/zmq/test_zmq_transport_url.py b/oslo_messaging/tests/drivers/zmq/test_zmq_transport_url.py
index 35b2f5221..45df7967b 100644
--- a/oslo_messaging/tests/drivers/zmq/test_zmq_transport_url.py
+++ b/oslo_messaging/tests/drivers/zmq/test_zmq_transport_url.py
@@ -12,7 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import mock
+from six.moves import mock
 import testtools
 
 import oslo_messaging
diff --git a/oslo_messaging/tests/notify/test_impl_messaging.py b/oslo_messaging/tests/notify/test_impl_messaging.py
index 3a8eacb90..351410ad2 100644
--- a/oslo_messaging/tests/notify/test_impl_messaging.py
+++ b/oslo_messaging/tests/notify/test_impl_messaging.py
@@ -12,7 +12,7 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import mock
+from six.moves import mock
 
 from oslo_messaging.tests import utils as test_utils
 
diff --git a/oslo_messaging/tests/rpc/test_client.py b/oslo_messaging/tests/rpc/test_client.py
index 16bf42749..4fd41c575 100755
--- a/oslo_messaging/tests/rpc/test_client.py
+++ b/oslo_messaging/tests/rpc/test_client.py
@@ -13,9 +13,8 @@
 #    License for the specific language governing permissions and limitations
 #    under the License.
 
-import mock
-
 from oslo_config import cfg
+from six.moves import mock
 import testscenarios
 
 import oslo_messaging
diff --git a/oslo_messaging/tests/rpc/test_server.py b/oslo_messaging/tests/rpc/test_server.py
index 82cdeb8ee..4aa8b36ec 100644
--- a/oslo_messaging/tests/rpc/test_server.py
+++ b/oslo_messaging/tests/rpc/test_server.py
@@ -17,9 +17,9 @@ import eventlet
 import threading
 
 from oslo_config import cfg
+from six.moves import mock
 import testscenarios
 
-import mock
 import oslo_messaging
 from oslo_messaging import rpc
 from oslo_messaging.rpc import server as rpc_server_module
diff --git a/oslo_messaging/tests/test_opts.py b/oslo_messaging/tests/test_opts.py
index f7137388c..06e7d6fd1 100644
--- a/oslo_messaging/tests/test_opts.py
+++ b/oslo_messaging/tests/test_opts.py
@@ -12,11 +12,10 @@
 #    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 six.moves import mock
 import stevedore
 import testtools
 
-import mock
-
 from oslo_messaging import server
 try:
     from oslo_messaging import opts
diff --git a/oslo_messaging/tests/test_transport.py b/oslo_messaging/tests/test_transport.py
index 1c75da50d..71ff9ec4d 100755
--- a/oslo_messaging/tests/test_transport.py
+++ b/oslo_messaging/tests/test_transport.py
@@ -14,9 +14,9 @@
 #    under the License.
 
 import fixtures
-import mock
 from oslo_config import cfg
 import six
+from six.moves import mock
 from stevedore import driver
 import testscenarios