Exemplo n.º 1
0
 def _mk_response(self, status, content=None):
     reasons = {200: 'OK', 204: 'No Content', 401: 'Unauthorized'}
     # Create a Response object, that will serve as a mock return value
     my_response = req_mod.Response()
     my_response.status_code = status
     my_response.reason = reasons[status]
     clen = '0'
     if status == 200 and content:
         clen = str(len(content))
     dict_headers = {
         'content-length':
         clen,
         'x-powered-by':
         'Servlet/3.0',
         'set-cookie':
         'JSESSIONID=0000a41BnJsGTNQvBGERA' +
         '3wR1nj:759878cb-4f9a-4b05-a09a-3357abfea3b4; ' +
         'Path=/; Secure; HttpOnly, CCFWSESSION=E4C0FFBE9' +
         '130431DBF1864171ECC6A6E; Path=/; Secure; HttpOnly',
         'expires':
         'Thu, 01 Dec 1994 16:00:00 GMT',
         'x-transaction-id':
         'XT10000073',
         'cache-control':
         'no-cache="set-cookie, ' + 'set-cookie2"',
         'date':
         'Wed, 23 Jul 2014 21:51:10 GMT',
         'content-type':
         'application/vnd.ibm.powervm'
     }
     my_response.headers = req_struct.CaseInsensitiveDict(dict_headers)
     my_response._content = content
     return my_response
Exemplo n.º 2
0
 def send(self, request, **kwargs):  # pylint: disable=unused-argument
     self._recorder.append(request)
     resp = models.Response()
     resp.url = request.url
     resp.status_code = self._status
     resp.raw = six.BytesIO(self._data.encode())
     return resp
Exemplo n.º 3
0
 def _create_response(self, status=500, payload=None):
     resp = models.Response()
     resp.status_code = status
     if payload:
         resp.raw = io.BytesIO(payload.encode())
     exc = requests.exceptions.RequestException('Test error', response=resp)
     return resp, exc
Exemplo n.º 4
0
 def send(self, request, **kwargs):
     request._extra_kwargs = kwargs
     self._recorder.append(request)
     resp = models.Response()
     resp.url = request.url
     resp.status_code = self._status
     resp.raw = self._data.encode()
     return resp
Exemplo n.º 5
0
 def send(self, request, **kwargs):
     del kwargs
     self._recorder.append(request)
     resp = models.Response()
     resp.url = request.url
     resp.status_code = self._status
     resp.raw = six.BytesIO(self._data.encode())
     return resp
Exemplo n.º 6
0
 def test_from_response_unknown_middleware(self):
     r = models.Response()
     r.status_code = 400
     r.headers['Content-Type'] = "application/json"
     r._content = json.dumps({"unknown": "random message"}).encode('utf-8')
     exc = exceptions.from_response(r)
     self.assertIsInstance(exc, exceptions.ClientException)
     self.assertEqual('{"unknown": "random message"}', exc.message)
Exemplo n.º 7
0
 def mocked_request(*args, **kwargs):
     if args[2].endswith('api/session/create'):
         response = models.Response()
         response.status_code = 200
         response.headers = {
             'Set-Cookie': 'JSESSIONID=%s;junk' % JSESSIONID
         }
         return response
     return orig_request(*args, **kwargs)
Exemplo n.º 8
0
 def test_from_response_404(self):
     r = models.Response()
     r.status_code = 404
     r.headers['Content-Type'] = "application/json"
     r._content = json.dumps(
         {"description": "Archive policy rule foobar does not exist"}
     ).encode('utf-8')
     exc = exceptions.from_response(r)
     self.assertIsInstance(exc, exceptions.ArchivePolicyRuleNotFound)
Exemplo n.º 9
0
 def test_resource_type_before_resource(self):
     r = models.Response()
     r.status_code = 404
     r.headers['Content-Type'] = "application/json"
     r._content = json.dumps(
         {"description": "Resource type foobar does not exist"}
     ).encode('utf-8')
     exc = exceptions.from_response(r)
     self.assertIsInstance(exc, exceptions.ResourceTypeNotFound)
Exemplo n.º 10
0
 def send(self, request, **kwargs): # pylint: disable=arguments-differ
     request._extra_kwargs = kwargs
     self._recorder.append(request)
     resp = models.Response()
     resp.url = request.url
     resp.status_code = self._statuses[self._current_response]
     resp.raw = io.BytesIO(self._responses[self._current_response].encode())
     self._current_response = min(self._current_response + 1, len(self._responses) - 1)
     return resp
