Skip to content

Commit

Permalink
test: add more unit test cases
Browse files Browse the repository at this point in the history
  • Loading branch information
dapeng committed May 25, 2024
1 parent 7a86ebb commit 4363587
Show file tree
Hide file tree
Showing 43 changed files with 1,599 additions and 555 deletions.
4 changes: 3 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
.DS_Store

test-app
coverage.txt
coverage.txt

demo
16 changes: 7 additions & 9 deletions cemetery.go
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package gone

import (
"errors"
"fmt"
"reflect"
"strings"
Expand Down Expand Up @@ -88,11 +87,13 @@ func (c *cemetery) ReplaceBury(goner Goner, id GonerId) (err error) {

c.tombs = append(c.tombs, replaceTomb)
_, err = c.reviveOneFromTomb(replaceTomb)
c.replaceTombsGonerField(id, goner, oldGoner, buried)
return
if err != nil {
return err
}
return c.replaceTombsGonerField(id, goner, oldGoner, buried)
}

func (c *cemetery) replaceTombsGonerField(id GonerId, newGoner, oldGoner Goner, buried bool) {
func (c *cemetery) replaceTombsGonerField(id GonerId, newGoner, oldGoner Goner, buried bool) error {
for _, tomb := range c.tombs {
goner := tomb.GetGoner()

Expand Down Expand Up @@ -120,15 +121,12 @@ func (c *cemetery) replaceTombsGonerField(id GonerId, newGoner, oldGoner Goner,
if oldId == id {
_, _, err := c.reviveFieldById(tag, field, v)
if err != nil {
var iErr InnerError
if errors.As(err, &iErr) {
c.Errorf("inner Error: %s(code=%d)\n%s", iErr.Msg(), iErr.Code(), iErr.Stack())
}
panic(err)
return err
}
}
}
}
return nil
}

const goneTag = "gone"
Expand Down
12 changes: 12 additions & 0 deletions cemetery_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -390,3 +390,15 @@ func Test_cemetery_bury(t *testing.T) {
assert.True(t, executed)
})
}

