You've already forked sap-jenkins-library
							
							
				mirror of
				https://github.com/SAP/jenkins-library.git
				synced 2025-10-30 23:57:50 +02:00 
			
		
		
		
	test: allow usage of httpmock in tests (#2576)
* add test case * add flag for default transport * Update go.mod * Update go.sum * fix spaces * fix format * Update http_test.go * Update http_test.go * Update http_test.go * Update http_test.go * Update http_test.go
This commit is contained in:
		
				
					committed by
					
						 GitHub
						GitHub
					
				
			
			
				
	
			
			
			
						parent
						
							426c106765
						
					
				
				
					commit
					9ec282fd0c
				
			
							
								
								
									
										1
									
								
								go.mod
									
									
									
									
									
								
							
							
						
						
									
										1
									
								
								go.mod
									
									
									
									
									
								
							| @@ -38,6 +38,7 @@ require ( | ||||
| 	github.com/hashicorp/vault/api v1.0.4 | ||||
| 	github.com/huandu/xstrings v1.3.2 // indirect | ||||
| 	github.com/imdario/mergo v0.3.11 // indirect | ||||
| 	github.com/jarcoal/httpmock v1.0.6 | ||||
| 	github.com/magiconair/properties v1.8.4 | ||||
| 	github.com/mailru/easyjson v0.7.6 // indirect | ||||
| 	github.com/mitchellh/mapstructure v1.3.3 // indirect | ||||
|   | ||||
							
								
								
									
										2
									
								
								go.sum
									
									
									
									
									
								
							
							
						
						
									
										2
									
								
								go.sum
									
									
									
									
									
								
							| @@ -536,6 +536,8 @@ github.com/iris-contrib/blackfriday v2.0.0+incompatible/go.mod h1:UzZ2bDEoaSGPbk | ||||
| github.com/iris-contrib/go.uuid v2.0.0+incompatible/go.mod h1:iz2lgM/1UnEf1kP0L/+fafWORmlnuysV2EMP8MW+qe0= | ||||
| github.com/iris-contrib/i18n v0.0.0-20171121225848-987a633949d0/go.mod h1:pMCz62A0xJL6I+umB2YTlFRwWXaDFA0jy+5HzGiJjqI= | ||||
| github.com/iris-contrib/schema v0.0.1/go.mod h1:urYA3uvUNG1TIIjOSCzHr9/LmbQo8LrOcOqfqxa4hXw= | ||||
| github.com/jarcoal/httpmock v1.0.6 h1:e81vOSexXU3mJuJ4l//geOmKIt+Vkxerk1feQBC8D0g= | ||||
| github.com/jarcoal/httpmock v1.0.6/go.mod h1:ATjnClrvW/3tijVmpL/va5Z3aAyGvqU3gCT8nX0Txik= | ||||
| github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= | ||||
| github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= | ||||
| github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= | ||||
|   | ||||
| @@ -36,6 +36,7 @@ type Client struct { | ||||
| 	cookieJar                 http.CookieJar | ||||
| 	doLogRequestBodyOnDebug   bool | ||||
| 	doLogResponseBodyOnDebug  bool | ||||
| 	useDefaultTransport       bool | ||||
| } | ||||
|  | ||||
| // ClientOptions defines the options to be set on the client | ||||
| @@ -57,6 +58,7 @@ type ClientOptions struct { | ||||
| 	CookieJar                 http.CookieJar | ||||
| 	DoLogRequestBodyOnDebug   bool | ||||
| 	DoLogResponseBodyOnDebug  bool | ||||
| 	UseDefaultTransport       bool | ||||
| } | ||||
|  | ||||
| // TransportWrapper is a wrapper for central logging capabilities | ||||
| @@ -196,6 +198,7 @@ func (c *Client) SendRequest(method, url string, body io.Reader, header http.Hea | ||||
| func (c *Client) SetOptions(options ClientOptions) { | ||||
| 	c.doLogRequestBodyOnDebug = options.DoLogRequestBodyOnDebug | ||||
| 	c.doLogResponseBodyOnDebug = options.DoLogResponseBodyOnDebug | ||||
| 	c.useDefaultTransport = options.UseDefaultTransport | ||||
| 	c.transportTimeout = options.TransportTimeout | ||||
| 	c.transportSkipVerification = options.TransportSkipVerification | ||||
| 	c.maxRequestDuration = options.MaxRequestDuration | ||||
| @@ -237,14 +240,18 @@ func (c *Client) initialize() *http.Client { | ||||
| 		retryClient := retryablehttp.NewClient() | ||||
| 		retryClient.HTTPClient.Timeout = c.maxRequestDuration | ||||
| 		retryClient.HTTPClient.Jar = c.cookieJar | ||||
| 		retryClient.HTTPClient.Transport = transport | ||||
| 		retryClient.RetryMax = c.maxRetries | ||||
| 		if !c.useDefaultTransport { | ||||
| 			retryClient.HTTPClient.Transport = transport | ||||
| 		} | ||||
| 		httpClient = retryClient.StandardClient() | ||||
| 	} else { | ||||
| 		httpClient = &http.Client{} | ||||
| 		httpClient.Timeout = c.maxRequestDuration | ||||
| 		httpClient.Jar = c.cookieJar | ||||
| 		httpClient.Transport = transport | ||||
| 		if !c.useDefaultTransport { | ||||
| 			httpClient.Transport = transport | ||||
| 		} | ||||
| 	} | ||||
|  | ||||
| 	if c.transportSkipVerification { | ||||
|   | ||||
| @@ -14,12 +14,51 @@ import ( | ||||
| 	"testing" | ||||
| 	"time" | ||||
|  | ||||
| 	"github.com/SAP/jenkins-library/pkg/log" | ||||
| 	"github.com/jarcoal/httpmock" | ||||
| 	"github.com/sirupsen/logrus" | ||||
| 	"github.com/stretchr/testify/assert" | ||||
| 	"github.com/stretchr/testify/mock" | ||||
| 	"github.com/stretchr/testify/require" | ||||
|  | ||||
| 	"github.com/SAP/jenkins-library/pkg/log" | ||||
| ) | ||||
|  | ||||
| func TestDefaultTransport(t *testing.T) { | ||||
| 	const testURL string = "https://localhost/api" | ||||
|  | ||||
| 	t.Run("with default transport", func(t *testing.T) { | ||||
| 		httpmock.Activate() | ||||
| 		defer httpmock.DeactivateAndReset() | ||||
| 		httpmock.RegisterResponder(http.MethodGet, testURL, httpmock.NewStringResponder(200, `OK`)) | ||||
|  | ||||
| 		client := Client{} | ||||
| 		client.SetOptions(ClientOptions{UseDefaultTransport: true}) | ||||
| 		// test | ||||
| 		response, err := client.SendRequest("GET", testURL, nil, nil, nil) | ||||
| 		// assert | ||||
| 		assert.NoError(t, err) | ||||
| 		// assert.NotEmpty(t, count) | ||||
| 		assert.Equal(t, 1, httpmock.GetTotalCallCount(), "unexpected number of requests") | ||||
| 		content, err := ioutil.ReadAll(response.Body) | ||||
| 		defer response.Body.Close() | ||||
| 		require.NoError(t, err, "unexpected error while reading response body") | ||||
| 		assert.Equal(t, "OK", string(content), "unexpected response content") | ||||
| 	}) | ||||
| 	t.Run("with custom transport", func(t *testing.T) { | ||||
| 		httpmock.Activate() | ||||
| 		defer httpmock.DeactivateAndReset() | ||||
| 		httpmock.RegisterResponder(http.MethodGet, testURL, httpmock.NewStringResponder(200, `OK`)) | ||||
|  | ||||
| 		client := Client{} | ||||
| 		// test | ||||
| 		_, err := client.SendRequest("GET", testURL, nil, nil, nil) | ||||
| 		// assert | ||||
| 		assert.Error(t, err) | ||||
| 		assert.Contains(t, err.Error(), "connect: connection refused") | ||||
| 		assert.Equal(t, 0, httpmock.GetTotalCallCount(), "unexpected number of requests") | ||||
| 	}) | ||||
| } | ||||
|  | ||||
| func TestSendRequest(t *testing.T) { | ||||
| 	var passedHeaders = map[string][]string{} | ||||
| 	passedCookies := []*http.Cookie{} | ||||
|   | ||||
		Reference in New Issue
	
	Block a user