Exemplo n.º 11
0
 def test_from_response_keystone_401(self):
     r = models.Response()
     r.status_code = 401
     r.headers['Content-Type'] = "application/json"
     r._content = json.dumps({"error": {
         "message": "The request you have made requires authentication.",
         "code": 401, "title": "Unauthorized"}}
     ).encode('utf-8')
     exc = exceptions.from_response(r)
     self.assertIsInstance(exc, exceptions.Unauthorized)
     self.assertEqual("The request you have made requires authentication.",
                      exc.message)
Exemplo n.º 12
0
 def test_from_response_404_with_detail(self):
     r = models.Response()
     r.status_code = 404
     r.headers['Content-Type'] = "application/json"
     r._content = json.dumps({
         "code": 404,
         "description": {
             "cause": "Aggregation method does not exist for this metric",
             "detail": {
                 "aggregation_method": "rate:mean",
                 "metric": "a914dad6-b8f6-42f6-b090-6daa29725caf",
             }},
         "title": "Not Found"
     }).encode('utf-8')
     exc = exceptions.from_response(r)
     self.assertIsInstance(exc, exceptions.ClientException)
Exemplo n.º 13
0
    def send(self, request, **kwargs):
        """Suppresses sending of the request. A default response is returned
        with status code 200, `Content-Type` and `Location` headers and a
        copy of the body from the request.
        """

        self.last_request = request
        self.last_request_kwargs = kwargs

        response = models.Response()
        response.request = request
        response.connection = self
        response.status_code = 200
        response.reason = 'OK'
        response.headers = {
            'Content-Type': 'application/json',
            'location': request.url,
        }
        if request.body is not None:
            response._content = bytes(request.body.encode('utf-8'))
        return response
Exemplo n.º 14
0
def get_sess_create_resp():
    sess_create_response = models.Response()
    sess_create_response.status_code = 200
    sess_create_response.headers = {'Set-Cookie': 'JSESSIONID=abc;'}
    return sess_create_response
Exemplo n.º 15
0
    def test_traits_into_wrappers(self, mock_request):
        # Note traits param is None, which reflects the real value of
        # self.traits during _logon's request.
        httpresp = req_mod.Response()
        httpresp._content = _logon_response_text
        httpresp.status_code = 200
        httpresp.headers = req_struct.CaseInsensitiveDict({
            'X-MC-Type':
            'PVM',
            'content-type':
            'application/vnd.ibm.powervm.web+xml; type=LogonResponse'
        })
        mock_request.return_value = httpresp
        sess = adp.Session()
        self.assertEqual('PVM', sess.mc_type)
        self.assertIsNotNone(sess.traits)
        self.assertTrue(sess.traits.local_api)
        self.assertFalse(sess.traits._is_hmc)
        adapter = adp.Adapter(sess)
        self.assertEqual(sess.traits, adapter.traits)

        # Response => Feed => Entrys => EntryWrappers => sub-ElementWrappers
        httpresp._content = _feed_file
        resp = adapter.read('NetworkBridge')
        self.assertEqual(sess.traits, resp.adapter.traits)
        nblist = net.NetBridge.wrap(resp)
        for nb in nblist:
            self.assertIsInstance(nb, net.NetBridge)
            self.assertEqual(sess.traits, nb.traits)
        seas = nblist[0].seas
        for sea in seas:
            self.assertIsInstance(sea, net.SEA)
            self.assertEqual(sess.traits, sea.traits)
        trunk = seas[0].primary_adpt
        self.assertIsInstance(trunk, net.TrunkAdapter)
        self.assertEqual(sess.traits, trunk.traits)

        # Response => Entry => EntryWrapper => sub-EntryWrappers
        # => sub-sub-ElementWrapper
        httpresp._content = _entry_file
        resp = adapter.read('VolumeGroup', root_id='abc123')
        self.assertEqual(sess.traits, resp.adapter.traits)
        vgent = stor.VG.wrap(resp)
        self.assertIsInstance(vgent, stor.VG)
        self.assertEqual(sess.traits, vgent.traits)
        pvs = vgent.phys_vols
        for pvent in pvs:
            self.assertIsInstance(pvent, stor.PV)
            self.assertEqual(sess.traits, pvent.traits)

        # Building raw wrappers from scratch
        class MyEntryWrapper(ewrap.EntryWrapper):
            schema_type = 'SomeObject'

            @classmethod
            def bld(cls, adpt):
                return super(MyEntryWrapper, cls)._bld(adpt)

        mew = MyEntryWrapper.bld(adapter)
        self.assertIsInstance(mew, MyEntryWrapper)
        self.assertEqual(sess.traits, mew.traits)

        class MyElementWrapper(ewrap.ElementWrapper):
            schema_type = 'SomeObject'

            @classmethod
            def bld(cls, adpt):
                return super(MyElementWrapper, cls)._bld(adpt)

        mew = MyElementWrapper.bld(adapter)
        self.assertIsInstance(mew, MyElementWrapper)
        self.assertEqual(sess.traits, mew.traits)
