26#include "../ExtensionsTest.h"
31using namespace cocos2d::network;
33HttpClientTests::HttpClientTests()
40: _labelStatusCode(nullptr)
42 auto winSize = Director::getInstance()->getWinSize();
44 const int MARGIN = 40;
47 const int LEFT = winSize.width / 4;
48 const int RIGHT = winSize.width / 4 * 3;
50 auto menuRequest = Menu::create();
51 menuRequest->setPosition(Vec2::ZERO);
52 addChild(menuRequest);
55 auto labelGet = Label::createWithTTF(
"Test Get",
"fonts/arial.ttf", 22);
57 itemGet->setPosition(LEFT, winSize.height - MARGIN - SPACE);
58 menuRequest->addChild(itemGet);
61 auto labelPost = Label::createWithTTF(
"Test Post",
"fonts/arial.ttf", 22);
63 itemPost->setPosition(LEFT, winSize.height - MARGIN - 2 * SPACE);
64 menuRequest->addChild(itemPost);
67 auto labelPostBinary = Label::createWithTTF(
"Test Post Binary",
"fonts/arial.ttf", 22);
69 itemPostBinary->setPosition(LEFT, winSize.height - MARGIN - 3 * SPACE);
70 menuRequest->addChild(itemPostBinary);
73 auto labelPut = Label::createWithTTF(
"Test Put",
"fonts/arial.ttf", 22);
75 itemPut->setPosition(LEFT, winSize.height - MARGIN - 4 * SPACE);
76 menuRequest->addChild(itemPut);
79 auto labelDelete = Label::createWithTTF(
"Test Delete",
"fonts/arial.ttf", 22);
81 itemDelete->setPosition(LEFT, winSize.height - MARGIN - 5 * SPACE);
82 menuRequest->addChild(itemDelete);
85 labelGet = Label::createWithTTF(
"Test Immediate Get",
"fonts/arial.ttf", 22);
87 itemGet->setPosition(RIGHT, winSize.height - MARGIN - SPACE);
88 menuRequest->addChild(itemGet);
91 labelPost = Label::createWithTTF(
"Test Immediate Post",
"fonts/arial.ttf", 22);
93 itemPost->setPosition(RIGHT, winSize.height - MARGIN - 2 * SPACE);
94 menuRequest->addChild(itemPost);
97 labelPostBinary = Label::createWithTTF(
"Test Immediate Post Binary",
"fonts/arial.ttf", 22);
99 itemPostBinary->setPosition(RIGHT, winSize.height - MARGIN - 3 * SPACE);
100 menuRequest->addChild(itemPostBinary);
103 labelPut = Label::createWithTTF(
"Test Immediate Put",
"fonts/arial.ttf", 22);
105 itemPut->setPosition(RIGHT, winSize.height - MARGIN - 4 * SPACE);
106 menuRequest->addChild(itemPut);
109 labelDelete = Label::createWithTTF(
"Test Immediate Delete",
"fonts/arial.ttf", 22);
111 itemDelete->setPosition(RIGHT, winSize.height - MARGIN - 5 * SPACE);
112 menuRequest->addChild(itemDelete);
115 _labelStatusCode = Label::createWithTTF(
"HTTP Status Code",
"fonts/arial.ttf", 18);
116 _labelStatusCode->setPosition(winSize.width / 2, winSize.height - MARGIN - 6 * SPACE);
122 HttpClient::destroyInstance();
129 HttpRequest* request =
new (std::nothrow) HttpRequest();
130 request->setUrl(
"https://just-make-this-request-failed.com");
131 request->setRequestType(HttpRequest::Type::GET);
135 request->setTag(
"GET immediate test1");
136 HttpClient::getInstance()->sendImmediate(request);
139 request->setTag(
"GET test1");
140 HttpClient::getInstance()->send(request);
147 HttpRequest* request =
new (std::nothrow) HttpRequest();
149 request->setUrl(
"https://httpbin.org/ip");
150 request->setRequestType(HttpRequest::Type::GET);
154 request->setTag(
"GET immediate test2");
155 HttpClient::getInstance()->sendImmediate(request);
158 request->setTag(
"GET test2");
159 HttpClient::getInstance()->send(request);
167 HttpRequest* request =
new (std::nothrow) HttpRequest();
168 request->setUrl(
"https://httpbin.org/get");
169 request->setRequestType(HttpRequest::Type::GET);
173 request->setTag(
"GET immediate test3");
174 HttpClient::getInstance()->sendImmediate(request);
177 request->setTag(
"GET test3");
178 HttpClient::getInstance()->send(request);
192 HttpRequest* request =
new (std::nothrow) HttpRequest();
193 request->setUrl(
"https://httpbin.org/post");
194 request->setRequestType(HttpRequest::Type::POST);
198 const char* postData =
"visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
199 request->setRequestData(postData, strlen(postData));
202 request->setTag(
"POST immediate test1");
203 HttpClient::getInstance()->sendImmediate(request);
206 request->setTag(
"POST test1");
207 HttpClient::getInstance()->send(request);
214 HttpRequest* request =
new (std::nothrow) HttpRequest();
215 request->setUrl(
"https://httpbin.org/post");
216 request->setRequestType(HttpRequest::Type::POST);
217 std::vector<std::string> headers;
218 headers.push_back(
"Content-Type: application/json; charset=utf-8");
219 request->setHeaders(headers);
223 const char* postData =
"visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
224 request->setRequestData(postData, strlen(postData));
227 request->setTag(
"POST immediate test2");
228 HttpClient::getInstance()->sendImmediate(request);
231 request->setTag(
"POST test2");
232 HttpClient::getInstance()->send(request);
243 HttpRequest* request =
new (std::nothrow) HttpRequest();
244 request->setUrl(
"https://httpbin.org/post");
245 request->setRequestType(HttpRequest::Type::POST);
249 char postData[22] =
"binary=hello\0\0cocos2d";
250 request->setRequestData(postData, 22);
253 request->setTag(
"POST Binary immediate test");
254 HttpClient::getInstance()->sendImmediate(request);
257 request->setTag(
"POST Binary test");
258 HttpClient::getInstance()->send(request);
272 HttpRequest* request =
new (std::nothrow) HttpRequest();
273 request->setUrl(
"https://httpbin.org/put");
274 request->setRequestType(HttpRequest::Type::PUT);
278 const char* postData =
"visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
279 request->setRequestData(postData, strlen(postData));
282 request->setTag(
"PUT Binary immediate test1");
283 HttpClient::getInstance()->sendImmediate(request);
286 request->setTag(
"PUT Binary test1");
287 HttpClient::getInstance()->send(request);
294 HttpRequest* request =
new (std::nothrow) HttpRequest();
295 request->setUrl(
"https://httpbin.org/put");
296 request->setRequestType(HttpRequest::Type::PUT);
297 std::vector<std::string> headers;
298 headers.push_back(
"Content-Type: application/json; charset=utf-8");
299 request->setHeaders(headers);
303 const char* postData =
"visitor=cocos2d&TestSuite=Extensions Test/NetworkTest";
304 request->setRequestData(postData, strlen(postData));
307 request->setTag(
"PUT Binary immediate test2");
308 HttpClient::getInstance()->sendImmediate(request);
311 request->setTag(
"PUT Binary test2");
312 HttpClient::getInstance()->send(request);
325 HttpRequest* request =
new (std::nothrow) HttpRequest();
326 request->setUrl(
"https://just-make-this-request-failed.com");
327 request->setRequestType(HttpRequest::Type::DELETE);
331 request->setTag(
"DELETE immediate test1");
332 HttpClient::getInstance()->sendImmediate(request);
335 request->setTag(
"DELETE test1");
336 HttpClient::getInstance()->send(request);
343 HttpRequest* request =
new (std::nothrow) HttpRequest();
344 request->setUrl(
"https://httpbin.org/delete");
345 request->setRequestType(HttpRequest::Type::DELETE);
349 request->setTag(
"DELETE immediate test2");
350 HttpClient::getInstance()->sendImmediate(request);
353 request->setTag(
"DELETE test2");
354 HttpClient::getInstance()->send(request);
371 if (0 != strlen(response->getHttpRequest()->getTag()))
373 log(
"%s completed", response->getHttpRequest()->getTag());
376 long statusCode = response->getResponseCode();
377 char statusString[64] = {};
378 sprintf(statusString,
"HTTP Status Code: %ld, tag = %s", statusCode, response->getHttpRequest()->getTag());
380 log(
"response code: %ld", statusCode);
382 if (!response->isSucceed())
384 log(
"response failed");
385 log(
"error buffer: %s", response->getErrorBuffer());
390 std::vector<char> *buffer = response->getResponseData();
391 log(
"Http Test, dump data: ");
392 for (
unsigned int i = 0; i < buffer->size(); i++)
394 log(
"%c", (*buffer)[i]);
397 if (response->getHttpRequest()->getReferenceCount() != 2)
399 log(
"request ref count not 2, is %d", response->getHttpRequest()->getReferenceCount());
407: _labelStatusCode(nullptr)
409 auto winSize = Director::getInstance()->getWinSize();
411 const int MARGIN = 40;
412 const int SPACE = 35;
414 const int CENTER = winSize.width / 2;
416 auto menuRequest = Menu::create();
417 menuRequest->setPosition(Vec2::ZERO);
418 addChild(menuRequest);
421 auto labelGet = Label::createWithTTF(
"Test Clear all Get",
"fonts/arial.ttf", 22);
423 itemGet->setPosition(CENTER, winSize.height - MARGIN - SPACE);
424 menuRequest->addChild(itemGet);
427 auto labelPost = Label::createWithTTF(
"Test Clear but only with the tag DELETE",
"fonts/arial.ttf", 22);
429 itemPost->setPosition(CENTER, winSize.height - MARGIN - 2 * SPACE);
430 menuRequest->addChild(itemPost);
433 _labelStatusCode = Label::createWithTTF(
"HTTP Status Code",
"fonts/arial.ttf", 18);
434 _labelStatusCode->setPosition(winSize.width / 2, winSize.height - MARGIN - 6 * SPACE);
438 _labelTrakingData = Label::createWithTTF(
"Got 0 of 0 expected http requests",
"fonts/arial.ttf", 16);
448 HttpClient::destroyInstance();
453 for (
int i=0; i < 10; i++)
455 HttpRequest* request =
new (std::nothrow) HttpRequest();
456 std::stringstream url;
457 url <<
"https://cocos2d-x.org/images/logo.png?id=" << std::to_string(i);
458 request->setUrl(url.str());
459 request->setRequestType(HttpRequest::Type::GET);
463 url <<
"TEST_" << std::to_string(i);
464 request->setTag(url.str());
465 HttpClient::getInstance()->send(request);
472 HttpClient::getInstance()->setClearRequestPredicate(
nullptr);
473 HttpClient::getInstance()->setClearResponsePredicate(
nullptr);
474 HttpClient::getInstance()->clearResponseAndRequestQueue();
483 for (
int i=0; i < 10; i++)
485 HttpRequest* request =
new (std::nothrow) HttpRequest();
486 std::stringstream url;
487 url <<
"https://cocos2d-x.org/images/logo.png?id=" << std::to_string(i);
488 request->setUrl(url.str());
489 request->setRequestType(HttpRequest::Type::GET);
494 url <<
"TEST_" << std::to_string(i);
498 url <<
"DELETE_" << std::to_string(i);
500 request->setTag(url.str());
501 HttpClient::getInstance()->send(request);
505 HttpClient::getInstance()->setClearRequestPredicate([&](HttpRequest* req)
507 auto r = !!strstr(req->getTag(),
"DELETE_");
510 HttpClient::getInstance()->setClearResponsePredicate(
nullptr);
511 HttpClient::getInstance()->clearResponseAndRequestQueue();
527 if (0 != strlen(response->getHttpRequest()->getTag()))
529 log(
"%s completed", response->getHttpRequest()->getTag());
532 long statusCode = response->getResponseCode();
533 char statusString[64] = {};
534 sprintf(statusString,
"HTTP Status Code: %ld, tag = %s", statusCode, response->getHttpRequest()->getTag());
536 log(
"response code: %ld", statusCode);
542 if (!response->isSucceed())
544 log(
"response failed");
545 log(
"error buffer: %s", response->getErrorBuffer());
#define ADD_TEST_CASE(__className__)
void onMenuCancelSomeClicked(cocos2d::Ref *sender)
cocos2d::Label * _labelTrakingData
virtual ~HttpClientClearRequestsTest()
int _totalExpectedRequests
void onHttpRequestCompleted(cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response)
int _totalProcessedRequests
HttpClientClearRequestsTest()
void onMenuCancelAllClicked(cocos2d::Ref *sender)
cocos2d::Label * _labelStatusCode
void onMenuGetTestClicked(cocos2d::Ref *sender, bool isImmediate)
virtual ~HttpClientTest()
void onMenuDeleteTestClicked(cocos2d::Ref *sender, bool isImmediate)
void onMenuPostBinaryTestClicked(cocos2d::Ref *sender, bool isImmediate)
void onMenuPostTestClicked(cocos2d::Ref *sender, bool isImmediate)
void onHttpRequestCompleted(cocos2d::network::HttpClient *sender, cocos2d::network::HttpResponse *response)
void onMenuPutTestClicked(cocos2d::Ref *sender, bool isImmediate)
cocos2d::Label * _labelStatusCode