Sfoglia il codice sorgente

more elaborated tests

Jachym Cepicky 14 anni fa
parent
commit
12b2cc5621
6 ha cambiato i file con 79 aggiunte e 63 eliminazioni
  1. 11 7
      OWS.py
  2. 11 8
      tests/mapfiles/ows.map
  3. 29 4
      tests/test_ows.py
  4. 6 18
      tests/test_wcs.py
  5. 19 23
      tests/test_wfs.py
  6. 3 3
      wfs/__init__.py

+ 11 - 7
OWS.py

@@ -25,6 +25,7 @@ class OWS:
     config = None
     parsedUrl = None
     service = None
+    mapfilename = None
 
     def __init__(self,url=None,qstring=None,configFile=None):
         self.requestUrl = url
@@ -68,7 +69,7 @@ class OWS:
                                     self.parsedUrl[1],
                                     self.parsedUrl[2],
                                     self.parsedUrl[3],
-                                    urllib.urlencode(params),
+                                    urllib.unquote(urllib.urlencode(params,True)),
                                     self.parsedUrl[5]))
         e = objectify.parse(urllib.urlopen(url))
         self.capabilities = e.getroot()
@@ -97,7 +98,7 @@ class OWS:
                                         self.parsedUrl[1],
                                         self.parsedUrl[2],
                                         self.parsedUrl[3],
-                                        urllib.urlencode(params),
+                                        urllib.urlencode(params,True),
                                         self.parsedUrl[5]))
 
     def getParams(self):
@@ -111,7 +112,7 @@ class OWS:
         params["map"] = self.getMapfileLocation(mapfilename)
 
 
-        location = urlparse.urlunparse((o[0],o[1],o[2],o[3],urllib.urlencode(params),o[5]))
+        location = urlparse.urlunparse((o[0],o[1],o[2],o[3],urllib.urlencode(params,True),o[5]))
         logging.debug("Setting OnlineResource to %s"% location)
         return location
 
@@ -195,16 +196,18 @@ class OWS:
 
     def saveMapfile(self,mapobj,mapfilename):
 
-        mapfilename = self.getMapfileLocation(mapfilename)
-        if mapfilename:
+        self.mapfilename = self.getMapfileLocation(mapfilename)
+        if self.mapfilename:
 
             # save mapfile ONLY if GetCapabilities requested - it makes no
             # sense for other cases
-            logging.info("Saving mapfile to %s" %  mapfilename)
-            mapobj.save(mapfilename)
+            logging.info("Saving mapfile to %s" %  self.mapfilename)
+            mapobj.save(self.mapfilename)
         else:
             logging.info("Mapfile NOT saved")
 
+        return self.mapfilename
+
     def getLayerUrl(self):
 
         layerurl = self.url
@@ -234,6 +237,7 @@ def getService():
 
     qstring = os.environ["QUERY_STRING"]
     params = urlparse.parse_qs(qstring)
+
     
     owsUrl = urllib.unquote(params["owsUrl"][0])
 

+ 11 - 8
tests/mapfiles/ows.map

@@ -5,15 +5,17 @@ SIZE 250 250
 EXTENT -180 -90 180 90
 SHAPEPATH "./"
 IMAGECOLOR 255 255 255
+CONFIG "MS_ERRORFILE" "stderr"
+DEBUG 5
 
 WEB
   IMAGEPATH "tmp/" 
   IMAGEURL "/tmp/"
   METADATA
     "wfs_title"            "OWS Server"  ## REQUIRED
-    "wcs_srs"               "EPSG:4326 EPSG:102067"  ## Recommended
     "ows_enable_request" "*"
     "ows_updatesequence" "2011-29-05T00:24:00"
+    "ows_srs"               "EPSG:4326 EPSG:3035"  ## Recommended
     "ows_abstract"      "OWS Server for OWSProxy testing purposes"
   END
 END
