mirror of
https://github.com/osm-search/Nominatim.git
synced 2026-03-10 03:54:06 +00:00
add osm2pgsql update tests
This commit is contained in:
@@ -125,8 +125,8 @@ class NominatimEnvironment(object):
|
|||||||
def run_setup_script(self, *args, **kwargs):
|
def run_setup_script(self, *args, **kwargs):
|
||||||
self.run_nominatim_script('setup', *args, **kwargs)
|
self.run_nominatim_script('setup', *args, **kwargs)
|
||||||
|
|
||||||
def run_update_script(self, *args):
|
def run_update_script(self, *args, **kwargs):
|
||||||
self.run_nominatim_script('update', *args)
|
self.run_nominatim_script('update', *args, **kwargs)
|
||||||
|
|
||||||
def run_nominatim_script(self, script, *args, **kwargs):
|
def run_nominatim_script(self, script, *args, **kwargs):
|
||||||
cmd = [os.path.join(self.build_dir, 'utils', '%s.php' % script)]
|
cmd = [os.path.join(self.build_dir, 'utils', '%s.php' % script)]
|
||||||
|
|||||||
126
test/bdd/osm2pgsql/update/relation.feature
Normal file
126
test/bdd/osm2pgsql/update/relation.feature
Normal file
@@ -0,0 +1,126 @@
|
|||||||
|
@DB
|
||||||
|
Feature: Update of relations by osm2pgsql
|
||||||
|
Testing relation update by osm2pgsql.
|
||||||
|
|
||||||
|
Scenario: Remove all members of a relation
|
||||||
|
When loading osm data
|
||||||
|
"""
|
||||||
|
n1 Tamenity=prison,name=foo
|
||||||
|
n200 x0 y0
|
||||||
|
n201 x0 y0.0001
|
||||||
|
n202 x0.0001 y0.0001
|
||||||
|
n203 x0.0001 y0
|
||||||
|
w2 Tref=45' Nn200,n201,n202,n203,n200
|
||||||
|
r1 Ttype=multipolygon,tourism=hotel,name=XZ' Mw2@
|
||||||
|
"""
|
||||||
|
Then place contains
|
||||||
|
| object | class | type | name
|
||||||
|
| R1 | tourism | hotel | 'name' : 'XZ'
|
||||||
|
When updating osm data
|
||||||
|
"""
|
||||||
|
r1 Ttype=multipolygon,tourism=hotel,name=XZ Mn1@
|
||||||
|
"""
|
||||||
|
Then place has no entry for R1
|
||||||
|
|
||||||
|
|
||||||
|
Scenario: Change type of a relation
|
||||||
|
When loading osm data
|
||||||
|
"""
|
||||||
|
n200 x0 y0
|
||||||
|
n201 x0 y0.0001
|
||||||
|
n202 x0.0001 y0.0001
|
||||||
|
n203 x0.0001 y0
|
||||||
|
w2 Tref=45 Nn200,n201,n202,n203,n200
|
||||||
|
r1 Ttype=multipolygon,tourism=hotel,name=XZ Mw2@
|
||||||
|
"""
|
||||||
|
Then place contains
|
||||||
|
| object | class | type | name
|
||||||
|
| R1 | tourism | hotel | 'name' : 'XZ'
|
||||||
|
When updating osm data
|
||||||
|
"""
|
||||||
|
r1 Ttype=multipolygon,amenity=prison,name=XZ Mw2@
|
||||||
|
"""
|
||||||
|
Then place has no entry for R1:tourism
|
||||||
|
And place contains
|
||||||
|
| object | class | type | name
|
||||||
|
| R1 | amenity | prison | 'name' : 'XZ'
|
||||||
|
|
||||||
|
Scenario: Change name of a relation
|
||||||
|
When loading osm data
|
||||||
|
"""
|
||||||
|
n200 x0 y0
|
||||||
|
n201 x0 y0.0001
|
||||||
|
n202 x0.0001 y0.0001
|
||||||
|
n203 x0.0001 y0
|
||||||
|
w2 Tref=45 Nn200,n201,n202,n203,n200
|
||||||
|
r1 Ttype=multipolygon,tourism=hotel,name=AB Mw2@
|
||||||
|
"""
|
||||||
|
Then place contains
|
||||||
|
| object | class | type | name
|
||||||
|
| R1 | tourism | hotel | 'name' : 'AB'
|
||||||
|
When updating osm data
|
||||||
|
"""
|
||||||
|
r1 Ttype=multipolygon,tourism=hotel,name=XY Mw2@
|
||||||
|
"""
|
||||||
|
Then place contains
|
||||||
|
| object | class | type | name
|
||||||
|
| R1 | tourism | hotel | 'name' : 'XZ'
|
||||||
|
|
||||||
|
Scenario: Change type of a relation into something unknown
|
||||||
|
When loading osm data
|
||||||
|
"""
|
||||||
|
n200 x0 y0
|
||||||
|
n201 x0 y0.0001
|
||||||
|
n202 x0.0001 y0.0001
|
||||||
|
n203 x0.0001 y0
|
||||||
|
w2 Tref=45 Nn200,n201,n202,n203,n200
|
||||||
|
r1 Ttype=multipolygon,tourism=hotel,name=XY Mw2@
|
||||||
|
"""
|
||||||
|
Then place contains
|
||||||
|
| object | class | type | name
|
||||||
|
| R1 | tourism | hotel | 'name' : 'XZ'
|
||||||
|
When updating osm data
|
||||||
|
"""
|
||||||
|
r1 Ttype=multipolygon,amenities=prison,name=XY Mw2@
|
||||||
|
"""
|
||||||
|
Then place has no entry for R1
|
||||||
|
|
||||||
|
Scenario: Type tag is removed
|
||||||
|
When loading osm data
|
||||||
|
"""
|
||||||
|
n200 x0 y0
|
||||||
|
n201 x0 y0.0001
|
||||||
|
n202 x0.0001 y0.0001
|
||||||
|
n203 x0.0001 y0
|
||||||
|
w2 Tref=45 Nn200,n201,n202,n203,n200
|
||||||
|
r1 Ttype=multipolygon,tourism=hotel,name=XY Mw2@
|
||||||
|
"""
|
||||||
|
Then place contains
|
||||||
|
| object | class | type | name
|
||||||
|
| R1 | tourism | hotel | 'name' : 'XZ'
|
||||||
|
When updating osm data
|
||||||
|
"""
|
||||||
|
r1 Ttourism=hotel,name=XY Mw2@
|
||||||
|
"""
|
||||||
|
Then place has no entry for R1
|
||||||
|
|
||||||
|
@wip
|
||||||
|
Scenario: Type tag is renamed to something unknown
|
||||||
|
When loading osm data
|
||||||
|
"""
|
||||||
|
n200 x0 y0
|
||||||
|
n201 x0 y0.0001
|
||||||
|
n202 x0.0001 y0.0001
|
||||||
|
n203 x0.0001 y0
|
||||||
|
w2 Tref=45 Nn200,n201,n202,n203,n200
|
||||||
|
r1 Ttype=multipolygon,tourism=hotel,name=XY Mw2@
|
||||||
|
"""
|
||||||
|
Then place contains
|
||||||
|
| object | class | type | name
|
||||||
|
| R1 | tourism | hotel | 'name' : 'XZ'
|
||||||
|
When updating osm data
|
||||||
|
"""
|
||||||
|
r1 Ttype=multipolygonn,tourism=hotel,name=XY Mw2@
|
||||||
|
"""
|
||||||
|
Then place has no entry for R1
|
||||||
|
|
||||||
26
test/bdd/osm2pgsql/update/simple.feature
Normal file
26
test/bdd/osm2pgsql/update/simple.feature
Normal file
@@ -0,0 +1,26 @@
|
|||||||
|
@DB
|
||||||
|
Feature: Update of simple objects by osm2pgsql
|
||||||
|
Testing basic update functions of osm2pgsql.
|
||||||
|
|
||||||
|
Scenario: Import object with two main tags
|
||||||
|
When loading osm data
|
||||||
|
"""
|
||||||
|
n1 Ttourism=hotel,amenity=restaurant,name=foo
|
||||||
|
n2 Tplace=locality,name=spotty
|
||||||
|
"""
|
||||||
|
Then place contains
|
||||||
|
| object | type | name
|
||||||
|
| N1:tourism | hotel | 'name' : 'foo'
|
||||||
|
| N1:amenity | restaurant | 'name' : 'foo'
|
||||||
|
| N2:place | locality | 'name' : 'spotty'
|
||||||
|
When updating osm data
|
||||||
|
"""
|
||||||
|
n1 dV Ttourism=hotel,name=foo
|
||||||
|
n2 dD
|
||||||
|
"""
|
||||||
|
Then place has no entry for N1:amenity
|
||||||
|
And place has no entry for N2
|
||||||
|
And place contains
|
||||||
|
| object | class | type | name
|
||||||
|
| N1:tourism | tourism | hotel | 'name' : 'foo'
|
||||||
|
|
||||||
@@ -12,8 +12,8 @@ def load_osm_file(context):
|
|||||||
fname = fd.name
|
fname = fd.name
|
||||||
for line in context.text.splitlines():
|
for line in context.text.splitlines():
|
||||||
if line.startswith('n') and line.find(' x') < 0:
|
if line.startswith('n') and line.find(' x') < 0:
|
||||||
line += " x%d y%d" % (random.random()*360 - 180,
|
line += " x%d y%d" % (random.random() * 360 - 180,
|
||||||
random.random()*180 - 90)
|
random.random() * 180 - 90)
|
||||||
fd.write(line.encode('utf-8'))
|
fd.write(line.encode('utf-8'))
|
||||||
fd.write(b'\n')
|
fd.write(b'\n')
|
||||||
|
|
||||||
@@ -31,3 +31,28 @@ def load_osm_file(context):
|
|||||||
|
|
||||||
os.remove(fname)
|
os.remove(fname)
|
||||||
|
|
||||||
|
@when(u'updating osm data')
|
||||||
|
def update_from_osm_file(context):
|
||||||
|
context.nominatim.run_setup_script('create-functions', 'create-partition-functions')
|
||||||
|
|
||||||
|
cur = context.db.cursor()
|
||||||
|
cur.execute("""insert into placex (osm_type, osm_id, class, type, name,
|
||||||
|
admin_level, housenumber, street, addr_place, isin, postcode,
|
||||||
|
country_code, extratags, geometry) select * from place""")
|
||||||
|
context.db.commit()
|
||||||
|
context.nominatim.run_setup_script('index', 'index-noanalyse')
|
||||||
|
context.nominatim.run_setup_script('create-functions', 'create-partition-functions',
|
||||||
|
'enable-diff-updates')
|
||||||
|
|
||||||
|
# create a OSM file in /tmp and import it
|
||||||
|
with tempfile.NamedTemporaryFile(dir='/tmp', suffix='.opl', delete=False) as fd:
|
||||||
|
fname = fd.name
|
||||||
|
for line in context.text.splitlines():
|
||||||
|
if line.startswith('n') and line.find(' x') < 0:
|
||||||
|
line += " x%d y%d" % (random.random() * 360 - 180,
|
||||||
|
random.random() * 180 - 90)
|
||||||
|
fd.write(line.encode('utf-8'))
|
||||||
|
fd.write(b'\n')
|
||||||
|
|
||||||
|
context.nominatim.run_update_script(import_diff=fname)
|
||||||
|
os.remove(fname)
|
||||||
|
|||||||
Reference in New Issue
Block a user