def _invalid_billing(self):
     valid_response = MagicMock()
     valid_response.status_code = 200
     valid_response.json.side_effect = [OFFERING]
     invalid_response = MagicMock()
     invalid_response.status_code = 400
     ordering_management.requests.get.side_effect = [valid_response, invalid_response]
    def test_handle_response(self):
        connection = Connection("store.mybigcommerce.com", ("user", "abcdef"))
        # A normal, 200-ok response
        data = {"name": "Shirt"}
        res = MagicMock()
        res.headers = {"Content-Type": "application/json"}
        res.status_code = 200
        res.content = json.dumps(data)
        res.json.return_value = data
        self.assertEqual(connection._handle_response("products/1", res), data)

        res.status_code = 500
        self.assertRaisesHttpException(
            ServerException,
            lambda: connection._handle_response("products/1", res),
            # Test all of the properties of a HttpException
            500,
            {"Content-Type": "application/json"},
            json.dumps(data),
        )

        res.status_code = 404
        self.assertRaisesHttpException(
            ClientRequestException, lambda: connection._handle_response("products/1", res), 404
        )

        res.status_code = 301
        self.assertRaisesHttpException(
            RedirectionException, lambda: connection._handle_response("products/1", res), 301
        )
def create_mock_response(url, response_type, **kwargs):
    response = MagicMock()

    response.request.url = url
    response.request.method = kwargs.get("method", "GET")
    response.request.headers = {}
    response.request.body = None

    if response_type == "redirect":
        response.status_code = 301
        response.headers = {"location": kwargs["location"]}
    elif response_type == "error":
        response.status_code = kwargs.get("status_code", 500)
        response.reason = kwargs.get("reason", "fake reason")
        response.text = '{{"reason":"{}"}}'.format(kwargs.get("reason", "fake reason"))
        response.json = lambda: json.loads(response.text)
    elif response_type == "stream":
        response.status_code = kwargs.get("status_code", 200)
        response.headers = {
            "content-disposition": 'attachment; filename="fname.ext"',
            "content-type": "application/octet-stream",
            "content-length": len(response.text),
        }
        response.iter_content = lambda buffer_size: IterateContents(
            kwargs["contents"], kwargs["buffer_size"], kwargs.get("partial_start", 0), kwargs.get("partial_end", None)
        )
    else:
        response.status_code = 200
        response.text = kwargs["text"]
        response.json = lambda: json.loads(response.text)
        response.headers = {"content-type": "application/json", "content-length": len(response.text)}

    return response
    def test_handle_response(self):
        connection = Connection('store.mybigcommerce.com', ('user', 'abcdef'))
        # A normal, 200-ok response
        data = {
            'name': 'Shirt'
        }
        res = MagicMock()
        res.headers = {'Content-Type': 'application/json'}
        res.status_code = 200
        res.content = json.dumps(data)
        res.json.return_value = data
        self.assertEqual(connection._handle_response('products/1', res), data)

        res.status_code = 500
        self.assertRaisesHttpException(ServerException,
                                       lambda: connection._handle_response('products/1', res),
                                       # Test all of the properties of a HttpException
                                       500,
                                       {'Content-Type': 'application/json'},
                                       json.dumps(data))

        res.status_code = 404
        self.assertRaisesHttpException(ClientRequestException,
                                       lambda: connection._handle_response('products/1', res), 404)

        res.status_code = 301
        self.assertRaisesHttpException(RedirectionException,
                                       lambda: connection._handle_response('products/1', res), 301)
Example #5
0
    def test_put_observation(self, mock_conn, caps_mock):
        caps_mock.get_service_host.return_value = 'some.host.com'
        caps_mock.return_value.get_access_url.return_value =\
            'http://serviceurl/caom2repo/pub'
        collection = 'cfht'
        observation_id = '7000000o'
        service = 'caom2repo'
        service_url = 'www.cadc.nrc.ca'

        obs = SimpleObservation(collection, observation_id)
        subject = auth.Subject(certificate='somefile.pem')
        level = logging.DEBUG
        visitor = CAOM2RepoClient(subject, level, host=service_url)
        response = MagicMock()
        response.status = 200
        mock_conn.return_value = response
        iobuffer = BytesIO()
        ObservationWriter().write(obs, iobuffer)
        obsxml = iobuffer.getvalue()
        response.content = obsxml

        visitor.put_observation(obs)
        self.assertEqual('PUT', mock_conn.call_args[0][0].method)
        self.assertEqual(
            '/{}/pub/{}/{}'.format(service, collection, observation_id),
            mock_conn.call_args[0][0].path_url)
        self.assertEqual('application/xml',
                         mock_conn.call_args[0][0].headers['Content-Type'])
        self.assertEqual(obsxml, mock_conn.call_args[0][0].body)

        # signal problems
        http_error = requests.HTTPError()
        response.status_code = 500
        http_error.response = response
        response.raise_for_status.side_effect = [http_error]
        with self.assertRaises(exceptions.InternalServerException):
            visitor.create(obs)

        # temporary transient errors
        http_error = requests.HTTPError()
        response.status_code = 503
        http_error.response = response
        response.raise_for_status.side_effect = [http_error, None]
        visitor.put_observation(obs)

        # permanent transient errors
        http_error = requests.HTTPError()
        response.status_code = 503
        http_error.response = response

        def raise_error(): raise http_error

        response.raise_for_status.side_effect = raise_error
        with self.assertRaises(exceptions.HttpException):
            visitor.put_observation(obs)
Example #6
0
 def test_data_for(self):
     mock_data = {"test": "test"}
     mock_response = MagicMock(spec=Response)
     mock_response.data = mock_data
     mock_response.status_code = 200
     data = HtmlCommunityView.data_for(CommunityMock, mock_response)
     self.assertEqual(data, mock_data)
     mock_response.status_code = 300
     data = HtmlCommunityView.data_for(CommunityMock, mock_response)
     self.assertEqual(data, mock_data)
     mock_response.status_code = 500  # or any other status
     data = HtmlCommunityView.data_for(CommunityMock, mock_response)
     self.assertIsNone(data)
     data = HtmlCommunityView.data_for(CommunityMock, None)
     self.assertIsNone(data)
Example #7
0
 def init_mock(self, json_data_file):
     fake_response = MagicMock()
     fake_response.status_code = 200
     with open(json_data_file) as json_data:
         response_data = json.load(json_data)
         fake_response.json.return_value = response_data
     return fake_response
    def test_provider_redirects_on_success_preauth_payment(
            self, mocked_redirect, mocked_post):
        data = MagicMock()
        data.return_value = {
            'token_type': 'test_token_type',
            'access_token': 'test_access_token',
            'payer': {'payer_info': 'test123'},
            'transactions': [
                {'related_resources': [{
                    'sale': {'links': ''},
                    'authorization': {'links': ''}}]}
            ]}
        post = MagicMock()
        post.json = data
        post.status_code = 200
        mocked_post.return_value = post

        request = MagicMock()
        request.GET = {'token': 'test', 'PayerID': '1234'}
        provider = PaypalProvider(
            secret=SECRET, client_id=CLIENT_ID, capture=False)
        provider.process_data(self.payment, request)

        self.assertEqual(self.payment.status, 'preauth')
        self.assertEqual(self.payment.captured_amount, Decimal('0'))
Example #9
0
def test_add_new_entities(monkeypatch, json):
    zmon_client = MagicMock()
    resp = MagicMock()
    resp.status_code = 200
    zmon_client.add_entity.return_value = resp

    existing_ids = ['1', '2', '3']
    current_ids = ['2', '3', '4', '5']

    existing_entities = [{'id': i, 'type': 'e-type'} for i in existing_ids]
    all_current_entities = [{'id': i, 'type': 'e-type'} for i in existing_ids + current_ids]

    new_entities, count = add_new_entities(all_current_entities, existing_entities, zmon_client, json=json)

    expected = [{'id': '4', 'type': 'e-type'}, {'id': '5', 'type': 'e-type'}]

    assert new_entities == expected
    assert count == 0

    calls = [call(e) for e in expected]

    if not json:
        zmon_client.add_entity.assert_has_calls(calls, any_order=True)
    else:
        zmon_client.add_entity.assert_not_called()
    def test_process_results_bad_status(self):
        test_object = MagicMock()
        test_object.status_code = 'cookies'
        self.assertRaises(ValueError, process_results, test_object)

        expected_calls = []
        self.assertListEqual(expected_calls, test_object.mock_calls)
