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:')
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: ' )
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'})
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
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'})