PEP8: fix E302: expected 2 blank lines, found 1
[garming/samba-autobuild/.git] / python / samba / tests / dcerpc / array.py
1 # Unix SMB/CIFS implementation.
2 # Copyright (C) Andrew Bartlett <abartlet@samba.org> 2016
3 #
4 # This program is free software; you can redistribute it and/or modify
5 # it under the terms of the GNU General Public License as published by
6 # the Free Software Foundation; either version 3 of the License, or
7 # (at your option) any later version.
8 #
9 # This program is distributed in the hope that it will be useful,
10 # but WITHOUT ANY WARRANTY; without even the implied warranty of
11 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12 # GNU General Public License for more details.
13 #
14 # You should have received a copy of the GNU General Public License
15 # along with this program.  If not, see <http://www.gnu.org/licenses/>.
16 #
17
18 """Tests for array handling in PIDL generated bindings samba.dcerpc.*"""
19
20 from samba.dcerpc import drsblobs
21 import samba.tests
22 from samba.ndr import ndr_unpack, ndr_pack
23 import talloc
24 import gc
25
26
27 class ArrayTests(samba.tests.TestCase):
28
29     def setUp(self):
30         super(ArrayTests, self).setUp()
31         talloc.enable_null_tracking()
32         self.startup_blocks = talloc.total_blocks()
33
34     def tearDown(self):
35         super(ArrayTests, self).tearDown()
36         gc.collect()
37         if talloc.total_blocks() != self.startup_blocks:
38             talloc.report_full()
39             self.fail("it appears we are leaking memory")
40
41     def test_array_from_python(self):
42         rmd = drsblobs.replPropertyMetaDataBlob()
43
44         rmd.version = 1
45         rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
46         rmd.ctr.count = 3
47
48         rmd1 = drsblobs.replPropertyMetaData1()
49         rmd1.attid = 1
50         rmd1.version = 2
51
52         rmd2 = drsblobs.replPropertyMetaData1()
53         rmd2.attid = 2
54         rmd2.version = 2
55
56         rmd3 = drsblobs.replPropertyMetaData1()
57         rmd3.attid = 3
58         rmd3.version = 2
59
60         rmd.ctr.array = [rmd1, rmd2, rmd3]
61         gc.collect()
62
63         self.assertIsNotNone(rmd)
64         self.assertEqual(rmd.version, 1)
65         self.assertIsNotNone(rmd.ctr)
66         self.assertEqual(rmd.ctr.count, 3)
67         self.assertEqual(len(rmd.ctr.array), rmd.ctr.count)
68         self.assertIsNotNone(rmd.ctr.array[0])
69         self.assertEqual(rmd.ctr.array[0].attid, 1)
70
71     def test_array_with_exception(self):
72         try:
73             rmd = drsblobs.replPropertyMetaDataBlob()
74
75             rmd.version = 1
76             rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
77             rmd.ctr.count = 3
78
79             rmd1 = drsblobs.replPropertyMetaData1()
80             rmd1.attid = 1
81             rmd1.version = 2
82
83             rmd2 = drsblobs.replPropertyMetaData1()
84             rmd2.attid = 2
85             rmd2.version = 2
86
87             rmd3 = drsblobs.replPropertyMetaData1()
88             rmd3.attid = 3
89             rmd3.version = 2
90
91             rmd.ctr.array = [rmd1, rmd2, rmd3]
92
93             gc.collect()
94
95             self.assertIsNotNone(rmd)
96             self.assertEqual(rmd.version, 1)
97             self.assertIsNotNone(rmd.ctr)
98             self.assertEqual(rmd.ctr.count, 3)
99             self.assertEqual(len(rmd.ctr.array), rmd.ctr.count)
100             self.assertIsNotNone(rmd.ctr.array[0])
101             self.assertEqual(rmd.ctr.array[0].attid, 1)
102
103             raise Exception()
104         except:
105             pass
106
107     def test_array_from_python_function(self):
108         def get_rmd():
109             rmd = drsblobs.replPropertyMetaDataBlob()
110
111             rmd.version = 1
112             rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
113             rmd.ctr.count = 3
114
115             rmd1 = drsblobs.replPropertyMetaData1()
116             rmd1.attid = 1
117             rmd1.version = 2
118
119             rmd2 = drsblobs.replPropertyMetaData1()
120             rmd2.attid = 2
121             rmd2.version = 2
122
123             rmd3 = drsblobs.replPropertyMetaData1()
124             rmd3.attid = 3
125             rmd3.version = 2
126
127             rmd.ctr.array = [rmd1, rmd2, rmd3]
128             return rmd
129
130         rmd = get_rmd()
131         gc.collect()
132         self.assertIsNotNone(rmd)
133         self.assertEqual(rmd.version, 1)
134         self.assertIsNotNone(rmd.ctr)
135         self.assertEqual(rmd.ctr.count, 3)
136         self.assertEqual(len(rmd.ctr.array), rmd.ctr.count)
137         self.assertIsNotNone(rmd.ctr.array[0])
138         self.assertEqual(rmd.ctr.array[0].attid, 1)
139
140     def test_array_from_ndr(self):
141         rmd = drsblobs.replPropertyMetaDataBlob()
142
143         rmd.version = 1
144         rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
145         rmd.ctr.count = 3
146
147         rmd1 = drsblobs.replPropertyMetaData1()
148         rmd1.attid = 1
149         rmd1.version = 2
150
151         rmd2 = drsblobs.replPropertyMetaData1()
152         rmd2.attid = 2
153         rmd2.version = 2
154
155         rmd3 = drsblobs.replPropertyMetaData1()
156         rmd3.attid = 3
157         rmd3.version = 2
158
159         rmd.ctr.array = [rmd1, rmd2, rmd3]
160
161         packed = ndr_pack(rmd)
162         gc.collect()
163
164         rmd_unpacked = ndr_unpack(drsblobs.replPropertyMetaDataBlob, packed)
165         self.assertIsNotNone(rmd_unpacked)
166         self.assertEqual(rmd_unpacked.version, 1)
167         self.assertIsNotNone(rmd_unpacked.ctr)
168         self.assertEqual(rmd_unpacked.ctr.count, 3)
169         self.assertEqual(len(rmd_unpacked.ctr.array), rmd_unpacked.ctr.count)
170         self.assertIsNotNone(rmd_unpacked.ctr.array[0])
171         self.assertEqual(rmd_unpacked.ctr.array[0].attid, 1)
172
173         self.assertEqual(rmd.ctr.array[0].attid,
174                          rmd_unpacked.ctr.array[0].attid)
175
176     def test_array_delete(self):
177         rmd = drsblobs.replPropertyMetaDataBlob()
178
179         rmd.version = 1
180         rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
181         rmd.ctr.count = 3
182
183         rmd1 = drsblobs.replPropertyMetaData1()
184         rmd1.attid = 1
185         rmd1.version = 2
186
187         rmd2 = drsblobs.replPropertyMetaData1()
188         rmd2.attid = 2
189         rmd2.version = 2
190
191         rmd3 = drsblobs.replPropertyMetaData1()
192         rmd3.attid = 3
193         rmd3.version = 2
194
195         rmd.ctr.array = [rmd1, rmd2, rmd3]
196         try:
197             del rmd1.version
198             self.fail("succeeded in deleting rmd1.version")
199         except AttributeError as e:
200             pass
201
202         try:
203             del rmd.ctr.array
204             self.fail("succeeded in deleting rmd.ctr.array")
205         except AttributeError as e:
206             pass