Example #11
0
 def test_provider_raises_redirect_needed_on_success_captured_payment(self):
     with patch('requests.post') as mocked_post:
         transaction_id = '1234'
         data = MagicMock()
         data.return_value = {
             'id': transaction_id,
             'token_type': 'test_token_type',
             'access_token': 'test_access_token',
             'transactions': [
                 {'related_resources': [
                     {'sale': {'links': [
                         {'rel': 'refund', 'href': 'http://refund.com'}]}}
                 ]}
             ]}
         post = MagicMock()
         post.json = data
         post.status_code = 200
         mocked_post.return_value = post
         with self.assertRaises(RedirectNeeded) as exc:
             self.provider.get_form(
                 payment=self.payment, data=PROCESS_DATA)
             self.assertEqual(exc.args[0], self.payment.get_success_url())
     links = self.provider._get_links(self.payment)
     self.assertEqual(self.payment.status, 'confirmed')
     self.assertEqual(self.payment.captured_amount, self.payment.total)
     self.assertEqual(self.payment.transaction_id, transaction_id)
     self.assertTrue('refund' in links)
Example #12
0
    def test_getContextForCollectionMappings_contextRecieved(self, mock_get):
        mappingResponse = MagicMock(spec=Response)
        collection = ["Some Results"]
        mappingResponse.json.return_value = collection
        mappingResponse.status_code = 200
        mappingResponse.headers = []
        mock_get.return_value = mappingResponse

        collectionMappingsView = views.CollectionMappingsView()
        collectionMappingsView.request = FakeRequest()

        hash = {'collection': 'test', 'org': 'org1'}
        collectionMappingsView.kwargs = hash
        context = collectionMappingsView.get_context_data()

        self.assertEquals(context['url_params'], {})
        self.assertEquals(context['kwargs'], hash)
        self.assertEquals(context['selected_tab'], 'Mappings')
        self.assertEquals(context['results'], collection)
        self.assertEquals(context['pagination_url'], '/foobar')
        self.assertEquals(context['search_query'], '')
        self.assertIsInstance(context['search_filters'], SearchFilterList)
        # TODO: Revise sort assertion to work with new sort option definitions
        # self.assertEquals(context['search_sort_options'], ['Best Match', 'Last Update (Desc)', 'Last Update (Asc)', 'Name (Asc)', 'Name (Desc)'])
        self.assertEquals(context['search_sort'], '')
        self.assertEquals(context['search_facets_json'], None)
def test_getters_from_invalid_queue_item():
    # First we mock an HTTP 404 error response, which is what the Jenkins
    # REST API will return when the endpoint referenced by our queue item
    # no longer exists
    mock_response = MagicMock()
    mock_response.status_code = 404

    # Mock a Jenkins REST API object with the relevant structures used by
    # our queue item
    mock_api = MagicMock()
    mock_api.get_api_data.side_effect = HTTPError(response=mock_response)
    expected_id = 1234
    mock_api.url = "https://jenkins.server/queue/item/" + str(expected_id)

    # Flex our code
    q1 = QueueItem(mock_api)

    # confirm the results
    assert q1.uid == expected_id
    assert q1.stuck is None
    assert q1.blocked is None
    assert q1.buildable is None
    assert q1.reason is None
    assert q1.waiting is None
    assert q1.cancelled is None
    assert q1.job is None
    assert q1.build is None
Example #14
0
 def test_provider_raises_redirect_needed_on_success_preauth_payment(self):
     provider = PaypalCardProvider(
         secret=SECRET, client_id=CLIENT_ID, capture=False)
     with patch('requests.post') as mocked_post:
         transaction_id = '1234'
         data = MagicMock()
         data.return_value = {
             'id': transaction_id,
             'token_type': 'test_token_type',
             'access_token': 'test_access_token',
             'transactions': [
                 {'related_resources': [
                     {'authorization': {'links': [
                         {'rel': 'refund', 'href': 'http://refund.com'},
                         {'rel': 'capture', 'href': 'http://capture.com'}]}}
                 ]}
             ]}
         post = MagicMock()
         post.json = data
         post.status_code = 200
         mocked_post.return_value = post
         with self.assertRaises(RedirectNeeded) as exc:
             provider.get_form(
                 payment=self.payment, data=PROCESS_DATA)
             self.assertEqual(exc.args[0], self.payment.get_success_url())
     links = provider._get_links(self.payment)
     self.assertEqual(self.payment.status, 'preauth')
     self.assertEqual(self.payment.captured_amount, Decimal('0'))
     self.assertEqual(self.payment.transaction_id, transaction_id)
     self.assertTrue('capture' in links)
     self.assertTrue('refund' in links)
Example #15
0
    def test_add_image_with_file_object(self, mocked_os_path_getsize, mocked_os_path_isfile, mocked_requests_post, mocked_url, mocked_headers):
        mocked_os_path_isfile.return_value = True
        mocked_os_path_getsize.return_value = 7

        response_mock = MagicMock()
        response_mock.status_code = 201

        mocked_requests_post.return_value = response_mock

        mocked_url.return_value = 'url'
        mocked_headers.return_value = {'Accept': 'application/json'}

        content = 'content'
        m = '__builtin__'
        dummy_data = 'dummy_image_data_to_read'

        if sys.version_info >= (3,):
            m = 'builtins'

            import io
            sio = io.StringIO(dummy_data)
        else:
            import StringIO
            sio = StringIO.StringIO(dummy_data)

        # this should not be called
        mocked_open = mock_open(read_data=content)

        with patch(m + '.open', mocked_open):
            result = self._client.add_image(sio)
            mocked_requests_post.assert_called_once_with('url', data=dummy_data, headers={'Accept': 'application/json'})
Example #16
0
    def test_handle_http_error(self, transport, input):
        status, error_cls = input

        error_body_json = {
            'message': 'error message',
            'support_email': '*****@*****.**'
        }
        error_body_text = json.dumps(error_body_json)

        mock_response = MagicMock()
        mock_response.status_code = status
        mock_response.text = error_body_text
        mock_response.json.return_value = error_body_json

        error = HTTPError('error message', status)
        error.response = mock_response

        with pytest.raises(error_cls) as excinfo:
            transport._handle_http_error(error)

        err = excinfo.value
        assert err.message == 'error message'
        assert err.status == status
        assert err.raw == error_body_text
        assert err.json == error_body_json
    def test__request_basic_auth_fail(self):
        response = MagicMock(spec=requests.Response())
        response.status_code = 401
        self.client.session.request = MagicMock(return_value=response)

        self.assertEquals((False, "Unexpected HTTP status code [401]"),
                          self.client._request("http://example.com"))
Example #18
0
 def test_article_version_404(self, mock_requests_get):
     response = MagicMock()
     response.status_code = 404
     mock_requests_get.return_value = response
     status_code, versions = lax_provider.article_versions('08411', settings_mock)
     self.assertEqual(status_code, 404)
     self.assertIsNone(versions)
    def test__request_retries_login(self, mock_login):
        initial_xreply = {"return_code": 1, "content": "login_required"}
        pre_login_response = MagicMock(spec=requests.Response())
        pre_login_response.status_code = 200
        pre_login_response.content = json.dumps(initial_xreply)

        final_xreply = {"return_code": 0, "content": "success"}
        post_login_response = MagicMock(spec=requests.Response())
        post_login_response.status_code = 200
        post_login_response.content = json.dumps(final_xreply)

        side_effect = [pre_login_response, post_login_response]
        self.client.session.request = MagicMock(side_effect=side_effect)

        self.assertEquals((True, "success"),
                          self.client._request("http://example.com"))
Example #20
0
def test_http_errors(monkeypatch):
    resp = MagicMock()
    resp.status_code = 404
    resp.raise_for_status.side_effect = requests.HTTPError('Not Found')
    get = MagicMock()
    get.return_value = resp
    monkeypatch.setattr('requests.get', get)
    http = HttpWrapper('http://example.org')
    # the code method will not raise an exception..
    assert 404 == http.code()
    for meth in ('time', 'json', 'cookies', 'headers'):
        with pytest.raises(HttpError) as ex:
            # ..but other methods will!
            getattr(http, meth)()
        assert 'Not Found' == ex.value.message

    get.side_effect = requests.Timeout('timed out')
    http = HttpWrapper('http://example.org')
    with pytest.raises(HttpError) as ex:
        http.time()
    assert 'timeout' == ex.value.message

    get.side_effect = requests.ConnectionError('connfail')
    http = HttpWrapper('http://example.org')
    with pytest.raises(HttpError) as ex:
        http.code()
    assert 'connection failed' == ex.value.message

    get.side_effect = Exception('foofail')
    http = HttpWrapper('http://example.org')
    with pytest.raises(HttpError) as ex:
        http.code()
    assert 'foofail' == ex.value.message