func Test_parseGoneTagId(t *testing.T) {
id, _ := parseGoneTagId("")
assert.Equal(t, string(id), "")

id, _ = parseGoneTagId("xxx")
assert.Equal(t, string(id), "xxx")

id, ext := parseGoneTagId("xxx,2222,2222333")
assert.Equal(t, string(id), "xxx")
assert.Equal(t, "2222,2222333", ext)
}
6 changes: 3 additions & 3 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ require (
github.com/sirupsen/logrus v1.9.0
github.com/soheilhy/cmux v0.1.5
github.com/stretchr/testify v1.8.4
github.com/urfave/cli/v2 v2.23.5
github.com/urfave/cli/v2 v2.27.2
golang.org/x/tools v0.20.0
google.golang.org/grpc v1.63.2
gopkg.in/errgo.v2 v2.1.0
Expand All @@ -32,7 +32,7 @@ require (
github.com/chenzhuoyu/base64x v0.0.0-20230717121745-296ad89f973d // indirect
github.com/chenzhuoyu/iasm v0.9.1 // indirect
github.com/cloudflare/circl v1.3.8 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.2 // indirect
github.com/cpuguy83/go-md2man/v2 v2.0.4 // indirect
github.com/davecgh/go-spew v1.1.1 // indirect
github.com/gabriel-vasile/mimetype v1.4.3 // indirect
github.com/gin-contrib/sse v0.1.0 // indirect
Expand Down Expand Up @@ -63,7 +63,7 @@ require (
github.com/syndtr/goleveldb v1.0.0 // indirect
github.com/twitchyliquid64/golang-asm v0.15.1 // indirect
github.com/ugorji/go/codec v1.2.12 // indirect
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 // indirect
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 // indirect
go.uber.org/mock v0.4.0 // indirect
golang.org/x/arch v0.7.0 // indirect
golang.org/x/crypto v0.22.0 // indirect
Expand Down
12 changes: 6 additions & 6 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,8 @@ github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7
github.com/coreos/go-systemd v0.0.0-20190719114852-fd7a80b32e1f/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4=
github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA=
github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
github.com/cpuguy83/go-md2man/v2 v2.0.2 h1:p1EgwI/C7NhT0JmVkwCD2ZBK8j4aeHQX2pMHHBfMQ6w=
github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4=
github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o=
github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY=
github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
Expand Down Expand Up @@ -441,11 +441,11 @@ github.com/ugorji/go/codec v1.2.12 h1:9LC83zGrHhuUA9l16C9AHXAqEV/2wBQ4nkvumAE65E
github.com/ugorji/go/codec v1.2.12/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg=
github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA=
github.com/urfave/cli v1.22.1/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0=
github.com/urfave/cli/v2 v2.23.5 h1:xbrU7tAYviSpqeR3X4nEFWUdB/uDZ6DE+HxmRU7Xtyw=
github.com/urfave/cli/v2 v2.23.5/go.mod h1:GHupkWPMM0M/sj1a2b4wUrWBPzazNrIjouW6fmdJLxc=
github.com/urfave/cli/v2 v2.27.2 h1:6e0H+AkS+zDckwPCUrZkKX38mRaau4nL2uipkJpbkcI=
github.com/urfave/cli/v2 v2.27.2/go.mod h1:g0+79LmHHATl7DAcHO99smiR/T7uGLw84w8Y42x+4eM=
github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRTfdpNzjtPYqr8smhKouy9mxVdGPU=
github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8=
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1 h1:gEOO8jv9F4OT7lGCjxCBTO/36wtF6j2nSip77qHd4x4=
github.com/xrash/smetrics v0.0.0-20240521201337-686a1a2994c1/go.mod h1:Ohn+xnUBiLI6FVj/9LpzZWtj1/D6lUovWYBkxHVV3aM=
github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k=
github.com/zenazn/goji v0.9.0/go.mod h1:7S9M489iMyHBNxwZnk9/EHS098H4/F6TATF2mIxtB1Q=
Expand Down
3 changes: 3 additions & 0 deletions goner/cmux/cmux.go
Original file line number Diff line number Diff line change
Expand Up @@ -59,8 +59,11 @@ func (s *server) GetAddress() string {
func (s *server) Start(gone.Cemetery) error {
s.stopFlag = false
var err error
var mutex sync.Mutex
s.Go(func() {
mutex.Lock()
err = s.cMux.Serve()
mutex.Unlock()
s.processStartError(err)
})
<-time.After(10 * time.Millisecond)
Expand Down
2 changes: 1 addition & 1 deletion test_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -250,5 +250,5 @@ func TestBuryMockCemetery_Bury(t *testing.T) {
assert.Equal(t, point, tomb.GetGoner())

tombs := cemetery.GetTomByType(reflect.TypeOf(*point))
assert.Equal(t, point, tombs[0].GetGoner())
assert.Equal(t, 2, len(tombs))
}
48 changes: 48 additions & 0 deletions tools/gone/app/action.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
package app

import (
"github.com/urfave/cli/v2"
"path"
)

func CreateCommand() *cli.Command {
return &cli.Command{
Name: "create",
Usage: "[-t ${template} [-m ${modName}]] ${appName}",
Description: "create a gone app",
Flags: []cli.Flag{
&cli.StringFlag{
Name: "template",
Aliases: []string{"t"},
Value: "web",
Usage: "template: only support web、web+mysql, more will be supported in the future",
},

&cli.StringFlag{
Name: "mod",
Aliases: []string{"m"},
Usage: "modName",
},
},
Action: action,
}
}

func action(c *cli.Context) error {
return doAction(c.String("template"), c.String("mod"), c.Args().Get(0))
}

func doAction(template, modName, appName string) error {
tplName, app, mod, err := paramsProcess(template, appName, modName)
if err != nil {
return err
}
return copyAndReplace(f,
path.Join(".", tplName),
app,
map[string]string{
"${{appName}}": app,
"demo-structure": mod,
},
)
}
18 changes: 18 additions & 0 deletions tools/gone/app/action_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
package app

import (
"github.com/stretchr/testify/assert"
"github.com/urfave/cli/v2"
"testing"
)

func TestAction(t *testing.T) {
app := cli.App{
Commands: []*cli.Command{
CreateCommand(),
},
}

err := app.Run([]string{"", "create"})
assert.Nil(t, err)
}
84 changes: 84 additions & 0 deletions tools/gone/app/app.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
package app

import (
"bytes"
"embed"
"fmt"
"github.com/gone-io/gone/templates"
log "github.com/sirupsen/logrus"
"os"
"path"
"strings"
)

var f = templates.F

func copyAndReplace(f embed.FS, source, target string, replacement map[string]string) error {
err := os.MkdirAll(target, 0766)
if err != nil {
return err
}

dir, err := f.ReadDir(source)
if err != nil {
return err
}

for _, entry := range dir {
from := path.Join(source, entry.Name())
to := path.Join(target, strings.TrimSuffix(entry.Name(), ".tpl"))

if entry.IsDir() {
err = copyAndReplace(
f,
from,
to,
replacement,
)
if err != nil {
return err
}
} else {
file, err := os.OpenFile(to, os.O_RDWR|os.O_CREATE, 0644)
if err != nil {
return err
}
defer func(file *os.File) {
err := file.Close()
if err != nil {
log.Error(err)
}
}(file)

data, err := f.ReadFile(from)
if err != nil {
return err
}

for k, v := range replacement {
data = bytes.ReplaceAll(data, []byte(k), []byte(v))
}

_, err = file.Write(data)
if err != nil {
return err
}
}
}
return nil
}

func paramsProcess(template, appName, modName string) (string, string, string, error) {
if template != "web" && template != "web+mysql" {
return "", "", "", fmt.Errorf("only support web、web+mysql, more will be supported in the future")
}

if appName == "" {
appName = "demo"
}

if modName == "" {
modName = appName
}
return template, appName, modName, nil
}
49 changes: 49 additions & 0 deletions tools/gone/app/app_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package app

import (
"embed"
"fmt"
"github.com/stretchr/testify/assert"
"os"
"path/filepath"
"testing"
)

func deleteFilesInDirectory(dir string) error {
files, err := os.ReadDir(dir)
if err != nil {
return fmt.Errorf("failed to read directory: %v", err)
}

for _, file := range files {
if !file.IsDir() {
err := os.Remove(filepath.Join(dir, file.Name()))
if err != nil {
return fmt.Errorf("failed to delete file %s: %v", file.Name(), err)
}
}
}
return nil
}

//go:embed testdata/from/*
var testF embed.FS

func Test_copyAndReplace(t *testing.T) {
_ = deleteFilesInDirectory("testdata/to/")
err := copyAndReplace(testF, "testdata/from", "testdata/to/", map[string]string{
"test": "x-test",
})
assert.Nil(t, err)
}

func Test_paramsProcess(t *testing.T) {
tpl, m, app, err := paramsProcess("", "", "")
assert.Error(t, err)

tpl, m, app, err = paramsProcess("web", "", "")
assert.Nil(t, err)
assert.Equal(t, "web", tpl)
assert.Equal(t, "demo", m)
assert.Equal(t, "demo", app)
}
Loading

0 comments on commit 4363587

Please sign in to comment.