Fix the return code of the command reset-state

Currently, the command reset-state return code is zero if it
failed for any of volumes, it should be nonzero.

Change-Id: Ic6da238861fd003375003399bc6def6bf860a015
Closes-Bug: #1339643
This commit is contained in:
Zhengguang
2014-07-10 23:01:10 -04:00
parent 14a5aa045a
commit bf8fa0b606
4 changed files with 42 additions and 18 deletions

View File

@@ -18,6 +18,7 @@
import fixtures
from cinderclient import client
from cinderclient import exceptions
from cinderclient import shell
from cinderclient.v1 import shell as shell_v1
from cinderclient.tests.v1 import fakes
@@ -269,6 +270,21 @@ class ShellTest(utils.TestCase):
self.assert_called_anytime('POST', '/volumes/5678/action',
body=expected)
@httpretty.activate
def test_reset_state_two_with_one_nonexistent(self):
self.register_keystone_auth_fixture()
cmd = 'reset-state 1234 123456789'
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
expected = {'os-reset_status': {'status': 'available'}}
self.assert_called_anytime('POST', '/volumes/1234/action',
body=expected)
@httpretty.activate
def test_reset_state_one_with_one_nonexistent(self):
self.register_keystone_auth_fixture()
cmd = 'reset-state 123456789'
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
@httpretty.activate
def test_snapshot_reset_state(self):

View File

@@ -17,6 +17,7 @@ import fixtures
import httpretty
from cinderclient import client
from cinderclient import exceptions
from cinderclient import shell
from cinderclient.tests import utils
from cinderclient.tests.v2 import fakes
@@ -299,6 +300,21 @@ class ShellTest(utils.TestCase):
self.assert_called_anytime('POST', '/volumes/5678/action',
body=expected)
@httpretty.activate
def test_reset_state_two_with_one_nonexistent(self):
self.register_keystone_auth_fixture()
cmd = 'reset-state 1234 123456789'
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
expected = {'os-reset_status': {'status': 'available'}}
self.assert_called_anytime('POST', '/volumes/1234/action',
body=expected)
@httpretty.activate
def test_reset_state_one_with_one_nonexistent(self):
self.register_keystone_auth_fixture()
cmd = 'reset-state 123456789'
self.assertRaises(exceptions.CommandError, self.run_command, cmd)
@httpretty.activate
def test_snapshot_reset_state(self):
self.register_keystone_auth_fixture()

View File

@@ -332,22 +332,18 @@ def do_force_delete(cs, args):
@utils.service_type('volume')
def do_reset_state(cs, args):
"""Explicitly updates the volume state."""
failure_count = 0
single = (len(args.volume) == 1)
failure_flag = False
for volume in args.volume:
try:
utils.find_volume(cs, volume).reset_state(args.state)
except Exception as e:
failure_count += 1
failure_flag = True
msg = "Reset state for volume %s failed: %s" % (volume, e)
if not single:
print(msg)
if failure_count == len(args.volume):
if not single:
msg = "Unable to reset the state for any of the specified volumes."
if failure_flag:
msg = "Unable to reset the state for the specified volume(s)."
raise exceptions.CommandError(msg)

View File

@@ -362,22 +362,18 @@ def do_force_delete(cs, args):
@utils.service_type('volumev2')
def do_reset_state(cs, args):
"""Explicitly updates the volume state."""
failure_count = 0
single = (len(args.volume) == 1)
failure_flag = False
for volume in args.volume:
try:
utils.find_volume(cs, volume).reset_state(args.state)
except Exception as e:
failure_count += 1
failure_flag = True
msg = "Reset state for volume %s failed: %s" % (volume, e)
if not single:
print(msg)
if failure_count == len(args.volume):
if not single:
msg = "Unable to reset the state for any of specified volumes."
if failure_flag:
msg = "Unable to reset the state for the specified volume(s)."
raise exceptions.CommandError(msg)