@ -79,6 +79,92 @@ func TestManuallyProcessArgs(t *testing.T) {
}
}
// TestManuallyProcessArgsBooleanFlags covers #13686: boolean root flags must not
// consume the following plugin argument unless that token is an explicit bool value.
func TestManuallyProcessArgsBooleanFlags ( t * testing . T ) {
tests := [ ] struct {
name string
input [ ] string
expectKnown [ ] string
expectUnknown [ ] string
} {
{
name : "bare kube insecure flag leaves following plugin flag" ,
input : [ ] string { "--kube-insecure-skip-tls-verify" , "--version" , "1.0.3" } ,
expectKnown : [ ] string { "--kube-insecure-skip-tls-verify" } ,
expectUnknown : [ ] string { "--version" , "1.0.3" } ,
} ,
{
name : "separated true value is normalized" ,
input : [ ] string { "--kube-insecure-skip-tls-verify" , "true" , "--version" , "1.0.3" } ,
expectKnown : [ ] string { "--kube-insecure-skip-tls-verify=true" } ,
expectUnknown : [ ] string { "--version" , "1.0.3" } ,
} ,
{
name : "separated false value is normalized" ,
input : [ ] string { "--kube-insecure-skip-tls-verify" , "false" , "--foo" , "bar" } ,
expectKnown : [ ] string { "--kube-insecure-skip-tls-verify=false" } ,
expectUnknown : [ ] string { "--foo" , "bar" } ,
} ,
{
name : "inline boolean value" ,
input : [ ] string { "--kube-insecure-skip-tls-verify=true" , "--version" , "1.0.3" } ,
expectKnown : [ ] string { "--kube-insecure-skip-tls-verify=true" } ,
expectUnknown : [ ] string { "--version" , "1.0.3" } ,
} ,
{
name : "bare debug leaves following plugin flag" ,
input : [ ] string { "--debug" , "--plugin-flag" , "value" } ,
expectKnown : [ ] string { "--debug" } ,
expectUnknown : [ ] string { "--plugin-flag" , "value" } ,
} ,
{
name : "debug with separated bool value" ,
input : [ ] string { "--debug" , "1" , "command" } ,
expectKnown : [ ] string { "--debug=1" } ,
expectUnknown : [ ] string { "command" } ,
} ,
{
name : "debug with inline value" ,
input : [ ] string { "--debug=false" , "command" } ,
expectKnown : [ ] string { "--debug=false" } ,
expectUnknown : [ ] string { "command" } ,
} ,
{
name : "mixed bool and kv flags with plugin args" ,
input : [ ] string {
"--debug" ,
"--kube-insecure-skip-tls-verify" ,
"--namespace" , "default" ,
"--burst-limit" , "100" ,
"--plugin-arg" , "keep-me" ,
"subcommand" ,
} ,
expectKnown : [ ] string {
"--debug" ,
"--kube-insecure-skip-tls-verify" ,
"--namespace" , "default" ,
"--burst-limit" , "100" ,
} ,
expectUnknown : [ ] string { "--plugin-arg" , "keep-me" , "subcommand" } ,
} ,
{
name : "boolean flag at end of args" ,
input : [ ] string { "command" , "--kube-insecure-skip-tls-verify" } ,
expectKnown : [ ] string { "--kube-insecure-skip-tls-verify" } ,
expectUnknown : [ ] string { "command" } ,
} ,
}
for _ , tt := range tests {
t . Run ( tt . name , func ( t * testing . T ) {
known , unknown := manuallyProcessArgs ( tt . input )
assert . Equal ( t , tt . expectKnown , known )
assert . Equal ( t , tt . expectUnknown , unknown )
} )
}
}
func TestLoadCLIPlugins ( t * testing . T ) {
settings . PluginsDirectory = "testdata/helmhome/helm/plugins"
settings . RepositoryConfig = "testdata/helmhome/helm/repositories.yaml"