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
|
#include <apt-pkg/fileutl.h>
#include <string>
#include <unistd.h>
#include <sys/stat.h>
#include <sys/types.h>
#include <fcntl.h>
#include <gtest/gtest.h>
#include "file-helpers.h"
void helperCreateTemporaryDirectory(std::string const &id, std::string &dir)
{
std::string const strtempdir = GetTempDir().append("/apt-tests-").append(id).append(".XXXXXX");
char * tempdir = strdup(strtempdir.c_str());
ASSERT_STREQ(tempdir, mkdtemp(tempdir));
dir = tempdir;
free(tempdir);
}
void helperRemoveDirectory(std::string const &dir)
{
// basic sanity check to avoid removing random directories based on earlier failures
if (dir.find("/apt-tests-") == std::string::npos || dir.find_first_of("*?") != std::string::npos)
FAIL() << "Directory '" << dir << "' seems invalid. It is therefore not removed!";
else
ASSERT_EQ(0, system(std::string("rm -rf ").append(dir).c_str()));
}
void helperCreateFile(std::string const &dir, std::string const &name)
{
std::string file = dir;
file.append("/");
file.append(name);
int const fd = creat(file.c_str(), 0600);
ASSERT_NE(-1, fd);
close(fd);
}
void helperCreateDirectory(std::string const &dir, std::string const &name)
{
std::string file = dir;
file.append("/");
file.append(name);
ASSERT_TRUE(CreateDirectory(dir, file));
}
void helperCreateLink(std::string const &dir, std::string const &targetname, std::string const &linkname)
{
std::string target = dir;
target.append("/");
target.append(targetname);
std::string link = dir;
link.append("/");
link.append(linkname);
ASSERT_EQ(0, symlink(target.c_str(), link.c_str()));
}
void helperCreateTemporaryFile(std::string const &id, FileFd &fd, std::string * const filename, char const * const content)
{
std::string name("apt-test-");
name.append(id).append(".XXXXXXXX");
char * tempfile = strdup(name.c_str());
ASSERT_STRNE(NULL, tempfile);
int tempfile_fd = mkstemp(tempfile);
ASSERT_NE(-1, tempfile_fd);
if (filename != NULL)
*filename = tempfile;
else
unlink(tempfile);
free(tempfile);
EXPECT_TRUE(fd.OpenDescriptor(tempfile_fd, FileFd::ReadWrite));
if (content != NULL)
{
ASSERT_TRUE(fd.Write(content, strlen(content)));
fd.Seek(0);
}
}
|