This is an automated email from the ASF dual-hosted git repository. gfournier pushed a commit to branch release-2.3.x in repository https://gitbox.apache.org/repos/asf/camel-k.git
commit 5965c3979550c80a1b452049f908e2a8f0ecaf50 Author: Gaelle Fournier <gaelle.fournier.w...@gmail.com> AuthorDate: Wed Jun 5 13:04:29 2024 +0200 test: Add Unit test for maven proxy settings --- pkg/util/maven/maven_proxies_test.go | 246 +++++++++++++++++++++++++++++++++++ 1 file changed, 246 insertions(+) diff --git a/pkg/util/maven/maven_proxies_test.go b/pkg/util/maven/maven_proxies_test.go new file mode 100644 index 000000000..f7fc4ad67 --- /dev/null +++ b/pkg/util/maven/maven_proxies_test.go @@ -0,0 +1,246 @@ +/* +Licensed to the Apache Software Foundation (ASF) under one or more +contributor license agreements. See the NOTICE file distributed with +this work for additional information regarding copyright ownership. +The ASF licenses this file to You under the Apache License, Version 2.0 +(the "License"); you may not use this file except in compliance with +the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. +*/ + +package maven + +import ( + "testing" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" +) + +func TestProxyHTTPEnvVar(t *testing.T) { + + testcases := []struct { + name string + proxyHTTPEnvVar string + proxyHostResult string + proxyPortResult string + proxyProtocolResult string + proxyUsernameResult string + proxyPasswordResult string + }{ + { + name: "HTTP_PROXY_Port", + proxyHTTPEnvVar: "http://proxy.namespace.svc:8080", + proxyHostResult: "proxy.namespace.svc", + proxyPortResult: "8080", + proxyProtocolResult: "http", + proxyUsernameResult: "", + proxyPasswordResult: "", + }, + { + name: "HTTP_PROXY_No_Port", + proxyHTTPEnvVar: "http://proxy.namespace.svc", + proxyHostResult: "proxy.namespace.svc", + proxyPortResult: "80", + proxyProtocolResult: "http", + proxyUsernameResult: "", + proxyPasswordResult: "", + }, + { + name: "HTTP_PROXY_full", + proxyHTTPEnvVar: "http://user:passw...@proxy.namespace.svc:8081", + proxyHostResult: "proxy.namespace.svc", + proxyPortResult: "8081", + proxyProtocolResult: "http", + proxyUsernameResult: "user", + proxyPasswordResult: "password", + }, + } + + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + settings, err := NewSettings(DefaultRepositories, ProxyFromEnvironment) + require.NoError(t, err) + + t.Setenv("HTTP_PROXY", tc.proxyHTTPEnvVar) + err = ProxyFromEnvironment.apply(&settings) + + require.NoError(t, err) + assert.Equal(t, "http-proxy", settings.Proxies[0].ID) + assert.Equal(t, true, settings.Proxies[0].Active) + assert.Equal(t, tc.proxyHostResult, settings.Proxies[0].Host) + assert.Equal(t, tc.proxyPortResult, settings.Proxies[0].Port) + assert.Equal(t, tc.proxyProtocolResult, settings.Proxies[0].Protocol) + assert.Equal(t, tc.proxyUsernameResult, settings.Proxies[0].Username) + assert.Equal(t, tc.proxyPasswordResult, settings.Proxies[0].Password) + }) + } +} + +func TestProxyHTTPSEnvVar(t *testing.T) { + + testcases := []struct { + name string + proxyHTTPSEnvVar string + proxyHostResult string + proxyPortResult string + proxyProtocolResult string + proxyUsernameResult string + proxyPasswordResult string + }{ + { + name: "HTTPS_PROXY_Port", + proxyHTTPSEnvVar: "https://proxy.namespace.svc:8443", + proxyHostResult: "proxy.namespace.svc", + proxyPortResult: "8443", + proxyProtocolResult: "https", + proxyUsernameResult: "", + proxyPasswordResult: "", + }, + { + name: "HTTPS_PROXY_No_Port", + proxyHTTPSEnvVar: "https://proxy.namespace.svc", + proxyHostResult: "proxy.namespace.svc", + proxyPortResult: "443", + proxyProtocolResult: "https", + proxyUsernameResult: "", + proxyPasswordResult: "", + }, + { + name: "HTTP_PROXY_full", + proxyHTTPSEnvVar: "https://user:passw...@proxy.namespace.svc:8444", + proxyHostResult: "proxy.namespace.svc", + proxyPortResult: "8444", + proxyProtocolResult: "https", + proxyUsernameResult: "user", + proxyPasswordResult: "password", + }, + } + + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + settings, err := NewSettings(DefaultRepositories, ProxyFromEnvironment) + require.NoError(t, err) + + t.Setenv("HTTPS_PROXY", tc.proxyHTTPSEnvVar) + err = ProxyFromEnvironment.apply(&settings) + + require.NoError(t, err) + assert.Equal(t, "https-proxy", settings.Proxies[0].ID) + assert.Equal(t, true, settings.Proxies[0].Active) + assert.Equal(t, tc.proxyHostResult, settings.Proxies[0].Host) + assert.Equal(t, tc.proxyPortResult, settings.Proxies[0].Port) + assert.Equal(t, tc.proxyProtocolResult, settings.Proxies[0].Protocol) + assert.Equal(t, tc.proxyUsernameResult, settings.Proxies[0].Username) + assert.Equal(t, tc.proxyPasswordResult, settings.Proxies[0].Password) + }) + } +} + +func TestNoPROXYEnvVar(t *testing.T) { + testcases := []struct { + name string + proxyHTTPEnvVar string + proxyHTTPSEnvVar string + noPROXYEnvVar string + noProxyResult string + }{ + { + name: "Valid_NOPROXY_simple", + proxyHTTPEnvVar: "http://www.proxy.com", + proxyHTTPSEnvVar: "", + noPROXYEnvVar: "www.no.proxy.com", + noProxyResult: "www.no.proxy.com", + }, + { + name: "Valid_NOPROXY_IPS", + proxyHTTPEnvVar: "http://www.proxy.com", + proxyHTTPSEnvVar: "", + noPROXYEnvVar: "10.96.0.1,10.96.0.4", + noProxyResult: "10.96.0.1|10.96.0.4", + }, + { + name: "Valid_NOPROXY_Complexe", + proxyHTTPEnvVar: "", + proxyHTTPSEnvVar: "https://www.proxy.com", + noPROXYEnvVar: "localhost, 127.0.0.1, *.local, .my-co.com", + noProxyResult: "localhost|127.0.0.1|*.local|*.my-co.com", + }, + } + + for _, tc := range testcases { + t.Run(tc.name, func(t *testing.T) { + settings, err := NewSettings(DefaultRepositories, ProxyFromEnvironment) + require.NoError(t, err) + + if tc.proxyHTTPEnvVar != "" { + t.Setenv("HTTP_PROXY", tc.proxyHTTPEnvVar) + } + + if tc.proxyHTTPSEnvVar != "" { + t.Setenv("HTTPS_PROXY", tc.proxyHTTPSEnvVar) + } + + t.Setenv("NO_PROXY", tc.noPROXYEnvVar) + + err = ProxyFromEnvironment.apply(&settings) + + require.NoError(t, err) + assert.Equal(t, true, settings.Proxies[0].Active) + assert.Equal(t, tc.noProxyResult, settings.Proxies[0].NonProxyHosts) + }) + } +} + +func TestAllProxyEnvVar(t *testing.T) { + t.Run("All proxy env vars", func(t *testing.T) { + + settings, err := NewSettings(DefaultRepositories, ProxyFromEnvironment) + require.NoError(t, err) + + t.Setenv("HTTP_PROXY", "http://www.unsercure-proxy.com") + t.Setenv("HTTPS_PROXY", "https://www.sercure-proxy.com") + t.Setenv("NO_PROXY", "localhost, 10.96.0.1, *.local") + + err = ProxyFromEnvironment.apply(&settings) + + require.NoError(t, err) + assert.Equal(t, 2, len(settings.Proxies)) + assert.Equal(t, "http-proxy", settings.Proxies[0].ID) + assert.Equal(t, "https-proxy", settings.Proxies[1].ID) + assert.Equal(t, "localhost|10.96.0.1|*.local", settings.Proxies[0].NonProxyHosts) + assert.Equal(t, "localhost|10.96.0.1|*.local", settings.Proxies[1].NonProxyHosts) + }) +} + +func TestAddAnotherProxyEnvVar(t *testing.T) { + t.Run("Add a proxy from env vars", func(t *testing.T) { + + settings, err := NewSettings(DefaultRepositories, ProxyFromEnvironment) + require.NoError(t, err) + + settings.Proxies = append(settings.Proxies, Proxy{ + ID: "other", + Active: false, + Protocol: "http", + Host: "otherproxy.com", + Port: "8088", + }) + + t.Setenv("HTTP_PROXY", "http://www.unsercure-proxy.com") + + err = ProxyFromEnvironment.apply(&settings) + + require.NoError(t, err) + assert.Equal(t, 2, len(settings.Proxies)) + assert.Equal(t, "other", settings.Proxies[0].ID) + assert.Equal(t, "http-proxy", settings.Proxies[1].ID) + }) +}