session_tests.cpp
Go to the documentation of this file.
1 #include <gtest/gtest.h>
2 
3 #include <chrono>
4 #include <string>
5 
6 #include <cpr/cpr.h>
7 
8 #include "server.h"
9 
10 using namespace cpr;
11 
12 static Server* server = new Server();
13 auto base = server->GetBaseUrl();
14 
15 TEST(RedirectTests, TemporaryDefaultRedirectTest) {
16  auto url = Url{base + "/temporary_redirect.html"};
17  Session session;
18  session.SetUrl(url);
19  auto response = session.Get();
20  auto expected_text = std::string{"Hello world!"};
21  EXPECT_EQ(expected_text, response.text);
22  EXPECT_EQ(Url{base + "/hello.html"}, response.url);
23  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
24  EXPECT_EQ(200, response.status_code);
25  EXPECT_EQ(ErrorCode::OK, response.error.code);
26 }
27 
28 TEST(RedirectTests, NoTemporaryRedirectTest) {
29  auto url = Url{base + "/temporary_redirect.html"};
30  Session session;
31  session.SetUrl(url);
32  session.SetRedirect(false);
33  auto response = session.Get();
34  auto expected_text = std::string{"Found"};
35  EXPECT_EQ(expected_text, response.text);
36  EXPECT_EQ(url, response.url);
37  EXPECT_EQ(std::string{}, response.header["content-type"]);
38  EXPECT_EQ(302, response.status_code);
39  EXPECT_EQ(ErrorCode::OK, response.error.code);
40 }
41 
42 TEST(RedirectTests, PermanentDefaultRedirectTest) {
43  auto url = Url{base + "/permanent_redirect.html"};
44  Session session;
45  session.SetUrl(url);
46  auto response = session.Get();
47  auto expected_text = std::string{"Hello world!"};
48  EXPECT_EQ(expected_text, response.text);
49  EXPECT_EQ(Url{base + "/hello.html"}, response.url);
50  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
51  EXPECT_EQ(200, response.status_code);
52  EXPECT_EQ(ErrorCode::OK, response.error.code);
53 }
54 
55 TEST(RedirectTests, NoPermanentRedirectTest) {
56  auto url = Url{base + "/permanent_redirect.html"};
57  Session session;
58  session.SetUrl(url);
59  session.SetRedirect(false);
60  auto response = session.Get();
61  auto expected_text = std::string{"Moved Permanently"};
62  EXPECT_EQ(expected_text, response.text);
63  EXPECT_EQ(url, response.url);
64  EXPECT_EQ(std::string{}, response.header["content-type"]);
65  EXPECT_EQ(301, response.status_code);
66  EXPECT_EQ(ErrorCode::OK, response.error.code);
67 }
68 
69 TEST(MaxRedirectsTests, ZeroMaxRedirectsSuccessTest) {
70  auto url = Url{base + "/hello.html"};
71  Session session;
72  session.SetUrl(url);
73  session.SetMaxRedirects(MaxRedirects(0));
74  auto response = session.Get();
75  auto expected_text = std::string{"Hello world!"};
76  EXPECT_EQ(expected_text, response.text);
77  EXPECT_EQ(url, response.url);
78  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
79  EXPECT_EQ(200, response.status_code);
80  EXPECT_EQ(ErrorCode::OK, response.error.code);
81 }
82 
83 TEST(MaxRedirectsTests, ZeroMaxRedirectsFailureTest) {
84  auto url = Url{base + "/permanent_redirect.html"};
85  Session session;
86  session.SetUrl(url);
87  session.SetMaxRedirects(MaxRedirects(0));
88  auto response = session.Get();
89  EXPECT_EQ(std::string{}, response.text);
90  EXPECT_EQ(url, response.url);
91  EXPECT_EQ(std::string{}, response.header["content-type"]);
92  EXPECT_EQ(301, response.status_code);
93  EXPECT_EQ(ErrorCode::OK, response.error.code);
94 }
95 
96 TEST(MaxRedirectsTests, OneMaxRedirectsSuccessTest) {
97  auto url = Url{base + "/permanent_redirect.html"};
98  Session session;
99  session.SetUrl(url);
100  session.SetMaxRedirects(MaxRedirects(1));
101  auto response = session.Get();
102  auto expected_text = std::string{"Hello world!"};
103  EXPECT_EQ(expected_text, response.text);
104  EXPECT_EQ(Url{base + "/hello.html"}, response.url);
105  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
106  EXPECT_EQ(200, response.status_code);
107  EXPECT_EQ(ErrorCode::OK, response.error.code);
108 }
109 
110 TEST(MaxRedirectsTests, OneMaxRedirectsFailureTest) {
111  auto url = Url{base + "/two_redirects.html"};
112  Session session;
113  session.SetUrl(url);
114  session.SetMaxRedirects(MaxRedirects(1));
115  auto response = session.Get();
116  EXPECT_EQ(std::string{}, response.text);
117  EXPECT_EQ(Url{base + "/permanent_redirect.html"}, response.url);
118  EXPECT_EQ(std::string{}, response.header["content-type"]);
119  EXPECT_EQ(301, response.status_code);
120  EXPECT_EQ(ErrorCode::OK, response.error.code);
121 }
122 
123 TEST(MaxRedirectsTests, TwoMaxRedirectsSuccessTest) {
124  auto url = Url{base + "/two_redirects.html"};
125  Session session;
126  session.SetUrl(url);
127  session.SetMaxRedirects(MaxRedirects(2));
128  auto response = session.Get();
129  auto expected_text = std::string{"Hello world!"};
130  EXPECT_EQ(expected_text, response.text);
131  EXPECT_EQ(Url{base + "/hello.html"}, response.url);
132  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
133  EXPECT_EQ(200, response.status_code);
134  EXPECT_EQ(ErrorCode::OK, response.error.code);
135 }
136 
137 TEST(MultipleGetTests, BasicMultipleGetTest) {
138  auto url = Url{base + "/hello.html"};
139  Session session;
140  session.SetUrl(url);
141  for (int i = 0; i < 100; ++i) {
142  auto response = session.Get();
143  auto expected_text = std::string{"Hello world!"};
144  EXPECT_EQ(expected_text, response.text);
145  EXPECT_EQ(url, response.url);
146  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
147  EXPECT_EQ(200, response.status_code);
148  EXPECT_EQ(ErrorCode::OK, response.error.code);
149  }
150 }
151 
152 TEST(MultipleGetTests, UrlChangeMultipleGetTest) {
153  Session session;
154  {
155  auto url = Url{base + "/hello.html"};
156  session.SetUrl(url);
157  auto response = session.Get();
158  auto expected_text = std::string{"Hello world!"};
159  EXPECT_EQ(expected_text, response.text);
160  EXPECT_EQ(url, response.url);
161  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
162  EXPECT_EQ(200, response.status_code);
163  EXPECT_EQ(ErrorCode::OK, response.error.code);
164  }
165  {
166  auto url = Url{base + "/basic.json"};
167  session.SetUrl(url);
168  auto response = session.Get();
169  auto expected_text = std::string{"[\n"
170  " {\n"
171  " \"first_key\": \"first_value\",\n"
172  " \"second_key\": \"second_value\"\n"
173  " }\n"
174  "]"};
175  EXPECT_EQ(expected_text, response.text);
176  EXPECT_EQ(url, response.url);
177  EXPECT_EQ(std::string{"application/octet-stream"}, response.header["content-type"]);
178  EXPECT_EQ(200, response.status_code);
179  EXPECT_EQ(ErrorCode::OK, response.error.code);
180  }
181 }
182 
183 TEST(MultipleGetTests, HeaderMultipleGetTest) {
184  auto url = Url{base + "/header_reflect.html"};
185  Session session;
186  session.SetUrl(url);
187  session.SetHeader(Header{{"hello", "world"}});
188  for (int i = 0; i < 100; ++i) {
189  auto response = session.Get();
190  auto expected_text = std::string{"Header reflect GET"};
191  EXPECT_EQ(expected_text, response.text);
192  EXPECT_EQ(url, response.url);
193  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
194  EXPECT_EQ(std::string{"world"}, response.header["hello"]);
195  EXPECT_EQ(200, response.status_code);
196  EXPECT_EQ(ErrorCode::OK, response.error.code);
197  }
198 }
199 
200 TEST(MultipleGetTests, HeaderChangeMultipleGetTest) {
201  auto url = Url{base + "/header_reflect.html"};
202  Session session;
203  session.SetUrl(url);
204  session.SetHeader(Header{{"hello", "world"}});
205  {
206  auto response = session.Get();
207  auto expected_text = std::string{"Header reflect GET"};
208  EXPECT_EQ(expected_text, response.text);
209  EXPECT_EQ(url, response.url);
210  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
211  EXPECT_EQ(std::string{"world"}, response.header["hello"]);
212  EXPECT_EQ(200, response.status_code);
213  EXPECT_EQ(ErrorCode::OK, response.error.code);
214  }
215  session.SetHeader(Header{{"key", "value"}});
216  {
217  auto response = session.Get();
218  auto expected_text = std::string{"Header reflect GET"};
219  EXPECT_EQ(expected_text, response.text);
220  EXPECT_EQ(url, response.url);
221  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
222  EXPECT_EQ(std::string{"value"}, response.header["key"]);
223  EXPECT_EQ(200, response.status_code);
224  EXPECT_EQ(ErrorCode::OK, response.error.code);
225  }
226 }
227 
228 TEST(MultipleGetTests, ParameterMultipleGetTest) {
229  auto url = Url{base + "/hello.html"};
230  Session session;
231  session.SetUrl(url);
232  session.SetParameters({{"hello", "world"}});
233  for (int i = 0; i < 100; ++i) {
234  auto response = session.Get();
235  auto expected_text = std::string{"Hello world!"};
236  EXPECT_EQ(expected_text, response.text);
237  EXPECT_EQ(Url{url + "?hello=world"}, response.url);
238  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
239  EXPECT_EQ(200, response.status_code);
240  EXPECT_EQ(ErrorCode::OK, response.error.code);
241  }
242 }
243 
244 TEST(MultipleGetTests, ParameterChangeMultipleGetTest) {
245  auto url = Url{base + "/hello.html"};
246  Session session;
247  session.SetUrl(url);
248  session.SetParameters({{"hello", "world"}});
249  {
250  auto response = session.Get();
251  auto expected_text = std::string{"Hello world!"};
252  EXPECT_EQ(expected_text, response.text);
253  EXPECT_EQ(Url{url + "?hello=world"}, response.url);
254  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
255  EXPECT_EQ(200, response.status_code);
256  EXPECT_EQ(ErrorCode::OK, response.error.code);
257  }
258  session.SetUrl(url);
259  session.SetParameters({{"key", "value"}});
260  {
261  auto response = session.Get();
262  auto expected_text = std::string{"Hello world!"};
263  EXPECT_EQ(expected_text, response.text);
264  EXPECT_EQ(Url{url + "?key=value"}, response.url);
265  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
266  EXPECT_EQ(200, response.status_code);
267  EXPECT_EQ(ErrorCode::OK, response.error.code);
268  }
269 }
270 
271 TEST(MultipleGetTests, BasicAuthenticationMultipleGetTest) {
272  auto url = Url{base + "/basic_auth.html"};
273  Session session;
274  session.SetUrl(url);
275  session.SetAuth(Authentication{"user", "password"});
276  for (int i = 0; i < 100; ++i) {
277  auto response = session.Get();
278  auto expected_text = std::string{"Header reflect GET"};
279  EXPECT_EQ(expected_text, response.text);
280  EXPECT_EQ(url, response.url);
281  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
282  EXPECT_EQ(200, response.status_code);
283  EXPECT_EQ(ErrorCode::OK, response.error.code);
284  }
285 }
286 
287 TEST(MultipleGetTests, BasicAuthenticationChangeMultipleGetTest) {
288  auto url = Url{base + "/basic_auth.html"};
289  Session session;
290  session.SetUrl(url);
291  session.SetAuth(Authentication{"user", "password"});
292  {
293  auto response = session.Get();
294  auto expected_text = std::string{"Header reflect GET"};
295  EXPECT_EQ(expected_text, response.text);
296  EXPECT_EQ(url, response.url);
297  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
298  EXPECT_EQ(200, response.status_code);
299  EXPECT_EQ(ErrorCode::OK, response.error.code);
300  }
301  session.SetAuth(Authentication{"user", "bad_password"});
302  {
303  auto response = session.Get();
304  EXPECT_EQ(std::string{}, response.text);
305  EXPECT_EQ(url, response.url);
306  EXPECT_EQ(std::string{}, response.header["content-type"]);
307  EXPECT_EQ(401, response.status_code);
308  EXPECT_EQ(ErrorCode::OK, response.error.code);
309  }
310  session.SetAuth(Authentication{"bad_user", "password"});
311  {
312  auto response = session.Get();
313  EXPECT_EQ(std::string{}, response.text);
314  EXPECT_EQ(url, response.url);
315  EXPECT_EQ(std::string{}, response.header["content-type"]);
316  EXPECT_EQ(401, response.status_code);
317  EXPECT_EQ(ErrorCode::OK, response.error.code);
318  }
319 }
320 
321 TEST(ParameterTests, ParameterSingleTest) {
322  auto url = Url{base + "/hello.html"};
323  Session session;
324  session.SetUrl(url);
325  Parameters parameters{{"hello", "world"}};
326  session.SetParameters(parameters);
327  auto response = session.Get();
328  auto expected_text = std::string{"Hello world!"};
329  EXPECT_EQ(expected_text, response.text);
330  EXPECT_EQ(Url{url + "?hello=world"}, response.url);
331  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
332  EXPECT_EQ(200, response.status_code);
333  EXPECT_EQ(ErrorCode::OK, response.error.code);
334 }
335 
336 TEST(ParameterTests, ParameterMultipleTest) {
337  auto url = Url{base + "/hello.html"};
338  Session session;
339  session.SetUrl(url);
340  Parameters parameters{{"hello", "world"}, {"key", "value"}};
341  session.SetParameters(parameters);
342  auto response = session.Get();
343  auto expected_text = std::string{"Hello world!"};
344  EXPECT_EQ(expected_text, response.text);
345  EXPECT_EQ(Url{url + "?hello=world&key=value"}, response.url);
346  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
347  EXPECT_EQ(200, response.status_code);
348  EXPECT_EQ(ErrorCode::OK, response.error.code);
349 }
350 
351 TEST(TimeoutTests, SetTimeoutTest) {
352  auto url = Url{base + "/hello.html"};
353  Session session;
354  session.SetUrl(url);
355  session.SetTimeout(0L);
356  auto response = session.Get();
357  auto expected_text = std::string{"Hello world!"};
358  EXPECT_EQ(expected_text, response.text);
359  EXPECT_EQ(url, response.url);
360  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
361  EXPECT_EQ(200, response.status_code);
362  EXPECT_EQ(ErrorCode::OK, response.error.code);
363 }
364 
365 TEST(TimeoutTests, SetTimeoutLongTest) {
366  auto url = Url{base + "/hello.html"};
367  Session session;
368  session.SetUrl(url);
369  session.SetTimeout(10000L);
370  auto response = session.Get();
371  auto expected_text = std::string{"Hello world!"};
372  EXPECT_EQ(expected_text, response.text);
373  EXPECT_EQ(url, response.url);
374  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
375  EXPECT_EQ(200, response.status_code);
376  EXPECT_EQ(ErrorCode::OK, response.error.code);
377 }
378 
379 TEST(TimeoutTests, SetChronoTimeoutTest) {
380  auto url = Url{base + "/hello.html"};
381  Session session;
382  session.SetUrl(url);
383  session.SetTimeout(std::chrono::milliseconds{0});
384  auto response = session.Get();
385  auto expected_text = std::string{"Hello world!"};
386  EXPECT_EQ(expected_text, response.text);
387  EXPECT_EQ(url, response.url);
388  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
389  EXPECT_EQ(200, response.status_code);
390  EXPECT_EQ(ErrorCode::OK, response.error.code);
391 }
392 
393 TEST(TimeoutTests, SetChronoTimeoutLongTest) {
394  auto url = Url{base + "/hello.html"};
395  Session session;
396  session.SetUrl(url);
397  session.SetTimeout(std::chrono::milliseconds{10000});
398  auto response = session.Get();
399  auto expected_text = std::string{"Hello world!"};
400  EXPECT_EQ(expected_text, response.text);
401  EXPECT_EQ(url, response.url);
402  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
403  EXPECT_EQ(200, response.status_code);
404  EXPECT_EQ(ErrorCode::OK, response.error.code);
405 }
406 
407 TEST(ConnectTimeoutTests, SetConnectTimeoutTest) {
408  auto url = Url{base + "/hello.html"};
409  Session session;
410  session.SetUrl(url);
411  session.SetConnectTimeout(0L);
412  auto response = session.Get();
413  auto expected_text = std::string{"Hello world!"};
414  EXPECT_EQ(expected_text, response.text);
415  EXPECT_EQ(url, response.url);
416  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
417  EXPECT_EQ(200, response.status_code);
418  EXPECT_EQ(ErrorCode::OK, response.error.code);
419 }
420 
421 TEST(ConnectTimeoutTests, SetConnectTimeoutLongTest) {
422  auto url = Url{base + "/hello.html"};
423  Session session;
424  session.SetUrl(url);
425  session.SetConnectTimeout(10000L);
426  auto response = session.Get();
427  auto expected_text = std::string{"Hello world!"};
428  EXPECT_EQ(expected_text, response.text);
429  EXPECT_EQ(url, response.url);
430  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
431  EXPECT_EQ(200, response.status_code);
432  EXPECT_EQ(ErrorCode::OK, response.error.code);
433 }
434 
435 TEST(ConnectTimeoutTests, SetChronoConnectTimeoutTest) {
436  auto url = Url{base + "/hello.html"};
437  Session session;
438  session.SetUrl(url);
439  session.SetConnectTimeout(std::chrono::milliseconds{0});
440  auto response = session.Get();
441  auto expected_text = std::string{"Hello world!"};
442  EXPECT_EQ(expected_text, response.text);
443  EXPECT_EQ(url, response.url);
444  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
445  EXPECT_EQ(200, response.status_code);
446  EXPECT_EQ(ErrorCode::OK, response.error.code);
447 }
448 
449 TEST(ConnectTimeoutTests, SetChronoConnectTimeoutLongTest) {
450  auto url = Url{base + "/hello.html"};
451  Session session;
452  session.SetUrl(url);
453  session.SetConnectTimeout(std::chrono::milliseconds{10000});
454  auto response = session.Get();
455  auto expected_text = std::string{"Hello world!"};
456  EXPECT_EQ(expected_text, response.text);
457  EXPECT_EQ(url, response.url);
458  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
459  EXPECT_EQ(200, response.status_code);
460  EXPECT_EQ(ErrorCode::OK, response.error.code);
461 }
462 
463 TEST(LowSpeedTests, SetLowSpeedTest) {
464  auto url = Url{base + "/hello.html"};
465  Session session;
466  session.SetUrl(url);
467  session.SetLowSpeed({1, 1});
468  auto response = session.Get();
469  auto expected_text = std::string{"Hello world!"};
470  EXPECT_EQ(expected_text, response.text);
471  EXPECT_EQ(url, response.url);
472  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
473  EXPECT_EQ(200, response.status_code);
474  EXPECT_EQ(ErrorCode::OK, response.error.code);
475 }
476 
477 TEST(PayloadTests, SetPayloadTest) {
478  auto url = Url{base + "/url_post.html"};
479  Session session;
480  session.SetUrl(url);
481  session.SetPayload({{"x", "5"}});
482  auto response = session.Post();
483  auto expected_text = std::string{"{\n"
484  " \"x\": 5\n"
485  "}"};
486  EXPECT_EQ(expected_text, response.text);
487  EXPECT_EQ(url, response.url);
488  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
489  EXPECT_EQ(201, response.status_code);
490  EXPECT_EQ(ErrorCode::OK, response.error.code);
491 }
492 
493 TEST(PayloadTests, SetPayloadLValueTest) {
494  auto url = Url{base + "/url_post.html"};
495  Session session;
496  session.SetUrl(url);
497  auto payload = Payload{{"x", "5"}};
498  session.SetPayload(payload);
499  auto response = session.Post();
500  auto expected_text = std::string{"{\n"
501  " \"x\": 5\n"
502  "}"};
503  EXPECT_EQ(expected_text, response.text);
504  EXPECT_EQ(url, response.url);
505  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
506  EXPECT_EQ(201, response.status_code);
507  EXPECT_EQ(ErrorCode::OK, response.error.code);
508 }
509 
510 TEST(MultipartTests, SetMultipartTest) {
511  auto url = Url{base + "/form_post.html"};
512  Session session;
513  session.SetUrl(url);
514  session.SetMultipart({{"x", "5"}});
515  auto response = session.Post();
516  auto expected_text = std::string{"{\n"
517  " \"x\": 5\n"
518  "}"};
519  EXPECT_EQ(expected_text, response.text);
520  EXPECT_EQ(url, response.url);
521  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
522  EXPECT_EQ(201, response.status_code);
523  EXPECT_EQ(ErrorCode::OK, response.error.code);
524 }
525 
526 TEST(MultipartTests, SetMultipartValueTest) {
527  auto url = Url{base + "/form_post.html"};
528  Session session;
529  session.SetUrl(url);
530  auto multipart = Multipart{{"x", "5"}};
531  session.SetMultipart(multipart);
532  auto response = session.Post();
533  auto expected_text = std::string{"{\n"
534  " \"x\": 5\n"
535  "}"};
536  EXPECT_EQ(expected_text, response.text);
537  EXPECT_EQ(url, response.url);
538  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
539  EXPECT_EQ(201, response.status_code);
540  EXPECT_EQ(ErrorCode::OK, response.error.code);
541 }
542 
543 TEST(BodyTests, SetBodyTest) {
544  auto url = Url{base + "/url_post.html"};
545  Session session;
546  session.SetUrl(url);
547  session.SetBody(Body{"x=5"});
548  auto response = session.Post();
549  auto expected_text = std::string{"{\n"
550  " \"x\": 5\n"
551  "}"};
552  EXPECT_EQ(expected_text, response.text);
553  EXPECT_EQ(url, response.url);
554  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
555  EXPECT_EQ(201, response.status_code);
556  EXPECT_EQ(ErrorCode::OK, response.error.code);
557 }
558 
559 TEST(BodyTests, SetBodyValueTest) {
560  auto url = Url{base + "/url_post.html"};
561  Session session;
562  session.SetUrl(url);
563  auto body = Body{"x=5"};
564  session.SetBody(body);
565  auto response = session.Post();
566  auto expected_text = std::string{"{\n"
567  " \"x\": 5\n"
568  "}"};
569  EXPECT_EQ(expected_text, response.text);
570  EXPECT_EQ(url, response.url);
571  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
572  EXPECT_EQ(201, response.status_code);
573  EXPECT_EQ(ErrorCode::OK, response.error.code);
574 }
575 
576 TEST(DigestTests, SetDigestTest) {
577  auto url = Url{base + "/digest_auth.html"};
578  Session session;
579  session.SetUrl(url);
580  session.SetDigest({"user", "password"});
581  auto response = session.Get();
582  auto expected_text = std::string{"Header reflect GET"};
583  EXPECT_EQ(expected_text, response.text);
584  EXPECT_EQ(url, response.url);
585  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
586  EXPECT_EQ(200, response.status_code);
587  EXPECT_EQ(ErrorCode::OK, response.error.code);
588 }
589 
590 TEST(UserAgentTests, SetUserAgentTest) {
591  auto url = Url{base + "/header_reflect.html"};
592  auto userAgent = UserAgent{"Test User Agent"};
593  Session session;
594  session.SetUrl(url);
595  session.SetUserAgent(userAgent);
596  auto response = session.Get();
597  auto expected_text = std::string{"Header reflect GET"};
598  EXPECT_EQ(expected_text, response.text);
599  EXPECT_EQ(url, response.url);
600  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
601  EXPECT_EQ(userAgent, response.header["User-Agent"]);
602  EXPECT_EQ(200, response.status_code);
603  EXPECT_EQ(ErrorCode::OK, response.error.code);
604 }
605 
606 TEST(CookiesTests, BasicCookiesTest) {
607  auto url = Url{base + "/basic_cookies.html"};
608  Session session{};
609  session.SetUrl(url);
610  Cookies cookies;
611 
612  {
613  auto response = session.Get();
614  auto expected_text = std::string{"Hello world!"};
615  EXPECT_EQ(expected_text, response.text);
616  EXPECT_EQ(url, response.url);
617  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
618  EXPECT_EQ(200, response.status_code);
619  EXPECT_EQ(ErrorCode::OK, response.error.code);
620  cookies = response.cookies;
621  }
622  {
623  cookies["hello"] = "world";
624  cookies["my"] = "another; fake=cookie;"; // This is url encoded
625  session.SetCookies(cookies);
626  auto response = session.Get();
627  auto expected_text = std::string{"Hello world!"};
628  EXPECT_EQ(expected_text, response.text);
629  EXPECT_EQ(url, response.url);
630  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
631  EXPECT_EQ(200, response.status_code);
632  EXPECT_EQ(ErrorCode::OK, response.error.code);
633  EXPECT_EQ(cookies["cookie"], response.cookies["cookie"]);
634  EXPECT_EQ(cookies["icecream"], response.cookies["icecream"]);
635  EXPECT_EQ(cookies["expires"], response.cookies["expires"]);
636  }
637 }
638 
639 TEST(CookiesTests, CookiesConstructorTest) {
640  auto url = Url{base + "/basic_cookies.html"};
641  Session session{};
642  session.SetUrl(url);
643  Cookies cookies;
644 
645  {
646  auto response = session.Get();
647  auto expected_text = std::string{"Hello world!"};
648  EXPECT_EQ(expected_text, response.text);
649  EXPECT_EQ(url, response.url);
650  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
651  EXPECT_EQ(200, response.status_code);
652  EXPECT_EQ(ErrorCode::OK, response.error.code);
653  cookies = response.cookies;
654  }
655  {
656  cookies = Cookies{{"hello", "world"}, {"my", "another; fake=cookie;"}};
657  session.SetCookies(cookies);
658  auto response = session.Get();
659  auto expected_text = std::string{"Hello world!"};
660  EXPECT_EQ(expected_text, response.text);
661  EXPECT_EQ(url, response.url);
662  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
663  EXPECT_EQ(200, response.status_code);
664  EXPECT_EQ(ErrorCode::OK, response.error.code);
665  cookies = response.cookies;
666  EXPECT_EQ(cookies["cookie"], response.cookies["cookie"]);
667  EXPECT_EQ(cookies["icecream"], response.cookies["icecream"]);
668  EXPECT_EQ(cookies["expires"], response.cookies["expires"]);
669  }
670 }
671 
672 TEST(DifferentMethodTests, GetPostTest) {
673  Session session;
674  {
675  auto url = Url{base + "/hello.html"};
676  session.SetUrl(url);
677  auto response = session.Get();
678  auto expected_text = std::string{"Hello world!"};
679  EXPECT_EQ(expected_text, response.text);
680  EXPECT_EQ(url, response.url);
681  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
682  EXPECT_EQ(200, response.status_code);
683  EXPECT_EQ(ErrorCode::OK, response.error.code);
684  }
685  {
686  auto url = Url{base + "/url_post.html"};
687  session.SetUrl(url);
688  session.SetPayload({{"x", "5"}});
689  auto response = session.Post();
690  auto expected_text = std::string{"{\n"
691  " \"x\": 5\n"
692  "}"};
693  EXPECT_EQ(expected_text, response.text);
694  EXPECT_EQ(url, response.url);
695  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
696  EXPECT_EQ(201, response.status_code);
697  EXPECT_EQ(ErrorCode::OK, response.error.code);
698  }
699 }
700 
701 TEST(DifferentMethodTests, PostGetTest) {
702  Session session;
703  {
704  auto url = Url{base + "/url_post.html"};
705  session.SetUrl(url);
706  session.SetPayload({{"x", "5"}});
707  auto response = session.Post();
708  auto expected_text = std::string{"{\n"
709  " \"x\": 5\n"
710  "}"};
711  EXPECT_EQ(expected_text, response.text);
712  EXPECT_EQ(url, response.url);
713  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
714  EXPECT_EQ(201, response.status_code);
715  EXPECT_EQ(ErrorCode::OK, response.error.code);
716  }
717  {
718  auto url = Url{base + "/hello.html"};
719  session.SetUrl(url);
720  auto response = session.Get();
721  auto expected_text = std::string{"Hello world!"};
722  EXPECT_EQ(expected_text, response.text);
723  EXPECT_EQ(url, response.url);
724  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
725  EXPECT_EQ(200, response.status_code);
726  EXPECT_EQ(ErrorCode::OK, response.error.code);
727  }
728 }
729 
730 TEST(DifferentMethodTests, GetPostGetTest) {
731  Session session;
732  {
733  auto url = Url{base + "/hello.html"};
734  session.SetUrl(url);
735  auto response = session.Get();
736  auto expected_text = std::string{"Hello world!"};
737  EXPECT_EQ(expected_text, response.text);
738  EXPECT_EQ(url, response.url);
739  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
740  EXPECT_EQ(200, response.status_code);
741  EXPECT_EQ(ErrorCode::OK, response.error.code);
742  }
743  {
744  auto url = Url{base + "/url_post.html"};
745  session.SetUrl(url);
746  session.SetPayload({{"x", "5"}});
747  auto response = session.Post();
748  auto expected_text = std::string{"{\n"
749  " \"x\": 5\n"
750  "}"};
751  EXPECT_EQ(expected_text, response.text);
752  EXPECT_EQ(url, response.url);
753  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
754  EXPECT_EQ(201, response.status_code);
755  EXPECT_EQ(ErrorCode::OK, response.error.code);
756  }
757  {
758  auto url = Url{base + "/hello.html"};
759  session.SetUrl(url);
760  auto response = session.Get();
761  auto expected_text = std::string{"Hello world!"};
762  EXPECT_EQ(expected_text, response.text);
763  EXPECT_EQ(url, response.url);
764  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
765  EXPECT_EQ(200, response.status_code);
766  EXPECT_EQ(ErrorCode::OK, response.error.code);
767  }
768 }
769 
770 TEST(DifferentMethodTests, PostGetPostTest) {
771  Session session;
772  {
773  auto url = Url{base + "/url_post.html"};
774  session.SetUrl(url);
775  session.SetPayload({{"x", "5"}});
776  auto response = session.Post();
777  auto expected_text = std::string{"{\n"
778  " \"x\": 5\n"
779  "}"};
780  EXPECT_EQ(expected_text, response.text);
781  EXPECT_EQ(url, response.url);
782  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
783  EXPECT_EQ(201, response.status_code);
784  EXPECT_EQ(ErrorCode::OK, response.error.code);
785  }
786  {
787  auto url = Url{base + "/hello.html"};
788  session.SetUrl(url);
789  auto response = session.Get();
790  auto expected_text = std::string{"Hello world!"};
791  EXPECT_EQ(expected_text, response.text);
792  EXPECT_EQ(url, response.url);
793  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
794  EXPECT_EQ(200, response.status_code);
795  EXPECT_EQ(ErrorCode::OK, response.error.code);
796  }
797  {
798  auto url = Url{base + "/url_post.html"};
799  session.SetUrl(url);
800  session.SetPayload({{"x", "5"}});
801  auto response = session.Post();
802  auto expected_text = std::string{"{\n"
803  " \"x\": 5\n"
804  "}"};
805  EXPECT_EQ(expected_text, response.text);
806  EXPECT_EQ(url, response.url);
807  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
808  EXPECT_EQ(201, response.status_code);
809  EXPECT_EQ(ErrorCode::OK, response.error.code);
810  }
811 }
812 
813 TEST(DifferentMethodTests, MultipleGetPostTest) {
814  Session session;
815  for (int i = 0; i < 100; ++i) {
816  {
817  auto url = Url{base + "/hello.html"};
818  session.SetUrl(url);
819  auto response = session.Get();
820  auto expected_text = std::string{"Hello world!"};
821  EXPECT_EQ(expected_text, response.text);
822  EXPECT_EQ(url, response.url);
823  EXPECT_EQ(std::string{"text/html"}, response.header["content-type"]);
824  EXPECT_EQ(200, response.status_code);
825  EXPECT_EQ(ErrorCode::OK, response.error.code);
826  }
827  {
828  auto url = Url{base + "/url_post.html"};
829  session.SetUrl(url);
830  session.SetPayload({{"x", "5"}});
831  auto response = session.Post();
832  auto expected_text = std::string{"{\n"
833  " \"x\": 5\n"
834  "}"};
835  EXPECT_EQ(expected_text, response.text);
836  EXPECT_EQ(url, response.url);
837  EXPECT_EQ(std::string{"application/json"}, response.header["content-type"]);
838  EXPECT_EQ(201, response.status_code);
839  EXPECT_EQ(ErrorCode::OK, response.error.code);
840  }
841  }
842 }
843 
844 int main(int argc, char** argv) {
845  ::testing::InitGoogleTest(&argc, argv);
847  return RUN_ALL_TESTS();
848 }
Response Post()
Definition: session.cpp:502
Environment * AddGlobalTestEnvironment(Environment *env)
Definition: gtest.h:1342
void SetAuth(const Authentication &auth)
Definition: session.cpp:458
Definition: server.h:12
auto base
std::string Url
Definition: cprtypes.h:14
Definition: body.h:13
void SetConnectTimeout(const ConnectTimeout &timeout)
Definition: session.cpp:457
int main(int argc, char **argv)
void SetMaxRedirects(const MaxRedirects &max_redirects)
Definition: session.cpp:468
::std::string string
Definition: gtest-port.h:1129
void SetRedirect(const bool &redirect)
Definition: session.cpp:467
static const void * body(MD5_CTX *ctx, const void *data, unsigned long size)
Definition: md5.c:281
void SetUrl(const Url &url)
Definition: session.cpp:452
void SetMultipart(Multipart &&multipart)
Definition: session.cpp:466
unsigned int i
Definition: unit1303.c:79
void SetUserAgent(const UserAgent &ua)
Definition: session.cpp:460
void SetPayload(Payload &&payload)
Definition: session.cpp:462
Response Get()
Definition: session.cpp:498
TEST(RedirectTests, TemporaryDefaultRedirectTest)
void SetTimeout(const Timeout &timeout)
Definition: session.cpp:456
void SetBody(Body &&body)
Definition: session.cpp:471
Url GetBaseUrl()
Definition: server.cpp:625
void SetHeader(const Header &header)
Definition: session.cpp:455
#define EXPECT_EQ(expected, actual)
Definition: gtest.h:2015
Definition: auth.cpp:3
int RUN_ALL_TESTS() GTEST_MUST_USE_RESULT_
Definition: gtest.h:2325
void SetParameters(const Parameters &parameters)
Definition: session.cpp:453
GTEST_API_ void InitGoogleTest(int *argc, char **argv)
Definition: gtest.cc:5292
void SetLowSpeed(const LowSpeed &low_speed)
Definition: session.cpp:472
void SetDigest(const Digest &auth)
Definition: session.cpp:459
static Server * server


rc_tagdetect_client
Author(s): Monika Florek-Jasinska , Raphael Schaller
autogenerated on Sat Feb 13 2021 03:42:16