Example #21
0
    def test_signups_worker_retries(self) -> None:
        """Tests the retry logic of signups queue."""
        fake_client = self.FakeClient()

        user_id = self.example_user('hamlet').id
        data = {'user_id': user_id, 'id': 'test_missed'}
        fake_client.queue.append(('signups', data))

        def fake_publish(queue_name: str, event: Dict[str, Any], processor: Callable[[Any], None]) -> None:
            fake_client.queue.append((queue_name, event))

        fake_response = MagicMock()
        fake_response.status_code = 400
        fake_response.text = ujson.dumps({'title': ''})
        with simulated_queue_client(lambda: fake_client):
            worker = queue_processors.SignupWorker()
            worker.setup()
            with patch('zerver.worker.queue_processors.requests.post',
                       return_value=fake_response), \
                    patch('zerver.lib.queue.queue_json_publish',
                          side_effect=fake_publish), \
                    patch('logging.info'), \
                    self.settings(MAILCHIMP_API_KEY='one-two',
                                  PRODUCTION=True,
                                  ZULIP_FRIENDS_LIST_ID='id'):
                worker.start()

        self.assertEqual(data['failed_tries'], 4)
Example #22
0
 def _mock_response(self, status_code=404, headers={}, content='PAGE_NOT_FOUND'):
     r = MagicMock(Response())
     r.status_code = status_code
     r.headers = CaseInsensitiveDict(headers if headers is not None else {})
     r.content = content
     r.ok = status_code < 400
     return r
Example #23
0
def test_http_errors(monkeypatch):
    resp = MagicMock()
    resp.status_code = 404
    resp.raise_for_status.side_effect = requests.HTTPError("Not Found")
    get = MagicMock()
    get.return_value = resp
    monkeypatch.setattr("requests.get", get)
    http = HttpWrapper("http://example.org")
    # the code method will not raise an exception..
    assert 404 == http.code()
    for meth in ("time", "json", "cookies", "headers"):
        with pytest.raises(HttpError) as ex:
            # ..but other methods will!
            getattr(http, meth)()
        assert "Not Found" == ex.value.message

    get.side_effect = requests.Timeout("timed out")
    http = HttpWrapper("http://example.org")
    with pytest.raises(HttpError) as ex:
        http.time()
    assert "timeout" == ex.value.message

    get.side_effect = requests.ConnectionError("connfail")
    http = HttpWrapper("http://example.org")
    with pytest.raises(HttpError) as ex:
        http.code()
    assert "connection failed" == ex.value.message

    get.side_effect = Exception("foofail")
    http = HttpWrapper("http://example.org")
    with pytest.raises(HttpError) as ex:
        http.code()
    assert "foofail" == ex.value.message
Example #24
0
def _build_mock_request(method):
    status_values = {
        'get': 200,
        'put': 200,
        'post': 201,
        'delete': 204
    }

    # Build response
    response = MagicMock()
    response.status_code = status_values[method]

    if method == 'get':
        response.headers = {
            'content-type': 'application/rdf+xml'
        }
        response.text = 'value returned'

    def _mock_request(url, headers={}, data=''):
        # Check headers
        if 'Authorization' not in headers:
            response.status_code = 401

        if method == 'get' and 'Accept' not in headers:
            response.status_code = 406

        if (method == 'put' or method == 'post') and 'Content-Type' not in headers:
            response.status_code = 415

        response.url = url
        return response

    return _mock_request
    def test_missing_keys(self):

        http_session = MagicMock()

        response = MagicMock()

        http_session.get = MagicMock()
        http_session.get.return_value = response

        response.status_code = 200
        response.content = "{}"
        response.url = "http://example.com/?camli.mode=config"

        conn = _connect(
            'http://example.com/',
            http_session=http_session,
        )

        self.assertEqual(
            conn.blob_root,
            None,
        )
        self.assertEqual(
            conn.search_root,
            None,
        )
        self.assertEqual(
            conn.sign_root,
            None,
        )
    def test_handle_error_503(self):
        # Retry once more on 503 error
        request = MagicMock()
        request.status_code = 503
        self.auth.handle_error(request)

        self.assertEqual(self.auth.auth_token, 'auth_token')
        request.connection.send.assert_called_with(request.request)
    def test_get_calls(self):
        resp = MagicMock()
        resp.json = Mock()
        resp.status_code = Mock()
        with patch.object(Adapter, 'get', return_value=resp) as get_request:
            self.accounts_adapter.get()

        get_request.assert_any_call()
Example #28
0
    def test_delete(self):
        response_mock = MagicMock(status_code=204)
        self.engine.requests.request.return_value = response_mock

        self.assertTrue(self.engine.delete('/test', {'value': 'test'}))

        response_mock.status_code = MagicMock(return_value=401)
        self.assertFalse(self.engine.delete('/test', {'value': 'test'}))
    def test_handle_error_200(self):
        # No op on no error
        request = MagicMock()
        request.status_code = 200
        self.auth.handle_error(request)

        self.assertEqual(self.auth.auth_token, 'auth_token')
        self.assertFalse(request.request.send.called)
Example #30
0
 def test_article_version_200(self, mock_requests_get):
     response = MagicMock()
     response.status_code = 200
     response.json.return_value = {'versions': [{'version': 1}]}
     mock_requests_get.return_value = response
     status_code, versions = lax_provider.article_versions('08411', settings_mock)
     self.assertEqual(status_code, 200)
     self.assertEqual(versions, [{'version': 1}])
Example #31
0
def response(status_code):
    mocked = MagicMock()
    mocked.status_code = status_code
    mocked.ok = 100 <= status_code < 400

    return mocked
 def make_response(self, text, status_code=200):
     fake_response = MagicMock()
     fake_response.text = text
     fake_response.status_code = status_code
     return fake_response
    def test_enumerate(self):
        http_session = MagicMock()
        http_session.get = MagicMock()
        response = MagicMock()
        http_session.get.return_value = response

        response.status_code = 200
        response.content = """
        {
            "blobs": [
                {
                    "blobRef": "dummy1",
                    "size": 5
                },
                {
                    "blobRef": "dummy2",
                    "size": 9
                }
            ],
            "continueAfter": "dummy2"
        }
        """

        blobs = BlobClient(http_session, 'http://example.com/')
        iterable = blobs.enumerate()
        iterator = iterable.__iter__()

        blob_metas = []
        blob_metas.append(iterator.next())
        blob_metas.append(iterator.next())

        http_session.get.assert_called_with(
            'http://example.com/camli/enumerate-blobs')

        # now set up for the second request
        http_session.get = MagicMock()
        response = MagicMock()
        http_session.get.return_value = response

        response.status_code = 200
        response.content = """
        {
            "blobs": [
                {
                    "blobRef": "dummy3",
                    "size": 17
                }
            ]
        }
        """

        blob_metas.append(iterator.next())

        self.assertRaises(
            StopIteration,
            lambda: iterator.next(),
        )

        self.assertEqual(
            [type(x) for x in blob_metas],
            [BlobMeta, BlobMeta, BlobMeta],
        )
        self.assertEqual(
            [x.blobref for x in blob_metas],
            ["dummy1", "dummy2", "dummy3"],
        )
        self.assertEqual(
            [x.size for x in blob_metas],
            [5, 9, 17],
        )
Example #34
0
    def test_add_mainline_kubernetes_annotations(self, m_requests):
        """
        Tests add functionality using Kubernetes annotation policy driver. 
        """
        # Configure.
        self.cni_args = "K8S_POD_NAME=podname;K8S_POD_NAMESPACE=defaultns"
        workload_id = "defaultns.podname"
        self.command = CNI_CMD_ADD
        ip4 = "10.0.0.1/32"
        ip6 = "0:0:0:0:0:ffff:a00:1"
        ipam_stdout = json.dumps({"ip4": {"ip": ip4}, "ip6": {"ip": ip6}})
        self.set_ipam_result(0, ipam_stdout, "")
        self.policy = {"type": "k8s-annotations"}

        # Set up docker client response.
        inspect_result = {"HostConfig": {"NetworkMode": ""}}
        self.m_docker_client().inspect_container.return_value = inspect_result

        # Create plugin.
        p = self.create_plugin()
        assert_true(isinstance(p.container_engine, DockerEngine))

        # Mock DatastoreClient such that no endpoints exist.
        self.client.get_endpoint.side_effect = KeyError

        # Mock profile such that it doesn't exist.
        self.client.profile_exists.return_value = False

        # Mock the API response.
        response = MagicMock()
        response.status_code = 200
        api_pod = {
            "kind": "pod",
            "metadata": {
                "annotations": {
                    "projectcalico.org/policy": "allow from label X=Y"
                },
                "labels": {
                    "a": "b",
                    "c": "d"
                }
            }
        }
        response.text = json.dumps(api_pod)
        m_requests.Session().__enter__().get.return_value = response

        # Execute.
        p.execute()

        # Assert the correct policy driver was chosen.
        assert_true(isinstance(p.policy_driver, KubernetesAnnotationDriver))

        # Assert an endpoint was created.
        self.client.create_endpoint.assert_called_once_with(
            ANY, "k8s", workload_id,
            [IPNetwork(ip4), IPNetwork(ip6)])

        # Assert profile was created.
        self.client.create_profile.assert_called_once_with(
            "defaultns_podname",
            Rules(
                id="defaultns_podname",
                inbound_rules=[Rule(action="allow", src_tag="defaultns_X_Y")],
                outbound_rules=[Rule(action="allow")]))

        # Assert tags were added.
        self.client.profile_update_tags.assert_called_once_with(
            self.client.get_profile())

        # Assert a profile was applied.
        self.client.append_profiles_to_endpoint.assert_called_once_with(
            profile_names=["defaultns_podname"],
            endpoint_id=self.client.create_endpoint().endpoint_id)
