Skip to content

Commit

Permalink
Merge pull request #147 from k1LoW/go-yaml-v2
Browse files Browse the repository at this point in the history
[BREAKING] Use gopkg.in/yaml.v2 instead
  • Loading branch information
k1LoW authored Sep 16, 2022
2 parents 1761f34 + dc95b74 commit ffb2673
Show file tree
Hide file tree
Showing 10 changed files with 137 additions and 70 deletions.
17 changes: 11 additions & 6 deletions book.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,9 @@ import (
"time"

"github.com/goccy/go-json"
"github.com/goccy/go-yaml"
"github.com/k1LoW/duration"
"github.com/k1LoW/expand"
"gopkg.in/yaml.v2"
)

const noDesc = "[No Description]"
Expand Down Expand Up @@ -87,13 +87,16 @@ func loadBook(in io.Reader) (*book, error) {
return nil, err
}
b = expand.ExpandenvYAMLBytes(b)
if err := yaml.Unmarshal(b, bk); err == nil {
if err := yamlUnmarshal(b, bk); err == nil {
if bk.Runners == nil {
bk.Runners = map[string]interface{}{}
} else {
bk.Runners = normalize(bk.Runners).(map[string]interface{})
}
if bk.Vars == nil {
bk.Vars = map[string]interface{}{}
} else {
bk.Vars = normalize(bk.Vars).(map[string]interface{})
// To match behavior with json.Marshal
b, err := json.Marshal(bk.Vars)
if err != nil {
Expand All @@ -103,6 +106,8 @@ func loadBook(in io.Reader) (*book, error) {
return nil, err
}
}
ns := normalize(bk.Steps)
bk.Steps = ns.([]map[string]interface{})
if bk.Desc == "" {
bk.Desc = noDesc
}
Expand All @@ -111,12 +116,12 @@ func loadBook(in io.Reader) (*book, error) {

// orderedmap
m := newMapped()
if err := yaml.Unmarshal(b, &m); err != nil {
if err := yamlUnmarshal(b, &m); err != nil {
return nil, err
}
bk.Desc = m.Desc
bk.Runners = m.Runners
bk.Vars = m.Vars
bk.Runners = normalize(m.Runners).(map[string]interface{})
bk.Vars = normalize(m.Vars).(map[string]interface{})
bk.Debug = m.Debug
if bk.Desc == "" {
bk.Desc = noDesc
Expand All @@ -135,7 +140,7 @@ func loadBook(in io.Reader) (*book, error) {

keys := map[string]struct{}{}
for _, s := range m.Steps {
bk.Steps = append(bk.Steps, s.Value.(map[string]interface{}))
bk.Steps = append(bk.Steps, normalize(s.Value).(map[string]interface{}))
var k string
switch v := s.Key.(type) {
case string:
Expand Down
2 changes: 1 addition & 1 deletion go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ require (
github.com/getkin/kin-openapi v0.97.0
github.com/go-sql-driver/mysql v1.6.0
github.com/goccy/go-json v0.9.10
github.com/goccy/go-yaml v1.9.5
github.com/golang/protobuf v1.5.2
github.com/google/go-cmp v0.5.8
github.com/jhump/protoreflect v1.12.0
Expand Down Expand Up @@ -51,6 +50,7 @@ require (
github.com/docker/go-units v0.4.0 // indirect
github.com/go-openapi/jsonpointer v0.19.5 // indirect
github.com/go-openapi/swag v0.21.1 // indirect
github.com/goccy/go-yaml v1.9.5 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect
github.com/imdario/mergo v0.3.12 // indirect
Expand Down
5 changes: 0 additions & 5 deletions go.sum
Original file line number Diff line number Diff line change
Expand Up @@ -79,11 +79,8 @@ github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh
github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU=
github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ=
github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4=
github.com/go-playground/locales v0.13.0 h1:HyWk6mgj5qFqCT5fjGBuRArbVDfE4hi8+e8ceBS/t7Q=
github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8=
github.com/go-playground/universal-translator v0.17.0 h1:icxd5fm+REJzpZx7ZfpaD876Lmtgy7VtROAbHHXk8no=
github.com/go-playground/universal-translator v0.17.0/go.mod h1:UkSxE5sNxxRwHyU+Scu5vgOQjsIJAF8j9muTVoKLVtA=
github.com/go-playground/validator/v10 v10.4.1 h1:pH2c5ADXtd66mxoE0Zm9SUhxE20r7aM3F26W0hOn+GE=
github.com/go-playground/validator/v10 v10.4.1/go.mod h1:nlOn6nFhuKACm19sB/8EGNn9GlaMV7XkbRSipzJ0Ii4=
github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE=
github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg=
Expand Down Expand Up @@ -167,7 +164,6 @@ github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
github.com/leodido/go-urn v1.2.0 h1:hpXL4XnriNwQ/ABnpepYM/1vCLWNDfUNts8dX3xTG6Y=
github.com/leodido/go-urn v1.2.0/go.mod h1:+8+nEpDfqqsY+g338gtMEUOtuK+4dEMhiQEgxpxOKII=
github.com/lestrrat-go/backoff/v2 v2.0.8 h1:oNb5E5isby2kiro9AgdHLv5N5tint1AnDVVf2E2un5A=
github.com/lestrrat-go/backoff/v2 v2.0.8/go.mod h1:rHP/q/r9aT27n24JQLa7JhSQZCKBBOiM/uP402WwN8Y=
Expand Down Expand Up @@ -285,7 +281,6 @@ go.uber.org/multierr v1.8.0 h1:dg6GjLku4EH+249NNmoIciG9N/jURbDG+pFlTkhzIC8=
go.uber.org/multierr v1.8.0/go.mod h1:7EAYxJLBy9rStEaz58O2t4Uvip6FSURkq8/ppBp95ak=
golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9 h1:psW17arqaxU48Z5kZ0CQnkZWQJsqcURM6tKiBApRjXI=
golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE=
Expand Down
5 changes: 2 additions & 3 deletions http_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,6 @@ import (
"net/url"
"os"
"testing"

"github.com/goccy/go-yaml"
)

func TestHTTPRunnerRunUsingGitHubAPI(t *testing.T) {
Expand Down Expand Up @@ -122,9 +120,10 @@ two: ni`,

for _, tt := range tests {
var b interface{}
if err := yaml.Unmarshal([]byte(tt.in), &b); err != nil {
if err := yamlUnmarshal([]byte(tt.in), &b); err != nil {
t.Fatal(err)
}
b = normalize(b)
r := &httpRequest{
mediaType: tt.mediaType,
body: b,
Expand Down
5 changes: 2 additions & 3 deletions loop.go
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,6 @@ import (
"strings"
"time"

"github.com/goccy/go-yaml"
"github.com/k1LoW/duration"
"github.com/lestrrat-go/backoff/v2"
)
Expand Down Expand Up @@ -38,12 +37,12 @@ type Loop struct {
}

func newLoop(v interface{}) (*Loop, error) {
b, err := yaml.Marshal(v)
b, err := yamlMarshal(v)
if err != nil {
return nil, err
}
r := &Loop{}
err = yaml.Unmarshal(b, r)
err = yamlUnmarshal(b, r)
if err != nil {
// short syntax
r.Count = strings.TrimRight(string(b), "\n\r")
Expand Down
20 changes: 13 additions & 7 deletions operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,6 @@ import (
"github.com/antonmedv/expr"
"github.com/fatih/color"
"github.com/goccy/go-json"
"github.com/goccy/go-yaml"
"github.com/k1LoW/expand"
"github.com/k1LoW/stopw"
"github.com/rs/xid"
Expand Down Expand Up @@ -239,7 +238,7 @@ func New(opts ...Option) (*operator, error) {
o.dbRunners[k] = dc
}
case map[string]interface{}:
tmp, err := yaml.Marshal(vv)
tmp, err := yamlMarshal(vv)
if err != nil {
bk.runnerErrs[k] = err
continue
Expand All @@ -248,7 +247,7 @@ func New(opts ...Option) (*operator, error) {

// HTTP Runner
c := &httpRunnerConfig{}
if err := yaml.Unmarshal(tmp, c); err == nil {
if err := yamlUnmarshal(tmp, c); err == nil {
if c.Endpoint != "" {
detect = true
r, err := newHTTPRunner(k, c.Endpoint, o)
Expand All @@ -272,7 +271,7 @@ func New(opts ...Option) (*operator, error) {
// gRPC Runner
if !detect {
c := &grpcRunnerConfig{}
if err := yaml.Unmarshal(tmp, c); err == nil {
if err := yamlUnmarshal(tmp, c); err == nil {
if c.Addr != "" {
detect = true
r, err := newGrpcRunner(k, c.Addr, o)
Expand Down Expand Up @@ -901,7 +900,7 @@ func (o *operator) stepName(i int) string {

func (o *operator) expand(in interface{}) (interface{}, error) {
store := o.store.toMap()
b, err := yaml.Marshal(in)
b, err := yamlMarshal(in)
if err != nil {
return nil, err
}
Expand All @@ -910,6 +909,13 @@ func (o *operator) expand(in interface{}) (interface{}, error) {
if !strings.Contains(in, delimStart) {
return in
}

// normalize
if strings.Contains(in, fmt.Sprintf("'%s", delimStart)) && strings.Contains(in, fmt.Sprintf("%s'", delimEnd)) {
rep := strings.NewReplacer([]string{fmt.Sprintf("'%s", delimStart), delimStart, fmt.Sprintf("%s'", delimEnd), delimEnd}...)
in = rep.Replace(in)
}

matches := expandRe.FindAllStringSubmatch(in, -1)
oldnew := []string{}
for _, m := range matches {
Expand Down Expand Up @@ -958,10 +964,10 @@ func (o *operator) expand(in interface{}) (interface{}, error) {
return nil, reperr
}
var out interface{}
if err := yaml.Unmarshal([]byte(e), &out); err != nil {
if err := yamlUnmarshal([]byte(e), &out); err != nil {
return nil, err
}
return out, nil
return normalize(out), nil
}

func (o *operator) Debugln(a string) {
Expand Down
73 changes: 38 additions & 35 deletions operator_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -45,13 +45,13 @@ func TestExpand(t *testing.T) {
[]map[string]interface{}{},
map[string]interface{}{"one": 1},
map[string]string{"key": "{{ vars.one }}"},
map[string]interface{}{"key": uint64(1)},
map[string]interface{}{"key": 1},
},
{
[]map[string]interface{}{},
map[string]interface{}{"one": 1},
map[string]string{"key": "{{ vars.one + 1 }}"},
map[string]interface{}{"key": uint64(2)},
map[string]interface{}{"key": 2},
},
{
[]map[string]interface{}{},
Expand Down Expand Up @@ -81,19 +81,19 @@ func TestExpand(t *testing.T) {
[]map[string]interface{}{},
map[string]interface{}{"map": map[string]interface{}{"foo": "test", "bar": 1}},
map[string]string{"map": "{{ vars.map }}"},
map[string]interface{}{"map": map[string]interface{}{"foo": "test", "bar": uint64(1)}},
map[string]interface{}{"map": map[string]interface{}{"foo": "test", "bar": 1}},
},
{
[]map[string]interface{}{},
map[string]interface{}{"array": []interface{}{map[string]interface{}{"foo": "test1", "bar": 1}, map[string]interface{}{"foo": "test2", "bar": 2}}},
map[string]string{"array": "{{ vars.array }}"},
map[string]interface{}{"array": []interface{}{map[string]interface{}{"foo": "test1", "bar": uint64(1)}, map[string]interface{}{"foo": "test2", "bar": uint64(2)}}},
map[string]interface{}{"array": []interface{}{map[string]interface{}{"foo": "test1", "bar": 1}, map[string]interface{}{"foo": "test2", "bar": 2}}},
},
{
[]map[string]interface{}{},
map[string]interface{}{"float": float64(1)},
map[string]string{"float": "{{ vars.float }}"},
map[string]interface{}{"float": uint64(1)},
map[string]interface{}{"float": 1},
},
{
[]map[string]interface{}{},
Expand All @@ -105,7 +105,7 @@ func TestExpand(t *testing.T) {
[]map[string]interface{}{},
map[string]interface{}{"float": float64(1.00)},
map[string]string{"float": "{{ vars.float }}"},
map[string]interface{}{"float": uint64(1)},
map[string]interface{}{"float": 1},
},
{
[]map[string]interface{}{},
Expand All @@ -123,7 +123,7 @@ func TestExpand(t *testing.T) {
[]map[string]interface{}{},
map[string]interface{}{"uint64": uint64(4600)},
map[string]string{"uint64": "{{ vars.uint64 }}"},
map[string]interface{}{"uint64": uint64(4600)},
map[string]interface{}{"uint64": 4600},
},
}
for _, tt := range tests {
Expand Down Expand Up @@ -439,37 +439,40 @@ func TestShard(t *testing.T) {
{2}, {3}, {4}, {5}, {6}, {7}, {11}, {13}, {17}, {99},
}
for _, tt := range tests {
got := []*operator{}
opts := []Option{
Runner("req", "https://api.github.com"),
Runner("db", "sqlite://path/to/test.db"),
}
all, err := Load("testdata/book/**/*", opts...)
if err != nil {
t.Fatal(err)
}
sortOperators(all.ops)
want := all.ops
for i := 0; i < tt.n; i++ {
ops, err := Load("testdata/book/**/*", append(opts, RunShard(tt.n, i))...)
t.Run(fmt.Sprintf("Shard %d", tt.n), func(t *testing.T) {
t.Parallel()
got := []*operator{}
opts := []Option{
Runner("req", "https://api.github.com"),
Runner("db", "sqlite://path/to/test.db"),
}
all, err := Load("testdata/book/**/*", opts...)
if err != nil {
t.Fatal(err)
}
got = append(got, ops.ops...)
}
if len(got) != len(want) {
t.Errorf("got %v\nwant %v", len(got), len(want))
}
sortOperators(got)
allow := []interface{}{
operator{}, httpRunner{}, dbRunner{}, grpcRunner{},
}
ignore := []interface{}{
step{}, store{}, sql.DB{}, os.File{}, stopw.Span{}, debugger{},
}
if diff := cmp.Diff(got, want, cmp.AllowUnexported(allow...), cmpopts.IgnoreUnexported(ignore...), cmpopts.IgnoreFields(stopw.Span{}, "ID")); diff != "" {
t.Errorf("%s", diff)
}
sortOperators(all.ops)
want := all.ops
for i := 0; i < tt.n; i++ {
ops, err := Load("testdata/book/**/*", append(opts, RunShard(tt.n, i))...)
if err != nil {
t.Fatal(err)
}
got = append(got, ops.ops...)
}
if len(got) != len(want) {
t.Errorf("got %v\nwant %v", len(got), len(want))
}
sortOperators(got)
allow := []interface{}{
operator{}, httpRunner{}, dbRunner{}, grpcRunner{},
}
ignore := []interface{}{
step{}, store{}, sql.DB{}, os.File{}, stopw.Span{}, debugger{},
}
if diff := cmp.Diff(got, want, cmp.AllowUnexported(allow...), cmpopts.IgnoreUnexported(ignore...), cmpopts.IgnoreFields(stopw.Span{}, "ID")); diff != "" {
t.Errorf("%s", diff)
}
})
}
}

Expand Down
9 changes: 4 additions & 5 deletions parse.go
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import (
"fmt"
"strings"

"github.com/goccy/go-yaml"
"google.golang.org/grpc/metadata"
)

Expand All @@ -13,7 +12,7 @@ func parseHTTPRequest(v map[string]interface{}) (*httpRequest, error) {
req := &httpRequest{
headers: map[string]string{},
}
part, err := yaml.Marshal(v)
part, err := yamlMarshal(v)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -75,7 +74,7 @@ func parseHTTPRequest(v map[string]interface{}) (*httpRequest, error) {

func parseDBQuery(v map[string]interface{}) (*dbQuery, error) {
q := &dbQuery{}
part, err := yaml.Marshal(v)
part, err := yamlMarshal(v)
if err != nil {
return nil, err
}
Expand All @@ -99,7 +98,7 @@ func parseGrpcRequest(v map[string]interface{}, expand func(interface{}) (interf
req := &grpcRequest{
headers: metadata.MD{},
}
part, err := yaml.Marshal(v)
part, err := yamlMarshal(v)
if err != nil {
return nil, err
}
Expand Down Expand Up @@ -189,7 +188,7 @@ func parseServiceAndMethod(in string) (string, string, error) {
func parseExecCommand(v map[string]interface{}) (*execCommand, error) {
v = trimDelimiter(v)
c := &execCommand{}
part, err := yaml.Marshal(v)
part, err := yamlMarshal(v)
if err != nil {
return nil, err
}
Expand Down
Loading

0 comments on commit ffb2673

Please sign in to comment.