]> review.fuel-infra Code Review - openstack-build/cinder-build.git/commitdiff
REST session validity not checked in get_volume_info
authorLarry Matter <lmatter@coraid.com>
Thu, 28 Mar 2013 23:29:38 +0000 (16:29 -0700)
committerLarry Matter <lmatter@coraid.com>
Sun, 31 Mar 2013 01:13:47 +0000 (18:13 -0700)
The fix for bug 1157242 introduced a new bug in Coraid cinder driver
_get_volume_info that the login session is not checked for
validity/timeout.  This change addressesthat issue for all
methods in the CoraidRESTClient class.

Fixes bug 1160459

Change-Id: Ib2d7ebbf3ef8ec35071f51c6168eb9b3af9405e6

cinder/tests/test_coraid.py
cinder/volume/drivers/coraid.py

index 52297d7462fefd952cb3c018eab3e59941caad2e..cda121b2832a8b8cdb61455dcaa3e0ed15e9074e 100644 (file)
@@ -183,14 +183,14 @@ class TestCoraidRESTClient(test.TestCase):
     def test__set_group(self):
         setattr(self.rest_mock, '_set_group',
                 lambda *_: fake_group_id)
-        self.stubs.Set(CoraidRESTClient, '_esm',
+        self.stubs.Set(CoraidRESTClient, '_admin_esm_cmd',
                        lambda *_: fake_login_reply)
         self.drv._set_group(fake_login_reply)
 
     def test__set_group_fails_no_group(self):
         setattr(self.rest_mock, '_set_group',
                 lambda *_: False)
-        self.stubs.Set(CoraidRESTClient, '_esm',
+        self.stubs.Set(CoraidRESTClient, '_admin_esm_cmd',
                        lambda *_: fake_login_reply_group_fail)
         self.assertRaises(CoraidESMException,
                           self.drv._set_group,
@@ -199,14 +199,14 @@ class TestCoraidRESTClient(test.TestCase):
     def test__configure(self):
         setattr(self.rest_mock, '_configure',
                 lambda *_: True)
-        self.stubs.Set(CoraidRESTClient, '_esm',
+        self.stubs.Set(CoraidRESTClient, '_esm_cmd',
                        lambda *_: fake_esm_success)
         self.drv._configure(fake_configure_data)
 
     def test__get_volume_info(self):
         setattr(self.rest_mock, '_get_volume_info',
                 lambda *_: fake_volume_info)
-        self.stubs.Set(CoraidRESTClient, '_esm',
+        self.stubs.Set(CoraidRESTClient, '_esm_cmd',
                        lambda *_: fake_esm_fetch)
         self.drv._get_volume_info(fake_volume_name)
 
index d95024f165f456be70e5182aef0af41ada10c318..3c0616b8364b105e7a018831e831c959042947a8 100644 (file)
@@ -95,7 +95,7 @@ class CoraidRESTClient(object):
             url = ('admin?op=login&username=%s&password=%s' %
                    (self.user, self.password))
             data = 'Login'
-            reply = self._esm(url, data)
+            reply = self._admin_esm_cmd(url, data)
             if reply.get('state') == 'adminSucceed':
                 self.session = time.time() + 1100
                 msg = _('Update session cookie %(session)s')
@@ -116,7 +116,7 @@ class CoraidRESTClient(object):
             if groupId:
                 url = ('admin?op=setRbacGroup&groupId=%s' % (groupId))
                 data = 'Group'
-                reply = self._esm(url, data)
+                reply = self._admin_esm_cmd(url, data)
                 if reply.get('state') == 'adminSucceed':
                     return True
                 else:
@@ -139,10 +139,14 @@ class CoraidRESTClient(object):
                 return kid['groupId']
         return False
 
-    def _esm(self, url=False, data=None):
+    def _esm_cmd(self, url=False, data=None):
+        self._login()
+        return self._admin_esm_cmd(url, data)
+
+    def _admin_esm_cmd(self, url=False, data=None):
         """
-        _esm represent the entry point to send requests to ESM Appliance.
-        Send the HTTPS call, get response in JSON
+        _admin_esm_cmd represent the entry point to send requests to ESM
+        Appliance.  Send the HTTPS call, get response in JSON
         convert response into Python Object and return it.
         """
         if url:
@@ -166,10 +170,9 @@ class CoraidRESTClient(object):
 
     def _configure(self, data):
         """In charge of all commands into 'configure'."""
-        self._login()
         url = 'configure'
         LOG.debug(_('Configure data : %s'), data)
-        response = self._esm(url, data)
+        response = self._esm_cmd(url, data)
         LOG.debug(_("Configure response : %s"), response)
         if response:
             if response.get('configState') == 'completedSuccessfully':
@@ -184,7 +187,7 @@ class CoraidRESTClient(object):
         """Retrive volume informations for a given volume name."""
         url = 'fetch?shelf=cms&orchStrRepo&lv=%s' % (volume_name)
         try:
-            response = self._esm(url)
+            response = self._esm_cmd(url)
             info = response[0][1]['reply'][0]
             return {"pool": info['lv']['containingPool'],
                     "repo": info['repoName'],