@@ -25,18 +27,19 @@ END
 LAYER
   NAME "line"
   METADATA
-    "wfs_title"    "Line" ## REQUIRED
-    "gml_featureid" "cat" ## REQUIRED
-    "gml_include_items" "all"  ## Optional (serves all attributes for layer)
+    "wfs_title"             "Line" ##REQUIRED
+    "wfs_srs"               "EPSG:4326" ## REQUIRED
+    "gml_include_items"     "all" ## Optional (serves all attributes for layer)
+    #"ows_feature_id"         "gml_id" ## REQUIRED
   END
   TYPE LINE
   STATUS ON
   CONNECTIONTYPE OGR
-  CONNECTION "line.xml"
+  CONNECTION "linie.gml"
   PROJECTION
     "init=epsg:4326"
   END
-  EXTENT -103.8706 44.370035 -103.86814 44.37294
+  EXTENT 13.250490 48.958980 16.590330 50.409180
   DUMP TRUE           ## REQUIRED
   CLASS
     NAME "Linie"
@@ -51,9 +54,9 @@ END # Layer
 LAYER
     NAME "dem"
     TYPE RASTER
-    DATA "dem_cr-jtsk.tif"
+    DATA "dem.tif"
     PROJECTION
-        "init=epsg:102067"
+        "init=epsg:4326"
     END
     STATUS ON
     DEBUG ON

+ 29 - 4
tests/test_ows.py

@@ -1,6 +1,9 @@
 #!/usr/bin/env python
 # coding=utf-8
 
+# 
+#
+
 import unittest
 import logging
 import os,sys
@@ -11,19 +14,41 @@ import urlparse
 OWSVIEWER_DIR=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
 sys.path.append(OWSVIEWER_DIR)
 
+from OWS import *
+
 class TestOWS(unittest.TestCase):
+    """Base class for OWS services (WFS, WCS)
+    """
 
     owsUrl = None
+    config = None
+    service = None
+
 
     def setUp(self):
+
+        # set logging
         logging.basicConfig(level=logging.DEBUG)
+        
+        # mapfile for original services
         mapfile = os.path.join(OWSVIEWER_DIR,"tests","mapfiles","ows.map")
-        config = ConfigParser()
-        config.read(os.path.join(OWSVIEWER_DIR,"tests","test.cfg"))
+        self.config = ConfigParser.ConfigParser()
+        self.config.read(os.path.join(OWSVIEWER_DIR,"tests","test.cfg"))
+        self.owsUrl = self._getURLWithMap(mapfile)
+
+        os.environ.update({"QUERY_STRING":
+                "owsService=%s&owsUrl=%s"%(self.service,urllib.quote(self.owsUrl))})
+
+        self.service = getService()
+
+
+    def _getURLWithMap(self,mapfile):
 
-        owsUrl = urlparse.urlparse(config.get("OWSServer","owsserver"))
+        # create URL which will produce WCS and WFS services for testing
+        # purposes
+        owsUrl = urlparse.urlparse(self.config.get("OWSServer","owsserver"))
         owsParams = urlparse.parse_qs(owsUrl[4])
         owsParams["map"] = mapfile
 
