github.com/kumasuke120/mockuma@v1.1.9/internal/server/executor_test.go (about) 1 package server 2 3 import ( 4 "bytes" 5 "errors" 6 "fmt" 7 "net/http" 8 "net/http/httptest" 9 "testing" 10 "time" 11 12 "github.com/kumasuke120/mockuma/internal/mckmaps" 13 "github.com/kumasuke120/mockuma/internal/myhttp" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 func TestForwardError_Error(t *testing.T) { 18 e := &forwardError{err: errors.New("test_error")} 19 assert.NotNil(t, e) 20 assert.Contains(t, e.Error(), "test_error") 21 } 22 23 func TestWaitBeforeReturns(t *testing.T) { 24 //noinspection GoImportUsedAsName 25 assert := assert.New(t) 26 27 i1 := &mckmaps.Interval{Min: 100, Max: 100} 28 i1Start := time.Now() 29 waitBeforeReturns(i1) 30 i1Elapsed := time.Since(i1Start) 31 assert.True(i1Elapsed.Milliseconds() >= 100) 32 33 i2 := &mckmaps.Interval{Min: 10, Max: 30} 34 i2Start := time.Now() 35 for i := 0; i < 10; i++ { 36 waitBeforeReturns(i2) 37 } 38 i2Elapsed := time.Since(i2Start) 39 assert.True(i2Elapsed.Milliseconds() >= 100 && i2Elapsed.Milliseconds() <= 350) 40 } 41 42 func TestPolicyExecutor_executor(t *testing.T) { 43 //noinspection GoImportUsedAsName 44 assert := assert.New(t) 45 46 rr1 := httptest.NewRecorder() 47 var rw1 http.ResponseWriter = rr1 48 exe1 := &policyExecutor{ 49 r: httptest.NewRequest("GET", "/TestPolicyExecutor_executor", nil), 50 w: &rw1, 51 policy: newJSONPolicy(myhttp.StatusOK, "OK"), 52 } 53 e1 := exe1.execute() 54 if assert.Nil(e1) { 55 assert.Equal(http.StatusOK, rr1.Code) 56 assert.Equal(fmt.Sprintf(`{"statusCode": %d, "message": "%s"}`, http.StatusOK, "OK"), rr1.Body.String()) 57 } 58 59 rr2 := httptest.NewRecorder() 60 var rw2 http.ResponseWriter = rr2 61 exe2 := &policyExecutor{ 62 r: httptest.NewRequest("GET", "/TestPolicyExecutor_executor", nil), 63 w: &rw2, 64 policy: pNoPolicyMatched, 65 } 66 e2 := exe2.execute() 67 if assert.Nil(e2) { 68 assert.Equal(http.StatusBadRequest, rr2.Code) 69 assert.Equal(string(pNoPolicyMatched.Returns.Body), rr2.Body.String()) 70 } 71 72 rr3Start := time.Now() 73 rr3 := httptest.NewRecorder() 74 var rw3 http.ResponseWriter = rr3 75 exe3 := &policyExecutor{ 76 r: httptest.NewRequest("GET", "/TestPolicyExecutor_executor", nil), 77 w: &rw3, 78 policy: &mckmaps.Policy{ 79 CmdType: mckmaps.CmdTypeReturns, 80 Returns: &mckmaps.Returns{ 81 StatusCode: myhttp.StatusOK, 82 Latency: &mckmaps.Interval{ 83 Min: 100, 84 Max: 100, 85 }, 86 Headers: []*mckmaps.NameValuesPair{ 87 {Name: myhttp.HeaderContentType, Values: []string{myhttp.ContentTypeJSON}}, 88 }, 89 Body: []byte(fmt.Sprintf(`{"statusCode": %d, "message": "%s"}`, myhttp.StatusOK, "test")), 90 }, 91 }, 92 } 93 e3 := exe3.execute() 94 assert.Nil(e3) 95 rr3Elapsed := time.Since(rr3Start) 96 assert.True(rr3Elapsed.Milliseconds() >= 100) 97 98 rr4 := httptest.NewRecorder() 99 var rw4 http.ResponseWriter = rr4 100 exe4 := &policyExecutor{ 101 r: httptest.NewRequest("GET", "/TestPolicyExecutor_executor", nil), 102 w: &rw4, 103 policy: &mckmaps.Policy{ 104 CmdType: mckmaps.CmdTypeForwards, 105 Forwards: &mckmaps.Forwards{ 106 Latency: &mckmaps.Interval{ 107 Min: 0, 108 Max: 0, 109 }, 110 Path: "https://www.example.com", 111 }, 112 }, 113 } 114 e4 := exe4.execute() 115 assert.Nil(e4) 116 assert.Equal(http.StatusOK, rr4.Code) 117 118 handler := newMockHandler(mappings).(*mockHandler) 119 rr5 := httptest.NewRecorder() 120 var rw5 http.ResponseWriter = rr5 121 exe5 := &policyExecutor{ 122 h: handler, 123 r: httptest.NewRequest("POST", "/TestPolicyExecutor_executor", bytes.NewReader([]byte("120"))), 124 w: &rw5, 125 policy: &mckmaps.Policy{ 126 CmdType: mckmaps.CmdTypeForwards, 127 Forwards: &mckmaps.Forwards{ 128 Path: "/m", 129 }, 130 }, 131 } 132 e5 := exe5.execute() 133 assert.Nil(e5) 134 assert.Equal(http.StatusOK, rr5.Code) 135 assert.Equal("TEST/v1", rr5.Header().Get("Server")) 136 137 rr6 := httptest.NewRecorder() 138 var rw6 http.ResponseWriter = rr6 139 exe6 := &policyExecutor{ 140 h: handler, 141 r: httptest.NewRequest("GET", "/c?r1=120", nil), 142 w: &rw6, 143 policy: &mckmaps.Policy{ 144 CmdType: mckmaps.CmdTypeForwards, 145 Forwards: &mckmaps.Forwards{ 146 Path: "m", 147 }, 148 }, 149 } 150 e6 := exe6.execute() 151 assert.Nil(e6) 152 assert.Equal(http.StatusOK, rr6.Code) 153 154 rr7 := httptest.NewRecorder() 155 var rw7 http.ResponseWriter = rr7 156 exe7 := &policyExecutor{ 157 r: httptest.NewRequest("GET", "/TestPolicyExecutor_executor", nil), 158 w: &rw7, 159 policy: &mckmaps.Policy{ 160 CmdType: "wow", 161 }, 162 } 163 e7 := exe7.execute() 164 assert.NotNil(e7) 165 assert.Contains(e7.Error(), "wow") 166 167 rr8 := httptest.NewRecorder() 168 var rw8 http.ResponseWriter = rr8 169 exe8 := &policyExecutor{ 170 r: httptest.NewRequest("GET", "/TestPolicyExecutor_executor", nil), 171 w: &rw8, 172 policy: &mckmaps.Policy{ 173 CmdType: mckmaps.CmdTypeForwards, 174 Forwards: &mckmaps.Forwards{ 175 Path: "http://localhost:8080", 176 }, 177 }, 178 } 179 e8 := exe8.execute() 180 assert.NotNil(e8) 181 182 rr9 := httptest.NewRecorder() 183 var rw9 http.ResponseWriter = rr9 184 exe9 := &policyExecutor{ 185 r: httptest.NewRequest("GET", "/TestPolicyExecutor_executor", nil), 186 w: &rw9, 187 policy: newJSONPolicy(myhttp.StatusOK, "OK"), 188 returnHead: true, 189 } 190 e9 := exe9.execute() 191 if assert.Nil(e9) { 192 assert.Empty(rr9.Body.String()) 193 } 194 }