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 import pike.model
38 import pike.smb2
39 import pike.test
40 import random
41 import array
42
43 @pike.test.RequireDialect(0x210)
44 @pike.test.RequireCapabilities(pike.smb2.SMB2_GLOBAL_CAP_LEASING)
55
56
58 chan, tree = self.tree_connect()
59
60
61 handle1 = chan.create(tree,
62 'lease.txt',
63 share=self.share_all,
64 oplock_level=pike.smb2.SMB2_OPLOCK_LEVEL_LEASE,
65 lease_key = self.lease1,
66 lease_state = self.rw).result()
67
68 self.assertEqual(handle1.lease.lease_state, self.rw)
69
70 handle2 = chan.create(tree,
71 'lease.txt',
72 share=self.share_all,
73 oplock_level=pike.smb2.SMB2_OPLOCK_LEVEL_LEASE,
74 lease_key = self.lease1,
75 lease_state = self.rwh).result()
76
77 self.assertIs(handle2.lease, handle1.lease)
78 self.assertEqual(handle2.lease.lease_state, self.rwh)
79
80
81 handle2.lease.on_break(lambda state: state & ~pike.smb2.SMB2_LEASE_HANDLE_CACHING)
82
83
84 handle3 = chan.create(tree,
85 'lease.txt',
86 share=self.share_all,
87 oplock_level=pike.smb2.SMB2_OPLOCK_LEVEL_LEASE,
88 lease_key = self.lease2,
89 lease_state = self.rwh).result()
90
91
92 self.assertEqual(handle2.lease.lease_state, self.r)
93
94 self.assertEqual(handle3.lease.lease_state, self.rh)
95
96 chan.close(handle1)
97 chan.close(handle2)
98 chan.close(handle3)
99
100
102 chan, tree = self.tree_connect()
103
104 handle1 = chan.create(tree,
105 'lease.txt',
106 share=self.share_all,
107 oplock_level=pike.smb2.SMB2_OPLOCK_LEVEL_LEASE,
108 lease_key = self.lease1,
109 lease_state = self.rw).result()
110
111
112 handle2 = chan.create(tree,
113 'lease.txt',
114 share=self.share_all,
115 oplock_level=pike.smb2.SMB2_OPLOCK_LEVEL_LEASE,
116 lease_key = self.lease1,
117 lease_state = self.rwh).result()
118
119
120 handle3_future = chan.create(tree,
121 'lease.txt',
122 share=self.share_all,
123 oplock_level=pike.smb2.SMB2_OPLOCK_LEVEL_LEASE,
124 lease_key = self.lease2,
125 lease_state = self.rwh)
126
127
128 handle1.lease.future.wait()
129
130
131 chan.close(handle2)
132
133
134 handle1.lease.on_break(lambda state: state)
135
136
137 handle3 = handle3_future.result()
138
139 chan.close(handle1)
140 chan.close(handle3)
141
142
144 chan, tree = self.tree_connect()
145
146
147 handle1 = chan.create(tree,
148 'lease.txt',
149 share=self.share_all,
150 oplock_level=pike.smb2.SMB2_OPLOCK_LEVEL_LEASE,
151 lease_key = self.lease1,
152 lease_state = self.rwh).result()
153 self.assertEqual(handle1.lease.lease_state, self.rwh)
154
155 chan2, tree2 = self.tree_connect()
156
157
158
159 handle2 = chan2.create(tree2,
160 'lease.txt',
161 share=self.share_all,
162 oplock_level=pike.smb2.SMB2_OPLOCK_LEVEL_LEASE,
163 lease_key = self.lease1,
164 lease_state = self.rwh).result()
165 self.assertEqual(handle2.lease.lease_state, self.rwh)
166
167
168 self.assertEqual(handle1.lease, handle2.lease)
169
170 chan2.close(handle2)
171 chan.close(handle1)
172