-        self.owsUrl = urlparse.urlunparse((owsUrl[0],owsUrl[1],owsUrl[2], owsUrl[3],
+        return urlparse.urlunparse((owsUrl[0],owsUrl[1],owsUrl[2], owsUrl[3],
                                      urllib.unquote(urllib.urlencode(owsParams,True)),owsUrl[5]))

+ 6 - 18
tests/test_wcs.py

@@ -2,36 +2,24 @@
 # coding=utf-8
 
 import unittest
-import logging
-import os,sys
-
-OWSVIEWER_DIR=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
-
-sys.path.append(OWSVIEWER_DIR)
+from test_ows import TestOWS
 
 from OWS import *
 import wcs
 
-import mapscript
-
-class TestBasicOWS(unittest.TestCase):
+class TestWCS(TestOWS):
 
     config = None
-
-    def setUp(self):
-        logging.basicConfig(level=logging.DEBUG)
+    service = "WCS"
 
     def test_getservice(self):
-        os.environ.update({"QUERY_STRING":
-                "owsService=WCS&owsUrl=http%3A//localhost/cgi-bin/wcs&request=GetCapabilities&service=wms"})
 
-        mywcs = getService()
-        self.assertTrue(isinstance(mywcs, wcs.WCS))
+        self.assertTrue(isinstance(self.service, wcs.WCS))
         
-        mapObj = mywcs.makeMap()
+        mapObj = self.service.makeMap()
 
         self.assertTrue(isinstance(mapObj, mapscript.mapObj))
-        self.assertEquals(mapObj.numlayers,2)
+        self.assertEquals(mapObj.numlayers,1)
 
 if __name__ == "__main__":
     unittest.main()

+ 19 - 23
tests/test_wfs.py

@@ -1,39 +1,35 @@
 #!/usr/bin/env python
 # coding=utf-8
 
-import unittest
-import os,sys
-import logging
-
-OWSVIEWER_DIR=os.path.abspath(os.path.join(os.path.dirname(__file__),".."))
-
-sys.path.append(OWSVIEWER_DIR)
+import os
+from test_ows import TestOWS
 
-print OWSVIEWER_DIR
-from OWS import *
 import wfs
+import unittest
+import urllib
+import mapscript
+from lxml import objectify
 
-class TestBasicOWS(unittest.TestCase):
-
-    config = None
-    newwfs = None
+class TestWFS(TestOWS):
 
-    def setUp(self):
-        logging.basicConfig(level=logging.DEBUG)
+    service = "WFS"
 
-    def test_getcapabilities(self):
-        os.environ.update({"QUERY_STRING":
-                "owsService=WFS&owsUrl=http%3A//bnhelp.cz/ows/crwfs&request=GetCapabilities&service=wms"})
+    def test_getmapobj(self):
 
-        mywfs = getService()
-        self.assertTrue(isinstance(mywfs, wfs.WFS))
+        self.assertTrue(isinstance(self.service, wfs.WFS))
         
-        mapObj = mywfs.makeMap()
+        mapObj = self.service.makeMap()
 
         self.assertTrue(isinstance(mapObj, mapscript.mapObj))
-        self.assertEquals(mapObj.numlayers,8)
+        self.assertEquals(mapObj.numlayers,1)
+        
+        layer = mapObj.getLayer(0)
+        self.assertEquals(layer.type,mapscript.MS_LAYER_LINE)
 
-        pass
+        # download the WMS Capabilities
+        capabilities = objectify.parse(urllib.urlopen(self._getURLWithMap(self.service.mapfilename)))
+        capabilities = capabilities.getroot()
+        print self._getURLWithMap(self.service.mapfilename)
 
 if __name__ == "__main__":
     unittest.main()

+ 3 - 3
wfs/__init__.py

@@ -30,11 +30,11 @@ class WFS(OWS):
 
         for layer in self.capabilities.FeatureTypeList.getchildren():
             if layer.tag != "{http://www.opengis.net/wfs}FeatureType":
-                    continue
+                continue
 
             name = layer.Name.text
             logging.debug("Creating layer %s" % name)
-            
+
             lyrobj = mapscript.layerObj(mapobj)
             lyrobj.name = name
             lyrobj.title = layer.Title.text
@@ -73,7 +73,7 @@ class WFS(OWS):
                 logging.debug("No ogrDataSource found")
                 continue
 
-            lyrobj.setProjection(layer.SRS.text)
+            lyrobj.setProjection(layer.DefaultSRS.text)
             lyrobj.dump = mapscript.MS_TRUE 
             lyrobj.template = "foo"
             cls = mapscript.classObj(lyrobj)