imposm3/cache/osm_test.go

182 lines
3.4 KiB
Go
Raw Normal View History

2013-02-12 22:45:49 +04:00
package cache
import (
"io/ioutil"
2013-06-05 13:13:19 +04:00
"math/rand"
2013-02-12 22:45:49 +04:00
"os"
"testing"
2018-04-17 22:06:55 +03:00
"github.com/omniscale/imposm3/element"
2013-02-12 22:45:49 +04:00
)
func TestCreateCache(t *testing.T) {
2018-04-17 22:06:55 +03:00
cache_dir, _ := ioutil.TempDir("", "imposm_test")
2013-02-12 22:45:49 +04:00
defer os.RemoveAll(cache_dir)
2013-07-04 19:27:22 +04:00
cache, err := newNodesCache(cache_dir)
2013-04-24 00:30:41 +04:00
if err != nil {
t.Fatal()
}
2013-02-12 22:45:49 +04:00
defer cache.Close()
if stat, err := os.Stat(cache_dir); err != nil || !stat.IsDir() {
t.Error("cache dir not created")
}
}
func TestReadWriteNode(t *testing.T) {
2018-04-17 22:06:55 +03:00
cache_dir, _ := ioutil.TempDir("", "imposm_test")
defer os.RemoveAll(cache_dir)
2013-07-04 19:27:22 +04:00
cache, err := newNodesCache(cache_dir)
2013-04-24 00:30:41 +04:00
if err != nil {
t.Fatal()
}
2013-04-08 23:45:13 +04:00
node := &element.Node{
OSMElem: element.OSMElem{
Id: 1234,
Tags: element.Tags{"foo": "bar"}},
}
cache.PutNode(node)
cache.Close()
2013-07-04 19:27:22 +04:00
cache, err = newNodesCache(cache_dir)
2013-04-24 00:30:41 +04:00
if err != nil {
t.Fatal()
}
defer cache.Close()
2013-04-24 00:30:41 +04:00
data, err := cache.GetNode(1234)
2013-04-08 23:45:13 +04:00
if data.Id != 1234 || data.Tags["foo"] != "bar" {
t.Errorf("unexpected result of GetNode: %v", data)
}
2013-02-12 22:45:49 +04:00
2013-04-24 00:30:41 +04:00
data, err = cache.GetNode(99)
2013-04-08 23:45:13 +04:00
if data != nil {
t.Error("missing node not nil")
2013-02-12 22:45:49 +04:00
}
2013-04-08 23:45:13 +04:00
2013-02-12 22:45:49 +04:00
}
func TestReadWriteWay(t *testing.T) {
2018-04-17 22:06:55 +03:00
cache_dir, _ := ioutil.TempDir("", "imposm_test")
defer os.RemoveAll(cache_dir)
2013-07-04 19:27:22 +04:00
cache, err := newWaysCache(cache_dir)
2013-04-24 00:30:41 +04:00
if err != nil {
t.Fatal()
}
2013-04-08 23:45:13 +04:00
way := &element.Way{
OSMElem: element.OSMElem{
Id: 1234,
Tags: element.Tags{"foo": "bar"}},
2013-04-24 00:30:41 +04:00
Refs: []int64{942374923, 23948234},
2013-04-08 23:45:13 +04:00
}
cache.PutWay(way)
cache.Close()
2013-07-04 19:27:22 +04:00
cache, err = newWaysCache(cache_dir)
2013-04-24 00:30:41 +04:00
if err != nil {
t.Fatal()
}
defer cache.Close()
2013-04-24 00:30:41 +04:00
data, _ := cache.GetWay(1234)
2013-04-08 23:45:13 +04:00
if data.Id != 1234 || data.Tags["foo"] != "bar" {
t.Errorf("unexpected result of GetWay: %#v", data)
}
2013-04-24 00:30:41 +04:00
if len(data.Refs) != 2 ||
data.Refs[0] != 942374923 ||
data.Refs[1] != 23948234 {
2013-04-08 23:45:13 +04:00
t.Errorf("unexpected result of GetWay: %#v", data)
}
}
func TestReadMissingWay(t *testing.T) {
2018-04-17 22:06:55 +03:00
cache_dir, _ := ioutil.TempDir("", "imposm_test")
2013-04-08 23:45:13 +04:00
defer os.RemoveAll(cache_dir)
2013-07-04 19:27:22 +04:00
cache, err := newWaysCache(cache_dir)
2013-04-24 00:30:41 +04:00
if err != nil {
t.Fatal()
}
2013-04-08 23:45:13 +04:00
defer cache.Close()
2013-04-24 00:30:41 +04:00
data, _ := cache.GetWay(1234)
2013-04-08 23:45:13 +04:00
if data != nil {
t.Errorf("missing way did not return nil")
}
}
func BenchmarkWriteWay(b *testing.B) {
b.StopTimer()
2018-04-17 22:06:55 +03:00
cache_dir, _ := ioutil.TempDir("", "imposm_test")
defer os.RemoveAll(cache_dir)
2013-07-04 19:27:22 +04:00
cache, err := newWaysCache(cache_dir)
2013-04-24 00:30:41 +04:00
if err != nil {
b.Fatal()
}
defer cache.Close()
b.StartTimer()
2013-04-08 23:45:13 +04:00
way := &element.Way{
OSMElem: element.OSMElem{Tags: element.Tags{"foo": "bar"}},
2013-04-24 00:30:41 +04:00
Refs: []int64{942374923, 23948234},
2013-04-08 23:45:13 +04:00
}
for i := 0; i < b.N; i++ {
way.Id = int64(i)
cache.PutWay(way)
}
}
func BenchmarkReadWay(b *testing.B) {
b.StopTimer()
2018-04-17 22:06:55 +03:00
cache_dir, _ := ioutil.TempDir("", "imposm_test")
defer os.RemoveAll(cache_dir)
2013-07-04 19:27:22 +04:00
cache, err := newWaysCache(cache_dir)
2013-04-24 00:30:41 +04:00
if err != nil {
b.Fatal()
}
defer cache.Close()
way := &element.Way{}
for i := 0; i < b.N; i++ {
way.Id = int64(i)
cache.PutWay(way)
}
b.StartTimer()
for i := int64(0); i < int64(b.N); i++ {
2013-04-24 00:30:41 +04:00
if coord, err := cache.GetWay(i); err != nil || coord.Id != i {
b.Fail()
}
}
}
2013-06-05 13:13:19 +04:00
func TestIds(t *testing.T) {
for i := 0; i < 10000; i++ {
id := rand.Int63()
if idFromKeyBuf(idToKeyBuf(id)) != id {
t.Fatal()
}
}
// check that id buffers are in lexical order
var id = int64(0)
var prevKey string
for i := 0; i < 100; i++ {
id += rand.Int63n(1e12)
buf := idToKeyBuf(id)
if prevKey > string(buf) {
t.Fatal()
}
prevKey = string(buf)
}
}