From 51ea68ae948da5d69b262827961ca9ae9118edbc Mon Sep 17 00:00:00 2001
From: "jiahui.qiang" <jiahui.qiang@easystack.cn>
Date: Thu, 5 Jan 2017 14:26:16 +0800
Subject: [PATCH] Fix filter error in os volume list

This patch fixed a bug of unable to filter volume list by '--project',
'--user' in "openstack volume list".
Modify uint test for 'volume list' to check parameter of list method.

Change-Id: I1fc4296c4c7eca0f7a803dbfd5e15e3bc0d6403f
---
 .../tests/unit/volume/v2/test_volume.py       | 117 ++++++++++++++++++
 openstackclient/volume/v2/volume.py           |   9 +-
 ...me-list-with-project-2dc867c5e8346a66.yaml |   5 +
 3 files changed, 128 insertions(+), 3 deletions(-)
 create mode 100644 releasenotes/notes/bug-volume-list-with-project-2dc867c5e8346a66.yaml

diff --git a/openstackclient/tests/unit/volume/v2/test_volume.py b/openstackclient/tests/unit/volume/v2/test_volume.py
index 1529c2e25b..4fef9dd9a6 100644
--- a/openstackclient/tests/unit/volume/v2/test_volume.py
+++ b/openstackclient/tests/unit/volume/v2/test_volume.py
@@ -823,6 +823,19 @@ class TestVolumeList(TestVolume):
 
         columns, data = self.cmd.take_action(parsed_args)
 
+        search_opts = {
+            'all_tenants': False,
+            'project_id': None,
+            'user_id': None,
+            'display_name': None,
+            'status': None,
+        }
+        self.volumes_mock.list.assert_called_once_with(
+            search_opts=search_opts,
+            marker=None,
+            limit=None,
+        )
+
         self.assertEqual(self.columns, columns)
 
         server = self.mock_volume.attachments[0]['server_id']
@@ -853,6 +866,19 @@ class TestVolumeList(TestVolume):
 
         columns, data = self.cmd.take_action(parsed_args)
 
+        search_opts = {
+            'all_tenants': True,
+            'project_id': self.project.id,
+            'user_id': None,
+            'display_name': None,
+            'status': None,
+        }
+        self.volumes_mock.list.assert_called_once_with(
+            search_opts=search_opts,
+            marker=None,
+            limit=None,
+        )
+
         self.assertEqual(self.columns, columns)
 
         server = self.mock_volume.attachments[0]['server_id']
@@ -885,6 +911,19 @@ class TestVolumeList(TestVolume):
 
         columns, data = self.cmd.take_action(parsed_args)
 
+        search_opts = {
+            'all_tenants': True,
+            'project_id': self.project.id,
+            'user_id': None,
+            'display_name': None,
+            'status': None,
+        }
+        self.volumes_mock.list.assert_called_once_with(
+            search_opts=search_opts,
+            marker=None,
+            limit=None,
+        )
+
         self.assertEqual(self.columns, columns)
 
         server = self.mock_volume.attachments[0]['server_id']
@@ -915,6 +954,19 @@ class TestVolumeList(TestVolume):
 
         columns, data = self.cmd.take_action(parsed_args)
 
+        search_opts = {
+            'all_tenants': False,
+            'project_id': None,
+            'user_id': self.user.id,
+            'display_name': None,
+            'status': None,
+        }
+        self.volumes_mock.list.assert_called_once_with(
+            search_opts=search_opts,
+            marker=None,
+            limit=None,
+        )
+
         self.assertEqual(self.columns, columns)
         server = self.mock_volume.attachments[0]['server_id']
         device = self.mock_volume.attachments[0]['device']
@@ -946,6 +998,19 @@ class TestVolumeList(TestVolume):
 
         columns, data = self.cmd.take_action(parsed_args)
 
+        search_opts = {
+            'all_tenants': False,
+            'project_id': None,
+            'user_id': self.user.id,
+            'display_name': None,
+            'status': None,
+        }
+        self.volumes_mock.list.assert_called_once_with(
+            search_opts=search_opts,
+            marker=None,
+            limit=None,
+        )
+
         self.assertEqual(self.columns, columns)
 
         server = self.mock_volume.attachments[0]['server_id']
