Commit be443444 authored by Jérome Perrin's avatar Jérome Perrin

testXHTML: retry on ConnectionError as well

Such errors are not retried with the retry adapter, so retry them
directly.
parent a094a992
...@@ -30,6 +30,8 @@ ...@@ -30,6 +30,8 @@
import cgi import cgi
import unittest import unittest
import os import os
import logging
import time
import requests import requests
from requests.adapters import HTTPAdapter from requests.adapters import HTTPAdapter
from requests.packages.urllib3.util.retry import Retry from requests.packages.urllib3.util.retry import Retry
...@@ -40,7 +42,6 @@ from Testing import ZopeTestCase ...@@ -40,7 +42,6 @@ from Testing import ZopeTestCase
from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase from Products.ERP5Type.tests.ERP5TypeTestCase import ERP5TypeTestCase
from Products.ERP5Type.tests.utils import addUserToDeveloperRole, findContentChain from Products.ERP5Type.tests.utils import addUserToDeveloperRole, findContentChain
from Products.CMFCore.utils import getToolByName from Products.CMFCore.utils import getToolByName
from zLOG import LOG
# You can invoke same tests in your favourite collection of business templates # You can invoke same tests in your favourite collection of business templates
# by using TestXHTMLMixin like the following : # by using TestXHTMLMixin like the following :
# #
...@@ -461,6 +462,7 @@ class NuValidator(object): ...@@ -461,6 +462,7 @@ class NuValidator(object):
self.name = 'nu' self.name = 'nu'
self.validator_url = validator_url self.validator_url = validator_url
self.validator_session = requests.Session() self.validator_session = requests.Session()
self.logger = logging.getLogger('NuValidator')
# retries HTTP 502 errors which sometimes happen with validator.erp5.net # retries HTTP 502 errors which sometimes happen with validator.erp5.net
self.validator_session.mount( self.validator_session.mount(
self.validator_url, self.validator_url,
...@@ -507,14 +509,23 @@ class NuValidator(object): ...@@ -507,14 +509,23 @@ class NuValidator(object):
def getErrorAndWarningList(self, page_source): def getErrorAndWarningList(self, page_source):
''' '''
retrun two list : a list of errors and an other for warnings returns two list : a list of errors and an other for warnings
''' '''
response = self.validator_session.post(self.validator_url, for retry in range(3):
try:
response = self.validator_session.post(self.validator_url,
data=page_source.encode('UTF-8'), data=page_source.encode('UTF-8'),
params={'out': 'json'}, params={'out': 'json'},
headers={ headers={
'Content-Type': 'text/html; charset=UTF-8' 'Content-Type': 'text/html; charset=UTF-8'
}) })
except requests.exceptions.ConnectionError:
if retry == 2:
raise
self.logger.exception('Got ConnectionError, retrying')
time.sleep(1)
else:
break
return self._parse_validation_results(response) return self._parse_validation_results(response)
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment