(goctl)fix: api timeout limited during api generation (#4513)

This commit is contained in:
kesonan 2024-12-19 16:19:10 +08:00 committed by GitHub
parent 9c4ed394a7
commit 6700910f64
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
5 changed files with 42 additions and 12 deletions

View File

@ -139,12 +139,7 @@ rest.WithPrefix("%s"),`, g.prefix)
return err
}
// why we check this, maybe some users set value 1, it's 1ns, not 1s.
if duration < timeoutThreshold {
return fmt.Errorf("timeout should not less than 1ms, now %v", duration)
}
timeout = fmt.Sprintf("\n rest.WithTimeout(%d * time.Millisecond),", duration.Milliseconds())
timeout = fmt.Sprintf("\n rest.WithTimeout(%s),", formatDuration(duration))
hasTimeout = true
}
@ -211,6 +206,16 @@ rest.WithPrefix("%s"),`, g.prefix)
})
}
func formatDuration(duration time.Duration) string {
if duration < time.Microsecond {
return fmt.Sprintf("%d * time.Nanosecond", duration.Nanoseconds())
}
if duration < time.Millisecond {
return fmt.Sprintf("%d * time.Microsecond", duration.Microseconds())
}
return fmt.Sprintf("%d * time.Millisecond", duration.Milliseconds())
}
func genRouteImports(parentPkg string, api *spec.ApiSpec) string {
importSet := collection.NewSet()
importSet.AddStr(fmt.Sprintf("\"%s\"", pathx.JoinPackages(parentPkg, contextDir)))

View File

@ -0,0 +1,27 @@
package gogen
import (
"testing"
"time"
)
func Test_formatDuration(t *testing.T) {
tests := []struct {
duration time.Duration
expected string
}{
{0, "0 * time.Nanosecond"},
{time.Nanosecond, "1 * time.Nanosecond"},
{100 * time.Nanosecond, "100 * time.Nanosecond"},
{500 * time.Microsecond, "500 * time.Microsecond"},
{2 * time.Millisecond, "2 * time.Millisecond"},
{time.Second, "1000 * time.Millisecond"},
}
for _, test := range tests {
result := formatDuration(test.duration)
if result != test.expected {
t.Errorf("formatDuration(%v) = %v; want %v", test.duration, result, test.expected)
}
}
}

View File

@ -6,7 +6,7 @@ import (
)
// BuildVersion is the version of goctl.
const BuildVersion = "1.7.3"
const BuildVersion = "1.7.4"
var tag = map[string]int{"pre-alpha": 0, "alpha": 1, "pre-bata": 2, "beta": 3, "released": 4, "": 5}

View File

@ -29,8 +29,6 @@ const (
// string mode end
)
var missingInput = errors.New("missing input")
type mode int
// Scanner is a lexical scanner.
@ -629,7 +627,7 @@ func NewScanner(filename string, src interface{}) (*Scanner, error) {
}
if len(data) == 0 {
return nil, missingInput
return nil, fmt.Errorf("filename: %s,missing input", filename)
}
var runeList []rune

View File

@ -62,13 +62,13 @@ func TestNewScanner(t *testing.T) {
{
filename: "foo",
src: "",
expected: missingInput,
expected: "missing input",
},
}
for _, v := range testData {
s, err := NewScanner(v.filename, v.src)
if err != nil {
assert.Equal(t, v.expected.(error).Error(), err.Error())
assert.Contains(t, err.Error(), v.expected)
} else {
assert.Equal(t, v.expected, s.filename)
}