Пример #1
0
    def test_ul_answer_s6a_error(self):
        """
        Test that gRPC UpdateLocation response with S6a error triggers Diameter ULA error response
        """
        state_id = 1
        user_name = '1'
        visited_plmn_id = b'(Y'
        ulr_flags = 1 << 2 | 1 << 5
        req = self._update_location_req(user_name, visited_plmn_id, ulr_flags)

        # Encode request message into buffer
        req_buf = bytearray(req.length)
        req.encode(req_buf, 0)

        result_info = avp.AVP('Experimental-Result', [
            avp.AVP('Vendor-Id', 10415),
            avp.AVP('Experimental-Result-Code',
                    avp.ResultCode.DIAMETER_ERROR_USER_UNKNOWN)
        ])
        resp = self._server._s6a_manager._gen_response(
            state_id, req, avp.ResultCode.DIAMETER_ERROR_USER_UNKNOWN,
            [result_info])
        resp_buf = bytearray(resp.length)
        resp.encode(resp_buf, 0)

        result = UpdateLocationAnswer(
            error_code=ErrorCode.Value('USER_UNKNOWN'), )
        result_future = unittest.mock.Mock()
        result_future.exception.side_effect = [None]
        result_future.result.side_effect = [result]

        self._server._s6a_manager._relay_update_location_answer(
            state_id, req, result_future, 0)
        self._writes.assert_called_once_with(resp_buf)
        self._writes.reset_mock()
Пример #2
0
    def test_auth_answer_s6a_error(self):
        """
        Tests that we convert gRPC AuthenticationInformation with non-zero ErrorCode to Diameter AIA with error response
        """
        state_id = 1
        user_name = '1'
        visited_plmn_id = b'(Y'
        num_request_vectors = 1
        immediate_response_preferred = True
        resync_info = b'123456789'

        result_info = avp.AVP('Experimental-Result', [
            avp.AVP('Vendor-Id', 10415),
            avp.AVP('Experimental-Result-Code',
                    avp.ResultCode.DIAMETER_ERROR_USER_UNKNOWN)
        ])
        req = self._auth_req(user_name, visited_plmn_id, num_request_vectors,
                             immediate_response_preferred, resync_info)
        resp = self._server._s6a_manager._gen_response(
            state_id, req, avp.ResultCode.DIAMETER_ERROR_USER_UNKNOWN,
            [result_info])
        resp_buf = bytearray(resp.length)
        resp.encode(resp_buf, 0)

        result = AuthenticationInformationAnswer(
            error_code=ErrorCode.Value('USER_UNKNOWN'), )
        result_future = unittest.mock.Mock()
        result_future.exception.side_effect = [None]
        result_future.result.side_effect = [result]

        self._server._s6a_manager._relay_auth_answer(state_id, req,
                                                     result_future, 0)
        self._writes.assert_called_once_with(resp_buf)
        self._writes.reset_mock()