def test_unpublished(self): """Test permissions on an unpublished layer """ thefile = os.path.join( gisdata.VECTOR_DATA, 'san_andres_y_providencia_poi.shp') layer = file_upload(thefile, overwrite=True) check_layer(layer) # we need some time to have the service up and running time.sleep(20) # request getCapabilities: layer must be there as it is published and # advertised: we need to check if in response there is # <Name>geonode:san_andres_y_providencia_water</Name> url = 'http://localhost:8080/geoserver/ows?' \ 'service=wms&version=1.3.0&request=GetCapabilities' str_to_check = '<Name>geonode:san_andres_y_providencia_poi</Name>' request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue(any(str_to_check in s for s in response.readlines())) # now test with unpublished layer resource = layer.get_self_resource() resource.is_published = False resource.save() request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertFalse(any(str_to_check in s for s in response.readlines())) # Clean up and completely delete the layer layer.delete()
def test_unpublished(self): """Test permissions on an unpublished layer """ thefile = os.path.join(gisdata.VECTOR_DATA, "san_andres_y_providencia_poi.shp") layer = file_upload(thefile, overwrite=True) layer.set_default_permissions() check_layer(layer) # we need some time to have the service up and running time.sleep(20) # request getCapabilities: layer must be there as it is published and # advertised: we need to check if in response there is # <Name>geonode:san_andres_y_providencia_water</Name> url = "http://localhost:8080/geoserver/ows?" "service=wms&version=1.3.0&request=GetCapabilities" str_to_check = "<Name>geonode:san_andres_y_providencia_poi</Name>" request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue(any(str_to_check in s for s in response.readlines())) # by default the uploaded layer is self.assertTrue(layer.is_published, True) # Clean up and completely delete the layer layer.delete() # with settings disabled with self.settings(RESOURCE_PUBLISHING=True): thefile = os.path.join(gisdata.VECTOR_DATA, "san_andres_y_providencia_administrative.shp") layer = file_upload(thefile, overwrite=True) layer.set_default_permissions() check_layer(layer) # we need some time to have the service up and running time.sleep(20) str_to_check = "<Name>san_andres_y_providencia_administrative</Name>" # by default the uploaded layer must be unpublished self.assertEqual(layer.is_published, False) # check the layer is not in GetCapabilities request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertFalse(any(str_to_check in s for s in response.readlines())) # now test with published layer resource = layer.get_self_resource() resource.is_published = True resource.save() request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue(any(str_to_check in s for s in response.readlines())) # Clean up and completely delete the layer layer.delete()
def test_tiff(self): """Uploading a good .tiff """ thefile = os.path.join(gisdata.RASTER_DATA, 'test_grid.tif') uploaded = file_upload(thefile, overwrite=True) check_layer(uploaded) # Clean up and completely delete the layer uploaded.delete()
def test_shapefile(self): """Test Uploading a good shapefile """ thefile = os.path.join(gisdata.VECTOR_DATA, "san_andres_y_providencia_poi.shp") uploaded = file_upload(thefile, overwrite=True) check_layer(uploaded) # Clean up and completely delete the layer uploaded.delete()
def test_shapefile(self): """Test Uploading a good shapefile """ thefile = os.path.join(gisdata.VECTOR_DATA, 'san_andres_y_providencia_poi.shp') uploaded = file_upload(thefile, overwrite=True) check_layer(uploaded) # Clean up and completely delete the layer uploaded.delete()
def test_configure_time(self): # make sure it's not there (and configured) cascading_delete(gs_catalog, 'boxes_with_end_date') def get_wms_timepositions(): metadata = get_wms().contents['geonode:boxes_with_end_date'] self.assertTrue(metadata is not None) return metadata.timepositions thefile = os.path.join(GOOD_DATA, 'time', 'boxes_with_end_date.shp') uploaded = file_upload(thefile, overwrite=True) check_layer(uploaded) # initial state is no positions or info self.assertTrue(get_wms_timepositions() is None) self.assertTrue(get_time_info(uploaded) is None) # enable using interval and single attribute set_time_info(uploaded, 'date', None, 'DISCRETE_INTERVAL', 3, 'days') self.assertEquals( ['2000-03-01T00:00:00.000Z/2000-06-08T00:00:00.000Z/P3D'], get_wms_timepositions()) self.assertEquals( { 'end_attribute': None, 'presentation': 'DISCRETE_INTERVAL', 'attribute': 'date', 'enabled': True, 'precision_value': '3', 'precision_step': 'days' }, get_time_info(uploaded)) # disable but configure to use enddate attribute in list set_time_info(uploaded, 'date', 'enddate', 'LIST', None, None, enabled=False) # verify disabled self.assertTrue(get_wms_timepositions() is None) # test enabling now info = get_time_info(uploaded) info['enabled'] = True set_time_info(uploaded, **info) self.assertEquals(100, len(get_wms_timepositions()))
def test_configure_time(self): # make sure it's not there (and configured) cascading_delete(gs_catalog, 'boxes_with_end_date') def get_wms_timepositions(): metadata = get_wms().contents['geonode:boxes_with_end_date'] self.assertTrue(metadata is not None) return metadata.timepositions thefile = os.path.join( GOOD_DATA, 'time', 'boxes_with_end_date.shp' ) uploaded = file_upload(thefile, overwrite=True) check_layer(uploaded) # initial state is no positions or info self.assertTrue(get_wms_timepositions() is None) self.assertTrue(get_time_info(uploaded) is None) # enable using interval and single attribute set_time_info(uploaded, 'date', None, 'DISCRETE_INTERVAL', 3, 'days') self.assertEquals( ['2000-03-01T00:00:00.000Z/2000-06-08T00:00:00.000Z/P3D'], get_wms_timepositions() ) self.assertEquals( {'end_attribute': None, 'presentation': 'DISCRETE_INTERVAL', 'attribute': 'date', 'enabled': True, 'precision_value': '3', 'precision_step': 'days'}, get_time_info(uploaded) ) # disable but configure to use enddate attribute in list set_time_info(uploaded, 'date', 'enddate', 'LIST', None, None, enabled=False) # verify disabled self.assertTrue(get_wms_timepositions() is None) # test enabling now info = get_time_info(uploaded) info['enabled'] = True set_time_info(uploaded, **info) self.assertEquals(100, len(get_wms_timepositions()))
def test_repeated_upload(self): """Upload the same file more than once """ thefile = os.path.join(gisdata.RASTER_DATA, 'test_grid.tif') uploaded1 = file_upload(thefile, overwrite=True) check_layer(uploaded1) uploaded2 = file_upload(thefile, overwrite=True) check_layer(uploaded2) uploaded3 = file_upload(thefile, overwrite=False) check_layer(uploaded3) msg = ('Expected %s but got %s' % (uploaded1.name, uploaded2.name)) assert uploaded1.name == uploaded2.name, msg msg = ('Expected a different name when uploading %s using ' 'overwrite=False but got %s' % (thefile, uploaded3.name)) assert uploaded1.name != uploaded3.name, msg # Clean up and completely delete the layers # uploaded1 is overwritten by uploaded2 ... no need to delete it uploaded2.delete() uploaded3.delete()
def test_permissions(self): """Test permissions on a layer """ # grab norman norman = get_user_model().objects.get(username="******") thefile = os.path.join( gisdata.VECTOR_DATA, 'san_andres_y_providencia_poi.shp') layer = file_upload(thefile, overwrite=True) check_layer(layer) # we need some time to have the service up and running time.sleep(20) # Set the layer private for not authenticated users layer.set_permissions({'users': {'AnonymousUser': []}}) url = 'http://localhost:8080/geoserver/geonode/wms?' \ 'LAYERS=geonode%3Asan_andres_y_providencia_poi&STYLES=' \ '&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap' \ '&SRS=EPSG%3A4326' \ '&BBOX=-81.394599749999,13.316009005566,' \ '-81.370560451855,13.372728455566' \ '&WIDTH=217&HEIGHT=512' # test view_resourcebase permission on anonymous user request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue( response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8' ) # test WMS with authenticated user that has not view_resourcebase: # the layer must be not accessible (response is xml) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('norman', 'norman')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue( response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8' ) # test WMS with authenticated user that has view_resourcebase: the layer # must be accessible (response is image) assign_perm('view_resourcebase', norman, layer.get_self_resource()) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('norman', 'norman')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue(response.info().getheader('Content-Type'), 'image/png') # test change_layer_data # would be nice to make a WFS/T request and test results, but this # would work only on PostGIS layers # test change_layer_style url = 'http://localhost:8000/gs/rest/styles/san_andres_y_providencia_poi.xml' sld = """<?xml version="1.0" encoding="UTF-8"?> <sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <sld:NamedLayer> <sld:Name>geonode:san_andres_y_providencia_poi</sld:Name> <sld:UserStyle> <sld:Name>san_andres_y_providencia_poi</sld:Name> <sld:Title>san_andres_y_providencia_poi</sld:Title> <sld:IsDefault>1</sld:IsDefault> <sld:FeatureTypeStyle> <sld:Rule> <sld:PointSymbolizer> <sld:Graphic> <sld:Mark> <sld:Fill> <sld:CssParameter name="fill">#8A7700 </sld:CssParameter> </sld:Fill> <sld:Stroke> <sld:CssParameter name="stroke">#bbffff </sld:CssParameter> </sld:Stroke> </sld:Mark> <sld:Size>10</sld:Size> </sld:Graphic> </sld:PointSymbolizer> </sld:Rule> </sld:FeatureTypeStyle> </sld:UserStyle> </sld:NamedLayer> </sld:StyledLayerDescriptor>""" # user without change_layer_style cannot edit it self.client.login(username='******', password='******') response = self.client.put(url, sld, content_type='application/vnd.ogc.sld+xml') self.assertEquals(response.status_code, 401) # user with change_layer_style can edit it assign_perm('change_layer_style', norman, layer) response = self.client.put(url, sld, content_type='application/vnd.ogc.sld+xml') self.assertEquals(response.status_code, 200) # Clean up and completely delete the layer layer.delete()
def test_layer_permissions(self): try: # Test permissions on a layer # grab bobby bobby = get_user_model().objects.get(username="******") layers = Layer.objects.all()[:2].values_list('id', flat=True) test_perm_layer = Layer.objects.get(id=layers[0]) thefile = os.path.join( gisdata.VECTOR_DATA, 'san_andres_y_providencia_poi.shp') layer = geoserver_upload( test_perm_layer, thefile, bobby, 'san_andres_y_providencia_poi', overwrite=True ) self.assertIsNotNone(layer) # Reset GeoFence Rules purge_geofence_all() geofence_rules_count = get_geofence_rules_count() self.assertTrue(geofence_rules_count == 0) ignore_errors = False skip_unadvertised = False skip_geonode_registered = False remove_deleted = True verbosity = 2 owner = get_valid_user('admin') workspace = 'geonode' filter = None store = None permissions = {'users': {"admin": ['change_layer_data']}} gs_slurp( ignore_errors, verbosity=verbosity, owner=owner, console=StreamToLogger(logger, logging.INFO), workspace=workspace, store=store, filter=filter, skip_unadvertised=skip_unadvertised, skip_geonode_registered=skip_geonode_registered, remove_deleted=remove_deleted, permissions=permissions, execute_signals=True) layer = Layer.objects.get(title='san_andres_y_providencia_poi') check_layer(layer) geofence_rules_count = get_geofence_rules_count() _log("0. geofence_rules_count: %s " % geofence_rules_count) self.assertEquals(geofence_rules_count, 2) # Set the layer private for not authenticated users layer.set_permissions({'users': {'AnonymousUser': []}}) url = 'http://localhost:8080/geoserver/geonode/ows?' \ 'LAYERS=geonode%3Asan_andres_y_providencia_poi&STYLES=' \ '&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap' \ '&SRS=EPSG%3A4326' \ '&BBOX=-81.394599749999,13.316009005566,' \ '-81.370560451855,13.372728455566' \ '&WIDTH=217&HEIGHT=512' # test view_resourcebase permission on anonymous user request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue( response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8' ) # test WMS with authenticated user that has not view_resourcebase: # the layer must be not accessible (response is xml) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('bobby', 'bob')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue( response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8' ) # test WMS with authenticated user that has view_resourcebase: the layer # must be accessible (response is image) assign_perm('view_resourcebase', bobby, layer.get_self_resource()) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('bobby', 'bob')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue(response.info().getheader('Content-Type'), 'image/png') # test change_layer_data # would be nice to make a WFS/T request and test results, but this # would work only on PostGIS layers # test change_layer_style url = 'http://localhost:8000/gs/rest/workspaces/geonode/styles/san_andres_y_providencia_poi.xml' sld = """<?xml version="1.0" encoding="UTF-8"?> <sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <sld:NamedLayer> <sld:Name>geonode:san_andres_y_providencia_poi</sld:Name> <sld:UserStyle> <sld:Name>san_andres_y_providencia_poi</sld:Name> <sld:Title>san_andres_y_providencia_poi</sld:Title> <sld:IsDefault>1</sld:IsDefault> <sld:FeatureTypeStyle> <sld:Rule> <sld:PointSymbolizer> <sld:Graphic> <sld:Mark> <sld:Fill> <sld:CssParameter name="fill">#8A7700 </sld:CssParameter> </sld:Fill> <sld:Stroke> <sld:CssParameter name="stroke">#bbffff </sld:CssParameter> </sld:Stroke> </sld:Mark> <sld:Size>10</sld:Size> </sld:Graphic> </sld:PointSymbolizer> </sld:Rule> </sld:FeatureTypeStyle> </sld:UserStyle> </sld:NamedLayer> </sld:StyledLayerDescriptor>""" # user without change_layer_style cannot edit it self.assertTrue(self.client.login(username='******', password='******')) response = self.client.put(url, sld, content_type='application/vnd.ogc.sld+xml') self.assertEquals(response.status_code, 401) # user with change_layer_style can edit it assign_perm('change_layer_style', bobby, layer) perm_spec = { 'users': { 'bobby': ['view_resourcebase', 'change_resourcebase', ] } } layer.set_permissions(perm_spec) response = self.client.get(url) self.assertEquals(response.status_code, 200) response = self.client.put(url, sld, content_type='application/vnd.ogc.sld+xml') finally: try: layer.delete() except BaseException: pass
def test_permissions(self): """Test permissions on a layer """ # grab norman norman = get_user_model().objects.get(username="******") thefile = os.path.join(gisdata.VECTOR_DATA, 'san_andres_y_providencia_poi.shp') layer = file_upload(thefile, overwrite=True) check_layer(layer) # we need some time to have the service up and running time.sleep(20) # Set the layer private for not authenticated users layer.set_permissions({'users': {'AnonymousUser': []}}) url = 'http://localhost:8080/geoserver/geonode/wms?' \ 'LAYERS=geonode%3Asan_andres_y_providencia_poi&STYLES=' \ '&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap' \ '&SRS=EPSG%3A4326' \ '&BBOX=-81.394599749999,13.316009005566,' \ '-81.370560451855,13.372728455566' \ '&WIDTH=217&HEIGHT=512' # test view_resourcebase permission on anonymous user request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue(response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8') # test WMS with authenticated user that has not view_resourcebase: # the layer must be not accessible (response is xml) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('norman', 'norman')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue(response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8') # test WMS with authenticated user that has view_resourcebase: the layer # must be accessible (response is image) assign_perm('view_resourcebase', norman, layer.get_self_resource()) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('norman', 'norman')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue(response.info().getheader('Content-Type'), 'image/png') # test change_layer_data # would be nice to make a WFS/T request and test results, but this # would work only on PostGIS layers # test change_layer_style url = 'http://localhost:8000/gs/rest/styles/san_andres_y_providencia_poi.xml' sld = """<?xml version="1.0" encoding="UTF-8"?> <sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <sld:NamedLayer> <sld:Name>geonode:san_andres_y_providencia_poi</sld:Name> <sld:UserStyle> <sld:Name>san_andres_y_providencia_poi</sld:Name> <sld:Title>san_andres_y_providencia_poi</sld:Title> <sld:IsDefault>1</sld:IsDefault> <sld:FeatureTypeStyle> <sld:Rule> <sld:PointSymbolizer> <sld:Graphic> <sld:Mark> <sld:Fill> <sld:CssParameter name="fill">#8A7700 </sld:CssParameter> </sld:Fill> <sld:Stroke> <sld:CssParameter name="stroke">#bbffff </sld:CssParameter> </sld:Stroke> </sld:Mark> <sld:Size>10</sld:Size> </sld:Graphic> </sld:PointSymbolizer> </sld:Rule> </sld:FeatureTypeStyle> </sld:UserStyle> </sld:NamedLayer> </sld:StyledLayerDescriptor>""" # user without change_layer_style cannot edit it self.client.login(username='******', password='******') response = self.client.put(url, sld, content_type='application/vnd.ogc.sld+xml') self.assertEquals(response.status_code, 401) # user with change_layer_style can edit it assign_perm('change_layer_style', norman, layer) response = self.client.put(url, sld, content_type='application/vnd.ogc.sld+xml') self.assertEquals(response.status_code, 200) # Clean up and completely delete the layer layer.delete()
def test_unpublished(self): """Test permissions on an unpublished layer """ thefile = os.path.join( gisdata.VECTOR_DATA, 'san_andres_y_providencia_poi.shp') layer = file_upload(thefile, overwrite=True) layer.set_default_permissions() check_layer(layer) # we need some time to have the service up and running time.sleep(20) try: # request getCapabilities: layer must be there as it is published and # advertised: we need to check if in response there is # <Name>geonode:san_andres_y_providencia_water</Name> geoserver_base_url = settings.OGC_SERVER['default']['LOCATION'] get_capabilities_url = 'ows?' \ 'service=wms&version=1.3.0&request=GetCapabilities' url = urljoin(geoserver_base_url, get_capabilities_url) str_to_check = '<Name>geonode:san_andres_y_providencia_poi</Name>' request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue(any(str_to_check in s for s in response.readlines())) # by default the uploaded layer is self.assertTrue(layer.is_published, True) finally: # Clean up and completely delete the layer layer.delete() # with settings disabled with self.settings(RESOURCE_PUBLISHING=True): layer = file_upload(thefile) layer.set_default_permissions() check_layer(layer) # we need some time to have the service up and running time.sleep(20) try: # by default the uploaded layer must be unpublished self.assertEqual(layer.is_published, False) # check the layer is not in GetCapabilities request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertFalse(any(str_to_check in s for s in response.readlines())) # now test with published layer layer = Layer.objects.get(pk=layer.pk) layer.is_published = True layer.save() # we need some time to have the service up and running time.sleep(20) request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue(any(str_to_check in s for s in response.readlines())) finally: # Clean up and completely delete the layer layer.delete()
def test_permissions(self): """Test permissions on a layer """ # grab norman norman = get_user_model().objects.get(username="******") thefile = os.path.join( gisdata.VECTOR_DATA, 'san_andres_y_providencia_poi.shp') layer = file_upload(thefile, overwrite=True) check_layer(layer) # we need some time to have the service up and running time.sleep(20) # Set the layer private for not authenticated users layer.set_permissions({'users': {'AnonymousUser': []}}) url = 'http://localhost:8080/geoserver/geonode/wms?' \ 'LAYERS=geonode%3Asan_andres_y_providencia_poi&STYLES=' \ '&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap' \ '&SRS=EPSG%3A4326' \ '&BBOX=-81.394599749999,13.316009005566,' \ '-81.370560451855,13.372728455566' \ '&WIDTH=217&HEIGHT=512' # test view_resourcebase permission on anonymous user request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue( response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8' ) # test WMS with authenticated user that has not view_resourcebase: # the layer must be not accessible (response is xml) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('norman', 'norman')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue( response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8' ) # test WMS with authenticated user that has view_resourcebase: the layer # must be accessible (response is image) assign_perm('view_resourcebase', norman, layer.get_self_resource()) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('norman', 'norman')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue(response.info().getheader('Content-Type'), 'image/png') # test change_layer_data # would be nice to make a WFS/T request and test results, but this # would work only on PostGIS layers # Clean up and completely delete the layer layer.delete()
def test_layer_upload_with_time(self): """ Try uploading a layer and verify that the user can administrate his own layer despite not being a site administrator. """ try: # user without change_layer_style cannot edit it self.assertTrue(self.client.login(username='******', password='******')) # grab bobby bobby = get_user_model().objects.get(username="******") anonymous_group, created = Group.objects.get_or_create( name='anonymous') # Upload to GeoServer saved_layer = geoserver_upload(Layer(), os.path.join( gisdata.GOOD_DATA, 'time/' "boxes_with_date.shp"), bobby, 'boxes_with_date_by_bobby', overwrite=True) # Test that layer owner can wipe GWC Cache ignore_errors = False skip_unadvertised = False skip_geonode_registered = False remove_deleted = True verbosity = 2 owner = bobby workspace = 'geonode' filter = None store = None permissions = { 'users': { "bobby": ['view_resourcebase', 'change_layer_data'] }, 'groups': { anonymous_group: ['view_resourcebase'] }, } gs_slurp(ignore_errors, verbosity=verbosity, owner=owner, workspace=workspace, store=store, filter=filter, skip_unadvertised=skip_unadvertised, skip_geonode_registered=skip_geonode_registered, remove_deleted=remove_deleted, permissions=permissions, execute_signals=True) saved_layer = Layer.objects.get(title='boxes_with_date_by_bobby') check_layer(saved_layer) from lxml import etree from geonode.geoserver.helpers import get_store from geonode.geoserver.signals import gs_catalog self.assertIsNotNone(saved_layer) workspace, name = saved_layer.alternate.split(':') self.assertIsNotNone(workspace) self.assertIsNotNone(name) ws = gs_catalog.get_workspace(workspace) self.assertIsNotNone(ws) store = get_store(gs_catalog, saved_layer.store, workspace=ws) self.assertIsNotNone(store) url = settings.OGC_SERVER['default']['LOCATION'] user = settings.OGC_SERVER['default']['USER'] passwd = settings.OGC_SERVER['default']['PASSWORD'] rest_path = 'rest/workspaces/geonode/datastores/{lyr_name}/featuretypes/{lyr_name}.xml'.\ format(lyr_name=name) import requests from requests.auth import HTTPBasicAuth r = requests.get(url + rest_path, auth=HTTPBasicAuth(user, passwd)) self.assertEquals(r.status_code, 200) _log(r.text) featureType = etree.ElementTree(etree.fromstring(r.text)) metadata = featureType.findall('./[metadata]') self.assertEquals(len(metadata), 0) payload = """<featureType> <metadata> <entry key="elevation"> <dimensionInfo> <enabled>false</enabled> </dimensionInfo> </entry> <entry key="time"> <dimensionInfo> <enabled>true</enabled> <attribute>date</attribute> <presentation>LIST</presentation> <units>ISO8601</units> <defaultValue/> <nearestMatchEnabled>false</nearestMatchEnabled> </dimensionInfo> </entry> </metadata></featureType>""" r = requests.put(url + rest_path, data=payload, headers={'Content-type': 'application/xml'}, auth=HTTPBasicAuth(user, passwd)) self.assertEquals(r.status_code, 200) r = requests.get(url + rest_path, auth=HTTPBasicAuth(user, passwd)) self.assertEquals(r.status_code, 200) _log(r.text) featureType = etree.ElementTree(etree.fromstring(r.text)) metadata = featureType.findall('./[metadata]') _log(etree.tostring(metadata[0], encoding='utf8', method='xml')) self.assertEquals(len(metadata), 1) saved_layer.set_default_permissions() from geonode.geoserver.views import get_layer_capabilities capab = get_layer_capabilities(saved_layer, tolerant=True) self.assertIsNotNone(capab) wms_capabilities_url = reverse('capabilities_layer', args=[saved_layer.id]) wms_capabilities_resp = self.client.get(wms_capabilities_url) self.assertTrue(wms_capabilities_resp.status_code, 200) all_times = None if wms_capabilities_resp.status_code >= 200 and wms_capabilities_resp.status_code < 400: wms_capabilities = wms_capabilities_resp.getvalue() if wms_capabilities: namespaces = { 'wms': 'http://www.opengis.net/wms', 'xlink': 'http://www.w3.org/1999/xlink', 'xsi': 'http://www.w3.org/2001/XMLSchema-instance' } e = etree.fromstring(wms_capabilities) for atype in e.findall( "./[wms:Name='%s']/wms:Dimension[@name='time']" % (saved_layer.alternate), namespaces): dim_name = atype.get('name') if dim_name: dim_name = str(dim_name).lower() if dim_name == 'time': dim_values = atype.text if dim_values: all_times = dim_values.split(",") break self.assertIsNotNone(all_times) self.assertEquals(all_times, [ '2000-03-01T00:00:00.000Z', '2000-03-02T00:00:00.000Z', '2000-03-03T00:00:00.000Z', '2000-03-04T00:00:00.000Z', '2000-03-05T00:00:00.000Z', '2000-03-06T00:00:00.000Z', '2000-03-07T00:00:00.000Z', '2000-03-08T00:00:00.000Z', '2000-03-09T00:00:00.000Z', '2000-03-10T00:00:00.000Z', '2000-03-11T00:00:00.000Z', '2000-03-12T00:00:00.000Z', '2000-03-13T00:00:00.000Z', '2000-03-14T00:00:00.000Z', '2000-03-15T00:00:00.000Z', '2000-03-16T00:00:00.000Z', '2000-03-17T00:00:00.000Z', '2000-03-18T00:00:00.000Z', '2000-03-19T00:00:00.000Z', '2000-03-20T00:00:00.000Z', '2000-03-21T00:00:00.000Z', '2000-03-22T00:00:00.000Z', '2000-03-23T00:00:00.000Z', '2000-03-24T00:00:00.000Z', '2000-03-25T00:00:00.000Z', '2000-03-26T00:00:00.000Z', '2000-03-27T00:00:00.000Z', '2000-03-28T00:00:00.000Z', '2000-03-29T00:00:00.000Z', '2000-03-30T00:00:00.000Z', '2000-03-31T00:00:00.000Z', '2000-04-01T00:00:00.000Z', '2000-04-02T00:00:00.000Z', '2000-04-03T00:00:00.000Z', '2000-04-04T00:00:00.000Z', '2000-04-05T00:00:00.000Z', '2000-04-06T00:00:00.000Z', '2000-04-07T00:00:00.000Z', '2000-04-08T00:00:00.000Z', '2000-04-09T00:00:00.000Z', '2000-04-10T00:00:00.000Z', '2000-04-11T00:00:00.000Z', '2000-04-12T00:00:00.000Z', '2000-04-13T00:00:00.000Z', '2000-04-14T00:00:00.000Z', '2000-04-15T00:00:00.000Z', '2000-04-16T00:00:00.000Z', '2000-04-17T00:00:00.000Z', '2000-04-18T00:00:00.000Z', '2000-04-19T00:00:00.000Z', '2000-04-20T00:00:00.000Z', '2000-04-21T00:00:00.000Z', '2000-04-22T00:00:00.000Z', '2000-04-23T00:00:00.000Z', '2000-04-24T00:00:00.000Z', '2000-04-25T00:00:00.000Z', '2000-04-26T00:00:00.000Z', '2000-04-27T00:00:00.000Z', '2000-04-28T00:00:00.000Z', '2000-04-29T00:00:00.000Z', '2000-04-30T00:00:00.000Z', '2000-05-01T00:00:00.000Z', '2000-05-02T00:00:00.000Z', '2000-05-03T00:00:00.000Z', '2000-05-04T00:00:00.000Z', '2000-05-05T00:00:00.000Z', '2000-05-06T00:00:00.000Z', '2000-05-07T00:00:00.000Z', '2000-05-08T00:00:00.000Z', '2000-05-09T00:00:00.000Z', '2000-05-10T00:00:00.000Z', '2000-05-11T00:00:00.000Z', '2000-05-12T00:00:00.000Z', '2000-05-13T00:00:00.000Z', '2000-05-14T00:00:00.000Z', '2000-05-15T00:00:00.000Z', '2000-05-16T00:00:00.000Z', '2000-05-17T00:00:00.000Z', '2000-05-18T00:00:00.000Z', '2000-05-19T00:00:00.000Z', '2000-05-20T00:00:00.000Z', '2000-05-21T00:00:00.000Z', '2000-05-22T00:00:00.000Z', '2000-05-23T00:00:00.000Z', '2000-05-24T00:00:00.000Z', '2000-05-25T00:00:00.000Z', '2000-05-26T00:00:00.000Z', '2000-05-27T00:00:00.000Z', '2000-05-28T00:00:00.000Z', '2000-05-29T00:00:00.000Z', '2000-05-30T00:00:00.000Z', '2000-05-31T00:00:00.000Z', '2000-06-01T00:00:00.000Z', '2000-06-02T00:00:00.000Z', '2000-06-03T00:00:00.000Z', '2000-06-04T00:00:00.000Z', '2000-06-05T00:00:00.000Z', '2000-06-06T00:00:00.000Z', '2000-06-07T00:00:00.000Z', '2000-06-08T00:00:00.000Z' ]) saved_layer.set_default_permissions() url = reverse('layer_metadata', args=[saved_layer.service_typename]) resp = self.client.get(url) self.assertEquals(resp.status_code, 200) finally: # Clean up and completely delete the layer try: saved_layer.delete() if check_ogc_backend(geoserver.BACKEND_PACKAGE): from geonode.geoserver.helpers import cleanup cleanup(saved_layer.name, saved_layer.uuid) except BaseException: pass
def test_unpublished(self): """Test permissions on an unpublished layer """ layer = Layer.objects.first() layer.set_default_permissions() check_layer(layer) # we need some time to have the service up and running # time.sleep(20) try: # request getCapabilities: layer must be there as it is published and # advertised: we need to check if in response there is # <Name>geonode:san_andres_y_providencia_water</Name> geoserver_base_url = settings.OGC_SERVER['default']['LOCATION'] get_capabilities_url = 'ows?' \ 'service=wms&version=1.3.0&request=GetCapabilities' url = urljoin(geoserver_base_url, get_capabilities_url) str_to_check = f'<Name>geonode:{layer.name}</Name>' request = Request(url) response = urlopen(request) # by default the uploaded layer is published self.assertTrue(layer.is_published) self.assertTrue(any(str_to_check in ensure_string(s) for s in response.readlines())) finally: # Clean up and completely delete the layer layer.delete() # with settings disabled with self.settings(RESOURCE_PUBLISHING=True): layer = Layer.objects.first() layer.is_approved = False layer.is_published = False layer.save() layer.set_default_permissions() check_layer(layer) # we need some time to have the service up and running time.sleep(20) try: # by default the uploaded layer must be unpublished self.assertEqual(layer.is_published, False) # check the layer is not in GetCapabilities request = Request(url) response = urlopen(request) # now test with published layer layer = Layer.objects.get(pk=layer.pk) layer.is_published = True layer.save() # we need some time to have the service up and running time.sleep(20) request = Request(url) response = urlopen(request) self.assertTrue(any(str_to_check in ensure_string(s) for s in response.readlines())) finally: # Clean up and completely delete the layer layer.delete()
def test_layer_permissions(self): try: # Test permissions on a layer # grab bobby bobby = get_user_model().objects.get(username="******") layers = Layer.objects.all()[:2].values_list('id', flat=True) test_perm_layer = Layer.objects.get(id=layers[0]) thefile = os.path.join(gisdata.VECTOR_DATA, 'san_andres_y_providencia_poi.shp') layer = geoserver_upload(test_perm_layer, thefile, bobby, 'san_andres_y_providencia_poi', overwrite=True) self.assertIsNotNone(layer) _log( " ------------------------------------------------------------- " ) _log(layer) _log( " ------------------------------------------------------------- " ) # Reset GeoFence Rules purge_geofence_all() geofence_rules_count = get_geofence_rules_count() self.assertTrue(geofence_rules_count == 0) ignore_errors = False skip_unadvertised = False skip_geonode_registered = False remove_deleted = True verbosity = 2 owner = get_valid_user('admin') workspace = 'geonode' filter = None store = None permissions = {'users': {"admin": ['change_layer_data']}} gs_slurp(ignore_errors, verbosity=verbosity, owner=owner, console=StreamToLogger(logger, logging.INFO), workspace=workspace, store=store, filter=filter, skip_unadvertised=skip_unadvertised, skip_geonode_registered=skip_geonode_registered, remove_deleted=remove_deleted, permissions=permissions, execute_signals=True) layer = Layer.objects.get(title='san_andres_y_providencia_poi') check_layer(layer) geofence_rules_count = get_geofence_rules_count() _log("0. geofence_rules_count: %s " % geofence_rules_count) self.assertEquals(geofence_rules_count, 2) # Set the layer private for not authenticated users layer.set_permissions({'users': {'AnonymousUser': []}}) url = 'http://localhost:8080/geoserver/geonode/ows?' \ 'LAYERS=geonode%3Asan_andres_y_providencia_poi&STYLES=' \ '&FORMAT=image%2Fpng&SERVICE=WMS&VERSION=1.1.1&REQUEST=GetMap' \ '&SRS=EPSG%3A4326' \ '&BBOX=-81.394599749999,13.316009005566,' \ '-81.370560451855,13.372728455566' \ '&WIDTH=217&HEIGHT=512' # test view_resourcebase permission on anonymous user request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue(response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8') # test WMS with authenticated user that has not view_resourcebase: # the layer must be not accessible (response is xml) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('bobby', 'bob')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue(response.info().getheader('Content-Type'), 'application/vnd.ogc.se_xml;charset=UTF-8') # test WMS with authenticated user that has view_resourcebase: the layer # must be accessible (response is image) assign_perm('view_resourcebase', bobby, layer.get_self_resource()) request = urllib2.Request(url) base64string = base64.encodestring( '%s:%s' % ('bobby', 'bob')).replace('\n', '') request.add_header("Authorization", "Basic %s" % base64string) response = urllib2.urlopen(request) self.assertTrue(response.info().getheader('Content-Type'), 'image/png') # test change_layer_data # would be nice to make a WFS/T request and test results, but this # would work only on PostGIS layers # test change_layer_style url = 'http://localhost:8000/gs/rest/workspaces/geonode/styles/san_andres_y_providencia_poi.xml' sld = """<?xml version="1.0" encoding="UTF-8"?> <sld:StyledLayerDescriptor xmlns:sld="http://www.opengis.net/sld" xmlns:gml="http://www.opengis.net/gml" xmlns:ogc="http://www.opengis.net/ogc" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="1.0.0" xsi:schemaLocation="http://www.opengis.net/sld http://schemas.opengis.net/sld/1.0.0/StyledLayerDescriptor.xsd"> <sld:NamedLayer> <sld:Name>geonode:san_andres_y_providencia_poi</sld:Name> <sld:UserStyle> <sld:Name>san_andres_y_providencia_poi</sld:Name> <sld:Title>san_andres_y_providencia_poi</sld:Title> <sld:IsDefault>1</sld:IsDefault> <sld:FeatureTypeStyle> <sld:Rule> <sld:PointSymbolizer> <sld:Graphic> <sld:Mark> <sld:Fill> <sld:CssParameter name="fill">#8A7700 </sld:CssParameter> </sld:Fill> <sld:Stroke> <sld:CssParameter name="stroke">#bbffff </sld:CssParameter> </sld:Stroke> </sld:Mark> <sld:Size>10</sld:Size> </sld:Graphic> </sld:PointSymbolizer> </sld:Rule> </sld:FeatureTypeStyle> </sld:UserStyle> </sld:NamedLayer> </sld:StyledLayerDescriptor>""" # user without change_layer_style cannot edit it self.assertTrue(self.client.login(username='******', password='******')) response = self.client.put( url, sld, content_type='application/vnd.ogc.sld+xml') self.assertEquals(response.status_code, 401) # user with change_layer_style can edit it assign_perm('change_layer_style', bobby, layer) perm_spec = { 'users': { 'bobby': [ 'view_resourcebase', 'change_resourcebase', ] } } layer.set_permissions(perm_spec) response = self.client.get(url) self.assertEquals(response.status_code, 200) response = self.client.put( url, sld, content_type='application/vnd.ogc.sld+xml') finally: try: layer.delete() except BaseException: pass
def test_unpublished(self): """Test permissions on an unpublished layer """ thefile = os.path.join(gisdata.VECTOR_DATA, 'san_andres_y_providencia_poi.shp') layer = file_upload(thefile, overwrite=True) layer.set_default_permissions() check_layer(layer) # we need some time to have the service up and running time.sleep(20) # request getCapabilities: layer must be there as it is published and # advertised: we need to check if in response there is # <Name>geonode:san_andres_y_providencia_water</Name> url = 'http://localhost:8080/geoserver/ows?' \ 'service=wms&version=1.3.0&request=GetCapabilities' str_to_check = '<Name>geonode:san_andres_y_providencia_poi</Name>' request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue(any(str_to_check in s for s in response.readlines())) # by default the uploaded layer is self.assertTrue(layer.is_published, True) # Clean up and completely delete the layer layer.delete() # with settings disabled with self.settings(RESOURCE_PUBLISHING=True): thefile = os.path.join( gisdata.VECTOR_DATA, 'san_andres_y_providencia_administrative.shp') layer = file_upload(thefile, overwrite=True) layer.set_default_permissions() check_layer(layer) # we need some time to have the service up and running time.sleep(20) str_to_check = '<Name>san_andres_y_providencia_administrative</Name>' # by default the uploaded layer must be unpublished self.assertEqual(layer.is_published, False) # check the layer is not in GetCapabilities request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertFalse( any(str_to_check in s for s in response.readlines())) # now test with published layer resource = layer.get_self_resource() resource.is_published = True resource.save() request = urllib2.Request(url) response = urllib2.urlopen(request) self.assertTrue( any(str_to_check in s for s in response.readlines())) # Clean up and completely delete the layer layer.delete()
def test_layer_upload_with_time(self): """ Try uploading a layer and verify that the user can administrate his own layer despite not being a site administrator. """ try: # user without change_layer_style cannot edit it self.assertTrue(self.client.login(username='******', password='******')) # grab bobby bobby = get_user_model().objects.get(username="******") anonymous_group, created = Group.objects.get_or_create(name='anonymous') # Upload to GeoServer saved_layer = geoserver_upload( Layer(), os.path.join( gisdata.GOOD_DATA, 'time/' "boxes_with_date.shp"), bobby, 'boxes_with_date_by_bobby', overwrite=True ) # Test that layer owner can wipe GWC Cache ignore_errors = False skip_unadvertised = False skip_geonode_registered = False remove_deleted = True verbosity = 2 owner = bobby workspace = 'geonode' filter = None store = None permissions = { 'users': {"bobby": ['view_resourcebase', 'change_layer_data']}, 'groups': {anonymous_group: ['view_resourcebase']}, } gs_slurp( ignore_errors, verbosity=verbosity, owner=owner, workspace=workspace, store=store, filter=filter, skip_unadvertised=skip_unadvertised, skip_geonode_registered=skip_geonode_registered, remove_deleted=remove_deleted, permissions=permissions, execute_signals=True) saved_layer = Layer.objects.get(title='boxes_with_date_by_bobby') check_layer(saved_layer) from lxml import etree from geonode.geoserver.helpers import get_store from geonode.geoserver.signals import gs_catalog self.assertIsNotNone(saved_layer) workspace, name = saved_layer.alternate.split(':') self.assertIsNotNone(workspace) self.assertIsNotNone(name) ws = gs_catalog.get_workspace(workspace) self.assertIsNotNone(ws) store = get_store(gs_catalog, saved_layer.store, workspace=ws) self.assertIsNotNone(store) url = settings.OGC_SERVER['default']['LOCATION'] user = settings.OGC_SERVER['default']['USER'] passwd = settings.OGC_SERVER['default']['PASSWORD'] rest_path = 'rest/workspaces/geonode/datastores/{lyr_name}/featuretypes/{lyr_name}.xml'.\ format(lyr_name=name) import requests from requests.auth import HTTPBasicAuth r = requests.get(url + rest_path, auth=HTTPBasicAuth(user, passwd)) self.assertEquals(r.status_code, 200) _log(r.text) featureType = etree.ElementTree(etree.fromstring(r.text)) metadata = featureType.findall('./[metadata]') self.assertEquals(len(metadata), 0) payload = """<featureType> <metadata> <entry key="elevation"> <dimensionInfo> <enabled>false</enabled> </dimensionInfo> </entry> <entry key="time"> <dimensionInfo> <enabled>true</enabled> <attribute>date</attribute> <presentation>LIST</presentation> <units>ISO8601</units> <defaultValue/> <nearestMatchEnabled>false</nearestMatchEnabled> </dimensionInfo> </entry> </metadata></featureType>""" r = requests.put(url + rest_path, data=payload, headers={ 'Content-type': 'application/xml' }, auth=HTTPBasicAuth(user, passwd)) self.assertEquals(r.status_code, 200) r = requests.get(url + rest_path, auth=HTTPBasicAuth(user, passwd)) self.assertEquals(r.status_code, 200) _log(r.text) featureType = etree.ElementTree(etree.fromstring(r.text)) metadata = featureType.findall('./[metadata]') _log(etree.tostring(metadata[0], encoding='utf8', method='xml')) self.assertEquals(len(metadata), 1) saved_layer.set_default_permissions() from geonode.geoserver.views import get_layer_capabilities capab = get_layer_capabilities(saved_layer, tolerant=True) self.assertIsNotNone(capab) wms_capabilities_url = reverse('capabilities_layer', args=[saved_layer.id]) wms_capabilities_resp = self.client.get(wms_capabilities_url) self.assertTrue(wms_capabilities_resp.status_code, 200) all_times = None if wms_capabilities_resp.status_code >= 200 and wms_capabilities_resp.status_code < 400: wms_capabilities = wms_capabilities_resp.getvalue() if wms_capabilities: namespaces = {'wms': 'http://www.opengis.net/wms', 'xlink': 'http://www.w3.org/1999/xlink', 'xsi': 'http://www.w3.org/2001/XMLSchema-instance'} e = etree.fromstring(wms_capabilities) for atype in e.findall( "./[wms:Name='%s']/wms:Dimension[@name='time']" % (saved_layer.alternate), namespaces): dim_name = atype.get('name') if dim_name: dim_name = str(dim_name).lower() if dim_name == 'time': dim_values = atype.text if dim_values: all_times = dim_values.split(",") break self.assertIsNotNone(all_times) self.assertEquals(all_times, ['2000-03-01T00:00:00.000Z', '2000-03-02T00:00:00.000Z', '2000-03-03T00:00:00.000Z', '2000-03-04T00:00:00.000Z', '2000-03-05T00:00:00.000Z', '2000-03-06T00:00:00.000Z', '2000-03-07T00:00:00.000Z', '2000-03-08T00:00:00.000Z', '2000-03-09T00:00:00.000Z', '2000-03-10T00:00:00.000Z', '2000-03-11T00:00:00.000Z', '2000-03-12T00:00:00.000Z', '2000-03-13T00:00:00.000Z', '2000-03-14T00:00:00.000Z', '2000-03-15T00:00:00.000Z', '2000-03-16T00:00:00.000Z', '2000-03-17T00:00:00.000Z', '2000-03-18T00:00:00.000Z', '2000-03-19T00:00:00.000Z', '2000-03-20T00:00:00.000Z', '2000-03-21T00:00:00.000Z', '2000-03-22T00:00:00.000Z', '2000-03-23T00:00:00.000Z', '2000-03-24T00:00:00.000Z', '2000-03-25T00:00:00.000Z', '2000-03-26T00:00:00.000Z', '2000-03-27T00:00:00.000Z', '2000-03-28T00:00:00.000Z', '2000-03-29T00:00:00.000Z', '2000-03-30T00:00:00.000Z', '2000-03-31T00:00:00.000Z', '2000-04-01T00:00:00.000Z', '2000-04-02T00:00:00.000Z', '2000-04-03T00:00:00.000Z', '2000-04-04T00:00:00.000Z', '2000-04-05T00:00:00.000Z', '2000-04-06T00:00:00.000Z', '2000-04-07T00:00:00.000Z', '2000-04-08T00:00:00.000Z', '2000-04-09T00:00:00.000Z', '2000-04-10T00:00:00.000Z', '2000-04-11T00:00:00.000Z', '2000-04-12T00:00:00.000Z', '2000-04-13T00:00:00.000Z', '2000-04-14T00:00:00.000Z', '2000-04-15T00:00:00.000Z', '2000-04-16T00:00:00.000Z', '2000-04-17T00:00:00.000Z', '2000-04-18T00:00:00.000Z', '2000-04-19T00:00:00.000Z', '2000-04-20T00:00:00.000Z', '2000-04-21T00:00:00.000Z', '2000-04-22T00:00:00.000Z', '2000-04-23T00:00:00.000Z', '2000-04-24T00:00:00.000Z', '2000-04-25T00:00:00.000Z', '2000-04-26T00:00:00.000Z', '2000-04-27T00:00:00.000Z', '2000-04-28T00:00:00.000Z', '2000-04-29T00:00:00.000Z', '2000-04-30T00:00:00.000Z', '2000-05-01T00:00:00.000Z', '2000-05-02T00:00:00.000Z', '2000-05-03T00:00:00.000Z', '2000-05-04T00:00:00.000Z', '2000-05-05T00:00:00.000Z', '2000-05-06T00:00:00.000Z', '2000-05-07T00:00:00.000Z', '2000-05-08T00:00:00.000Z', '2000-05-09T00:00:00.000Z', '2000-05-10T00:00:00.000Z', '2000-05-11T00:00:00.000Z', '2000-05-12T00:00:00.000Z', '2000-05-13T00:00:00.000Z', '2000-05-14T00:00:00.000Z', '2000-05-15T00:00:00.000Z', '2000-05-16T00:00:00.000Z', '2000-05-17T00:00:00.000Z', '2000-05-18T00:00:00.000Z', '2000-05-19T00:00:00.000Z', '2000-05-20T00:00:00.000Z', '2000-05-21T00:00:00.000Z', '2000-05-22T00:00:00.000Z', '2000-05-23T00:00:00.000Z', '2000-05-24T00:00:00.000Z', '2000-05-25T00:00:00.000Z', '2000-05-26T00:00:00.000Z', '2000-05-27T00:00:00.000Z', '2000-05-28T00:00:00.000Z', '2000-05-29T00:00:00.000Z', '2000-05-30T00:00:00.000Z', '2000-05-31T00:00:00.000Z', '2000-06-01T00:00:00.000Z', '2000-06-02T00:00:00.000Z', '2000-06-03T00:00:00.000Z', '2000-06-04T00:00:00.000Z', '2000-06-05T00:00:00.000Z', '2000-06-06T00:00:00.000Z', '2000-06-07T00:00:00.000Z', '2000-06-08T00:00:00.000Z']) saved_layer.set_default_permissions() url = reverse('layer_metadata', args=[saved_layer.service_typename]) resp = self.client.get(url) self.assertEquals(resp.status_code, 200) finally: # Clean up and completely delete the layer try: saved_layer.delete() if check_ogc_backend(geoserver.BACKEND_PACKAGE): from geonode.geoserver.helpers import cleanup cleanup(saved_layer.name, saved_layer.uuid) except BaseException: pass