File: TestUtil.cc

package info (click to toggle)
aria2 1.37.0%2Bdebian-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 15,128 kB
  • sloc: cpp: 115,006; ansic: 9,140; makefile: 1,466; ruby: 475; python: 373; sh: 260; xml: 176
file content (152 lines) | stat: -rw-r--r-- 4,472 bytes parent folder | download | duplicates (6)
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
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#include "TestUtil.h"

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <cerrno>
#include <cstring>
#include <sstream>
#include <fstream>

#include "a2io.h"
#include "File.h"
#include "FatalException.h"
#include "Cookie.h"
#include "DefaultDiskWriter.h"
#include "fmt.h"
#include "util.h"
#include "RequestGroupMan.h"
#include "RequestGroup.h"
#include "DownloadContext.h"
#include "Option.h"
#include "FileEntry.h"
#include "DownloadResult.h"
#include "message_digest_helper.h"

namespace aria2 {

void createFile(const std::string& path, size_t length)
{
  File(File(path).getDirname()).mkdirs();
  DefaultDiskWriter dw(path);
  dw.initAndOpenFile();
  dw.truncate(length);
}

std::string readFile(const std::string& path)
{
  std::stringstream ss;
  std::ifstream in(path.c_str(), std::ios::binary);
  char buf[4_k];
  while (1) {
    in.read(buf, sizeof(buf));
    ss.write(buf, in.gcount());
    if (in.gcount() != sizeof(buf)) {
      break;
    }
  }
  return ss.str();
}

std::unique_ptr<Cookie> createCookie(const std::string& name,
                                     const std::string& value,
                                     const std::string& domain, bool hostOnly,
                                     const std::string& path, bool secure)
{
  return make_unique<Cookie>(name, value, 0, false, domain, hostOnly, path,
                             secure, false, 0);
}

std::unique_ptr<Cookie> createCookie(const std::string& name,
                                     const std::string& value,
                                     time_t expiryTime,
                                     const std::string& domain, bool hostOnly,
                                     const std::string& path, bool secure)
{
  return make_unique<Cookie>(name, value, expiryTime, true, domain, hostOnly,
                             path, secure, false, 0);
}

std::string fromHex(const std::string& s)
{
  return util::fromHex(s.begin(), s.end());
}

std::string fileHexDigest(MessageDigest* ctx, const std::string& filename)
{
  std::shared_ptr<DiskWriter> writer(new DefaultDiskWriter(filename));
  writer->openExistingFile();
  return util::toHex(message_digest::digest(ctx, writer, 0, writer->size()));
}

WrDiskCacheEntry::DataCell* createDataCell(int64_t goff, const char* data,
                                           size_t offset)
{
  WrDiskCacheEntry::DataCell* cell = new WrDiskCacheEntry::DataCell();
  cell->goff = goff;
  size_t len = strlen(data);
  cell->data = new unsigned char[len];
  memcpy(cell->data, data, len);
  cell->offset = offset;
  cell->len = cell->capacity = len - offset;
  return cell;
}

std::shared_ptr<RequestGroup> findReservedGroup(RequestGroupMan* rgman,
                                                a2_gid_t gid)
{
  auto rg = rgman->findGroup(gid);
  if (rg) {
    if (rg->getState() == RequestGroup::STATE_WAITING) {
      return rg;
    }
    else {
      rg.reset();
    }
  }
  return rg;
}

std::shared_ptr<RequestGroup> getReservedGroup(RequestGroupMan* rgman,
                                               size_t index)
{
  assert(rgman->getReservedGroups().size() > index);
  auto i = rgman->getReservedGroups().begin();
  std::advance(i, index);
  return *i;
}

std::shared_ptr<RequestGroup>
createRequestGroup(int32_t pieceLength, int64_t totalLength,
                   const std::string& path, const std::string& uri,
                   const std::shared_ptr<Option>& opt)
{
  std::shared_ptr<DownloadContext> dctx(
      new DownloadContext(pieceLength, totalLength, path));
  std::vector<std::string> uris;
  uris.push_back(uri);
  dctx->getFirstFileEntry()->addUris(uris.begin(), uris.end());
  std::shared_ptr<RequestGroup> group(new RequestGroup(GroupId::create(), opt));
  group->setDownloadContext(dctx);
  return group;
}

std::shared_ptr<DownloadResult> createDownloadResult(error_code::Value result,
                                                     const std::string& uri)
{
  std::vector<std::string> uris;
  uris.push_back(uri);
  std::shared_ptr<FileEntry> entry(new FileEntry("/tmp/path", 1, 0, uris));
  std::vector<std::shared_ptr<FileEntry>> entries;
  entries.push_back(entry);
  std::shared_ptr<DownloadResult> dr(new DownloadResult());
  dr->gid = GroupId::create();
  dr->fileEntries = entries;
  dr->result = result;
  dr->belongsTo = 0;
  dr->inMemoryDownload = false;
  dr->option = std::shared_ptr<Option>(new Option());
  return dr;
}

} // namespace aria2