119 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
			
		
		
	
	
			119 lines
		
	
	
		
			2.7 KiB
		
	
	
	
		
			Go
		
	
	
	
package v1alpha1_test
 | 
						|
 | 
						|
import (
 | 
						|
	"net/http"
 | 
						|
	"testing"
 | 
						|
 | 
						|
	corev1 "k8s.io/api/core/v1"
 | 
						|
 | 
						|
	"github.com/actions/actions-runner-controller/apis/actions.github.com/v1alpha1"
 | 
						|
	"github.com/stretchr/testify/assert"
 | 
						|
	"github.com/stretchr/testify/require"
 | 
						|
)
 | 
						|
 | 
						|
func TestProxyConfig_ToSecret(t *testing.T) {
 | 
						|
	config := &v1alpha1.ProxyConfig{
 | 
						|
		HTTP: &v1alpha1.ProxyServerConfig{
 | 
						|
			Url:                 "http://proxy.example.com:8080",
 | 
						|
			CredentialSecretRef: "my-secret",
 | 
						|
		},
 | 
						|
		HTTPS: &v1alpha1.ProxyServerConfig{
 | 
						|
			Url:                 "https://proxy.example.com:8080",
 | 
						|
			CredentialSecretRef: "my-secret",
 | 
						|
		},
 | 
						|
		NoProxy: []string{
 | 
						|
			"noproxy.example.com",
 | 
						|
			"noproxy2.example.com",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	secretFetcher := func(string) (*corev1.Secret, error) {
 | 
						|
		return &corev1.Secret{
 | 
						|
			Data: map[string][]byte{
 | 
						|
				"username": []byte("username"),
 | 
						|
				"password": []byte("password"),
 | 
						|
			},
 | 
						|
		}, nil
 | 
						|
	}
 | 
						|
 | 
						|
	result, err := config.ToSecretData(secretFetcher)
 | 
						|
	require.NoError(t, err)
 | 
						|
	require.NotNil(t, result)
 | 
						|
 | 
						|
	assert.Equal(t, "http://username:password@proxy.example.com:8080", string(result["http_proxy"]))
 | 
						|
	assert.Equal(t, "https://username:password@proxy.example.com:8080", string(result["https_proxy"]))
 | 
						|
	assert.Equal(t, "noproxy.example.com,noproxy2.example.com", string(result["no_proxy"]))
 | 
						|
}
 | 
						|
 | 
						|
func TestProxyConfig_ProxyFunc(t *testing.T) {
 | 
						|
	config := &v1alpha1.ProxyConfig{
 | 
						|
		HTTP: &v1alpha1.ProxyServerConfig{
 | 
						|
			Url:                 "http://proxy.example.com:8080",
 | 
						|
			CredentialSecretRef: "my-secret",
 | 
						|
		},
 | 
						|
		HTTPS: &v1alpha1.ProxyServerConfig{
 | 
						|
			Url:                 "https://proxy.example.com:8080",
 | 
						|
			CredentialSecretRef: "my-secret",
 | 
						|
		},
 | 
						|
		NoProxy: []string{
 | 
						|
			"noproxy.example.com",
 | 
						|
			"noproxy2.example.com",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	secretFetcher := func(string) (*corev1.Secret, error) {
 | 
						|
		return &corev1.Secret{
 | 
						|
			Data: map[string][]byte{
 | 
						|
				"username": []byte("username"),
 | 
						|
				"password": []byte("password"),
 | 
						|
			},
 | 
						|
		}, nil
 | 
						|
	}
 | 
						|
 | 
						|
	result, err := config.ProxyFunc(secretFetcher)
 | 
						|
	require.NoError(t, err)
 | 
						|
 | 
						|
	tests := []struct {
 | 
						|
		name string
 | 
						|
		in   string
 | 
						|
		out  string
 | 
						|
	}{
 | 
						|
		{
 | 
						|
			name: "http target",
 | 
						|
			in:   "http://target.com",
 | 
						|
			out:  "http://username:password@proxy.example.com:8080",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "https target",
 | 
						|
			in:   "https://target.com",
 | 
						|
			out:  "https://username:password@proxy.example.com:8080",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "no proxy",
 | 
						|
			in:   "https://noproxy.example.com",
 | 
						|
			out:  "",
 | 
						|
		},
 | 
						|
		{
 | 
						|
			name: "no proxy 2",
 | 
						|
			in:   "https://noproxy2.example.com",
 | 
						|
			out:  "",
 | 
						|
		},
 | 
						|
	}
 | 
						|
 | 
						|
	for _, test := range tests {
 | 
						|
		t.Run(test.name, func(t *testing.T) {
 | 
						|
			req, err := http.NewRequest("GET", test.in, nil)
 | 
						|
			require.NoError(t, err)
 | 
						|
			u, err := result(req)
 | 
						|
			require.NoError(t, err)
 | 
						|
 | 
						|
			if test.out == "" {
 | 
						|
				assert.Nil(t, u)
 | 
						|
				return
 | 
						|
			}
 | 
						|
 | 
						|
			assert.Equal(t, test.out, u.String())
 | 
						|
		})
 | 
						|
	}
 | 
						|
}
 |