Skip to content

Commit d85dd3d

Browse files
authored
add: flag --connect-timeout (#243)
1 parent 2fde23c commit d85dd3d

File tree

7 files changed

+90
-40
lines changed

7 files changed

+90
-40
lines changed

CHANGELOG.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22

33
### Master
44

5+
- update: flag `--retry-timeout` renamed to `--read-timeout`
6+
- add: flag `--connect-timeout`
57
- fix: flag `--retry-timeout` bug
68

79
### 3.0.30

config/configure_get_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ func TestDoConfigureGet(t *testing.T) {
7979
ctx.Flags().Get("profile").SetAssigned(true)
8080
ctx.Flags().Get("profile").SetValue("default")
8181
doConfigureGet(ctx, []string{})
82-
assert.Equal(t, "{\n\t\"name\": \"default\",\n\t\"mode\": \"AK\",\n\t\"access_key_id\": \"default_aliyun_access_key_id\",\n\t\"access_key_secret\": \"default_aliyun_access_key_secret\",\n\t\"sts_token\": \"\",\n\t\"ram_role_name\": \"\",\n\t\"ram_role_arn\": \"\",\n\t\"ram_session_name\": \"\",\n\t\"private_key\": \"\",\n\t\"key_pair_name\": \"\",\n\t\"expired_seconds\": 0,\n\t\"verified\": \"\",\n\t\"region_id\": \"\",\n\t\"output_format\": \"json\",\n\t\"language\": \"\",\n\t\"site\": \"\",\n\t\"retry_timeout\": 0,\n\t\"retry_count\": 0\n}\n\n", w.String())
82+
assert.Equal(t, "{\n\t\"name\": \"default\",\n\t\"mode\": \"AK\",\n\t\"access_key_id\": \"default_aliyun_access_key_id\",\n\t\"access_key_secret\": \"default_aliyun_access_key_secret\",\n\t\"sts_token\": \"\",\n\t\"ram_role_name\": \"\",\n\t\"ram_role_arn\": \"\",\n\t\"ram_session_name\": \"\",\n\t\"private_key\": \"\",\n\t\"key_pair_name\": \"\",\n\t\"expired_seconds\": 0,\n\t\"verified\": \"\",\n\t\"region_id\": \"\",\n\t\"output_format\": \"json\",\n\t\"language\": \"\",\n\t\"site\": \"\",\n\t\"retry_timeout\": 0,\n\t\"connect_timeout\": 0,\n\t\"retry_count\": 0\n}\n\n", w.String())
8383

8484
//testcase 5
8585
hookLoadConfiguration = func(fn func(path string, w io.Writer) (Configuration, error)) func(path string, w io.Writer) (Configuration, error) {

config/configure_set.go

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -112,12 +112,12 @@ func doConfigureSet(w io.Writer, flags *cli.FlagSet) {
112112
profile.PrivateKey = PrivateKeyFlag(flags).GetStringOrDefault(profile.PrivateKey)
113113
profile.KeyPairName = KeyPairNameFlag(flags).GetStringOrDefault(profile.KeyPairName)
114114
}
115-
116115
profile.RegionId = RegionFlag(flags).GetStringOrDefault(profile.RegionId)
117116
profile.Language = LanguageFlag(flags).GetStringOrDefault(profile.Language)
118117
profile.OutputFormat = "json" // "output", profile.OutputFormat)
119118
profile.Site = "china" // "site", profile.Site)
120-
profile.RetryTimeout = RetryTimeoutFlag(flags).GetIntegerOrDefault(profile.RetryTimeout)
119+
profile.ReadTimeout = ReadTimeoutFlag(flags).GetIntegerOrDefault(profile.ReadTimeout)
120+
profile.ConnectTimeout = ConnectTimeoutFlag(flags).GetIntegerOrDefault(profile.ConnectTimeout)
121121
profile.RetryCount = RetryCountFlag(flags).GetIntegerOrDefault(profile.RetryCount)
122122

123123
err = profile.Validate()

config/flags.go

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,8 @@ const (
3131
KeyPairNameFlagName = "key-pair-name"
3232
RegionFlagName = "region"
3333
LanguageFlagName = "language"
34-
RetryTimeoutFlagName = "retry-timeout"
34+
ReadTimeoutFlagName = "read-timeout"
35+
ConnectTimeoutFlagName = "connect-timeout"
3536
RetryCountFlagName = "retry-count"
3637
SkipSecureVerifyName = "skip-secure-verify"
3738
ConfigurePathFlagName = "config-path"
@@ -52,11 +53,15 @@ func AddFlags(fs *cli.FlagSet) {
5253
fs.Add(NewRoleSessionNameFlag())
5354
fs.Add(NewPrivateKeyFlag())
5455
fs.Add(NewKeyPairNameFlag())
55-
fs.Add(NewRetryTimeoutFlag())
56+
fs.Add(NewReadTimeoutFlag())
57+
fs.Add(NewConnectTimeoutFlag())
5658
fs.Add(NewRetryCountFlag())
5759
fs.Add(NewSkipSecureVerify())
5860
fs.Add(NewExpiredSecondsFlag())
5961
}
62+
func ConnectTimeoutFlag(fs *cli.FlagSet) *cli.Flag {
63+
return fs.Get(ConnectTimeoutFlagName)
64+
}
6065

6166
func ProfileFlag(fs *cli.FlagSet) *cli.Flag {
6267
return fs.Get(ProfileFlagName)
@@ -106,8 +111,8 @@ func LanguageFlag(fs *cli.FlagSet) *cli.Flag {
106111
return fs.Get(LanguageFlagName)
107112
}
108113

109-
func RetryTimeoutFlag(fs *cli.FlagSet) *cli.Flag {
110-
return fs.Get(RetryTimeoutFlagName)
114+
func ReadTimeoutFlag(fs *cli.FlagSet) *cli.Flag {
115+
return fs.Get(ReadTimeoutFlagName)
111116
}
112117

113118
func RetryCountFlag(fs *cli.FlagSet) *cli.Flag {
@@ -269,14 +274,26 @@ func NewConfigurePathFlag() *cli.Flag {
269274
),
270275
}
271276
}
272-
func NewRetryTimeoutFlag() *cli.Flag {
277+
func NewReadTimeoutFlag() *cli.Flag {
278+
return &cli.Flag{
279+
Category: "caller",
280+
Name: ReadTimeoutFlagName,
281+
AssignedMode: cli.AssignedOnce,
282+
Aliases: []string{"retry-timeout"},
283+
Short: i18n.T(
284+
"use `--read-timeout <seconds>` to set I/O timeout(seconds)",
285+
"使用 `--read-timeout <seconds>` 指定I/O超时时间(秒)"),
286+
}
287+
}
288+
289+
func NewConnectTimeoutFlag() *cli.Flag {
273290
return &cli.Flag{
274291
Category: "caller",
275-
Name: RetryTimeoutFlagName,
292+
Name: ConnectTimeoutFlagName,
276293
AssignedMode: cli.AssignedOnce,
277294
Short: i18n.T(
278-
"use `--retry-timeout <seconds>` to set retry timeout(seconds)",
279-
"使用 `--retry-timeout <seconds>` 指定请求超时时间(秒)"),
295+
"use `--connect-timeout <seconds>` to set connect timeout(seconds)",
296+
"使用 `--connect-timeout <seconds>` 指定请求连接超时时间(秒)"),
280297
}
281298
}
282299

config/flags_test.go

Lines changed: 27 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -240,14 +240,32 @@ func TestAddFlag(t *testing.T) {
240240
DefaultValue: "",
241241
Persistent: false,
242242
}
243-
newRetryTimeoutFlag = &cli.Flag{
243+
newReadTimeoutFlag = &cli.Flag{
244244
Category: "caller",
245-
Name: RetryTimeoutFlagName,
245+
Name: ReadTimeoutFlagName,
246246
AssignedMode: cli.AssignedOnce,
247247
Hidden: false,
248248
Short: i18n.T(
249-
"use `--retry-timeout <seconds>` to set retry timeout(seconds)",
250-
"使用 `--retry-timeout <seconds>` 指定请求超时时间(秒)"),
249+
"use `--read-timeout <seconds>` to set I/O timeout(seconds)",
250+
"使用 `--read-timeout <seconds>` 指定I/O超时时间(秒)"),
251+
Long: nil,
252+
Required: false,
253+
Aliases: []string{"retry-timeout"},
254+
Validate: nil,
255+
Fields: nil,
256+
ExcludeWith: nil,
257+
Shorthand: 0,
258+
DefaultValue: "",
259+
Persistent: false,
260+
}
261+
newConnectTimeFlag = &cli.Flag{
262+
Category: "caller",
263+
Name: ConnectTimeoutFlagName,
264+
AssignedMode: cli.AssignedOnce,
265+
Hidden: false,
266+
Short: i18n.T(
267+
"use `--connect-timeout <seconds>` to set connect timeout(seconds)",
268+
"使用 `--connect-timeout <seconds>` 指定请求连接超时时间(秒)"),
251269
Long: nil,
252270
Required: false,
253271
Aliases: nil,
@@ -353,8 +371,11 @@ func TestAddFlag(t *testing.T) {
353371
f = NewLanguageFlag()
354372
assert.Equal(t, newLanguageFlag, f)
355373

356-
f = NewRetryTimeoutFlag()
357-
assert.Equal(t, newRetryTimeoutFlag, f)
374+
f = NewReadTimeoutFlag()
375+
assert.Equal(t, newReadTimeoutFlag, f)
376+
377+
f = NewConnectTimeoutFlag()
378+
assert.Equal(t, newConnectTimeFlag, f)
358379

359380
f = NewRetryCountFlag()
360381
assert.Equal(t, newRetryCountFlag, f)

config/profile.go

Lines changed: 25 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,8 @@ type Profile struct {
6060
OutputFormat string `json:"output_format"`
6161
Language string `json:"language"`
6262
Site string `json:"site"`
63-
RetryTimeout int `json:"retry_timeout"`
63+
ReadTimeout int `json:"retry_timeout"`
64+
ConnectTimeout int `json:"connect_timeout"`
6465
RetryCount int `json:"retry_count"`
6566
parent *Configuration //`json:"-"`
6667
}
@@ -141,7 +142,8 @@ func (cp *Profile) OverwriteWithFlags(ctx *cli.Context) {
141142
cp.PrivateKey = PrivateKeyFlag(ctx.Flags()).GetStringOrDefault(cp.PrivateKey)
142143
cp.RegionId = RegionFlag(ctx.Flags()).GetStringOrDefault(cp.RegionId)
143144
cp.Language = LanguageFlag(ctx.Flags()).GetStringOrDefault(cp.Language)
144-
cp.RetryTimeout = RetryTimeoutFlag(ctx.Flags()).GetIntegerOrDefault(cp.RetryTimeout)
145+
cp.ReadTimeout = ReadTimeoutFlag(ctx.Flags()).GetIntegerOrDefault(cp.ReadTimeout)
146+
cp.ConnectTimeout = ConnectTimeoutFlag(ctx.Flags()).GetIntegerOrDefault(cp.ConnectTimeout)
145147
cp.RetryCount = RetryCountFlag(ctx.Flags()).GetIntegerOrDefault(cp.RetryCount)
146148
cp.ExpiredSeconds = ExpiredSecondsFlag(ctx.Flags()).GetIntegerOrDefault(cp.ExpiredSeconds)
147149

@@ -174,34 +176,41 @@ func (cp *Profile) ValidateAK() error {
174176

175177
func (cp *Profile) GetClient(ctx *cli.Context) (*sdk.Client, error) {
176178
config := sdk.NewConfig()
177-
if cp.RetryTimeout > 0 {
178-
config.WithTimeout(time.Duration(cp.RetryTimeout) * time.Second)
179-
}
180-
if cp.RetryCount > 0 {
181-
config.WithMaxRetryTime(cp.RetryCount)
182-
}
183179
if SkipSecureVerify(ctx.Flags()).IsAssigned() {
184180
config.HttpTransport = &http.Transport{
185181
TLSClientConfig: &tls.Config{InsecureSkipVerify: true},
186182
}
187183
}
188-
184+
if cp.RetryCount > 0 {
185+
config.WithMaxRetryTime(cp.RetryCount)
186+
}
187+
var client *sdk.Client
188+
var err error
189189
switch cp.Mode {
190190
case AK:
191-
return cp.GetClientByAK(config)
191+
client, err = cp.GetClientByAK(config)
192192
case StsToken:
193-
return cp.GetClientBySts(config)
193+
client, err = cp.GetClientBySts(config)
194194
case RamRoleArn:
195-
return cp.GetClientByRoleArn(config)
195+
client, err = cp.GetClientByRoleArn(config)
196196
case EcsRamRole:
197-
return cp.GetClientByEcsRamRole(config)
197+
client, err = cp.GetClientByEcsRamRole(config)
198198
case RsaKeyPair:
199-
return cp.GetClientByPrivateKey(config)
199+
client, err = cp.GetClientByPrivateKey(config)
200200
case RamRoleArnWithEcs:
201-
return cp.GetClientByRamRoleArnWithEcs(config)
201+
client, err = cp.GetClientByRamRoleArnWithEcs(config)
202202
default:
203-
return nil, fmt.Errorf("unexcepted certificate mode: %s", cp.Mode)
203+
client, err = nil, fmt.Errorf("unexcepted certificate mode: %s", cp.Mode)
204+
}
205+
if client != nil {
206+
if cp.ReadTimeout > 0 {
207+
client.SetReadTimeout(time.Duration(cp.ReadTimeout) * time.Second)
208+
}
209+
if cp.ConnectTimeout > 0 {
210+
client.SetConnectTimeout(time.Duration(cp.ConnectTimeout) * time.Second)
211+
}
204212
}
213+
return client, err
205214
}
206215

207216
func (cp *Profile) GetClientByAK(config *sdk.Config) (*sdk.Client, error) {

config/profile_test.go

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,8 @@ func TestNewProfile(t *testing.T) {
4444
Verified: "",
4545
RegionId: "",
4646
Site: "",
47-
RetryTimeout: 0,
47+
ReadTimeout: 0,
48+
ConnectTimeout: 0,
4849
RetryCount: 0,
4950
}
5051

@@ -120,38 +121,38 @@ func TestProfile(t *testing.T) {
120121
p.StsToken = ""
121122
p.RegionId = ""
122123
p.OverwriteWithFlags(ctx)
123-
assert.Equal(t, Profile{Name: "default", Mode: "free", RamRoleArn: "RamRoleArn", PrivateKey: "******", OutputFormat: "json", RetryCount: 0, RetryTimeout: 0, Language: "en"}, p)
124+
assert.Equal(t, Profile{Name: "default", Mode: "free", RamRoleArn: "RamRoleArn", PrivateKey: "******", OutputFormat: "json", RetryCount: 0, ReadTimeout: 0, Language: "en"}, p)
124125

125126
p.Mode = StsToken
126127
p.AccessKeyId = "****"
127128
p.AccessKeySecret = "++++"
128129
p.StsToken = "----"
129130
p.OverwriteWithFlags(ctx)
130-
assert.Equal(t, Profile{Name: "default", Mode: StsToken, StsToken: "----", AccessKeyId: "****", AccessKeySecret: "++++", RamRoleArn: "RamRoleArn", PrivateKey: "******", OutputFormat: "json", RetryCount: 0, RetryTimeout: 0, Language: "en"}, p)
131+
assert.Equal(t, Profile{Name: "default", Mode: StsToken, StsToken: "----", AccessKeyId: "****", AccessKeySecret: "++++", RamRoleArn: "RamRoleArn", PrivateKey: "******", OutputFormat: "json", RetryCount: 0, ReadTimeout: 0, Language: "en"}, p)
131132

132133
p.Mode = RamRoleArn
133134
p.StsToken = ""
134135
p.RamRoleArn = "----"
135136
p.OverwriteWithFlags(ctx)
136-
assert.Equal(t, Profile{Name: "default", Mode: RamRoleArn, RamRoleArn: "----", AccessKeyId: "****", AccessKeySecret: "++++", PrivateKey: "******", OutputFormat: "json", RetryCount: 0, RetryTimeout: 0, Language: "en"}, p)
137+
assert.Equal(t, Profile{Name: "default", Mode: RamRoleArn, RamRoleArn: "----", AccessKeyId: "****", AccessKeySecret: "++++", PrivateKey: "******", OutputFormat: "json", RetryCount: 0, ReadTimeout: 0, Language: "en"}, p)
137138

138139
p.Mode = RsaKeyPair
139140
p.AccessKeyId = ""
140141
p.AccessKeySecret = ""
141142
p.PrivateKey = "****"
142143
p.KeyPairName = "++++"
143144
p.OverwriteWithFlags(ctx)
144-
assert.Equal(t, Profile{Name: "default", Mode: RsaKeyPair, KeyPairName: "++++", RamRoleArn: "----", PrivateKey: "****", OutputFormat: "json", RetryCount: 0, RetryTimeout: 0, Language: "en"}, p)
145+
assert.Equal(t, Profile{Name: "default", Mode: RsaKeyPair, KeyPairName: "++++", RamRoleArn: "----", PrivateKey: "****", OutputFormat: "json", RetryCount: 0, ReadTimeout: 0, Language: "en"}, p)
145146

146147
p.Mode = EcsRamRole
147148
p.PrivateKey = ""
148149
p.KeyPairName = ""
149150
p.RamRoleName = "RamRoleName"
150151
p.OverwriteWithFlags(ctx)
151-
assert.Equal(t, Profile{Name: "default", Mode: EcsRamRole, RamRoleArn: "----", RamRoleName: "RamRoleName", OutputFormat: "json", RetryCount: 0, RetryTimeout: 0, Language: "en"}, p)
152+
assert.Equal(t, Profile{Name: "default", Mode: EcsRamRole, RamRoleArn: "----", RamRoleName: "RamRoleName", OutputFormat: "json", RetryCount: 0, ReadTimeout: 0, Language: "en"}, p)
152153

153154
//GetClient
154-
p.RetryTimeout = 1
155+
p.ReadTimeout = 1
155156
p.RetryCount = 1
156157
p.Mode = "free"
157158
sdkClient, err := p.GetClient(ctx)

0 commit comments

Comments
 (0)