From dc9c5b5a699d918ae5ebe5cc143ff32d3def973f Mon Sep 17 00:00:00 2001 From: cp-20 Date: Mon, 3 Feb 2025 23:56:14 +0900 Subject: [PATCH] feat: template test (must be synced) --- cli/isuc/generator.go | 4 +-- template/cache.tmpl | 9 +++++- template/driver.go | 1 - template/driver.tmpl | 4 +-- generator.go => template/generator.go | 10 +++---- template/generator_test.go | 40 +++++++++++++++++++++++++++ 6 files changed, 57 insertions(+), 11 deletions(-) rename generator.go => template/generator.go (83%) create mode 100644 template/generator_test.go diff --git a/cli/isuc/generator.go b/cli/isuc/generator.go index 28bfd34..fe0eced 100644 --- a/cli/isuc/generator.go +++ b/cli/isuc/generator.go @@ -5,7 +5,7 @@ import ( "os" "github.com/spf13/cobra" - h24w17 "github.com/traP-jp/isuc" + "github.com/traP-jp/isuc/template" ) var generateCmd = &cobra.Command{ @@ -34,7 +34,7 @@ var generateCmd = &cobra.Command{ return fmt.Errorf("error reading schema file: %v", err) } - g := h24w17.NewGenerator(planContent, schemaContent) + g := template.NewGenerator(planContent, schemaContent) g.Generate(distPath) return nil diff --git a/template/cache.tmpl b/template/cache.tmpl index e35a7fc..dbc867a 100644 --- a/template/cache.tmpl +++ b/template/cache.tmpl @@ -130,6 +130,7 @@ func cacheKey(args []driver.Value) string { } func replaceFn(ctx context.Context, key string) (*cacheRows, error) { + start := time.Now() queryerCtx, ok := ctx.Value(queryerCtxKey{}).(driver.QueryerContext) if ok { query := ctx.Value(queryKey{}).(string) @@ -155,7 +156,13 @@ func replaceFn(ctx context.Context, key string) (*cacheRows, error) { if err != nil { return nil, err } - return cacheRows.clone(), nil + result := cacheRows.clone() + + if cache, ok := ctx.Value(cacheWithInfoKey{}).(*cacheWithInfo); ok { + elapsed := time.Since(start) + cache.RecordReplaceTime(elapsed) + } + return result, nil } type syncMap[T any] struct { diff --git a/template/driver.go b/template/driver.go index 7b2ba75..20cbde5 100644 --- a/template/driver.go +++ b/template/driver.go @@ -22,7 +22,6 @@ var tableSchema = make(map[string]domains.TableSchema) // TODO: generate const cachePlanRaw = `` - const schemaRaw = `` func init() { diff --git a/template/driver.tmpl b/template/driver.tmpl index e3d4afc..de20452 100644 --- a/template/driver.tmpl +++ b/template/driver.tmpl @@ -20,8 +20,8 @@ var queryMap = make(map[string]domains.CachePlanQuery) var tableSchema = make(map[string]domains.TableSchema) +// TODO: generate const cachePlanRaw = {{ .CachePlanRaw }} - const schemaRaw = {{ .TableSchemaRaw }} func init() { @@ -49,7 +49,7 @@ func init() { } conditions := query.Select.Conditions - if isSingleUniqueCondition(conditions, query.Select.Table) { + if isSingleUniqueCondition(conditions, query.Select.Table) { caches[normalized] = &cacheWithInfo{ Cache: sc.NewMust(replaceFn, 10*time.Minute, 10*time.Minute), query: normalized, diff --git a/generator.go b/template/generator.go similarity index 83% rename from generator.go rename to template/generator.go index 3e65d2a..f979d71 100644 --- a/generator.go +++ b/template/generator.go @@ -1,4 +1,4 @@ -package h24w17 +package template import ( "embed" @@ -21,14 +21,14 @@ type data struct { TableSchemaRaw string } -//go:embed template/*.tmpl +//go:embed *.tmpl var templates embed.FS func NewGenerator(cachePlanRaw string, tableSchemaRaw string) *Generator { return &Generator{ - driverTmpl: template.Must(template.ParseFS(templates, "template/driver.tmpl")), - stmtTmpl: template.Must(template.ParseFS(templates, "template/stmt.tmpl")), - cacheTmpl: template.Must(template.ParseFS(templates, "template/cache.tmpl")), + driverTmpl: template.Must(template.ParseFS(templates, "driver.tmpl")), + stmtTmpl: template.Must(template.ParseFS(templates, "stmt.tmpl")), + cacheTmpl: template.Must(template.ParseFS(templates, "cache.tmpl")), data: data{CachePlanRaw: toEscapedGoStringLiteral(cachePlanRaw), TableSchemaRaw: toEscapedGoStringLiteral(tableSchemaRaw)}, } } diff --git a/template/generator_test.go b/template/generator_test.go new file mode 100644 index 0000000..1a2008e --- /dev/null +++ b/template/generator_test.go @@ -0,0 +1,40 @@ +package template + +import ( + "embed" + "strings" + "testing" + "text/template" + + "github.com/stretchr/testify/assert" +) + +//go:embed *.go +var expectedFiles embed.FS + +func TestGenerator(t *testing.T) { + g := NewGenerator("", "") + g.data.PackageName = "template" + + writer := strings.Builder{} + + tests := []struct { + name string + template *template.Template + }{ + {"driver", g.driverTmpl}, + {"stmt", g.stmtTmpl}, + {"cache", g.cacheTmpl}, + } + + for _, test := range tests { + t.Run(test.name, func(t *testing.T) { + expected, err := expectedFiles.ReadFile(test.name + ".go") + assert.NoError(t, err) + writer.Reset() + err = test.template.Execute(&writer, g.data) + assert.NoError(t, err) + assert.Equal(t, string(expected), writer.String()) + }) + } +}