def test_get_legend_graphic(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request() request.params.update( dict(service="wms", version="1.1.1", request="getlegendgraphic", layer="testpoint_unprotected", srs="EPSG:21781", format="image/png", extraparam="with spéciàl chârs")) response = MapservProxy(request).proxy() self.assertTrue(response.cache_control.public) self.assertEqual(response.cache_control.max_age, 3600)
def test_wfs_get_capabilities(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_getcap_request() request.params.update( dict( service="wfs", version="1.1.1", request="getcapabilities", )) response = MapservProxy(request).proxy() assert "<Name>testpoint_protected</Name>" not in response.body.decode( "utf-8") request = self._create_getcap_request(username="******") request.params.update( dict( service="wfs", version="1.1.1", request="getcapabilities", )) response = MapservProxy(request).proxy() assert "<Name>testpoint_protected</Name>" in response.body.decode( "utf-8")
def _get_feature_is_not_equal_to(self, value): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request() request.headers["Content-Type"] = "application/xml; charset=UTF-8" request.method = "POST" request.body = (GETFEATURE_REQUEST % { "feature": "testpoint_unprotected", "function": "NotEqualTo", "arguments": "", "property": "name", "value": value, }).encode("utf-8") return MapservProxy(request).proxy()
def test_get_map_protected_layer_user2(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request(username="******") request.params.update(dict( service="wms", version="1.1.1", request="getmap", bbox="599820,199910,600180,200090", layers="testpoint_protected", width="600", height="400", srs="EPSG:21781", format="image/png" )) response = MapservProxy(request).proxy() self.assertEqual(str(response.cache_control), "max-age=0, must-revalidate, no-cache, no-store") # empty md5sum = hashlib.md5(response.body).hexdigest() self.assertIn(md5sum, NO_POINT)
def test_geoserver(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_getcap_request( username="******", additional_settings={ "mapserverproxy": { "default_ogc_server": "__test_ogc_server_geoserver", } }) request.params.update( dict( service="wms", version="1.1.1", request="getcapabilities", )) response = MapservProxy(request).proxy() assert "<Name>testpoint_protected</Name>" in response.body.decode( "utf-8")
def test_get_feature_external_wfs_url(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request() featureid = "{typename!s}.{fid1!s},{typename!s}.{fid2!s}".format( typename="testpoint_unprotected", fid1=self.id_lausanne, fid2=self.id_paris ) request.params.update(dict( service="wfs", version="1.0.0", request="getfeature", typename="testpoint_unprotected", featureid=featureid, callback="cb", EXTERNAL=1 )) response = MapservProxy(request).proxy() self.assertTrue(response.body != "") self.assertEqual(str(response.cache_control), "max-age=0, must-revalidate, no-cache, no-store")
def test_get_feature_feature_id_get(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request() featureid = "{typename!s}.{fid1!s},{typename!s}.{fid2!s}".format( typename="testpoint_unprotected", fid1=self.id_lausanne, fid2=self.id_paris) request.params.update( dict(service="wfs", version="1.0.0", request="getfeature", typename="testpoint_unprotected", featureid=featureid)) response = MapservProxy(request).proxy() assert "Lausanne" in response.body.decode("utf-8") assert "Paris" in response.body.decode("utf-8") assert "Londre" not in response.body.decode("utf-8") assert "Chambéry" not in response.body.decode("utf-8") self.assertEqual(response.content_type, "text/xml")
def test_get_map_protected_layer_collect_query_user3(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request(username="******") request.params.update( dict(service="wms", version="1.1.1", request="getmap", bbox="599820,199910,600180,200090", layers="testpoint_protected_query_with_collect", width="600", height="400", srs="EPSG:21781", format="image/png")) response = MapservProxy(request).proxy() self.assertTrue(response.status_int, 200) self.assertEqual(str(response.cache_control), "max-age=0, no-cache") # two points md5sum = hashlib.md5(response.body).hexdigest() self.assertIn(md5sum, TWO_POINTS)
def _wms_get_capabilities(ogcserver, service="wms", username=None): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = create_dummy_request( { "admin_interface": { "available_functionalities": [ "mapserver_substitution", "print_template", ] }, "servers": { "srv": "http://example.com" } }, user=username) request.params.update( dict(service=service, version="1.1.1", request="getcapabilities", ogcserver=ogcserver)) return MapservProxy(request).proxy()
def test_getlegendgraphic_custom_nocache(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request() request.registry.settings.update({ "headers": { "mapserver": { "cache_control_max_age": 0, "access_control_allow_origin": "*" } } }) request.params.update( dict(service="wms", version="1.1.1", request="getlegendgraphic", layer="testpoint_unprotected", srs="EPSG:21781", format="image/png", extraparam="with spéciàl chârs")) response = MapservProxy(request).proxy() self.assertTrue(response.cache_control.public) self.assertTrue(response.cache_control.no_cache)
def test_substitution(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request() request.method = "POST" request.headers["Content-Type"] = "application/xml; charset=UTF-8" request.body = SUBSTITUTION_GETFEATURE_REQUEST response = MapservProxy(request).proxy() self.assertTrue(response.status_int, 200) assert "foo" in response.body.decode("utf-8") assert "bar" not in response.body.decode("utf-8") assert "éàè" not in response.body.decode("utf-8") assert "123" not in response.body.decode("utf-8") request.params.update(dict(s_name="bar")) response = MapservProxy(request).proxy() self.assertTrue(response.status_int, 200) assert "foo" in response.body.decode("utf-8") assert "bar" not in response.body.decode("utf-8") assert "éàè" not in response.body.decode("utf-8") assert "123" not in response.body.decode("utf-8") request = self._create_dummy_request() request.method = "POST" request.body = SUBSTITUTION_GETFEATURE_REQUEST request.params.update(dict(S_NAME="bar")) response = MapservProxy(request).proxy() self.assertTrue(response.status_int, 200) assert "foo" in response.body.decode("utf-8") assert "bar" not in response.body.decode("utf-8") assert "éàè" not in response.body.decode("utf-8") assert "123" not in response.body.decode("utf-8") request = self._create_dummy_request() request.method = "POST" request.body = SUBSTITUTION_GETFEATURE_REQUEST request.registry.settings["functionalities"]["anonymous"] = { "mapserver_substitution": ["name=bar"] } response = MapservProxy(request).proxy() self.assertTrue(response.status_int, 200) assert "foo" not in response.body.decode("utf-8") assert "bar" in response.body.decode("utf-8") assert "éàè" not in response.body.decode("utf-8") assert "123" not in response.body.decode("utf-8") request.body = COLUMN_RESTRICTION_GETFEATURE_REQUEST request.registry.settings["functionalities"]["anonymous"] = { "mapserver_substitution": ["cols=name", "cols=city", "cols=country"] } response = MapservProxy(request).proxy() self.assertTrue(response.status_int, 200) assert "Lausanne" in response.body.decode("utf-8") assert "Swiss" in response.body.decode("utf-8") request.registry.settings["functionalities"]["anonymous"] = { "mapserver_substitution": ["cols=name", "cols=city"] } response = MapservProxy(request).proxy() self.assertTrue(response.status_int, 200) assert "Lausanne" in response.body.decode("utf-8") assert "Swiss" not in response.body.decode("utf-8") request.registry.settings["functionalities"]["anonymous"] = { "mapserver_substitution": ["cols=name", "cols=country"] } response = MapservProxy(request).proxy() self.assertTrue(response.status_int, 200) assert "Lausanne" not in response.body.decode("utf-8") assert "Swiss" in response.body.decode("utf-8") request.registry.settings["functionalities"]["anonymous"] = { "mapserver_substitution": ["cols=name"] } response = MapservProxy(request).proxy() self.assertTrue(response.status_int, 200) assert "Lausanne" not in response.body.decode("utf-8") assert "Swiss" not in response.body.decode("utf-8") request = self._create_dummy_request() request.registry.settings["admin_interface"] = { "available_functionalities": [{ "name": "mapserver_substitution" }] } request.method = "POST" request.body = SUBSTITUTION_GETFEATURE_REQUEST request.registry.settings["functionalities"]["anonymous"] = { "mapserver_substitution": ["foo_bar"] } request.params.update( dict(s_test1="to be removed", S_TEST2="to be removed")) # just pass in the log message response = MapservProxy(request).proxy()
def test_no_params(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request() response = MapservProxy(request).proxy() self.assertEqual(response.status_code, 200)
def test_get_feature_info(self): from c2cgeoportal_geoportal.views.mapserverproxy import MapservProxy request = self._create_dummy_request() request.params.update( dict( service="wms", version="1.1.1", request="getfeatureinfo", bbox="599910,199955,600090,200000", layers="testpoint_unprotected", query_layers="testpoint_unprotected", srs="EPSG:21781", format="image/png", info_format="application/vnd.ogc.gml", width="600", height="400", x="0", y="400", )) response = MapservProxy(request).proxy() expected_response = """ <?xmlversion="1.0"encoding="UTF-8"?> <msGMLOutput xmlns:gml="http://www.opengis.net/gml" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> <testpoint_unprotected_layer> <gml:name>countries</gml:name> <testpoint_unprotected_feature> <gml:boundedBy> <gml:Box srsName="EPSG:21781"> <gml:coordinates>599910.000000,199955.000000 599910.000000,199955.000000</gml:coordinates> </gml:Box> </gml:boundedBy> <geom> <gml:Point srsName="EPSG:21781"> <gml:coordinates>599910.000000,199955.000000</gml:coordinates> </gml:Point> </geom> <name>foo</name> <city>Lausanne</city> <country>Swiss</country> </testpoint_unprotected_feature> </testpoint_unprotected_layer> </msGMLOutput> """ import re pattern = re.compile(r"\s+") expected_response = "".join( re.sub(pattern, "", l) for l in expected_response.splitlines()) response_body = "".join( re.sub(pattern, "", l) for l in response.body.decode( "utf-8").splitlines()).encode("utf-8") self.assertEqual(response_body.decode("utf-8"), expected_response) self.assertTrue(response.cache_control.public) self.assertEqual(response.cache_control.max_age, 10) self.assertEqual( str(response.cache_control), "max-age=10, must-revalidate, no-cache, no-store, public")