@@ -976,6 +1041,19 @@ class TestVolumeList(TestVolume):
 
         columns, data = self.cmd.take_action(parsed_args)
 
+        search_opts = {
+            'all_tenants': False,
+            'project_id': None,
+            'user_id': None,
+            'display_name': self.mock_volume.name,
+            'status': None,
+        }
+        self.volumes_mock.list.assert_called_once_with(
+            search_opts=search_opts,
+            marker=None,
+            limit=None,
+        )
+
         self.assertEqual(self.columns, columns)
 
         server = self.mock_volume.attachments[0]['server_id']
@@ -1006,6 +1084,19 @@ class TestVolumeList(TestVolume):
 
         columns, data = self.cmd.take_action(parsed_args)
 
+        search_opts = {
+            'all_tenants': False,
+            'project_id': None,
+            'user_id': None,
+            'display_name': None,
+            'status': self.mock_volume.status,
+        }
+        self.volumes_mock.list.assert_called_once_with(
+            search_opts=search_opts,
+            marker=None,
+            limit=None,
+        )
+
         self.assertEqual(self.columns, columns)
 
         server = self.mock_volume.attachments[0]['server_id']
@@ -1036,6 +1127,19 @@ class TestVolumeList(TestVolume):
 
         columns, data = self.cmd.take_action(parsed_args)
 
+        search_opts = {
+            'all_tenants': True,
+            'project_id': None,
+            'user_id': None,
+            'display_name': None,
+            'status': None,
+        }
+        self.volumes_mock.list.assert_called_once_with(
+            search_opts=search_opts,
+            marker=None,
+            limit=None,
+        )
+
         self.assertEqual(self.columns, columns)
 
         server = self.mock_volume.attachments[0]['server_id']
@@ -1067,6 +1171,19 @@ class TestVolumeList(TestVolume):
 
         columns, data = self.cmd.take_action(parsed_args)
 
+        search_opts = {
+            'all_tenants': False,
+            'project_id': None,
+            'user_id': None,
+            'display_name': None,
+            'status': None,
+        }
+        self.volumes_mock.list.assert_called_once_with(
+            search_opts=search_opts,
+            marker=None,
+            limit=None,
+        )
+
         collist = [
             'ID',
             'Display Name',
diff --git a/openstackclient/volume/v2/volume.py b/openstackclient/volume/v2/volume.py
index 301bf5e41f..78db261bd1 100644
--- a/openstackclient/volume/v2/volume.py
+++ b/openstackclient/volume/v2/volume.py
@@ -417,16 +417,19 @@ class ListVolume(command.Lister):
             project_id = identity_common.find_project(
                 identity_client,
                 parsed_args.project,
-                parsed_args.project_domain)
+                parsed_args.project_domain).id
 
         user_id = None
         if parsed_args.user:
             user_id = identity_common.find_user(identity_client,
                                                 parsed_args.user,
-                                                parsed_args.user_domain)
+                                                parsed_args.user_domain).id
+
+        # set value of 'all_tenants' when using project option
+        all_projects = bool(parsed_args.project) or parsed_args.all_projects
 
         search_opts = {
-            'all_tenants': parsed_args.all_projects,
+            'all_tenants': all_projects,
             'project_id': project_id,
             'user_id': user_id,
             'display_name': parsed_args.name,
diff --git a/releasenotes/notes/bug-volume-list-with-project-2dc867c5e8346a66.yaml b/releasenotes/notes/bug-volume-list-with-project-2dc867c5e8346a66.yaml
new file mode 100644
index 0000000000..f2245201b6
--- /dev/null
+++ b/releasenotes/notes/bug-volume-list-with-project-2dc867c5e8346a66.yaml
@@ -0,0 +1,5 @@
+---
+fixes:
+  - |
+    Fix a bug of unable to filter volume list by ``--project``
+    and ``--user`` options in the ``openstack volume list``.