test_ows.py 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  1. #!/usr/bin/env python
  2. # coding=utf-8
  3. #
  4. #
  5. import unittest
  6. import logging
  7. import os,sys
  8. from ConfigParser import ConfigParser
  9. import urllib
  10. import urlparse
  11. from owslib import crs
  12. OWSVIEWER_DIR=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
  13. sys.path.append(OWSVIEWER_DIR)
  14. from OWS import *
  15. class TestOWS(unittest.TestCase):
  16. """Base class for OWS services (WFS, WCS)
  17. """
  18. owsUrl = None
  19. config = None
  20. service = None
  21. def setUp(self):
  22. # set logging
  23. logging.basicConfig(level=logging.DEBUG)
  24. # mapfile for original services
  25. mapfile = os.path.join(OWSVIEWER_DIR,"tests","mapfiles","ows.map")
  26. self.config = ConfigParser.ConfigParser()
  27. self.config.read(os.path.join(OWSVIEWER_DIR,"tests","test.cfg"))
  28. self.owsUrl = self._getURLWithMap(mapfile)
  29. os.environ.update({"QUERY_STRING":
  30. "owsService=%s&owsUrl=%s"%(self.service,urllib.quote(self.owsUrl))})
  31. self.service = getService()
  32. def test_bbox(self):
  33. """test if corect bounding box for layer will be used"""
  34. initExtent = [15, 50, 16, 51]
  35. class ContentsMetadata:
  36. boundingBoxWGS84 = initExtent
  37. id = "Temporary test layer"
  38. wcsLayer = ContentsMetadata()
  39. ows = OWS()
  40. extent = ows.getLayerExtent(wcsLayer,crs.Crs("EPSG:4326"))
  41. self.assertAlmostEqual(extent[0], initExtent[0])
  42. self.assertAlmostEqual(extent[1], initExtent[1])
  43. self.assertAlmostEqual(extent[2], initExtent[2])
  44. self.assertAlmostEqual(extent[3], initExtent[3])
  45. extent = ows.getLayerExtent(wcsLayer,crs.Crs("EPSG:32633"))
  46. self.assertAlmostEqual(extent[0], 500000.00, 0)
  47. self.assertAlmostEqual(extent[1], 5538630.70, 0)
  48. self.assertAlmostEqual(extent[2], 570168.86, 0)
  49. self.assertAlmostEqual(extent[3], 5650300.79, 0)
  50. def _getURLWithMap(self,mapfile):
  51. # create URL which will produce WCS and WFS services for testing
  52. # purposes
  53. owsUrl = urlparse.urlparse(self.config.get("OWSServer","owsserver"))
  54. owsParams = urlparse.parse_qs(owsUrl[4])
  55. owsParams["map"] = mapfile
  56. return urlparse.urlunparse((owsUrl[0],owsUrl[1],owsUrl[2], owsUrl[3],
  57. urllib.unquote(urllib.urlencode(owsParams,True)),owsUrl[5]))
  58. def _getWMSCapabilities(self):
  59. # download the WMS Capabilities
  60. url = self._getURLWithMap(self.service.mapfilename)
  61. url = urlparse.urlparse(url)
  62. params = urlparse.parse_qs(url[4])
  63. params["REQUEST"] = "GetCapabilities"
  64. params["SERVICE"] = "WMS"
  65. params = urllib.unquote(urllib.urlencode(params,True))
  66. attrs = (url[0],url[1],url[2],url[3],params,url[5])
  67. logging.debug("GetCapabilities URL: " + urlparse.urlunparse(attrs))
  68. resp = objectify.parse(urllib.urlopen(urlparse.urlunparse(attrs)))
  69. return resp.getroot()