carlos / platform Public

Clone
git clone https://amadan.net/carlos/platform

Plain git — no account needed to clone.

Download

Download this file

1package console
2
3import (
4 "bytes"
5 "encoding/json"
6 "log"
7 "net/http"
8 "strings"
9 "testing"
10
11 "github.com/carlosframework/platform/internal/geo"
12)
13
14func TestAPIGeo(t *testing.T) {
15 fx, token := instanceFixture(t, "code-geo-api")
16 base := fx.ts.URL + "/api/cli/apps/" + fx.sqid + "/titogo/geo"
17 if st, _, _ := rawReq(t, http.MethodGet, base+"?ip=81.2.69.142", token, ""); st != http.StatusServiceUnavailable {
18 t.Fatalf("no reader = %d, want 503", st)
19 }
20 sw := geo.NewSwappable()
21 fx.srv.cfg.GeoIPReader = sw
22 if st, _, _ := rawReq(t, http.MethodGet, base+"?ip=81.2.69.142", token, ""); st != http.StatusServiceUnavailable {
23 t.Fatalf("empty reader = %d, want 503", st)
24 }
25 db, err := geo.OpenMMDB("../geo/testdata/GeoIP2-City-Test.mmdb")
26 if err != nil {
27 t.Fatal(err)
28 }
29 sw.Swap(db)
30 var logs bytes.Buffer
31 prev := log.Writer()
32 log.SetOutput(&logs)
33 defer log.SetOutput(prev)
34 st, _, body := rawReq(t, http.MethodGet, base+"?ip=81.2.69.142", token, "")
35 if st != 200 {
36 t.Fatalf("%d %s", st, body)
37 }
38 var got geoResponse
39 json.Unmarshal([]byte(body), &got)
40 if !got.Found || got.Country != "GB" || got.Subdivision != "GB-ENG" || got.Lat == nil || *got.Lat != 51.51 || got.Source != "GeoIP2-City" {
41 t.Fatalf("answer = %+v", got)
42 }
43 if got.Attribution != "" {
44 t.Fatal("GeoIP2 (commercial) has no known attribution; none must be invented")
45 }
46 if st, _, body := rawReq(t, http.MethodGet, base+"?ip=10.0.0.1", token, ""); st != 200 || !strings.Contains(body, `"found":false`) {
47 t.Fatalf("private address = %d %s", st, body)
48 }
49 if st, _, _ := rawReq(t, http.MethodGet, base+"?ip=not-an-ip", token, ""); st != http.StatusBadRequest {
50 t.Fatalf("bad ip = %d", st)
51 }
52 if st, _, _ := rawReq(t, http.MethodGet, base, token, ""); st != http.StatusBadRequest {
53 t.Fatalf("missing ip = %d", st)
54 }
55 if strings.Contains(logs.String(), "81.2.69.142") {
56 t.Fatalf("the queried address reached the log: %s", logs.String())
57 }
58}
59