Example #35
0
                    timeout=60,
                    headers={"Content-type": "application/json"},
                )
            ],
        )
    ],
    patchers=[
        Patcher(target=HTTP_REQUEST, side_effect=Exception("exc_token1"))
    ],
)

# ------------------------------------------------

NOT_JSON_RESPONSE = MagicMock()
NOT_JSON_RESPONSE.json = MagicMock(side_effect=Exception("exc_token2"))
NOT_JSON_RESPONSE.status_code = 200

HTTP_CALL_RESP_NOT_JSON_CASE = ComponentTestCase(
    name="http call response is not json case",
    inputs={
        "bk_http_request_method": "method_token",
        "bk_http_request_url": "url_token",
        "bk_http_request_body": "body_token",
        "bk_http_request_header": [],
        "bk_http_success_exp": "exp_token",
        "bk_http_timeout": 0,
    },
    parent_data={},
    execute_assertion=ExecuteAssertion(success=True, outputs={}),
    schedule_assertion=ScheduleAssertion(success=False,
                                         outputs={
 def mock_get(url, *args, **kwargs):
     if '/genomic-files/' in url:
         resp = MagicMock()
         resp.status_code = 200
         resp.json.return_value = {
             'results': {
                 'acl': [],
                 'visible': True,
                 'kf_id': 'GF_00000000'
             }
         }
         return resp
     elif '/genomic-files' in url:
         resp = MagicMock()
         resp.status_code = 200
         resp.json.return_value = {
             'results': [{
                 'acl': [],
                 'visible': True,
                 'kf_id': 'GF_00000000'
             }]
         }
         return resp
     elif '/biospecimens/' in url:
         resp = MagicMock()
         resp.json.return_value = {
             '_links': {
                 'biospecimen_genomic_files': '/biospecimen-genomic-files'
                 '?biospecimen_id = BS_HFY3Y3XM',
                 'genomic_files':
                 '/genomic-files?biospecimen_id=BS_HFY3Y3XM'
             },
             'results': {
                 'kf_id': 'BS_HFY3Y3XM',
                 'dbgap_consent_code': 'phs001168.c1',
                 "consent_short_name": None,
                 'consent_type': None,
                 'visible': True
             }
         }
         resp.status_code = 200
         return resp
     elif '/biospecimens' in url:
         resp = MagicMock()
         resp.json.return_value = {
             'results': [{
                 'kf_id': 'BS_HFY3Y3XM',
                 'dbgap_consent_code': 'phs001168.c1',
                 'consent_type': None,
                 'visible': True,
                 '_links': {
                     'biospecimen_genomic_files':
                     '/biospecimen-genomic-files'
                     '?biospecimen_id = BS_HFY3Y3XM'
                 }
             }]
         }
         resp.status_code = 200
         return resp
     elif '/studies' in url:
         resp = MagicMock()
         resp.status_code = 200
         resp.json.return_value = {
             'results': [{
                 'external_id': 'phs001168',
                 'version': 'v1.p1',
                 'kf_id': 'SD_9PYZAHHE'
             }]
         }
         return resp
     elif '/biospecimen-genomic-files' in url:
         resp = MagicMock()
         resp.status_code = 200
         resp.json.return_value = {
             'results': [{
                 "_links": {
                     "biospecimen": "/biospecimens/BS_HFY3Y3XM",
                     "genomic_file": "/genomic-files/GF_00000000"
                 },
                 'biospecimen_id': 'BS_HFY3Y3XM',
                 'genomic_file_id': 'GF_00000000'
             }]
         }
         return resp
    def check_ows(self, get, service_type, pc, invalid_content, empty_content, no_intersect_content, valid_content):
        """
        Checks the status of a WFS, WCS, WMS, or WMTS service.
        :param get: Patched requests.get
        :param pc: ProviderCheck instance
        :param invalid_content: XML representing an unrecognized response
        :param empty_content: XML representing response lacking requested layer
        :param no_intersect_content: XML representing response with requested layer that does not intersect AOI
        :param valid_content: XML representing response with requested layer that intersects AOI
        """
        # Test: cannot connect to server
        get.side_effect = requests.exceptions.ConnectionError()
        result_status = json.loads(pc.check())['status']
        self.assertEquals(get_status(CheckResults.CONNECTION), result_status)

        # Test: server throws SSL exception
        get.side_effect = requests.exceptions.SSLError()
        result_status = json.loads(pc.check())['status']
        self.assertEquals(get_status(CheckResults.SSL_EXCEPTION), result_status)

        # Test: server returns unauthorized response code
        get.side_effect = None
        response = MagicMock()
        response.content = ""
        response.status_code = 403
        response.ok = False
        get.return_value = response
        result_status = json.loads(pc.check())['status']
        self.assertEquals(get_status(CheckResults.UNAUTHORIZED), result_status)

        # Test: server returns 404 response code
        response.status_code = 404
        get.return_value = response
        result_status = json.loads(pc.check())['status']
        self.assertEquals(get_status(CheckResults.NOT_FOUND), result_status)

        # Test: server does not return recognizable xml
        response.content = invalid_content
        response.status_code = 200
        response.ok = True
        get.return_value = response
        result_status = json.loads(pc.check())['status']
        self.assertEquals(get_status(CheckResults.UNKNOWN_FORMAT), result_status)

        if service_type not in ['wms', 'wmts']: # TODO: fix layer checks for WMS/WMTS
            # Test: server does not offer the requested layer/coverage
            response.content = empty_content
            get.return_value = response
            result_status = json.loads(pc.check())['status']
            self.assertEquals(get_status(CheckResults.LAYER_NOT_AVAILABLE), result_status)

        if service_type not in ['wms', 'wmts']:  # TODO: fix layer checks for WMS/WMTS
            # Test: requested layer/coverage does not intersect given AOI
            response.content = no_intersect_content
            get.return_value = response
            result_status = json.loads(pc.check())['status']
            self.assertEquals(get_status(CheckResults.NO_INTERSECT), result_status)

        # Test: success
        response.content = valid_content
        get.return_value = response
        result_status = json.loads(pc.check())['status']
        self.assertEquals(get_status(CheckResults.SUCCESS), result_status)

        # Test: no service_url was provided
        pc.service_url = ""
        result_status = json.loads(pc.check())['status']
        self.assertEquals(get_status(CheckResults.NO_URL), result_status)
Example #38
0
    def get_response(self, method, url, verify, headers, data=None):
        resp = MagicMock()
        resp.status_code = 400
        parts = urlparse(url)
        url = parts[2]
        params = parts[4]

        if method == "GET":
            if url == "/infrastructures/infid" or url == "/infrastructures/newinfid":
                resp.status_code = 200
                resp.json.return_value = {
                    "uri-list": [{
                        "uri": "http://server.com/infid/vms/0"
                    }, {
                        "uri": "http://server.com/infid/vms/1"
                    }]
                }
            elif url == "/infrastructures/infid/state":
                resp.status_code = 200
                resp.json.return_value = {
                    "state": {
                        "state": "configured",
                        "vm_states": {
                            "0": "configured",
                            "1": "configured"
                        }
                    }
                }
            elif url == "/infrastructures/infid/vms/0":
                resp.status_code = 200
                resp.text = "network public (outbound='yes')\n"
                resp.text += "system front (net_interface.0.connection = 'public' and net_interface.0.ip = '8.8.8.8')"
            elif url == "/infrastructures/infid/data":
                resp.status_code = 200
                resp.json.return_value = {"data": "data"}
            elif url == "/infrastructures/infid/contmsg":
                resp.status_code = 200
                resp.text = "contmsg"
            elif url == "/infrastructures/infid/radl":
                resp.status_code = 200
                resp.text = "network public (outbound='yes')\n"
                resp.text += "system front (net_interface.0.connection = 'public' and net_interface.0.ip = '8.8.8.8')"
        elif method == "POST":
            if url == "/infrastructures":
                resp.status_code = 200
                resp.text = 'http://server.com/infid'
        elif method == "PUT":
            if url == "/infrastructures":
                resp.status_code = 200
                resp.text = 'http://server.com/newinfid'
            elif url == "/infrastructures/infid/reconfigure":
                resp.status_code = 200
                resp.text = ''
            elif url == "/infrastructures/newinfid/stop":
                resp.status_code = 200
                resp.text = ''
            elif url == "/infrastructures/infid/start":
                resp.status_code = 200
                resp.text = ''
        elif method == "DELETE":
            if url == "/infrastructures/infid":
                resp.status_code = 200

        return resp
Example #39
0
File: OCCI.py Project: vigial/im
    def get_response(self,
                     method,
                     url,
                     verify,
                     cert=None,
                     headers=None,
                     data=None):
        resp = MagicMock()
        parts = urlparse(url)
        url = parts[2]
        params = parts[4]

        if method not in self.call_count:
            self.call_count[method] = {}
        if url not in self.call_count[method]:
            self.call_count[method][url] = 0
        self.call_count[method][url] += 1

        resp.status_code = 404

        if method == "GET":
            if url == "":
                resp.status_code = 300
                resp.json.return_value = {
                    "versions": {
                        "values": [{
                            "id": "v3.6"
                        }, {
                            "id": "v2.0"
                        }]
                    }
                }
            if url == "/-/":
                resp.status_code = 200
                resp.text = self.read_file_as_string("files/occi.txt")
            elif url == "/compute/1":
                resp.status_code = 200
                resp.text = self.read_file_as_string("files/occi_vm_info.txt")
            elif url.startswith("/storage"):
                resp.status_code = 200
                resp.text = 'X-OCCI-Attribute: occi.storage.state="online"'
            elif url == "/v2.0/tenants":
                resp.status_code = 200
                resp.json.return_value = {"tenants": [{"name": "tenantname"}]}
            elif url == "/v3/auth/projects":
                resp.status_code = 200
                resp.json.return_value = {
                    "projects": [{
                        "id": "projectid",
                        "name": "prname"
                    }]
                }
            elif url == "/v3/OS-FEDERATION/identity_providers/egi.eu/protocols/oidc/auth":
                resp.status_code = 200
                resp.headers = {'X-Subject-Token': 'token1'}
            elif url.endswith("/link/storagelink/compute_10_disk_1"):
                resp.status_code = 404
            elif url == "/rest/1.0/va_providers":
                resp.status_code = 200
                resp.text = """<appdb:appdb>
                                <virtualization:provider id="4454G0" in_production="true">
                                    <provider:name>CESNET-MetaCloud</provider:name>
                                </virtualization:provider>
                                <virtualization:provider id="id" in_production="true">
                                    <provider:name>some</provider:name>
                                </virtualization:provider>
                                </appdb:appdb>"""
            elif url == "/rest/1.0/va_providers/4454G0":
                resp.status_code = 200
                resp.text = """<appdb:appdb>
                                <virtualization:provider id="4454G0" in_production="true">
                                <provider:endpoint_url>https://carach5.ics.muni.cz:11443</provider:endpoint_url>
                                <provider:image
                                    va_provider_image_id="http://url/os_tpl#image_id"
                                    appcname="egi.docker.ubuntu.16.04"
                                    voname="fedcloud.egi.eu"/>
                                <provider:image
                                    va_provider_image_id="http://url/os_tpl#image_id2"
                                    appcname="egi.ubuntu.16.04"
                                    voname="fedcloud.egi.eu"/>
                                </virtualization:provider>
                                </appdb:appdb>"""
            elif url == "/network/":
                resp.status_code = 200
                resp.text = ("X-OCCI-Location: http://server.com/network/1"
                             "\nX-OCCI-Location: http://server.com/network/2")
            elif url == "/network/2":
                resp.status_code = 200
                resp.text = "X-OCCI-Attribute: occi.network.address=\"158.42.0.0/24\""
            elif url == "/network/1":
                resp.status_code = 200
                resp.text = "X-OCCI-Attribute: occi.network.address=\"10.0.0.0/24\""
        elif method == "POST":
            if url == "/compute/":
                if self.return_error:
                    resp.status_code = 400
                    resp.reason = 'Error msg'
                    resp.text = ''
                else:
                    resp.status_code = 201
                    resp.text = 'https://server.com/compute/1'
            elif params == "action=suspend":
                resp.status_code = 204
            elif params == "action=start":
                resp.status_code = 200
            elif params == "action=restart":
                resp.status_code = 200
            elif url == "/storagelink/":
                resp.status_code = 200
            elif url == "/storage/":
                resp.status_code = 201
                resp.text = 'https://server.com/storage/1'
            elif url == "/networkinterface/":
                resp.status_code = 201
            elif url == "/v2.0/tokens":
                if json.loads(data) == {"auth": {"voms": True}}:
                    resp.status_code = 200
                    resp.json.return_value = {
                        "access": {
                            "token": {
                                "id": "token1"
                            }
                        }
                    }
                elif json.loads(data) == {
                        "auth": {
                            "voms": True,
                            "tenantName": "tenantname"
                        }
                }:
                    resp.status_code = 200
                    resp.json.return_value = {
                        "access": {
                            "token": {
                                "id": "token2"
                            }
                        }
                    }
                else:
                    resp.status_code = 400
            elif url == "/v3/auth/tokens":
                if json.loads(data) == {
                        "auth": {
                            "scope": {
                                "project": {
                                    "id": "projectid"
                                }
                            },
                            "identity": {
                                "token": {
                                    "id": "token1"
                                },
                                "methods": ["token"]
                            }
                        }
                }:
                    resp.status_code = 200
                    resp.headers = {'X-Subject-Token': 'token3'}
                else:
                    resp.status_code = 400
        elif method == "DELETE":
            if url.endswith("/compute/1"):
                resp.status_code = 200
            elif url.endswith("/storage/1"):
                resp.status_code = 200
            elif url.endswith("/link/storagelink/compute_10_disk_1"):
                resp.status_code = 200
            elif url.endswith("/link/networkinterface/compute_10_nic_1"):
                resp.status_code = 200

        return resp
Example #40
0
    def get_response(self, method, url, verify, cert, headers, data):
        resp = MagicMock()
        parts = urlparse(url)
        url = parts[2]
        params = parts[4]

        if method == "GET":
            if url == '/info':
                resp.status_code = 200
                if TestDockerConnector.swarm:
                    resp.text = '{"Swarm": {"LocalNodeState": "active"}}'
                else:
                    resp.text = '{"Swarm": {"LocalNodeState": "inactive"}}'
            elif url == "/api/":
                resp.status_code = 200
                resp.text = '{"versions": "v1"}'
            elif url == "/containers/1/json":
                resp.status_code = 200
                resp.text = '{"State": {"Running": 1}, "NetworkSettings": {"IPAddress": "10.0.0.1"}}'
            elif url == "/services/1":
                resp.status_code = 200
                resp.text = (
                    '{"Spec": {"Name": "sname"},"UpdateStatus": {"CompletedAt": '
                    '"2016-06-07T21:10:20.269723157Z"},"Endpoint": {"VirtualIPs":'
                    ' [{"Addr": "10.0.0.1/16"}]}}')
            elif url.startswith("/tasks"):
                resp.status_code = 200
                resp.text = (
                    '[{"Status": {"State": "rejected", "Err": "Err"}}, {"Status": {"State": "running"}}]'
                )
            elif url.startswith("/networks"):
                resp.status_code = 200
                data = json.loads(params.split("=")[1])
                netname = list(data['name'].keys())[0]
                resp.text = '[{"Name": "%s", "Id": "netid"}]' % netname
        elif method == "POST":
            if url == "/containers/create":
                resp.status_code = 201
                resp.text = '{"Id": "id"}'
            elif url == "/services/create":
                resp.status_code = 201
                resp.text = '{"ID": "id"}'
            elif url == "/images/create":
                resp.status_code = 200
            elif url.endswith("/start"):
                resp.status_code = 204
            elif url.endswith("/stop"):
                resp.status_code = 204
            elif url.endswith("/restart"):
                resp.status_code = 204
            elif url == "/volumes/create":
                resp.status_code = 201
            elif url == "/networks/create":
                resp.status_code = 201
            elif url == "/networks/netid/connect":
                resp.status_code = 200
        elif method == "DELETE":
            if url == "/containers/1":
                resp.status_code = 204
            if url == "/services/1":
                resp.status_code = 200
            if url == "/volumes/hdb":
                resp.status_code = 204
            if url == "/networks/netid":
                resp.status_code = 204

        return resp
def test_create(event):
    """ Test that the lamba calls the dataservice """
    os.environ['DATASERVICE'] = 'http://api.com/'
    mock = patch('service.requests')
    req = mock.start()

    class Context:
        def get_remaining_time_in_millis(self):
            return 1600

    def mock_get(url, *args, **kwargs):
        if '/genomic-files/' in url:
            resp = MagicMock()
            resp.status_code = 200
            resp.json.return_value = {
                'results': {
                    'acl': [],
                    'visible': True,
                    'kf_id': 'GF_00000000'
                }
            }
            return resp
        elif '/genomic-files' in url:
            resp = MagicMock()
            resp.status_code = 200
            resp.json.return_value = {
                'results': [{
                    'acl': [],
                    'visible': True,
                    'kf_id': 'GF_00000000'
                }]
            }
            return resp
        elif '/biospecimens/' in url:
            resp = MagicMock()
            resp.json.return_value = {
                '_links': {
                    'biospecimen_genomic_files': '/biospecimen-genomic-files'
                    '?biospecimen_id = BS_HFY3Y3XM',
                    'genomic_files':
                    '/genomic-files?biospecimen_id=BS_HFY3Y3XM'
                },
                'results': {
                    'kf_id': 'BS_HFY3Y3XM',
                    'dbgap_consent_code': 'phs001168.c1',
                    "consent_short_name": None,
                    'consent_type': None,
                    'visible': True
                }
            }
            resp.status_code = 200
            return resp
        elif '/biospecimens' in url:
            resp = MagicMock()
            resp.json.return_value = {
                'results': [{
                    'kf_id': 'BS_HFY3Y3XM',
                    'dbgap_consent_code': 'phs001168.c1',
                    'consent_type': None,
                    'visible': True,
                    '_links': {
                        'biospecimen_genomic_files':
                        '/biospecimen-genomic-files'
                        '?biospecimen_id = BS_HFY3Y3XM'
                    }
                }]
            }
            resp.status_code = 200
            return resp
        elif '/studies' in url:
            resp = MagicMock()
            resp.status_code = 200
            resp.json.return_value = {
                'results': [{
                    'external_id': 'phs001168',
                    'version': 'v1.p1',
                    'kf_id': 'SD_9PYZAHHE'
                }]
            }
            return resp
        elif '/biospecimen-genomic-files' in url:
            resp = MagicMock()
            resp.status_code = 200
            resp.json.return_value = {
                'results': [{
                    "_links": {
                        "biospecimen": "/biospecimens/BS_HFY3Y3XM",
                        "genomic_file": "/genomic-files/GF_00000000"
                    },
                    'biospecimen_id': 'BS_HFY3Y3XM',
                    'genomic_file_id': 'GF_00000000'
                }]
            }
            return resp

    req.get.side_effect = mock_get
    req.patch.side_effect = mock_get

    mock_resp = MagicMock()
    mock_resp.json.return_value = {'results': {'kf_id': 'GF_00000000'}}
    mock_resp.status_code = 201
    req.post.return_value = mock_resp
    req.patch.return_value = mock_resp
    res = service.handler(event, Context())

    assert len(res) == 1
Example #42
0
 def mocked_request(self, verb):
     response = MagicMock()
     response.status_code = 201
     response.json = MagicMock(return_value={})
     with patch.object(requests, verb, return_value=response) as mocked:
         yield mocked
Example #43
0
File: Docker.py Project: nakos/im
    def get_response(self, method, url, verify, cert, headers, data):
        resp = MagicMock()
        parts = uriparse(url)
        url = parts[2]
        # params = parts[4]

        if method == "GET":
            if url == '/info':
                resp.status_code = 200
                if self.swarm:
                    resp.text = '{"Swarm": {"LocalNodeState": "active"}}'
                else:
                    resp.text = '{"Swarm": {"LocalNodeState": "inactive"}}'
            elif url == "/api/":
                resp.status_code = 200
                resp.text = '{"versions": "v1"}'
            elif url == "/containers/1/json":
                resp.status_code = 200
                resp.text = '{"State": {"Running": 1}, "NetworkSettings": {"IPAddress": "10.0.0.1"}}'
            elif url == "/services/1":
                resp.status_code = 200
                resp.text = (
                    '{"UpdateStatus": {"CompletedAt": "2016-06-07T21:10:20.269723157Z"},'
                    '"Endpoint": {"VirtualIPs": [{"Addr": "10.0.0.1/16"}]}}')
            elif url.startswith("/tasks?filters"):
                resp.status_code = 200
                resp.text = (
                    '[{"Status": {"State": "rejected", "Err": "Err"}}, {"Status": {"State": "running"}}]'
                )
        elif method == "POST":
            if url == "/containers/create":
                resp.status_code = 201
                resp.text = '{"Id": "id"}'
            elif url == "/services/create":
                resp.status_code = 201
                resp.text = '{"ID": "id"}'
            elif url == "/images/create":
                resp.status_code = 200
            elif url.endswith("/start"):
                resp.status_code = 204
            elif url.endswith("/stop"):
                resp.status_code = 204
            elif url == "/volumes/create":
                resp.status_code = 201
            elif url == "/networks/create":
                resp.status_code = 201
        elif method == "DELETE":
            if url.endswith("/containers/1"):
                resp.status_code = 204
            if url.endswith("/servicess/1"):
                resp.status_code = 200

        return resp
Example #44
0
    def test_get_task_status(self, utils_mock, authenticate_mock, config_mock):
        # Mocking self.authenticate() method
        authenticate_mock.return_value = 200
        config_mock.side_effect = mock_get_config
        response_instance = MagicMock()
        response_instance.status_code = 200
        return_data = {
            'ManagedResourceID':
            '9f92203e-313c-4b35-88ff-ff00a9d77153',
            'ParentTaskId':
            None,
            'TenantID':
            '9f92203e-313c-4b35-88ff-ff00a9d77153',
            'CreatedDate':
            '2018-06-22T05:28:19.777Z',
            'SessionID':
            None,
            'EditedBy':
            'test@hostname',
            'PortalUserName':
            '******',
            'MessageName':
            'SetVM',
            'TaskInfoID':
            'c22135d9-5931-4aff-8462-e6601c5b573b',
            'LocalizableError':
            None,
            'CreatedBy':
            'test@hostname',
            'ManagedResourceName':
            'qqqqqq',
            'Errors':
            None,
            'TaskName':
            'Provisioning VM qqqqqq',
            'Progress':
            1,
            'Cancellable':
            False,
            'StateMessage':
            'Success',
            'StartTime':
            '2018-06-22T05:28:19.777Z',
            'CorrelationId':
            'c22135d9-5931-4aff-8462-e6601c5b573b',
            'Result':
            None,
            'EditedDate':
            '2018-06-22T05:28:20.919Z',
            'ManagedResourceIdentifier':
            None,
            'ManagedResourceType':
            'Tenant',
            'CustomerId':
            0,
            'TaskId':
            'c22135d9-5931-4aff-8462-e6601c5b573b',
            'SiteID':
            '69d29e4b-ce66-66b9-a07d-c4612616bb0f',
            'FinishTime':
            None,
            'HypervisorID':
            None,
            'UserName':
            '******',
            'Acl': [{
                'ResourceRole': '3f9d5bf4-0f63-4ede-8a31-f832af8dc07b',
                'UserGroup': '77922643-80cb-7eb5-d6ca-6c21327b6d11',
                'Permissions': 1
            }, {
                'ResourceRole': '3985741b-0df2-4e9a-869b-46369842b0da',
                'UserGroup': 'b742a2b9-2063-f1b0-b831-40aa5d39234e',
                'Permissions': 1
            }, {
                'ResourceRole': '3f9d5bf4-0f63-4ede-8a31-f832af8dc07b',
                'UserGroup': '84e201ba-a318-46a9-abec-65c801d76477',
                'Permissions': 1
            }, {
                'ResourceRole': '3f9d5bf4-0f63-4ede-8a31-f832af8dc07b',
                'UserGroup': '2819972e-7be9-4d7c-a809-cd1c6a1baf86',
                'Permissions': 1
            }],
            'State':
            3
        }

        match_data = {'vm_id': None, 'state': 'Success'}
        response_instance.json.return_value = return_data
        utils_mock.make_get_request.return_value = response_instance

        self.platforma = PlatformAManager()
        with patch('iaas.platforma.sleep'):
            parameter_dict = {"message_id": "123s-3fs32-svseves-43sefsef"}
            msg_info = self.platforma.get_task_status(
                parameters=parameter_dict)
            self.assertEqual(msg_info, match_data)
Example #45
0
 def test_fail_request(self):
     with patch('requests.post') as mock_post:
         response = MagicMock()
         response.status_code = 201
         with pytest.raises(FailedRequest):
             self.auth.call_post('url', {})
Example #46
0
    def test_make_request(self, method, headers, data, response_status):
        url = 'http://example.com'
        ERROR_MSG = 'This is an example error!'

        # Set the environ
        usertoken = store_connector.plugins.toolkit.c.usertoken = {
            'token_type': 'bearer',
            'access_token': 'access_token',
            'refresh_token': 'refresh_token'
        }

        newtoken = {
            'token_type': 'bearer',
            'access_token': 'new_access_token',
            'refresh_token': 'new_refresh_token'
        }

        # Mock refresh_function
        def refresh_function_side_effect():
            store_connector.plugins.toolkit.c.usertoken = newtoken

        store_connector.plugins.toolkit.c.usertoken_refresh = MagicMock(
            side_effect=refresh_function_side_effect)

        expected_headers = headers.copy()
        expected_headers['Accept'] = 'application/json'

        # Set the response status
        first_response = MagicMock()
        first_response.status_code = response_status
        first_response.text = '{"message": %s, "result": False}' % ERROR_MSG
        second_response = MagicMock()
        second_response.status_code = 201

        request = MagicMock()
        store_connector.OAuth2Session = MagicMock(return_value=request)
        req_method = MagicMock(side_effect=[first_response, second_response])
        setattr(request, method, req_method)

        # Call the function
        if response_status > 399 and response_status < 600 and response_status != 401:
            with self.assertRaises(Exception) as e:
                self.instance._make_request(method, url, headers, data)
                self.assertEquals(ERROR_MSG, e.message)
                store_connector.OAuth2Session.assert_called_once_with(
                    token=usertoken)
                req_method.assert_called_once_with(url,
                                                   headers=expected_headers,
                                                   json=data)
        else:
            result = self.instance._make_request(method, url, headers, data)

            # If the first request returns a 401, the request is retried with a new access_token...
            if response_status != 401:
                self.assertEquals(first_response, result)
                req_method.assert_called_once_with(url,
                                                   headers=expected_headers,
                                                   json=data,
                                                   verify=True)
                store_connector.OAuth2Session.assert_called_once_with(
                    token=usertoken)
                req_method.assert_called_once_with(url,
                                                   headers=expected_headers,
                                                   json=data,
                                                   verify=True)
            else:
                # Check that the token has been refreshed
                store_connector.plugins.toolkit.c.usertoken_refresh.assert_called_once_with(
                )

                # Check that both tokens has been used
                self.assertEquals(
                    usertoken, store_connector.OAuth2Session.call_args_list[0]
                    [1]['token'])
                self.assertEquals(
                    newtoken, store_connector.OAuth2Session.call_args_list[1]
                    [1]['token'])

                # Check URL
                self.assertEquals(url, req_method.call_args_list[0][0][0])
                self.assertEquals(url, req_method.call_args_list[1][0][0])

                # Check headers
                self.assertEquals(expected_headers,
                                  req_method.call_args_list[0][1]['headers'])
                self.assertEquals(expected_headers,
                                  req_method.call_args_list[1][1]['headers'])

                # Check Data
                self.assertEquals(data,
                                  req_method.call_args_list[0][1]['json'])
                self.assertEquals(data,
                                  req_method.call_args_list[1][1]['json'])

                # Check response
                self.assertEquals(second_response, result)
Example #47
0
 def get(url):
     result = self._response
     if url == "http://producturl.com/":
         result = MagicMock()
         result.status_code = 404
     return result
Example #48
0
    def mocked_request_setup():
        r_return = MagicMock()
        r_return.status_code = 200
        r_return.content = {'dcos_token': 'foobar'}

        return r_return
Example #49
0
import sys

from mock import patch, MagicMock

from indicoio.utils import is_url

mock_response = MagicMock()
mock_response.headers = {'x-warning': 'testing warning'}
mock_response.status_code = 200
mock_response.json = MagicMock(return_value={'results': 0.5})


def test_is_urls():
    boring_image = [0] * (32**2)
    boring_images = [boring_image] * 100

    assert not is_url(boring_image, batch=False)
    assert not is_url(boring_images, batch=True)

    url = 'http://picturepicture.com/picture'
    urls = [url] * 100

    assert is_url(url, batch=False)
    assert is_url(urls, batch=True)


@patch('indicoio.utils.api.warnings.warn')
@patch('indicoio.utils.api.requests.post',
       MagicMock(return_value=mock_response))
def test_api_handler(mock_warn):
    from indicoio.utils.api import api_handler
Example #50
0
 def test_partial_content(self):
     response = MagicMock()
     response.status_code = 206
     actual = _translate_errors(lambda: response)
     self.assertTrue(response is actual)  # no assertIs until 2.7
Example #51
0
 def test_b2_error(self):
     response = MagicMock()
     response.status_code = 503
     response.content = b'{"status": 503, "code": "server_busy", "message": "busy"}'
     with self.assertRaises(ServiceError):
         _translate_errors(lambda: response)
Example #52
0
    def get_response(url, params=None, **kwargs):
        resp = MagicMock()
        parts = urlparse(url)
        url = parts[2]
        params = parts[4]

        resp.status_code = 404
        resp.ok = False

        if url == "/im/infrastructures":
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {
                "uri-list": [{
                    "uri":
                    "http://server.com/im/infrastructures/infid"
                }]
            }
        elif url == "/im/infrastructures/infid/state":
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {
                "state": {
                    "state": "configured",
                    "vm_states": {
                        "0": "configured"
                    }
                }
            }
        elif url == "/im/infrastructures/infid/vms/0":
            resp.ok = True
            resp.status_code = 200
            resp.text = ""
            radl = {
                "class": "system",
                "cpu.arch": "x86_64",
                "cpu.count_min": 1,
                "disk.0.image.url": "one://server.com/id",
                "disk.0.os.name": "linux",
                "id": "front",
                "state": "configured",
                "disk.0.os.credentials.username": "******",
                "disk.0.os.credentials.password": "******",
                "memory.size_min": 536870912,
                "net_interface.0.connection": "publica",
                "net_interface.0.ip": "10.10.10.10",
                "provider.type": "OpenNebula",
                "provider.host": "server.com"
            }
            resp.json.return_value = {"radl": [radl]}
        elif url == "/im/infrastructures/infid/vms/0/stop":
            resp.ok = True
            resp.status_code = 200
        elif url == "/im/infrastructures/infid/tosca":
            resp.ok = True
            resp.status_code = 200
            resp.text = "TOSCA"
        elif url == "/im/infrastructures/infid/contmsg":
            resp.ok = True
            resp.status_code = 200
            resp.text = "CONT_MSG"
        elif url == "/im/infrastructures/infid/vms/0/contmsg":
            resp.ok = True
            resp.status_code = 200
            resp.text = "VM_CONT_MSG"
        elif url == "/im/infrastructures/infid/outputs":
            resp.ok = True
            resp.status_code = 200
            resp.json.return_value = {
                "outputs": {
                    "key": "value",
                    "key2": "http://server.com"
                }
            }
        elif url == "/im/infrastructures/infid/radl":
            resp.ok = True
            resp.status_code = 200
            resp.text = "system wn ()\nsystem front ()"

        return resp
Example #53
0
    def get_response(self, method, url, verify, cert, headers, data):
        resp = MagicMock()
        parts = uriparse(url)
        url = parts[2]
        params = parts[4]

        if method not in self.call_count:
            self.call_count[method] = {}
        if url not in self.call_count[method]:
            self.call_count[method][url] = 0
        self.call_count[method][url] += 1

        if method == "GET":
            if url == "":
                resp.status_code = 300
                resp.json.return_value = {
                    "versions": {
                        "values": [{
                            "id": "v3.6"
                        }, {
                            "id": "v2.0"
                        }]
                    }
                }
            if url == "/-/":
                resp.status_code = 200
                resp.text = read_file_as_string("files/occi.txt")
            elif url == "/compute/1":
                resp.status_code = 200
                resp.text = read_file_as_string("files/occi_vm_info.txt")
            elif url.startswith("/storage"):
                resp.status_code = 200
                resp.text = 'X-OCCI-Attribute: occi.storage.state="online"'
            elif url == "/v2.0/tenants":
                resp.status_code = 200
                resp.json.return_value = {"tenants": [{"name": "tenantname"}]}
            elif url == "/v3/auth/projects":
                resp.status_code = 200
                resp.json.return_value = {
                    "projects": [{
                        "id": "projectid",
                        "name": "prname"
                    }]
                }
            elif url == "/v3/OS-FEDERATION/identity_providers/egi.eu/protocols/oidc/auth":
                resp.status_code = 200
                resp.headers = {'X-Subject-Token': 'token1'}
            elif url.endswith("/link/storagelink/compute_10_disk_1"):
                resp.status_code = 404
        elif method == "POST":
            if url == "/compute/":
                if self.return_error:
                    resp.status_code = 400
                    resp.reason = 'Error msg'
                    resp.text = ''
                else:
                    resp.status_code = 201
                    resp.text = 'https://server.com/compute/1'
            elif params == "action=suspend":
                resp.status_code = 204
            elif params == "action=start":
                resp.status_code = 200
            elif url == "/storagelink/":
                resp.status_code = 200
            elif url == "/storage/":
                resp.status_code = 201
                resp.text = 'https://server.com/storage/1'
            elif url == "/networkinterface/":
                resp.status_code = 201
            elif url == "/v2.0/tokens":
                if json.loads(data) == {"auth": {"voms": True}}:
                    resp.status_code = 200
                    resp.json.return_value = {
                        "access": {
                            "token": {
                                "id": "token1"
                            }
                        }
                    }
                elif json.loads(data) == {
                        "auth": {
                            "voms": True,
                            "tenantName": "tenantname"
                        }
                }:
                    resp.status_code = 200
                    resp.json.return_value = {
                        "access": {
                            "token": {
                                "id": "token2"
                            }
                        }
                    }
                else:
                    resp.status_code = 400
            elif url == "/v3/auth/tokens":
                if json.loads(data) == {
                        "auth": {
                            "scope": {
                                "project": {
                                    "id": "projectid"
                                }
                            },
                            "identity": {
                                "token": {
                                    "id": "token1"
                                },
                                "methods": ["token"]
                            }
                        }
                }:
                    resp.status_code = 200
                    resp.headers = {'X-Subject-Token': 'token3'}
                else:
                    resp.status_code = 400
        elif method == "DELETE":
            if url.endswith("/compute/1"):
                resp.status_code = 200
            elif url.endswith("/storage/1"):
                resp.status_code = 200
            elif url.endswith("/link/storagelink/compute_10_disk_1"):
                resp.status_code = 200
            elif url.endswith("/link/networkinterface/compute_10_nic_1"):
                resp.status_code = 200

        return resp
Example #54
0
    def get_response(self, method, url, verify, headers={}, data=None):
        resp = MagicMock()
        parts = urlparse(url)
        url = parts[2]
        params = parts[4]

        if method not in self.call_count:
            self.call_count[method] = {}
        if url not in self.call_count[method]:
            self.call_count[method][url] = 0
        self.call_count[method][url] += 1

        resp.status_code = 400

        if method == "GET":
            if url == "/computes/1":
                resp.status_code = 200
                resp.json.return_value = {
                    "disk": 0,
                    "hostName": "hostname",
                    "id": "1",
                    "ipAddresses": ["10.0.0.1"],
                    "memory": 1024,
                    "state": "READY",
                    "vCPU": 1
                }
            elif url == "/volumes/1":
                resp.status_code = 200
                resp.json.return_value = {
                    "id": "1",
                    "name": "volname",
                    "size": 1,
                    "state": "READY"
                }
            elif url == "/networks/status":
                resp.status_code = 200
                resp.json.return_value = [{
                    "instanceId": "1",
                    "instanceName": "netname",
                    "state": "READY"
                }]
            elif url == "/federatedNetworks/status":
                resp.status_code = 200
                resp.json.return_value = [{
                    "instanceId": "1",
                    "instanceName": "fednetname",
                    "state": "READY"
                }]
            elif url == "/federatedNetworks/1":
                resp.status_code = 200
                resp.json.return_value = {
                    "instanceId": "1",
                    "cidr": "10.0.1.0/24"
                }
            elif url == "/publicIps/status":
                resp.status_code = 200
                resp.json.return_value = [{
                    "instanceId": "1",
                    "instanceName": "ipname",
                    "state": "READY"
                }]
            elif url == "/publicIps/1":
                resp.status_code = 200
                resp.json.return_value = {
                    "id": "1",
                    "ip": "8.8.8.8",
                    "computeId": "1",
                    "state": "READY"
                }
            elif url == "/networks/1":
                resp.status_code = 200
                resp.json.return_value = {
                    "id": "1",
                    "name": "netname",
                    "cidr": "192.168.0.0/24",
                    "gateway": "192.168.0.1",
                    "allocation": "dynamic",
                    "state": "READY"
                }
            elif url == "/attachments/1":
                resp.status_code = 200
                resp.json.return_value = {
                    "id": "1",
                    "serverId": "1",
                    "volumeId": "1",
                    "device": "/dev/sdb",
                    "state": "READY"
                }
            elif url == "/publicKey/":
                resp.status_code = 200
                resp.json.return_value = {"publicKey": "publicKey"}
            elif url == "/publicIps/1/securityRules":
                resp.status_code = 200
                resp.json.return_value = []
            elif url == "/networks/1/securityRules":
                resp.status_code = 200
                resp.json.return_value = []
        elif method == "POST":
            if url == "/computes/":
                resp.status_code = 201
                resp.json.return_value = {"id": "1"}
            elif url == "/publicIps/":
                resp.status_code = 201
                resp.json.return_value = {"id": "1"}
            elif url == "/volumes/":
                resp.status_code = 201
                resp.json.return_value = {"id": "1"}
            elif url == "/attachments/":
                resp.status_code = 201
                resp.json.return_value = {"id": "1"}
            elif url == "/networks/":
                resp.status_code = 201
                resp.json.return_value = {"id": "1"}
            elif url == "server1.com/tokens/":
                resp.status_code = 201
                resp.json.return_value = {"token": "token"}
            elif url == "/federatedNetworks/":
                resp.status_code = 201
                resp.json.return_value = {"id": "1"}
            elif url == "/publicIps/1/securityRules":
                resp.status_code = 201
                resp.json.return_value = {"id": "1"}
            elif url == "/networks/1/securityRules":
                resp.status_code = 201
                resp.json.return_value = {"id": "1"}
        elif method == "DELETE":
            if url == "/computes/1":
                resp.status_code = 204
            elif url == "/volumes/1":
                resp.status_code = 204
            elif url == "/networks/1":
                resp.status_code = 204
            elif url == "/publicIps/1":
                resp.status_code = 204
            elif url == "/attachments/1":
                resp.status_code = 204
        elif method == "HEAD":
            if url == "/clouds/":
                resp.status_code = 200

        return resp
Example #55
0
    def test_check_oidc_invalid_token(self, request):
        im_auth = {"token": self.gen_token()}

        Config.OIDC_ISSUERS = ["https://iam-test.indigo-datacloud.eu/"]
        with self.assertRaises(Exception) as ex:
            IM.check_oidc_token(im_auth)
        self.assertEqual(
            str(ex.exception),
            'Invalid InfrastructureManager credentials. OIDC auth Token expired.'
        )

        im_auth_aud = {"token": self.gen_token(aud="test1,test2")}

        Config.OIDC_AUDIENCE = "test"
        with self.assertRaises(Exception) as ex:
            IM.check_oidc_token(im_auth_aud)
        self.assertEqual(
            str(ex.exception),
            'Invalid InfrastructureManager credentials. Audience not accepted.'
        )

        Config.OIDC_AUDIENCE = "test2"
        with self.assertRaises(Exception) as ex:
            IM.check_oidc_token(im_auth_aud)
        self.assertEqual(
            str(ex.exception),
            'Invalid InfrastructureManager credentials. OIDC auth Token expired.'
        )
        Config.OIDC_AUDIENCE = None

        Config.OIDC_SCOPES = ["scope1", "scope2"]
        Config.OIDC_CLIENT_ID = "client"
        Config.OIDC_CLIENT_SECRET = "secret"
        response = MagicMock()
        response.status_code = 200
        response.text = '{ "scope": "profile scope1" }'
        request.return_value = response
        with self.assertRaises(Exception) as ex:
            IM.check_oidc_token(im_auth_aud)
        self.assertEqual(
            str(ex.exception), 'Invalid InfrastructureManager credentials. '
            'Scopes scope1 scope2 not in introspection scopes: profile scope1')

        response.status_code = 200
        response.text = '{ "scope": "address profile scope1 scope2" }'
        request.return_value = response
        with self.assertRaises(Exception) as ex:
            IM.check_oidc_token(im_auth_aud)
        self.assertEqual(
            str(ex.exception), 'Invalid InfrastructureManager credentials. '
            'OIDC auth Token expired.')

        Config.OIDC_SCOPES = []
        Config.OIDC_CLIENT_ID = None
        Config.OIDC_CLIENT_SECRET = None

        Config.OIDC_ISSUERS = ["https://other_issuer"]

        with self.assertRaises(Exception) as ex:
            IM.check_oidc_token(im_auth)
        self.assertEqual(
            str(ex.exception),
            "Invalid InfrastructureManager credentials. Issuer not accepted.")