Beispiel #1
0
 def test_put_err(self, mock_put):
     service_address = settings.SERVICE_ADDRESS
     try:
         rest_client.put(service_address=service_address, api_path=API_PATH, data=DATA)
     except Exception as ex:
         message = ex.__str__()
         self.assertEqual(message, 'rest_client error, service_name:sparrow_cloud, protocol:http, method:put, '
                                   'request_service_address:sparrow-test-svc:8000, api_path:/api/xxx/, message:')
Beispiel #2
0
 def process_request(self, request):
     # key = request.headers.get("Sc-Lock")
     key = request.META.get("HTTP_SC_LOCK")
     # key不存在或者值为空,跳过锁检查,放行
     if not key:
         return
     try:
         response = rest_client.put(SC_SPARROW_DISTRIBUTED_LOCK_SVC,
                                    SC_SPARROW_DISTRIBUTED_LOCK_FRONT_API,
                                    json={
                                        "key": key,
                                        "opt": "incr"
                                    })
         res = response.get("code")
         # 只有当锁存在且其值为0(表示锁未被使用)时,code才会返回0
         if res == 0:
             return
         else:  # 锁不存在(被删除或者超时过期)或者其值不为0(表示已经使用)时,禁止本次操作。返回状态码不用403是为了防止前端由于4xx状态而弹出通知,静默防重复提交。
             return JsonResponse({
                 "message": "重复提交,本次操作被禁止",
                 "code": 233402
             },
                                 status=200)
     except Exception as e:
         # 发生异常时,直接放行
         logger.info(
             "check front lock failed in lock middleware, message: {}".
             format(e.__str__()))
         return
 def test_put(self, acl_token, mock_put, mock_service):
     api_path = "/api/xxx/"
     data = {
         "key": "value",
     }
     from django.conf import settings
     settings.CONSUL_CLIENT_ADDR = {"HOST": "127.0.0.1", "PORT": 8500}
     settings.SERVICE_CONF = SERVICE_CONF
     try:
         rest_client.put(SERVICE_CONF, api_path, data=data)
     except Exception as ex:
         message = ex.__str__()
         self.assertEqual(
             message, 'rest_client error, service_name: , '
             'request_service:sprrow-permission-svc, api_path:/api/xxx/, message: '
         )
Beispiel #4
0
 def test_put(self, mock_put, mock_service):
     api_path = "/api/xxx/"
     data = {
         "key": "value",
     }
     from django.conf import settings
     settings.CONSUL_CLIENT_ADDR = {"HOST": "127.0.0.1", "PORT": 8500}
     settings.SERVICE_CONF = SERVICE_CONF
     res = rest_client.put(SERVICE_CONF, api_path, data=data)
     self.assertEqual(res, {'key1': 'value1'})
Beispiel #5
0
 def process_response(self, request, response):
     key = request.META.get("HTTP_SC_LOCK")
     if not key:
         return response
     try:
         # 业务处理正常,更新锁中的key为完成
         if response.status_code >= 200 and response.status_code < 300:
             rest_client.patch(SC_SPARROW_DISTRIBUTED_LOCK_SVC,
                               SC_SPARROW_DISTRIBUTED_LOCK_FRONT_API,
                               json={"key": key})
         else:  #业务失败,重置锁,可以进行下一次请求
             rest_client.put(SC_SPARROW_DISTRIBUTED_LOCK_SVC,
                             SC_SPARROW_DISTRIBUTED_LOCK_FRONT_API,
                             json={
                                 "key": key,
                                 "opt": "reset"
                             })
         return response
     except Exception as e:
         logger.info(
             "update front lock failed in lock middleware response, message: {}"
             .format(e.__str__()))
         return response
Beispiel #6
0
 def test_put(self, mock_put):
     service_address = settings.SERVICE_ADDRESS
     res = rest_client.put(service_address=service_address, api_path=API_PATH, data=DATA)
     self.assertEqual(res, {'key1': 'value1'})