File: rsync.c

package info (click to toggle)
libite 2.2.0-2
  • links: PTS, VCS
  • area: main
  • in suites: bullseye
  • size: 1,920 kB
  • sloc: sh: 4,463; ansic: 3,660; makefile: 111
file content (109 lines) | stat: -rw-r--r-- 2,065 bytes parent folder | download | duplicates (2)
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
#include <stdlib.h>
#include "check.h"

#define BASE "/tmp/.unittest/"
#define SRC  BASE "src/"
#define DST  BASE "dst/"

static int verbose = 0;
static char *files[] = {
	SRC "sub1/1.tst",
	SRC "sub1/2.tst",
	SRC "sub1/3.tst",
	SRC "sub2/4.tst",
	SRC "sub2/5.tst",
	SRC "sub2/6.tst",
	SRC "sub3/7.tst",
	SRC "sub3/8.tst",
	SRC "sub3/9.tst",
	NULL
};

void cleanup_test(void)
{
	system("rm -rf " BASE);
}

void setup_test(void)
{
	int i;
	char cmd[256];
	mode_t dir_modes[]  = { 755, 700 };
	mode_t file_modes[] = { 644, 600 };

	cleanup_test();

	mkdir(BASE, 0755);
	mkdir(SRC, 0755);
	mkdir(DST, 0755);

	for (i = 0; files[i]; i++) {
		snprintf(cmd, sizeof(cmd), "mkdir -m %d -p `dirname %s`",
			 dir_modes[i % 2], files[i]);
		system(cmd);

		snprintf(cmd, sizeof(cmd), "touch %s; chmod %d %s", files[i],
			 file_modes[i % 2], files[i]);
		system(cmd);
	}
}

static void check_tree(char *heading, char *dir)
{
	if (verbose) {
		if (heading)
			puts(heading);
	}

	// XXX: Fixme, add code to list tree, nftw() possibly
}

int run_test(void)
{
	int result = 0;

#if 0
	setup_test();
	check_tree("Before:", BASE);

	result += rsync(SRC, DST, 0, NULL);
	check_tree("After:", BASE);
	cleanup_test();
#endif

	setup_test();
	sleep(1);
	result += rsync(BASE "src", DST, LITE_FOPT_KEEP_MTIME, NULL);
	check_tree("Only partial rsync of src <-- No slash!", BASE);
#if 0
	cleanup_test();
	setup_test();
	result += rsync(BASE "src/sub1", BASE "dst", 0, NULL);
	check_tree("Only partial rsync of src/sub1 <-- No slashes!!", BASE);

	cleanup_test();
	setup_test();
	result += rsync(BASE "src/sub1/", DST, 0, NULL);
	check_tree("Only partial rsync of src/sub1/", BASE);

	cleanup_test();
	setup_test();
	result += rsync(BASE "src/sub1", DST, 0, NULL);
	check_tree("Only partial rsync of src/sub1 <-- No slash!", BASE);

	result += rsync("/etc", "/var/tmp", 0, NULL);
	check_tree("Real life test:", "/var/tmp");
#endif

	return result;
}

int main(int argc, char *argv[])
{
	if (argc > 1)
		verbose = !strncmp("-v", argv[1], 2);

	atexit(cleanup_test);

	return run_test();
}