Bladeren bron

modify ut request to mock server

wenzuochao 6 jaren geleden
bovenliggende
commit
531976f841
1 gewijzigde bestanden met toevoegingen van 68 en 35 verwijderingen
  1. 68 35
      sdk/client_test.go

+ 68 - 35
sdk/client_test.go

@@ -16,6 +16,7 @@ package sdk
 
 import (
 	"bytes"
+	"fmt"
 	"io/ioutil"
 	"net/http"
 	"os"
@@ -120,7 +121,7 @@ func Test_NewClientWithRsaKeyPair(t *testing.T) {
 	assert.NotNil(t, client)
 }
 
-func mockResponse(statusCode int, content string) (res *http.Response, err error) {
+func mockResponse(statusCode int, content string, mockerr error) (res *http.Response, err error) {
 	status := strconv.Itoa(statusCode)
 	res = &http.Response{
 		Proto:      "HTTP/1.1",
@@ -130,6 +131,7 @@ func mockResponse(statusCode int, content string) (res *http.Response, err error
 		Status:     status + " " + http.StatusText(statusCode),
 	}
 	res.Body = ioutil.NopCloser(bytes.NewReader([]byte(content)))
+	err = mockerr
 	return
 }
 
@@ -151,7 +153,7 @@ func Test_DoAction(t *testing.T) {
 	defer func() { hookDo = origTestHookDo }()
 	hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
 		return func(req *http.Request) (*http.Response, error) {
-			return mockResponse(200, "")
+			return mockResponse(200, "", nil)
 		}
 	}
 	err = client.DoAction(request, response)
@@ -176,15 +178,23 @@ func Test_DoAction_HTTPSInsecure(t *testing.T) {
 	request.QueryParams["RegionId"] = os.Getenv("REGION_ID")
 	request.TransToAcsRequest()
 	response := responses.NewCommonResponse()
+	origTestHookDo := hookDo
+	defer func() { hookDo = origTestHookDo }()
+	hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
+		return func(req *http.Request) (*http.Response, error) {
+			return mockResponse(200, "", nil)
+		}
+	}
 	err = client.DoAction(request, response)
-	assert.NotNil(t, err)
-	assert.Contains(t, err.Error(), "Specified access key is not found.")
+	assert.Nil(t, err)
+	assert.Equal(t, 200, response.GetHttpStatus())
+	assert.Equal(t, "", response.GetHttpContentString())
 	trans := client.httpClient.Transport.(*http.Transport)
 	assert.Equal(t, true, trans.TLSClientConfig.InsecureSkipVerify)
 
 	request.SetHTTPSInsecure(false)
 	err = client.DoAction(request, response)
-	assert.NotNil(t, err)
+	assert.Nil(t, err)
 	trans = client.httpClient.Transport.(*http.Transport)
 	assert.Equal(t, false, trans.TLSClientConfig.InsecureSkipVerify)
 }
@@ -203,37 +213,36 @@ func Test_DoAction_Timeout(t *testing.T) {
 	request.QueryParams["PageSize"] = "30"
 	request.TransToAcsRequest()
 	response := responses.NewCommonResponse()
+	origTestHookDo := hookDo
+	defer func() { hookDo = origTestHookDo }()
+	hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
+		return func(req *http.Request) (*http.Response, error) {
+			return mockResponse(400, "Server Internel Error", fmt.Errorf("read tcp"))
+		}
+	}
 	err = client.DoAction(request, response)
 	assert.NotNil(t, err)
-	assert.Contains(t, err.Error(), "Specified access key is not found.")
+	assert.Equal(t, 0, response.GetHttpStatus())
+	assert.Equal(t, "", response.GetHttpContentString())
 
+	// Test set client timeout
 	client.SetReadTimeout(1 * time.Millisecond)
-	assert.Equal(t, 1*time.Millisecond, client.GetReadTimeout())
-	err = client.DoAction(request, response)
-	assert.NotNil(t, err)
-	assert.Contains(t, err.Error(), "Read timeout. Please set a valid ReadTimeout.")
-
 	client.SetConnectTimeout(1 * time.Millisecond)
 	assert.Equal(t, 1*time.Millisecond, client.GetConnectTimeout())
+	assert.Equal(t, 1*time.Millisecond, client.GetReadTimeout())
+	client.config.AutoRetry = false
 	err = client.DoAction(request, response)
 	assert.NotNil(t, err)
-	assert.Contains(t, err.Error(), "Connect timeout. Please set a valid ConnectTimeout.")
-
-	client.SetReadTimeout(10 * time.Second)
-	client.SetConnectTimeout(10 * time.Second)
-	err = client.DoAction(request, response)
-	assert.NotNil(t, err)
-	assert.Contains(t, err.Error(), "Specified access key is not found.")
+	assert.Equal(t, 0, response.GetHttpStatus())
+	assert.Equal(t, "", response.GetHttpContentString())
 
+	// Test set request timeout
 	request.SetReadTimeout(1 * time.Millisecond)
-	err = client.DoAction(request, response)
-	assert.NotNil(t, err)
-	assert.Contains(t, err.Error(), "Read timeout. Please set a valid ReadTimeout.")
-
 	request.SetConnectTimeout(1 * time.Millisecond)
 	err = client.DoAction(request, response)
 	assert.NotNil(t, err)
-	assert.Contains(t, err.Error(), "Connect timeout. Please set a valid ConnectTimeout.")
+	assert.Equal(t, 0, response.GetHttpStatus())
+	assert.Equal(t, "", response.GetHttpContentString())
 
 	client.Shutdown()
 	assert.Equal(t, false, client.isRunning)
@@ -256,13 +265,14 @@ func Test_ProcessCommonRequest(t *testing.T) {
 	defer func() { hookDo = origTestHookDo }()
 	hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
 		return func(req *http.Request) (*http.Response, error) {
-			return mockResponse(200, "")
+			return mockResponse(400, "", fmt.Errorf("test error"))
 		}
 	}
-	response, err := client.ProcessCommonRequest(request)
-	assert.Nil(t, err)
-	assert.Equal(t, 200, response.GetHttpStatus())
-	assert.Equal(t, "", response.GetHttpContentString())
+	resp, err := client.ProcessCommonRequest(request)
+	assert.NotNil(t, err)
+	assert.Contains(t, err.Error(), "test error")
+	assert.Equal(t, 0, resp.GetHttpStatus())
+	assert.Equal(t, "", resp.GetHttpContentString())
 }
 
 func Test_DoAction_With500(t *testing.T) {
@@ -283,7 +293,7 @@ func Test_DoAction_With500(t *testing.T) {
 	defer func() { hookDo = origTestHookDo }()
 	hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
 		return func(req *http.Request) (*http.Response, error) {
-			return mockResponse(500, "Server Internel Error")
+			return mockResponse(500, "Server Internel Error", nil)
 		}
 	}
 	err = client.DoAction(request, response)
@@ -349,8 +359,17 @@ func TestClient_ProcessCommonRequestWithSigner(t *testing.T) {
 	signer := &signertest{
 		name: "signer",
 	}
-	_, err = client.ProcessCommonRequestWithSigner(request, signer)
+	origTestHookDo := hookDo
+	defer func() { hookDo = origTestHookDo }()
+	hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
+		return func(req *http.Request) (*http.Response, error) {
+			return mockResponse(500, "Server Internel Error", fmt.Errorf("test error"))
+		}
+	}
+	resp, err := client.ProcessCommonRequestWithSigner(request, signer)
 	assert.NotNil(t, err)
+	assert.Contains(t, err.Error(), "test error")
+	assert.Equal(t, resp.GetHttpContentString(), "")
 }
 
 func TestClient_AppendUserAgent(t *testing.T) {
@@ -372,26 +391,31 @@ func TestClient_AppendUserAgent(t *testing.T) {
 	assert.Nil(t, err)
 	assert.Equal(t, DefaultUserAgent, httpRequest.Header.Get("User-Agent"))
 
+	// Test set client useragent.
 	client.AppendUserAgent("test", "1.01")
 	httpRequest, err = client.buildRequestWithSigner(request, signer)
 	assert.Equal(t, DefaultUserAgent+" test/1.01", httpRequest.Header.Get("User-Agent"))
 
+	// Test set request useragent. And request useragent has a higner priority than client's.
 	request.AppendUserAgent("test", "2.01")
 	httpRequest, err = client.buildRequestWithSigner(request, signer)
 	assert.Equal(t, DefaultUserAgent+" test/2.01", httpRequest.Header.Get("User-Agent"))
 
-	request.AppendUserAgent("test", "2.02")
+	client.AppendUserAgent("test", "2.02")
 	httpRequest, err = client.buildRequestWithSigner(request, signer)
-	assert.Equal(t, DefaultUserAgent+" test/2.02", httpRequest.Header.Get("User-Agent"))
+	assert.Equal(t, DefaultUserAgent+" test/2.01", httpRequest.Header.Get("User-Agent"))
 
-	client.AppendUserAgent("test", "2.01")
+	// Test update request useragent.
+	request.AppendUserAgent("test", "2.02")
 	httpRequest, err = client.buildRequestWithSigner(request, signer)
 	assert.Equal(t, DefaultUserAgent+" test/2.02", httpRequest.Header.Get("User-Agent"))
 
+	// Test client can't modify DefaultUserAgent.
 	client.AppendUserAgent("core", "1.01")
 	httpRequest, err = client.buildRequestWithSigner(request, signer)
 	assert.Equal(t, DefaultUserAgent+" test/2.02", httpRequest.Header.Get("User-Agent"))
 
+	// Test request can't modify DefaultUserAgent.
 	request.AppendUserAgent("core", "1.01")
 	httpRequest, err = client.buildRequestWithSigner(request, signer)
 	assert.Equal(t, DefaultUserAgent+" test/2.02", httpRequest.Header.Get("User-Agent"))
@@ -405,7 +429,7 @@ func TestClient_AppendUserAgent(t *testing.T) {
 	request1.TransToAcsRequest()
 	httpRequest, err = client.buildRequestWithSigner(request1, signer)
 	assert.Nil(t, err)
-	assert.Equal(t, DefaultUserAgent+" test/2.01 sys/1.01", httpRequest.Header.Get("User-Agent"))
+	assert.Equal(t, DefaultUserAgent+" test/2.02 sys/1.01", httpRequest.Header.Get("User-Agent"))
 }
 
 func TestClient_ProcessCommonRequestWithSigner_Error(t *testing.T) {
@@ -421,12 +445,21 @@ func TestClient_ProcessCommonRequestWithSigner_Error(t *testing.T) {
 	request.QueryParams["PageNumber"] = "1"
 	request.QueryParams["PageSize"] = "30"
 	request.RegionId = "regionid"
+	origTestHookDo := hookDo
 	defer func() {
+		hookDo = origTestHookDo
 		err := recover()
 		assert.NotNil(t, err)
 	}()
-	_, err = client.ProcessCommonRequestWithSigner(request, nil)
+	hookDo = func(fn func(req *http.Request) (*http.Response, error)) func(req *http.Request) (*http.Response, error) {
+		return func(req *http.Request) (*http.Response, error) {
+			return mockResponse(500, "Server Internel Error", fmt.Errorf("test error"))
+		}
+	}
+	resp, err := client.ProcessCommonRequestWithSigner(request, nil)
 	assert.NotNil(t, err)
+	assert.Contains(t, err.Error(), "test error")
+	assert.Equal(t, resp.GetHttpContentString(), "Server Internel Error")
 }
 
 func TestClient_NewClientWithStsRoleNameOnEcs(t *testing.T) {