add osm2pgsql update tests

This commit is contained in:
Sarah Hoffmann
2016-11-29 21:34:31 +01:00
parent 6f4f19004c
commit 80a74181e4
4 changed files with 181 additions and 4 deletions

View File

@@ -125,8 +125,8 @@ class NominatimEnvironment(object):
def run_setup_script(self, *args, **kwargs):
self.run_nominatim_script('setup', *args, **kwargs)
def run_update_script(self, *args):
self.run_nominatim_script('update', *args)
def run_update_script(self, *args, **kwargs):
self.run_nominatim_script('update', *args, **kwargs)
def run_nominatim_script(self, script, *args, **kwargs):
cmd = [os.path.join(self.build_dir, 'utils', '%s.php' % script)]

View 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

View 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'

View File

@@ -12,8 +12,8 @@ def load_osm_file(context):
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)
line += " x%d y%d" % (random.random() * 360 - 180,
random.random() * 180 - 90)
fd.write(line.encode('utf-8'))
fd.write(b'\n')
@@ -31,3 +31,28 @@ def load_osm_file(context):
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)