sources for test_rsync.py [rev. 38799]
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
153
import py
from py.execnet import RSync
def setup_module(mod):
    mod.gw = py.execnet.PopenGateway()
    mod.gw2 = py.execnet.PopenGateway()
def teardown_module(mod):
    mod.gw.exit()
    mod.gw2.exit()
class DirSetup:
    def setup_method(self, method):
        name = "%s.%s" %(self.__class__.__name__, method.func_name)
        self.tmpdir = t = py.test.ensuretemp(name)
        self.source = t.join("source")
        self.dest1 = t.join("dest1")
        self.dest2 = t.join("dest2")
class TestRSync(DirSetup):
    def test_notargets(self):
        rsync = RSync(self.source)
        py.test.raises(IOError, "rsync.send()")
        assert rsync.send(raises=False) is None
    def test_dirsync(self):
        dest = self.dest1
        dest2 = self.dest2
        source = self.source
        for s in ('content1', 'content2-a-bit-longer'): 
            source.ensure('subdir', 'file1').write(s) 
            rsync = RSync(self.source)
            rsync.add_target(gw, dest)
            rsync.add_target(gw2, dest2)
            rsync.send()
            assert dest.join('subdir').check(dir=1)
            assert dest.join('subdir', 'file1').check(file=1)
            assert dest.join('subdir', 'file1').read() == s 
            assert dest2.join('subdir').check(dir=1)
            assert dest2.join('subdir', 'file1').check(file=1)
            assert dest2.join('subdir', 'file1').read() == s 
        
        source.join('subdir').remove('file1')
        rsync = RSync(source)
        rsync.add_target(gw2, dest2)
        rsync.add_target(gw, dest)
        rsync.send()
        assert dest.join('subdir', 'file1').check(file=1)
        assert dest2.join('subdir', 'file1').check(file=1)
        rsync = RSync(source)
        rsync.add_target(gw, dest, delete=True)
        rsync.add_target(gw2, dest2)
        rsync.send()
        assert not dest.join('subdir', 'file1').check() 
        assert dest2.join('subdir', 'file1').check() 
    def test_dirsync_twice(self):
        source = self.source
        source.ensure("hello")
        rsync = RSync(source)
        rsync.add_target(gw, self.dest1)
        rsync.send()
        assert self.dest1.join('hello').check()
        py.test.raises(IOError, "rsync.send()")
        assert rsync.send(raises=False) is None
        rsync.add_target(gw, self.dest2)
        rsync.send()
        assert self.dest2.join('hello').check()
        py.test.raises(IOError, "rsync.send()")
        assert rsync.send(raises=False) is None
    def test_rsync_default_reporting(self):
        source = self.source
        source.ensure("hello")
        cap = py.io.StdCapture()
        try:
            rsync = RSync(source)
            rsync.add_target(gw, self.dest1)
            rsync.send()
        finally:
            out, err = cap.reset()
        assert out.find("hello") != -1
    def test_rsync_non_verbose(self):
        source = self.source
        source.ensure("hello")
        cap = py.io.StdCapture()
        try:
            rsync = RSync(source, verbose=False)
            rsync.add_target(gw, self.dest1)
            rsync.send()
        finally:
            out, err = cap.reset()
        assert not out
        assert not err
    def test_symlink_rsync(self):
        if py.std.sys.platform == 'win32':
            py.test.skip("symlinks are unsupported on Windows.")
        source = self.source
        dest = self.dest1
        self.source.ensure("existant")
        source.join("rellink").mksymlinkto(source.join("existant"), absolute=0)
        source.join('abslink').mksymlinkto(source.join("existant"))
        
        rsync = RSync(source)
        rsync.add_target(gw, dest)
        rsync.send()
        
        assert dest.join('rellink').readlink() == dest.join("existant")
        assert dest.join('abslink').readlink() == dest.join("existant")
    def test_callback(self):
        dest = self.dest1
        source = self.source
        source.ensure("existant").write("a" * 100)
        source.ensure("existant2").write("a" * 10)
        total = {}
        def callback(cmd, lgt, channel):
            total[(cmd, lgt)] = True
        rsync = RSync(source, callback=callback)
        #rsync = RSync()
        rsync.add_target(gw, dest)
        rsync.send()
        assert total == {("list", 110):True, ("ack", 100):True, ("ack", 10):True}
    def test_file_disappearing(self):
        dest = self.dest1
        source = self.source 
        source.ensure("ex").write("a" * 100)
        source.ensure("ex2").write("a" * 100)
        class DRsync(RSync):
            def filter(self, x):
                assert x != source
                if x.endswith("ex2"):
                    self.x = 1
                    source.join("ex2").remove()
                return True
        rsync = DRsync(source)
        rsync.add_target(gw, dest)
        rsync.send()
        assert rsync.x == 1
        assert len(dest.listdir()) == 1
        assert len(source.listdir()) == 1