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())
 | |
| 		})
 | |
| 	}
 | |
| }
 |