forked from arp242/goatcounter
/
export_test.go
108 lines (94 loc) · 2.32 KB
/
export_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
// Copyright © 2019 Martin Tournoij – This file is part of GoatCounter and
// published under the terms of a slightly modified EUPL v1.2 license, which can
// be found in the LICENSE file or at https://license.goatcounter.com
package goatcounter_test
import (
"compress/gzip"
"os"
"strings"
"testing"
"time"
"zgo.at/blackmail"
"zgo.at/goatcounter"
"zgo.at/goatcounter/gctest"
"zgo.at/zhttp"
"zgo.at/zstd/zjson"
"zgo.at/ztest"
)
func TestExport(t *testing.T) {
zhttp.InitTpl(nil)
blackmail.DefaultMailer = blackmail.NewMailer(blackmail.ConnectWriter)
ctx, clean := gctest.DB(t)
defer clean()
d1 := time.Date(2019, 6, 18, 0, 0, 0, 0, time.UTC)
d2 := time.Date(2019, 6, 19, 0, 0, 0, 0, time.UTC)
gctest.StoreHits(ctx, t, []goatcounter.Hit{
{Path: "/asd", CreatedAt: d1},
{Path: "/zxc", CreatedAt: d1},
{Path: "/asd", CreatedAt: d2},
}...)
var export goatcounter.Export
defer func() {
if export.Path != "" {
os.Remove(export.Path)
}
}()
t.Run("export", func(t *testing.T) {
fp, err := export.Create(ctx, 0)
if err != nil {
t.Fatal(err)
}
defer fp.Close()
export.Run(ctx, fp, false)
want := strings.ReplaceAll(`{
"id": 1,
"site_id": 1,
"start_from_hit_id": 0,
"last_hit_id": 3,
"path": "%(ANY)goatcounter-export-test-%(YEAR)%(MONTH)%(DAY)T%(ANY)Z-0.csv.gz",
"created_at": "%(YEAR)-%(MONTH)-%(DAY)T%(ANY)Z",
"finished_at": null,
"num_rows": 3,
"size": "0.0",
"hash": "sha256-7b756b6dd4d908eff7f7febad0fbdf59f2d7657d8fd09c8ff5133b45f86b1fbf",
"error": null
}`, "\t", "")
got := string(zjson.MustMarshalIndent(export, "", ""))
if d := ztest.DiffMatch(got, want); d != "" {
t.Fatal(d)
}
var exports goatcounter.Exports
err = exports.List(ctx)
if err != nil {
t.Fatal(err)
}
if len(exports) != 1 {
t.Fatal("exports.List()")
}
})
t.Run("import", func(t *testing.T) {
fp, err := os.Open(export.Path)
if err != nil {
t.Fatal(err)
}
defer fp.Close()
gzfp, err := gzip.NewReader(fp)
if err != nil {
t.Fatal(err)
}
defer gzfp.Close()
goatcounter.Import(ctx, gzfp, false, false)
_, err = goatcounter.Memstore.Persist(ctx)
if err != nil {
t.Fatal(err)
}
var hits goatcounter.Hits
_, err = hits.List(ctx, 100, 0)
if err != nil {
t.Fatal(err)
}
if len(hits) != 6 {
t.Fatalf("len(hits) = %d", len(hits))
}
})
}