use built in HTMLParser instead of lxml

The last use of lxml beyond the xml clients was the dashboard
test. Instead of using lxml we should be able to do this with built in
HTMLParser.

Change-Id: I933503a207664db720a277de6bfc68f0e1387edc
This commit is contained in:
Sean Dague
2014-11-25 10:54:38 -05:00
parent f393d58a85
commit 8fa6c03bf2
2 changed files with 29 additions and 9 deletions

View File

@@ -6,7 +6,6 @@ anyjson>=0.3.3
httplib2>=0.7.5
jsonschema>=2.0.0,<3.0.0
testtools>=0.9.36,!=1.2.0
lxml>=2.3
boto>=2.32.1
paramiko>=1.13.0
netaddr>=0.7.12

View File

@@ -12,11 +12,10 @@
# License for the specific language governing permissions and limitations
# under the License.
import HTMLParser
import urllib
import urllib2
from lxml import html
from tempest import config
from tempest.scenario import manager
from tempest import test
@@ -24,6 +23,30 @@ from tempest import test
CONF = config.CONF
class HorizonHTMLParser(HTMLParser.HTMLParser):
csrf_token = None
region = None
def _find_name(self, attrs, name):
for attrpair in attrs:
if attrpair[0] == 'name' and attrpair[1] == name:
return True
return False
def _find_value(self, attrs):
for attrpair in attrs:
if attrpair[0] == 'value':
return attrpair[1]
return None
def handle_starttag(self, tag, attrs):
if tag == 'input':
if self._find_name(attrs, 'csrfmiddlewaretoken'):
self.csrf_token = self._find_value(attrs)
if self._find_name(attrs, 'region'):
self.region = self._find_value(attrs)
class TestDashboardBasicOps(manager.ScenarioTest):
"""
@@ -49,10 +72,8 @@ class TestDashboardBasicOps(manager.ScenarioTest):
response = self.opener.open(CONF.dashboard.dashboard_url).read()
# Grab the CSRF token and default region
csrf_token = html.fromstring(response).xpath(
'//input[@name="csrfmiddlewaretoken"]/@value')[0]
region = html.fromstring(response).xpath(
'//input[@name="region"]/@value')[0]
parser = HorizonHTMLParser()
parser.feed(response)
# Prepare login form request
req = urllib2.Request(CONF.dashboard.login_url)
@@ -60,8 +81,8 @@ class TestDashboardBasicOps(manager.ScenarioTest):
req.add_header('Referer', CONF.dashboard.dashboard_url)
params = {'username': CONF.identity.username,
'password': CONF.identity.password,
'region': region,
'csrfmiddlewaretoken': csrf_token}
'region': parser.region,
'csrfmiddlewaretoken': parser.csrf_token}
self.opener.open(req, urllib.urlencode(params))
def check_home_page(self):