520{
521 const auto add_auth_field = [] (http::http_request_info& request, http::http_client_auth& client)
522 {
523 auto field = client.get_auth_field(request.m_http_method_str, request.m_URI);
525 if (!field)
526 return false;
527 request.m_header_info.m_etc_fields.push_back(std::move(*field));
528 return true;
529 };
530
531 const http::login user{"some_user", "ultimate password"};
532
533 http::http_server_auth server{user, rng};
534 http::http_client_auth client{user};
535
536 http::http_request_info request{};
537 request.m_http_method_str = "GET";
538 request.m_URI = "/FOO";
539
540 auto response = server.get_response(request);
545
546 EXPECT_EQ(http::http_client_auth::kSuccess, client.handle_401(*response));
549
550 for (unsigned i = 0; i < 1000; ++i)
551 {
552 request.m_http_method_str += std::to_string(i);
553 request.m_header_info.m_etc_fields.clear();
556 }
557
558
559 request.m_header_info.m_etc_fields.clear();
560 client = http::http_client_auth{user};
561 EXPECT_EQ(http::http_client_auth::kSuccess, client.handle_401(*response));
563
564 auto response2 = server.get_response(request);
567 EXPECT_TRUE(response2->m_header_info.m_etc_fields.empty());
568 response2->m_header_info.m_etc_fields = response2->m_additional_fields;
569
570 const auth_responses parsed1 = parse_response(*response);
571 const auth_responses parsed2 = parse_response(*response2);
574 EXPECT_NE(parsed1[0].at(
u8"nonce"), parsed2[0].at(
u8"nonce"));
575
576
577 request.m_header_info.m_etc_fields.clear();
578 EXPECT_EQ(http::http_client_auth::kSuccess, client.handle_401(*response2));
581
582
583 EXPECT_EQ(http::http_client_auth::kBadPassword, client.handle_401(*response));
584}
#define EXPECT_EQ(val1, val2)
#define EXPECT_NE(val1, val2)
#define ASSERT_LE(val1, val2)
#define EXPECT_TRUE(condition)
#define ASSERT_TRUE(condition)
#define EXPECT_FALSE(condition)
epee::misc_utils::struct_init< response_t > response