File: test-utils.hpp

package info (click to toggle)
davix 0.8.10-2
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 37,184 kB
  • sloc: ansic: 164,612; cpp: 38,741; python: 17,726; perl: 14,124; sh: 13,458; xml: 3,567; makefile: 1,959; javascript: 885; pascal: 570; lisp: 7
file content (86 lines) | stat: -rw-r--r-- 2,975 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
/*
 * This File is part of Davix, The IO library for HTTP based protocols
 * Copyright (C) CERN 2019
 * Author: Georgios Bitzes <georgios.bitzes@cern.ch>
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.
 *
 * This library is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
 * Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public
 * License along with this library; if not, write to the Free Software
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301  USA
 *
*/

#ifndef DAVIX_TEST_UTILS_HPP
#define DAVIX_TEST_UTILS_HPP

#include "../drunk-server/DrunkServer.hpp"

#include <gtest/gtest.h>
#include <backend/StandaloneNeonRequest.hpp>
#include <backend/SessionFactory.hpp>
#include <curl/StandaloneCurlRequest.hpp>


#define SSTR(message) static_cast<std::ostringstream&>(std::ostringstream().flush() << message).str()

inline std::string getCurlUserAgent() {
  return SSTR("User-Agent: " << Davix::RequestParams().getUserAgent() << " libcurl/" << Davix::getCurlVersion());
}

inline std::string getDefaultUserAgent() {
  return SSTR("User-Agent: " << Davix::RequestParams().getUserAgent() << " neon/0.0.29\r\n");
}

class DavixTestFixture : public ::testing::Test {
public:
  DavixTestFixture() : _drunk_server(new DrunkServer(22222)),
    _uri("http://localhost:22222/"), _verb("GET"), _flags(0) {}

  std::unique_ptr<Davix::StandaloneNeonRequest> makeStandaloneNeonReq() {
    return std::unique_ptr<Davix::StandaloneNeonRequest>(
      new Davix::StandaloneNeonRequest(_factory.getNeon(), true, _boundHooks, _uri, _verb, _params, _headers, _flags, NULL, _deadline)
    );
  }

  std::unique_ptr<Davix::StandaloneCurlRequest> makeStandaloneCurlReq() {
    return std::unique_ptr<Davix::StandaloneCurlRequest>(
      new Davix::StandaloneCurlRequest(_factory.getCurl(), true, _boundHooks, _uri, _verb, _params, _headers, _flags, NULL, _deadline)
    );
  }

  void setConnectionTimeout(std::chrono::seconds dur) {
    struct timespec tm;
    tm.tv_sec = dur.count();
    tm.tv_nsec = 0;

    _params.setConnectionTimeout(&tm);
  }

  void setDeadlineFromNow(std::chrono::milliseconds dur) {
    _deadline = Davix::Chrono::Clock(Davix::Chrono::Clock::Monolitic).now() + Davix::Chrono::Duration::milliseconds(dur.count());
  }

protected:
  std::unique_ptr<DrunkServer> _drunk_server;
  Davix::SessionFactory _factory;
  Davix::BoundHooks _boundHooks;
  Davix::Uri _uri;
  std::string _verb;
  Davix::RequestParams _params;
  std::vector<Davix::HeaderLine> _headers;
  Davix::Chrono::TimePoint _deadline;
  int _flags;


};

#endif