Skip to content

Commit

Permalink
fixed UTs
Browse files Browse the repository at this point in the history
  • Loading branch information
ezhang-px committed Jul 10, 2023
1 parent 9f0fe5f commit 34e2db4
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 22 deletions.
29 changes: 16 additions & 13 deletions drivers/storage/portworx/util/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -687,34 +687,37 @@ func GetPxProxyEnvVarValue(cluster *corev1.StorageCluster) (string, string) {
return "", ""
}

var (
host string
port string
authHeader string
)

// ParsePxProxy trims protocol prefix then splits the proxy address of the form "host:port" with possible basic authentication credential
func ParsePxProxyURL(proxy string) (string, string, string, error) {
var (
host string
port string
authHeader string
)
if strings.HasPrefix(proxy, HttpsProtocolPrefix) {
proxyURL := strings.TrimPrefix(proxy, HttpsProtocolPrefix)
auth := strings.Split(proxyURL, "@")[0]
if strings.HasPrefix(proxy, HttpsProtocolPrefix) && strings.Contains(proxy, "@") {
proxy := strings.TrimPrefix(proxy, HttpsProtocolPrefix)
auth := strings.Split(proxy, "@")[0]
encodedAuth := base64.StdEncoding.EncodeToString([]byte(auth))
authHeader = fmt.Sprintf("Basic %s", encodedAuth)
address, port, err := net.SplitHostPort(strings.Split(proxyURL, "@")[1])
host, port, err := net.SplitHostPort(strings.Split(proxy, "@")[1])
if err != nil {
return "", "", "", err
} else if address == "" || port == "" || encodedAuth == "" {
} else if host == "" || port == "" || encodedAuth == "" {
return "", "", "", fmt.Errorf("failed to parse px proxy url %s", proxy)
}
return host, port, authHeader, nil
} else {
proxy = strings.TrimPrefix(proxy, HttpProtocolPrefix)
address, port, err := net.SplitHostPort(proxy)
proxy = strings.TrimPrefix(proxy, HttpsProtocolPrefix) // treat https proxy as http proxy if no credential provided
host, port, err := net.SplitHostPort(proxy)
if err != nil {
return "", "", "", err
} else if address == "" || port == "" {
} else if host == "" || port == "" {
return "", "", "", fmt.Errorf("failed to parse px proxy url %s", proxy)
}
return host, port, authHeader, nil
}
return host, port, authHeader, nil
}

// GetValueFromEnvVar returns the value of v1.EnvVar Value or ValueFrom
Expand Down
34 changes: 25 additions & 9 deletions drivers/storage/portworx/util/util_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -331,26 +331,42 @@ func TestGetServiceTypeFromAnnotation(t *testing.T) {

func TestParsePxProxyURL(t *testing.T) {
// Valid cases
address, port, authHeader, err := ParsePxProxyURL("http.proxy.address:1234")
host, port, authHeader, err := ParsePxProxyURL("http.proxy.address:1234")
require.NoError(t, err)
require.Equal(t, "http.proxy.address", address)
require.Equal(t, "http.proxy.address", host)
require.Equal(t, "1234", port)
require.Equal(t, "", authHeader)

address, port, authHeader, err = ParsePxProxyURL("http://http.proxy.address:1234")
host, port, authHeader, err = ParsePxProxyURL("http://http.proxy.address:1234")
require.NoError(t, err)
require.Equal(t, "http.proxy.address", address)
require.Equal(t, "http.proxy.address", host)
require.Equal(t, "1234", port)
require.Equal(t, "", authHeader)

host, port, authHeader, err = ParsePxProxyURL("https://http.proxy.address:1234")
require.NoError(t, err)
require.Equal(t, "http.proxy.address", host)
require.Equal(t, "1234", port)
require.Equal(t, "", authHeader)

address, port, authHeader, err = ParsePxProxyURL("1.2.3.4:1234")
host, port, authHeader, err = ParsePxProxyURL("1.2.3.4:1234")
require.NoError(t, err)
require.Equal(t, "1.2.3.4", address)
require.Equal(t, "1.2.3.4", host)
require.Equal(t, "1234", port)
require.Equal(t, "", authHeader)

host, port, authHeader, err = ParsePxProxyURL("[1:2:3:4:5:6:7:8]:1234")
require.NoError(t, err)
require.Equal(t, "1:2:3:4:5:6:7:8", host)
require.Equal(t, "1234", port)
require.Equal(t, "", authHeader)

address, port, authHeader, err = ParsePxProxyURL("[1:2:3:4:5:6:7:8]:1234")
// The only valid format for HTTPS proxy
host, port, authHeader, err = ParsePxProxyURL("https://user:password@http.proxy.address:1234")
require.NoError(t, err)
require.Equal(t, "1:2:3:4:5:6:7:8", address)
require.Equal(t, "http.proxy.address", host)
require.Equal(t, "1234", port)
require.Equal(t, "Basic dXNlcjpwYXNzd29yZA==", authHeader)

// Invalid cases
_, _, _, err = ParsePxProxyURL("")
Expand All @@ -368,7 +384,7 @@ func TestParsePxProxyURL(t *testing.T) {
_, _, _, err = ParsePxProxyURL(":1234")
require.Error(t, err)

_, _, _, err = ParsePxProxyURL("user:password@host:1234")
_, _, _, err = ParsePxProxyURL("user:password@http.proxy.address:1234")
require.Error(t, err)
}

Expand Down

0 comments on commit 34e2db4

Please sign in to comment.