imposm3/test/completedb_test.go

790 lines
23 KiB
Go

package test
import (
"database/sql"
"fmt"
"io/ioutil"
"os"
"github.com/omniscale/imposm3/cache"
"github.com/omniscale/imposm3/element"
"github.com/omniscale/imposm3/geom"
"github.com/omniscale/imposm3/proj"
"testing"
"github.com/omniscale/imposm3/geom/geos"
)
var ts importTestSuite
func TestComplete_Prepare(t *testing.T) {
var err error
ts.dir, err = ioutil.TempDir("", "imposm_test")
if err != nil {
t.Fatal(err)
}
ts.config = importConfig{
connection: "postgis://",
cacheDir: ts.dir,
osmFileName: "generated/complete_db.pbf",
mappingFileName: "complete_db_mapping.json",
}
ts.g = geos.NewGeos()
ts.db, err = sql.Open("postgres", "sslmode=disable")
if err != nil {
t.Fatal(err)
}
ts.dropSchemas()
}
func TestComplete_Import(t *testing.T) {
if ts.tableExists(t, dbschemaImport, "osm_roads") != false {
t.Fatalf("table osm_roads exists in schema %s", dbschemaImport)
}
ts.importOsm(t)
if ts.tableExists(t, dbschemaImport, "osm_roads") != true {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaImport)
}
}
func TestComplete_Deploy(t *testing.T) {
ts.deployOsm(t)
if ts.tableExists(t, dbschemaImport, "osm_roads") != false {
t.Fatalf("table osm_roads exists in schema %s", dbschemaImport)
}
if ts.tableExists(t, dbschemaProduction, "osm_roads") != true {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaProduction)
}
}
func TestComplete_OnlyNewStyleMultipolgon(t *testing.T) {
assertRecords(t, []checkElem{
{"osm_landusages", -1001, "wood", nil},
{"osm_landusages", -1011, Missing, nil},
{"osm_landusages", -1021, Missing, nil},
})
}
func TestComplete_LandusageToWaterarea1(t *testing.T) {
// Parks inserted into landusages
cache := ts.cache(t)
defer cache.Close()
assertCachedWay(t, cache, 11001)
assertCachedWay(t, cache, 13001)
assertRecords(t, []checkElem{
{"osm_waterareas", 11001, Missing, nil},
{"osm_waterareas", -13001, Missing, nil},
{"osm_waterareas_gen0", 11001, Missing, nil},
{"osm_waterareas_gen0", -13001, Missing, nil},
{"osm_waterareas_gen1", 11001, Missing, nil},
{"osm_waterareas_gen1", -13001, Missing, nil},
{"osm_landusages", 11001, "park", nil},
{"osm_landusages", -13001, "park", nil},
{"osm_landusages_gen0", 11001, "park", nil},
{"osm_landusages_gen0", -13001, "park", nil},
{"osm_landusages_gen1", 11001, "park", nil},
{"osm_landusages_gen1", -13001, "park", nil},
})
}
func TestComplete_ChangedHoleTags1(t *testing.T) {
// Multipolygon relation with untagged hole
cache := ts.cache(t)
defer cache.Close()
assertCachedWay(t, cache, 14001)
assertCachedWay(t, cache, 14011)
assertRecords(t, []checkElem{
{"osm_waterareas", 14011, Missing, nil},
{"osm_waterareas", -14011, Missing, nil},
{"osm_landusages", 14001, "park", nil},
{"osm_landusages", -14001, Missing, nil},
})
}
func TestComplete_SplitOuterMultipolygonWay1(t *testing.T) {
// Single outer way of multipolygon was inserted.
assertRecords(t, []checkElem{
{"osm_roads", 15002, Missing, nil},
{"osm_landusages", -15001, "park", nil},
})
assertGeomArea(t, checkElem{"osm_landusages", -15001, "park", nil}, 9816216452)
}
func TestComplete_MergeOuterMultipolygonWay1(t *testing.T) {
// Splitted outer way of multipolygon was inserted.
assertRecords(t, []checkElem{
{"osm_landusages", -16001, "park", nil},
{"osm_roads", 16002, "residential", nil},
})
assertGeomArea(t, checkElem{"osm_landusages", -16001, "park", nil}, 12779350582)
}
func TestComplete_BrokenMultipolygonWays(t *testing.T) {
// MultiPolygons with broken outer ways are handled.
// outer way does not merge (17002 has one node)
assertRecords(t, []checkElem{
{"osm_landusages", -17001, Missing, nil},
{"osm_roads", 17001, "residential", nil},
{"osm_roads", 17002, Missing, nil},
})
// outer way does not merge (17102 has no nodes)
assertRecords(t, []checkElem{
{"osm_landusages", -17101, Missing, nil},
{"osm_roads", 17101, "residential", nil},
{"osm_roads", 17102, Missing, nil},
})
}
func TestComplete_NodeWayInsertedTwice(t *testing.T) {
// Way with multiple mappings is inserted twice in same table
rows := ts.queryRows(t, "osm_roads", 18001)
if len(rows) != 2 || rows[0].osmType != "residential" || rows[1].osmType != "tram" {
t.Errorf("unexpected roads: %v", rows)
}
}
func TestComplete_OuterWayInsertedTwice(t *testing.T) {
// Outer way with different tag value is inserted twice into same table
// behavior changed from pre-old-style-mp-removal:
// test outer way not inserted (different tag but same table)
assertRecords(t, []checkElem{
{"osm_landusages", -19001, "farmland", nil},
{"osm_landusages", 19002, "farmyard", nil},
{"osm_landusages", 19001, "farm", nil},
})
}
func TestComplete_OuterWayInserted(t *testing.T) {
// Outer way with different tag is inserted twice into different table
assertRecords(t, []checkElem{
{"osm_landusages", 19101, "farm", nil},
{"osm_landusages", 19102, "farmyard", nil},
{"osm_admin", -19101, "administrative", nil},
})
}
func TestComplete_NodeWayRefAfterDelete1(t *testing.T) {
// Nodes references way
cache := ts.diffCache(t)
defer cache.Close()
if ids := cache.Coords.Get(20001); len(ids) != 1 || ids[0] != 20001 {
t.Error("node does not references way")
}
if ids := cache.Coords.Get(20002); len(ids) != 1 || ids[0] != 20001 {
t.Error("node does not references way")
}
assertRecords(t, []checkElem{
{"osm_roads", 20001, "residential", nil},
{"osm_barrierpoints", 20001, "block", nil},
})
}
func TestComplete_WayRelRefAfterDelete1(t *testing.T) {
// Ways references relation
cache := ts.diffCache(t)
defer cache.Close()
if ids := cache.Ways.Get(21001); len(ids) != 1 || ids[0] != 21001 {
t.Error("way does not references relation")
}
assertRecords(t, []checkElem{
{"osm_roads", 21001, "residential", nil},
{"osm_landusages", -21001, "park", nil},
})
}
func TestComplete_OldStyleMpRelationWayInserted(t *testing.T) {
// Old-style-mp: Part of relation is now inserted.
assertRecords(t, []checkElem{
{"osm_landusages", -9001, "park", map[string]string{"name": "rel 9001"}},
{"osm_landusages", 9009, "park", map[string]string{"name": "way 9009"}},
{"osm_landusages", -9101, "park", map[string]string{"name": "rel 9101"}},
{"osm_landusages", 9109, "park", map[string]string{"name": "way 9109"}},
{"osm_landusages", 9110, "scrub", nil},
})
}
func TestComplete_RelationWaysInserted(t *testing.T) {
// Outer ways of multipolygon are inserted.
assertRecords(t, []checkElem{
// no name on relation
{"osm_landusages", -9201, "park", map[string]string{"name": ""}},
{"osm_landusages", 9201, Missing, nil},
{"osm_landusages", 9209, Missing, nil},
{"osm_landusages", 9210, Missing, nil},
// outer ways of multipolygon stand for their own
{"osm_roads", 9209, "secondary", map[string]string{"name": "9209"}},
{"osm_roads", 9210, "residential", map[string]string{"name": "9210"}},
})
}
func TestComplete_RelationWayInserted(t *testing.T) {
// Part of relation was inserted twice.
assertRecords(t, []checkElem{
{"osm_landusages", -8001, "park", map[string]string{"name": "rel 8001"}},
{"osm_roads", 8009, "residential", nil},
})
}
func TestComplete_SingleNodeWaysNotInserted(t *testing.T) {
// Ways with single/duplicate nodes are not inserted.
assertRecords(t, []checkElem{
{"osm_landusages", 30001, Missing, nil},
{"osm_landusages", 30002, Missing, nil},
{"osm_landusages", 30003, Missing, nil},
})
}
func TestComplete_PolygonWithDuplicateNodesIsValid(t *testing.T) {
// Polygon with duplicate nodes is valid.
assertGeomValid(t, checkElem{"osm_landusages", 30005, "park", nil})
}
func TestComplete_IncompletePolygons(t *testing.T) {
// Non-closed/incomplete polygons are not inserted.
assertRecords(t, []checkElem{
{"osm_landusages", 30004, Missing, nil},
{"osm_landusages", 30006, Missing, nil},
})
}
func TestComplete_ResidentialToSecondary(t *testing.T) {
// Residential road is not in roads_gen0/1.
assertRecords(t, []checkElem{
{"osm_roads", 40001, "residential", nil},
{"osm_roads_gen0", 40001, Missing, nil},
{"osm_roads_gen1", 40002, Missing, nil},
})
}
func TestComplete_RelationBeforeRemove(t *testing.T) {
// Relation and way is inserted.
assertRecords(t, []checkElem{
{"osm_buildings", 50011, "yes", nil},
{"osm_landusages", -50021, "park", nil},
})
}
func TestComplete_OldStyleRelationIsIgnored(t *testing.T) {
// Relation without tags is not inserted.
assertRecords(t, []checkElem{
{"osm_buildings", 50111, "yes", nil},
{"osm_buildings", -50121, Missing, nil},
})
}
func TestComplete_DuplicateIds(t *testing.T) {
// Relation/way with same ID is inserted.
assertRecords(t, []checkElem{
{"osm_buildings", 51001, "way", nil},
{"osm_buildings", -51001, "mp", nil},
{"osm_buildings", 51011, "way", nil},
{"osm_buildings", -51011, "mp", nil},
})
}
func TestComplete_RelationUpdatedByNode(t *testing.T) {
// Relations was updated after modified node.
assertGeomArea(t, checkElem{"osm_buildings", -52121, "yes", nil}, 13653930440.868315)
}
func TestComplete_GeneralizedBananaPolygonIsValid(t *testing.T) {
// Generalized polygons are valid.
assertGeomValid(t, checkElem{"osm_landusages", 7101, Missing, nil})
// simplified geometies are valid too
assertGeomValid(t, checkElem{"osm_landusages_gen0", 7101, Missing, nil})
assertGeomValid(t, checkElem{"osm_landusages_gen1", 7101, Missing, nil})
}
func TestComplete_GeneralizedLinestringIsValid(t *testing.T) {
// Generalized linestring is valid.
// geometry is not simple, but valid
assertGeomLength(t, checkElem{"osm_roads", 7201, "primary", nil}, 1243660.044819)
if ts.g.IsSimple(ts.queryGeom(t, "osm_roads", 7201)) {
t.Errorf("expected non-simple geometry for 7201")
}
// check that geometry 'survives' simplification
assertGeomLength(t, checkElem{"osm_roads_gen0", 7201, "primary", nil}, 1243660.044819)
assertGeomLength(t, checkElem{"osm_roads_gen1", 7201, "primary", nil}, 1243660.044819)
}
func TestComplete_RingWithGap(t *testing.T) {
// Multipolygon with gap (overlapping but different endpoints) gets closed
assertGeomValid(t, checkElem{"osm_landusages", -7301, Missing, nil})
// but not way
assertRecords(t, []checkElem{
checkElem{"osm_landusages", 7311, Missing, nil},
})
}
func TestComplete_MultipolygonWithOpenRing(t *testing.T) {
// Multipolygon is inserted even if there is an open ring/member
assertGeomValid(t, checkElem{"osm_landusages", -7401, Missing, nil})
}
func TestComplete_UpdatedNodes1(t *testing.T) {
// Zig-Zag line is inserted.
assertGeomLength(t, checkElem{"osm_roads", 60000, Missing, nil}, 14035.61150207768)
}
func TestComplete_UpdateNodeToCoord1(t *testing.T) {
// Node is inserted with tag.
assertRecords(t, []checkElem{
{"osm_amenities", 70001, "police", nil},
{"osm_amenities", 70002, Missing, nil},
})
}
func TestComplete_EnumerateKey(t *testing.T) {
// Enumerate from key.
assertRecords(t, []checkElem{
{"osm_landusages", 100001, "park", map[string]string{"enum": "1"}},
{"osm_landusages", 100002, "park", map[string]string{"enum": "0"}},
{"osm_landusages", 100003, "wood", map[string]string{"enum": "15"}},
})
}
func TestComplete_AreaMapping(t *testing.T) {
// Mapping type dependent area-defaults.
assertRecords(t, []checkElem{
// highway=pedestrian
{"osm_roads", 301151, "pedestrian", nil},
{"osm_landusages", 301151, Missing, nil},
// // highway=pedestrian, area=yes
{"osm_roads", 301152, Missing, nil},
{"osm_landusages", 301152, "pedestrian", nil},
// // leisure=track
{"osm_roads", 301153, Missing, nil},
{"osm_landusages", 301153, "track", nil},
// // leisure=track, area=no
{"osm_roads", 301154, "track", nil},
{"osm_landusages", 301154, Missing, nil},
})
}
func TestComplete_HstoreTags(t *testing.T) {
// Mapping type dependent area-defaults.
assertHstore(t, []checkElem{
{"osm_buildings", 401151, "*", map[string]string{"amenity": "fuel", "opening_hours": "24/7"}},
})
}
// #######################################################################
func TestComplete_Update(t *testing.T) {
ts.updateOsm(t, "./generated/complete_db.osc.gz")
}
// #######################################################################
func TestComplete_NoDuplicates(t *testing.T) {
// Relations/ways are only inserted once Checks #66
for _, table := range []string{"osm_roads", "osm_landusages"} {
rows, err := ts.db.Query(
fmt.Sprintf(`SELECT osm_id, count(osm_id) FROM "%s"."%s" GROUP BY osm_id HAVING count(osm_id) > 1`,
dbschemaProduction, table))
if err != nil {
t.Fatal(err)
}
var osmId, count int64
for rows.Next() {
if err := rows.Scan(&osmId, &count); err != nil {
t.Fatal(err)
}
if table == "osm_roads" && osmId == 18001 {
// # duplicate for TestNodeWayInsertedTwice is expected
if count != 2 {
t.Error("highway not inserted twice", osmId, count)
}
} else {
t.Error("found duplicate way in osm_roads", osmId, count)
}
}
}
}
func TestComplete_UpdatedLandusage(t *testing.T) {
// Multipolygon relation was modified
nd := element.Node{Long: 13.4, Lat: 47.5}
proj.NodeToMerc(&nd)
point, err := geom.Point(ts.g, nd)
if err != nil {
t.Fatal(err)
}
poly := ts.queryGeom(t, "osm_landusages", -1001)
// point not in polygon after update
if ts.g.Intersects(point, poly) {
t.Error("point intersects polygon")
}
}
func TestComplete_PartialDelete(t *testing.T) {
// Deleted relation but nodes are still cached
cache := ts.cache(t)
defer cache.Close()
assertCachedNode(t, cache, 2001)
assertCachedWay(t, cache, 2001)
assertCachedWay(t, cache, 2002)
assertRecords(t, []checkElem{
{"osm_landusages", -2001, Missing, nil},
{"osm_landusages", 2001, Missing, nil},
})
}
func TestComplete_UpdatedNodes(t *testing.T) {
// Nodes were added, modified or deleted
c := ts.cache(t)
defer c.Close()
if _, err := c.Coords.GetCoord(10000); err != cache.NotFound {
t.Fatal("coord not missing")
}
assertRecords(t, []checkElem{
{"osm_places", 10001, "village", map[string]string{"name": "Bar"}},
{"osm_places", 10002, "city", map[string]string{"name": "Baz"}},
})
}
func TestComplete_LandusageToWaterarea2(t *testing.T) {
// Parks converted to water moved from landusages to waterareas
assertRecords(t, []checkElem{
{"osm_waterareas", 11001, "water", nil},
{"osm_waterareas", -13001, "water", nil},
{"osm_waterareas_gen0", 11001, "water", nil},
{"osm_waterareas_gen0", -13001, "water", nil},
{"osm_waterareas_gen1", 11001, "water", nil},
{"osm_waterareas_gen1", -13001, "water", nil},
{"osm_landusages", 11001, Missing, nil},
{"osm_landusages", -13001, Missing, nil},
{"osm_landusages_gen0", 11001, Missing, nil},
{"osm_landusages_gen0", -13001, Missing, nil},
{"osm_landusages_gen1", 11001, Missing, nil},
{"osm_landusages_gen1", -13001, Missing, nil},
})
}
func TestComplete_ChangedHoleTags2(t *testing.T) {
// Newly tagged hole is inserted
cache := ts.cache(t)
defer cache.Close()
assertCachedWay(t, cache, 14001)
assertCachedWay(t, cache, 14011)
assertGeomArea(t, checkElem{"osm_waterareas", 14011, "water", nil}, 26672019779)
assertGeomArea(t, checkElem{"osm_landusages", -14001, "park", nil}, 10373697182)
assertRecords(t, []checkElem{
{"osm_waterareas", -14011, Missing, nil},
{"osm_landusages", -14001, "park", nil},
})
}
func TestComplete_SplitOuterMultipolygonWay2(t *testing.T) {
// Splitted outer way of multipolygon was inserted
diffCache := ts.diffCache(t)
defer diffCache.Close()
if ids := diffCache.Ways.Get(15001); len(ids) != 1 || ids[0] != 15001 {
t.Error("way does not references relation")
}
if ids := diffCache.Ways.Get(15002); len(ids) != 1 || ids[0] != 15001 {
t.Error("way does not references relation")
}
assertRecords(t, []checkElem{
{"osm_landusages", 15001, Missing, nil},
{"osm_roads", 15002, "residential", nil},
})
assertGeomArea(t, checkElem{"osm_landusages", -15001, "park", nil}, 9816216452)
}
func TestComplete_MergeOuterMultipolygonWay2(t *testing.T) {
// Merged outer way of multipolygon was inserted
diffCache := ts.diffCache(t)
defer diffCache.Close()
if ids := diffCache.Ways.Get(16001); len(ids) != 1 || ids[0] != 16001 {
t.Error("way does not references relation")
}
if ids := diffCache.Ways.Get(16002); len(ids) != 0 {
t.Error("way references relation")
}
cache := ts.cache(t)
defer cache.Close()
rel, err := cache.Relations.GetRelation(16001)
if err != nil {
t.Fatal(err)
}
if len(rel.Members) != 2 || rel.Members[0].Id != 16001 || rel.Members[1].Id != 16011 {
t.Error("unexpected relation members", rel)
}
assertRecords(t, []checkElem{
{"osm_landusages", 16001, Missing, nil},
{"osm_roads", 16002, Missing, nil},
})
assertGeomArea(t, checkElem{"osm_landusages", -16001, "park", nil}, 12779350582)
}
func TestComplete_NodeWayRefAfterDelete2(t *testing.T) {
// Node does not referece deleted way
diffCache := ts.diffCache(t)
defer diffCache.Close()
if ids := diffCache.Coords.Get(20001); len(ids) != 0 {
t.Error("node references way")
}
c := ts.cache(t)
defer c.Close()
_, err := c.Coords.GetCoord(20002)
if err != cache.NotFound {
t.Error("found deleted node")
}
assertRecords(t, []checkElem{
{"osm_roads", 20001, Missing, nil},
{"osm_barrierpoints", 20001, "block", nil},
})
}
func TestComplete_WayRelRefAfterDelete2(t *testing.T) {
// Way does not referece deleted relation
diffCache := ts.diffCache(t)
defer diffCache.Close()
if ids := diffCache.Ways.Get(21001); len(ids) != 0 {
t.Error("way references relation")
}
assertRecords(t, []checkElem{
{"osm_roads", 21001, "residential", nil},
{"osm_landusages", 21001, Missing, nil},
{"osm_landusages", -21001, Missing, nil},
})
}
func TestComplete_ResidentialToSecondary2(t *testing.T) {
// New secondary (from residential) is now in roads_gen0/1.
assertRecords(t, []checkElem{
{"osm_roads", 40001, "secondary", nil},
{"osm_roads_gen0", 40001, "secondary", nil},
{"osm_roads_gen1", 40001, "secondary", nil},
})
}
func TestComplete_RelationAfterRemove(t *testing.T) {
// Relation is deleted and way is still present.
assertRecords(t, []checkElem{
{"osm_buildings", 50011, "yes", nil},
{"osm_landusages", 50021, Missing, nil},
{"osm_landusages", -50021, Missing, nil},
})
}
func TestComplete_RelationWithoutTags2(t *testing.T) {
// Relation without tags is removed.
c := ts.cache(t)
defer c.Close()
assertCachedWay(t, c, 50111)
_, err := c.Ways.GetWay(20002)
if err != cache.NotFound {
t.Error("found deleted node")
}
assertRecords(t, []checkElem{
{"osm_buildings", 50111, "yes", nil},
{"osm_buildings", 50121, Missing, nil},
{"osm_buildings", -50121, Missing, nil},
})
}
func TestComplete_DuplicateIds2(t *testing.T) {
// Only relation/way with same ID was deleted.
assertRecords(t, []checkElem{
{"osm_buildings", 51001, "way", nil},
{"osm_buildings", -51001, Missing, nil},
{"osm_buildings", 51011, Missing, nil},
{"osm_buildings", -51011, "mp", nil},
})
}
func TestComplete_RelationUpdatedByNode2(t *testing.T) {
// Relations was updated after modified node.
assertGeomArea(t, checkElem{"osm_buildings", -52121, "yes", nil}, 16276875196.653734)
}
func TestComplete_UpdatedWay2(t *testing.T) {
// All nodes of straightened way are updated.
// new length 0.1 degree
assertGeomLength(t, checkElem{"osm_roads", 60000, "park", nil}, 20037508.342789244/180.0/10.0)
}
func TestComplete_UpdateNodeToCoord2(t *testing.T) {
// Node is becomes coord after tags are removed.
assertRecords(t, []checkElem{
{"osm_amenities", 70001, Missing, nil},
{"osm_amenities", 70002, "police", nil},
})
}
func TestComplete_NoDuplicateInsert(t *testing.T) {
// Relation is not inserted again if a nother relation with the same way was modified
// Checks #65
assertRecords(t, []checkElem{
{"osm_landusages", -201191, "park", nil},
{"osm_landusages", -201192, "forest", nil},
{"osm_roads", 201151, "residential", nil},
})
}
func TestComplete_UnsupportedRelation(t *testing.T) {
// Unsupported relation type is not inserted with update
assertRecords(t, []checkElem{
{"osm_landusages", -201291, Missing, nil},
{"osm_landusages", 201251, "park", nil},
})
}
// #######################################################################
func TestComplete_DeployRevert(t *testing.T) {
if ts.tableExists(t, dbschemaImport, "osm_roads") {
t.Fatalf("table osm_roads exists in schema %s", dbschemaImport)
}
if !ts.tableExists(t, dbschemaProduction, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaProduction)
}
if ts.tableExists(t, dbschemaBackup, "osm_roads") {
t.Fatalf("table osm_roads exists in schema %s", dbschemaBackup)
}
ts.importOsm(t)
if !ts.tableExists(t, dbschemaImport, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaImport)
}
if !ts.tableExists(t, dbschemaProduction, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaProduction)
}
if ts.tableExists(t, dbschemaBackup, "osm_roads") {
t.Fatalf("table osm_roads exists in schema %s", dbschemaBackup)
}
ts.deployOsm(t)
if ts.tableExists(t, dbschemaImport, "osm_roads") {
t.Fatalf("table osm_roads exists in schema %s", dbschemaImport)
}
if !ts.tableExists(t, dbschemaProduction, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaProduction)
}
if !ts.tableExists(t, dbschemaBackup, "osm_roads") {
t.Fatalf("table osm_roads does exists in schema %s", dbschemaBackup)
}
ts.revertDeployOsm(t)
if !ts.tableExists(t, dbschemaImport, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaImport)
}
if !ts.tableExists(t, dbschemaProduction, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaProduction)
}
if ts.tableExists(t, dbschemaBackup, "osm_roads") {
t.Fatalf("table osm_roads exists in schema %s", dbschemaBackup)
}
}
func TestComplete_RemoveBackup(t *testing.T) {
if !ts.tableExists(t, dbschemaImport, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaImport)
}
if !ts.tableExists(t, dbschemaProduction, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaProduction)
}
if ts.tableExists(t, dbschemaBackup, "osm_roads") {
t.Fatalf("table osm_roads exists in schema %s", dbschemaBackup)
}
ts.deployOsm(t)
if ts.tableExists(t, dbschemaImport, "osm_roads") {
t.Fatalf("table osm_roads exists in schema %s", dbschemaImport)
}
if !ts.tableExists(t, dbschemaProduction, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaProduction)
}
if !ts.tableExists(t, dbschemaBackup, "osm_roads") {
t.Fatalf("table osm_roads does exists in schema %s", dbschemaBackup)
}
ts.removeBackupOsm(t)
if ts.tableExists(t, dbschemaImport, "osm_roads") {
t.Fatalf("table osm_roads exists in schema %s", dbschemaImport)
}
if !ts.tableExists(t, dbschemaProduction, "osm_roads") {
t.Fatalf("table osm_roads does not exists in schema %s", dbschemaProduction)
}
if ts.tableExists(t, dbschemaBackup, "osm_roads") {
t.Fatalf("table osm_roads exists in schema %s", dbschemaBackup)
}
}
func TestComplete_Cleanup(t *testing.T) {
ts.dropSchemas()
if err := os.RemoveAll(ts.dir); err != nil {
t.Error(err)
}
}