1# -*- coding: utf-8 -*-
2
3import os, time, random
4from io import BytesIO
5from smb.SMBConnection import SMBConnection
6from .util import getConnectionInfo
7from nose.tools import with_setup
8from smb import smb_structs
9
10conn = None
11
12def setup_func_SMB1():
13    global conn
14    smb_structs.SUPPORT_SMB2 = False
15    info = getConnectionInfo()
16    conn = SMBConnection(info['user'], info['password'], info['client_name'], info['server_name'], use_ntlm_v2 = True)
17    assert conn.connect(info['server_ip'], info['server_port'])
18
19def setup_func_SMB2():
20    global conn
21    smb_structs.SUPPORT_SMB2 = True
22    info = getConnectionInfo()
23    conn = SMBConnection(info['user'], info['password'], info['client_name'], info['server_name'], use_ntlm_v2 = True)
24    assert conn.connect(info['server_ip'], info['server_port'])
25
26def teardown_func():
27    global conn
28    conn.close()
29
30@with_setup(setup_func_SMB1, teardown_func)
31def test_rename_english_file_SMB1():
32    global conn
33
34    old_path = '/RenameTest %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
35    new_path = '/RenameTest %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
36
37    conn.storeFile('smbtest', old_path, BytesIO(b'Rename file test'))
38
39    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
40    filenames = [e.filename for e in entries]
41    assert os.path.basename(old_path.replace('/', os.sep)) in filenames
42    assert os.path.basename(new_path.replace('/', os.sep)) not in filenames
43
44    conn.rename('smbtest', old_path, new_path)
45
46    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
47    filenames = [e.filename for e in entries]
48    assert os.path.basename(old_path.replace('/', os.sep)) not in filenames
49    assert os.path.basename(new_path.replace('/', os.sep)) in filenames
50
51    conn.deleteFiles('smbtest', new_path)
52
53@with_setup(setup_func_SMB2, teardown_func)
54def test_rename_english_file_SMB2():
55    global conn
56
57    old_path = '/RenameTest %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
58    new_path = '/RenameTest %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
59
60    conn.storeFile('smbtest', old_path, BytesIO(b'Rename file test'))
61
62    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
63    filenames = [e.filename for e in entries]
64    assert os.path.basename(old_path.replace('/', os.sep)) in filenames
65    assert os.path.basename(new_path.replace('/', os.sep)) not in filenames
66
67    conn.rename('smbtest', old_path, new_path)
68
69    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
70    filenames = [e.filename for e in entries]
71    assert os.path.basename(old_path.replace('/', os.sep)) not in filenames
72    assert os.path.basename(new_path.replace('/', os.sep)) in filenames
73
74    conn.deleteFiles('smbtest', new_path)
75
76@with_setup(setup_func_SMB1, teardown_func)
77def test_rename_unicode_file_SMB1():
78    global conn
79
80    old_path = '/改名测试 %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
81    new_path = '/改名测试 %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
82
83    conn.storeFile('smbtest', old_path, BytesIO(b'Rename file test'))
84
85    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
86    filenames = [e.filename for e in entries]
87    assert os.path.basename(old_path.replace('/', os.sep)) in filenames
88    assert os.path.basename(new_path.replace('/', os.sep)) not in filenames
89
90    conn.rename('smbtest', old_path, new_path)
91
92    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
93    filenames = [e.filename for e in entries]
94    assert os.path.basename(old_path.replace('/', os.sep)) not in filenames
95    assert os.path.basename(new_path.replace('/', os.sep)) in filenames
96
97    conn.deleteFiles('smbtest', new_path)
98
99@with_setup(setup_func_SMB2, teardown_func)
100def test_rename_unicode_file_SMB2():
101    global conn
102
103    old_path = '/改名测试 %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
104    new_path = '/改名测试 %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
105
106    conn.storeFile('smbtest', old_path, BytesIO(b'Rename file test'))
107
108    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
109    filenames = [e.filename for e in entries]
110    assert os.path.basename(old_path.replace('/', os.sep)) in filenames
111    assert os.path.basename(new_path.replace('/', os.sep)) not in filenames
112
113    conn.rename('smbtest', old_path, new_path)
114
115    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
116    filenames = [e.filename for e in entries]
117    assert os.path.basename(old_path.replace('/', os.sep)) not in filenames
118    assert os.path.basename(new_path.replace('/', os.sep)) in filenames
119
120    conn.deleteFiles('smbtest', new_path)
121
122@with_setup(setup_func_SMB1, teardown_func)
123def test_rename_english_directory_SMB1():
124    global conn
125
126    old_path = '/RenameTest %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
127    new_path = '/RenameTest %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
128
129    conn.createDirectory('smbtest', old_path)
130
131    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
132    filenames = [e.filename for e in entries]
133    assert os.path.basename(old_path.replace('/', os.sep)) in filenames
134    assert os.path.basename(new_path.replace('/', os.sep)) not in filenames
135
136    conn.rename('smbtest', old_path, new_path)
137
138    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
139    filenames = [e.filename for e in entries]
140    assert os.path.basename(old_path.replace('/', os.sep)) not in filenames
141    assert os.path.basename(new_path.replace('/', os.sep)) in filenames
142
143    conn.deleteDirectory('smbtest', new_path)
144
145@with_setup(setup_func_SMB2, teardown_func)
146def test_rename_english_directory_SMB2():
147    global conn
148
149    old_path = '/RenameTest %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
150    new_path = '/RenameTest %d-%d.txt' % ( time.time(), random.randint(1000, 9999) )
151
152    conn.createDirectory('smbtest', old_path)
153
154    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
155    filenames = [e.filename for e in entries]
156    assert os.path.basename(old_path.replace('/', os.sep)) in filenames
157    assert os.path.basename(new_path.replace('/', os.sep)) not in filenames
158
159    conn.rename('smbtest', old_path, new_path)
160
161    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
162    filenames = [e.filename for e in entries]
163    assert os.path.basename(old_path.replace('/', os.sep)) not in filenames
164    assert os.path.basename(new_path.replace('/', os.sep)) in filenames
165
166    conn.deleteDirectory('smbtest', new_path)
167
168@with_setup(setup_func_SMB1, teardown_func)
169def test_rename_unicode_directory_SMB1():
170    global conn
171
172    old_path = '/改名测试 %d-%d' % ( time.time(), random.randint(1000, 9999) )
173    new_path = '/改名测试 %d-%d' % ( time.time(), random.randint(1000, 9999) )
174
175    conn.createDirectory('smbtest', old_path)
176
177    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
178    filenames = [e.filename for e in entries]
179    assert os.path.basename(old_path.replace('/', os.sep)) in filenames
180    assert os.path.basename(new_path.replace('/', os.sep)) not in filenames
181
182    conn.rename('smbtest', old_path, new_path)
183
184    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
185    filenames = [e.filename for e in entries]
186    assert os.path.basename(old_path.replace('/', os.sep)) not in filenames
187    assert os.path.basename(new_path.replace('/', os.sep)) in filenames
188
189    conn.deleteDirectory('smbtest', new_path)
190
191@with_setup(setup_func_SMB2, teardown_func)
192def test_rename_unicode_directory_SMB2():
193    global conn
194
195    old_path = '/改名测试 %d-%d' % ( time.time(), random.randint(1000, 9999) )
196    new_path = '/改名测试 %d-%d' % ( time.time(), random.randint(1000, 9999) )
197
198    conn.createDirectory('smbtest', old_path)
199
200    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
201    filenames = [e.filename for e in entries]
202    assert os.path.basename(old_path.replace('/', os.sep)) in filenames
203    assert os.path.basename(new_path.replace('/', os.sep)) not in filenames
204
205    conn.rename('smbtest', old_path, new_path)
206
207    entries = conn.listPath('smbtest', os.path.dirname(old_path.replace('/', os.sep)))
208    filenames = [e.filename for e in entries]
209    assert os.path.basename(old_path.replace('/', os.sep)) not in filenames
210    assert os.path.basename(new_path.replace('/', os.sep)) in filenames
211
212    conn.deleteDirectory('smbtest', new_path)
213