Exemplo n.º 16
0
    def test_logon(self, mock_session, mock_validate_cert):
        """Ensure a Session can be created and log on to PowerVM."""

        # Init test data
        host = '0.0.0.0'
        user = '******'
        pwd = 'pwd'
        auditmemento = 'audit'

        # Create a Response object, that will serve as a mock return value
        my_response = req_mod.Response()
        my_response.status_code = 200
        my_response.reason = 'OK'
        dict_headers = {'content-length': '576',
                        'x-powered-by': 'Servlet/3.0',
                        'set-cookie': 'JSESSIONID=0000a41BnJsGTNQvBGERA3wR1nj:'
                                      '759878cb-4f9a-4b05-a09a-3357abfea3b4; P'
                                      'ath=/; Secure; HttpOnly, CCFWSESSION=E4'
                                      'C0FFBE9130431DBF1864171ECC6A6E; Path=/;'
                                      ' Secure; HttpOnly',
                        'expires': 'Thu, 01 Dec 1994 16:00:00 GMT',
                        'x-transaction-id': 'XT10000073',
                        'cache-control': 'no-cache="set-cookie, set-cookie2"',
                        'date': 'Wed, 23 Jul 2014 21:51:10 GMT',
                        'content-type': 'application/vnd.ibm.powervm.web+xml; '
                                        'type=LogonResponse'}
        my_response.headers = req_struct.CaseInsensitiveDict(dict_headers)
        my_response._content = _logon_response_password

        # Mock out the method and class we are not currently testing
        session = mock_session.return_value
        session.request.return_value = my_response

        # Run the actual test
        result = adp.Session(host, user, pwd, auditmemento=auditmemento)

        # Verify the result
        self.assertTrue(result._logged_in)
        self.assertEqual('PUIoR6x0kP6fQqA7qZ8sLZQJ8MLx9JHfLCYzT4oGFSE2WaGIhaFX'
                         'IyQYvbqdKNS8QagjBpPi9NP7YR_h61SOJ3krS_RvKAp-oCf2p8x8'
                         'uvQrrDv-dUzc17IT5DkR7_jv2qc8iUD7DJ6Rw53a17rY0p63KqPg'
                         '9oUGd6Bn3fNDLiEwaBR4WICftVxUFj-tfWMOyZZY2hWEtN2K8ScX'
                         'vyFMe-w3SleyRbGnlR34jb0A99s=', result._sessToken)
        self.assertEqual(1, mock_validate_cert.call_count)
        # No X-MC-Type header => 'HMC' is assumed.
        self.assertEqual('HMC', result.mc_type)

        # Now test file-based authentication and X-MC-Type
        my_response._content = _logon_response_file

        # Local/HMC is bad
        self.assertRaises(pvmex.Error, adp.Session)

        my_response.headers['X-MC-Type'] = 'PVM'
        result = adp.Session()

        # Verify the result.
        self.assertTrue(result._logged_in)
        # Token read from token_file, as indicated by logon_file.xml response.
        self.assertEqual('file-based-auth-token', result._sessToken)
        # validate_certificate should not have been called again
        self.assertEqual(1, mock_validate_cert.call_count)
        self.assertEqual('PVM', result.mc_type)
Exemplo n.º 17
0
def _MockResponse(status_code, content):
    requests_response = models.Response()
    requests_response.status_code = status_code
    requests_response._content = content
    return requests._Response(requests_response)