Skip to content

Commit 2949e07

Browse files
authored
Replace submodule for generated test db (#63) (#64)
Finally addresses #35.
1 parent 005755b commit 2949e07

File tree

12 files changed

+139
-46
lines changed

12 files changed

+139
-46
lines changed

.gitmodules

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +0,0 @@
1-
[submodule "maxmind-db"]
2-
path = maxmind-db
3-
url = https://github.com/maxmind/MaxMind-DB.git

Makefile.am

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,3 @@ SUBDIRS = src
55
DISTCHECK_CONFIGURE_FLAGS = VMOD_DIR='$${libdir}/varnish/vmods'
66

77
dist_doc_DATA = LICENSE
8-
9-
EXTRA_DIST = $(top_srcdir)/maxmind-db/LICENSE \
10-
$(top_srcdir)/maxmind-db/test-data/*.mmdb

maxmind-db

Lines changed: 0 additions & 1 deletion
This file was deleted.

src/tests/b00000.vtc

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,14 @@ server s1 {
55
txresp
66
} -start
77

8-
shell "cp ${vmod_topsrc}/maxmind-db/test-data/*.mmdb ${tmpdir}"
8+
shell "cp ${vmod_topsrc}/src/tests/libvmod-geoip2.mmdb ${tmpdir}"
99

1010
varnish v1 -vcl+backend {
1111
import geoip2 from "${vmod_topbuild}/src/.libs/libvmod_geoip2.so";
1212
import std;
1313

1414
sub vcl_init {
15-
new db1 = geoip2.geoip2(
16-
"${tmpdir}/MaxMind-DB-test-decoder.mmdb");
15+
new db1 = geoip2.geoip2("${tmpdir}/libvmod-geoip2.mmdb");
1716
}
1817

1918
sub vcl_deliver {

src/tests/b00001.vtc

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -5,19 +5,16 @@ server s1 {
55
txresp
66
} -start
77

8-
shell "cp ${vmod_topsrc}/maxmind-db/test-data/*.mmdb ${tmpdir}"
8+
shell "cp ${vmod_topsrc}/src/tests/libvmod-geoip2.mmdb ${tmpdir}"
99

1010
varnish v1 -vcl+backend {
1111
import geoip2 from "${vmod_topbuild}/src/.libs/libvmod_geoip2.so";
1212
import std;
1313

1414
sub vcl_init {
15-
new db1 = geoip2.geoip2(
16-
"${tmpdir}/GeoIP2-City-Test.mmdb");
17-
new db2 = geoip2.geoip2(
18-
"${tmpdir}/GeoIP2-Connection-Type-Test.mmdb");
19-
new db3 = geoip2.geoip2(
20-
"${tmpdir}/GeoIP2-ISP-Test.mmdb");
15+
new db1 = geoip2.geoip2("${tmpdir}/libvmod-geoip2.mmdb");
16+
new db2 = geoip2.geoip2("${tmpdir}/libvmod-geoip2.mmdb");
17+
new db3 = geoip2.geoip2("${tmpdir}/libvmod-geoip2.mmdb");
2118
}
2219

2320
sub vcl_deliver {

src/tests/b00002.vtc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ server s1 -repeat 2 {
55
txresp
66
} -start
77

8-
shell "cp ${vmod_topsrc}/maxmind-db/test-data/*.mmdb ${tmpdir}"
8+
shell "cp ${vmod_topsrc}/src/tests/libvmod-geoip2.mmdb ${tmpdir}"
99

1010
varnish v1 -arg "-p thread_pools=1" -vcl+backend { } -start
1111

@@ -25,7 +25,7 @@ varnish v1 -vcl+backend {
2525
import std;
2626

2727
sub vcl_init {
28-
new db = geoip2.geoip2("${tmpdir}/GeoIP2-City-Test.mmdb");
28+
new db = geoip2.geoip2("${tmpdir}/libvmod-geoip2.mmdb");
2929
}
3030

3131
sub vcl_deliver {

src/tests/b00004.vtc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ server s1 {
55
txresp
66
} -start
77

8-
shell "cp ${vmod_topsrc}/maxmind-db/test-data/*.mmdb ${tmpdir}"
8+
shell "cp ${vmod_topsrc}/src/tests/libvmod-geoip2.mmdb ${tmpdir}"
99

1010
varnish v1 -vcl+backend {
1111
import geoip2 from "${vmod_topbuild}/src/.libs/libvmod_geoip2.so";
1212
import std;
1313

1414
sub vcl_init {
15-
new db = geoip2.geoip2("${tmpdir}/GeoIP2-City-Test.mmdb");
15+
new db = geoip2.geoip2("${tmpdir}/libvmod-geoip2.mmdb");
1616
std.log(db.lookup(
1717
"city/names/en",
1818
std.ip("0.0.0.0", "0.0.0.0")));

src/tests/b00005.vtc

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,15 +5,15 @@ server s1 {
55
txresp
66
} -start
77

8-
shell "cp ${vmod_topsrc}/maxmind-db/test-data/*.mmdb ${tmpdir}"
8+
shell "cp ${vmod_topsrc}/src/tests/libvmod-geoip2.mmdb ${tmpdir}"
99

1010
varnish v1 -vcl+backend {
1111
import geoip2 from "${vmod_topbuild}/src/.libs/libvmod_geoip2.so";
1212
import std;
1313
import vtc;
1414

1515
sub vcl_init {
16-
new db = geoip2.geoip2("${tmpdir}/GeoIP2-City-Test.mmdb");
16+
new db = geoip2.geoip2("${tmpdir}/libvmod-geoip2.mmdb");
1717
std.log(db.lookup("city/names/en", vtc.no_ip()));
1818
}
1919
} -start

src/tests/libvmod-geoip2.mmdb

1.97 KB
Binary file not shown.

src/tests/mmdb-writer.go

Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
package main
2+
3+
import (
4+
"encoding/csv"
5+
"encoding/hex"
6+
"io"
7+
"log"
8+
"net"
9+
"os"
10+
"strconv"
11+
"strings"
12+
13+
"github.com/maxmind/mmdbwriter"
14+
"github.com/maxmind/mmdbwriter/inserter"
15+
"github.com/maxmind/mmdbwriter/mmdbtype"
16+
)
17+
18+
func makeRecord(key, mmdbType, value string) mmdbtype.DataType {
19+
var mmdbValue mmdbtype.DataType
20+
switch mmdbType {
21+
case "bool":
22+
v, _ := strconv.ParseBool(value)
23+
mmdbValue = mmdbtype.Bool(v)
24+
case "bytes":
25+
v, _ := hex.DecodeString(value)
26+
mmdbValue = mmdbtype.Bytes(v)
27+
case "double":
28+
v, _ := strconv.ParseFloat(value, 64)
29+
mmdbValue = mmdbtype.Float64(v)
30+
case "float":
31+
v, _ := strconv.ParseFloat(value, 32)
32+
mmdbValue = mmdbtype.Float32(v)
33+
case "int32":
34+
v, _ := strconv.ParseInt(value, 10, 32)
35+
mmdbValue = mmdbtype.Int32(v)
36+
case "uint16":
37+
v, _ := strconv.ParseInt(value, 10, 16)
38+
mmdbValue = mmdbtype.Uint16(v)
39+
case "uint32":
40+
v, _ := strconv.ParseInt(value, 10, 32)
41+
mmdbValue = mmdbtype.Uint32(v)
42+
case "uint64":
43+
v, _ := strconv.ParseInt(value, 10, 64)
44+
mmdbValue = mmdbtype.Uint64(v)
45+
case "string":
46+
mmdbValue = mmdbtype.String(value)
47+
case "map":
48+
keys := strings.Split(key, "/")
49+
key = keys[0]
50+
mmdbValue = mmdbtype.Map{
51+
mmdbtype.String(keys[1]): mmdbtype.Map{
52+
mmdbtype.String(keys[2]): mmdbtype.String(value),
53+
},
54+
}
55+
}
56+
record := mmdbtype.Map{}
57+
record[mmdbtype.String(key)] = mmdbValue
58+
59+
return record
60+
}
61+
62+
func main() {
63+
writer, err := mmdbwriter.New(
64+
mmdbwriter.Options{
65+
DatabaseType: "libvmod-geoip2",
66+
Description: map[string]string{"en": "libvmod-geoip2 test database"},
67+
IncludeReservedNetworks: true,
68+
Inserter: inserter.TopLevelMergeWith,
69+
},
70+
)
71+
if err != nil {
72+
log.Fatal(err)
73+
}
74+
75+
file, err := os.Open("test-data.csv")
76+
if err != nil {
77+
log.Fatal(err)
78+
}
79+
80+
reader := csv.NewReader(file)
81+
82+
for {
83+
row, err := reader.Read()
84+
if err == io.EOF {
85+
break
86+
}
87+
if err != nil {
88+
log.Fatal(err)
89+
}
90+
91+
_, network, err := net.ParseCIDR(row[0])
92+
if err != nil {
93+
log.Fatal(err)
94+
}
95+
96+
record := makeRecord(row[1], row[2], row[3])
97+
err = writer.Insert(network, record)
98+
if err != nil {
99+
log.Fatal(err)
100+
}
101+
}
102+
103+
file, err = os.Create("libvmod-geoip2.mmdb")
104+
if err != nil {
105+
log.Fatal(err)
106+
}
107+
108+
_, err = writer.WriteTo(file)
109+
if err != nil {
110+
log.Fatal(err)
111+
}
112+
}

0 commit comments

Comments
 (0)