mirror of
				https://github.com/optim-enterprises-bv/kubernetes.git
				synced 2025-11-03 19:58:17 +00:00 
			
		
		
		
	client-go exec: fix metrics related to plugin not found
These were missed because our tests did not pass in the correct test data input (the command to execute). Signed-off-by: Monis Khan <mok@vmware.com>
This commit is contained in:
		@@ -18,6 +18,7 @@ package exec
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"errors"
 | 
			
		||||
	"io/fs"
 | 
			
		||||
	"os/exec"
 | 
			
		||||
	"reflect"
 | 
			
		||||
	"sync"
 | 
			
		||||
@@ -92,6 +93,7 @@ func (c *certificateExpirationTracker) set(a *Authenticator, t time.Time) {
 | 
			
		||||
func incrementCallsMetric(err error) {
 | 
			
		||||
	execExitError := &exec.ExitError{}
 | 
			
		||||
	execError := &exec.Error{}
 | 
			
		||||
	pathError := &fs.PathError{}
 | 
			
		||||
	switch {
 | 
			
		||||
	case err == nil: // Binary execution succeeded.
 | 
			
		||||
		metrics.ExecPluginCalls.Increment(successExitCode, noError)
 | 
			
		||||
@@ -99,7 +101,7 @@ func incrementCallsMetric(err error) {
 | 
			
		||||
	case errors.As(err, &execExitError): // Binary execution failed (see "os/exec".Cmd.Run()).
 | 
			
		||||
		metrics.ExecPluginCalls.Increment(execExitError.ExitCode(), pluginExecutionError)
 | 
			
		||||
 | 
			
		||||
	case errors.As(err, &execError): // Binary does not exist (see exec.Error).
 | 
			
		||||
	case errors.As(err, &execError), errors.As(err, &pathError): // Binary does not exist (see exec.Error, fs.PathError).
 | 
			
		||||
		metrics.ExecPluginCalls.Increment(failureExitCode, pluginNotFoundError)
 | 
			
		||||
 | 
			
		||||
	default: // We don't know about this error type.
 | 
			
		||||
 
 | 
			
		||||
@@ -18,6 +18,7 @@ package exec
 | 
			
		||||
 | 
			
		||||
import (
 | 
			
		||||
	"fmt"
 | 
			
		||||
	"io"
 | 
			
		||||
	"testing"
 | 
			
		||||
	"time"
 | 
			
		||||
 | 
			
		||||
@@ -147,6 +148,7 @@ func TestCallsMetric(t *testing.T) {
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Fatal(err)
 | 
			
		||||
		}
 | 
			
		||||
		a.stderr = io.Discard
 | 
			
		||||
 | 
			
		||||
		// Run refresh creds twice so that our test validates that the metrics are set correctly twice
 | 
			
		||||
		// in a row with the same authenticator.
 | 
			
		||||
@@ -172,7 +174,7 @@ func TestCallsMetric(t *testing.T) {
 | 
			
		||||
	// metric values.
 | 
			
		||||
	refreshCreds := func(command string) {
 | 
			
		||||
		c := api.ExecConfig{
 | 
			
		||||
			Command:         "does not exist",
 | 
			
		||||
			Command:         command,
 | 
			
		||||
			APIVersion:      "client.authentication.k8s.io/v1beta1",
 | 
			
		||||
			InteractiveMode: api.IfAvailableExecInteractiveMode,
 | 
			
		||||
		}
 | 
			
		||||
@@ -180,6 +182,7 @@ func TestCallsMetric(t *testing.T) {
 | 
			
		||||
		if err != nil {
 | 
			
		||||
			t.Fatal(err)
 | 
			
		||||
		}
 | 
			
		||||
		a.stderr = io.Discard
 | 
			
		||||
		if err := a.refreshCredsLocked(&clientauthentication.Response{}); err == nil {
 | 
			
		||||
			t.Fatal("expected the authenticator to fail because the plugin does not exist")
 | 
			
		||||
		}
 | 
			
		||||
 
 | 
			
		||||
@@ -391,7 +391,7 @@ func execPluginClientTests(t *testing.T, unauthorizedCert, unauthorizedKey []byt
 | 
			
		||||
			},
 | 
			
		||||
			wantGetCertificateErrorPrefix: "exec: fork/exec ./testdata/exec-plugin-not-executable.sh: permission denied",
 | 
			
		||||
			wantClientErrorPrefix:         `Get "https`,
 | 
			
		||||
			wantMetrics:                   &execPluginMetrics{calls: []execPluginCall{{exitCode: 1, callStatus: "client_internal_error"}}},
 | 
			
		||||
			wantMetrics:                   &execPluginMetrics{calls: []execPluginCall{{exitCode: 1, callStatus: "plugin_not_found_error"}}},
 | 
			
		||||
		},
 | 
			
		||||
		{
 | 
			
		||||
			name: "binary fails",
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user