1 # Unix SMB/CIFS implementation.
2 # Copyright (C) Andrew Bartlett <abartlet@samba.org> 2016
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.
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.
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/>.
18 """Tests for array handling in PIDL generated bindings samba.dcerpc.*"""
20 from samba.dcerpc import drsblobs
22 from samba.ndr import ndr_unpack, ndr_pack
26 class ArrayTests(samba.tests.TestCase):
29 super(ArrayTests, self).setUp()
30 talloc.enable_null_tracking()
31 self.startup_blocks = talloc.total_blocks()
34 super(ArrayTests, self).tearDown()
36 if talloc.total_blocks() != self.startup_blocks:
38 self.fail("it appears we are leaking memory")
40 def test_array_from_python(self):
41 rmd = drsblobs.replPropertyMetaDataBlob()
44 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
47 rmd1 = drsblobs.replPropertyMetaData1()
51 rmd2 = drsblobs.replPropertyMetaData1()
55 rmd3 = drsblobs.replPropertyMetaData1()
59 rmd.ctr.array = [rmd1, rmd2, rmd3]
62 self.assertIsNotNone(rmd)
63 self.assertEqual(rmd.version, 1)
64 self.assertIsNotNone(rmd.ctr)
65 self.assertEqual(rmd.ctr.count, 3)
66 self.assertEqual(len(rmd.ctr.array), rmd.ctr.count)
67 self.assertIsNotNone(rmd.ctr.array[0])
68 self.assertEqual(rmd.ctr.array[0].attid, 1)
70 def test_array_with_exception(self):
72 rmd = drsblobs.replPropertyMetaDataBlob()
75 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
78 rmd1 = drsblobs.replPropertyMetaData1()
82 rmd2 = drsblobs.replPropertyMetaData1()
86 rmd3 = drsblobs.replPropertyMetaData1()
90 rmd.ctr.array = [rmd1, rmd2, rmd3]
94 self.assertIsNotNone(rmd)
95 self.assertEqual(rmd.version, 1)
96 self.assertIsNotNone(rmd.ctr)
97 self.assertEqual(rmd.ctr.count, 3)
98 self.assertEqual(len(rmd.ctr.array), rmd.ctr.count)
99 self.assertIsNotNone(rmd.ctr.array[0])
100 self.assertEqual(rmd.ctr.array[0].attid, 1)
106 def test_array_from_python_function(self):
108 rmd = drsblobs.replPropertyMetaDataBlob()
111 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
114 rmd1 = drsblobs.replPropertyMetaData1()
118 rmd2 = drsblobs.replPropertyMetaData1()
122 rmd3 = drsblobs.replPropertyMetaData1()
126 rmd.ctr.array = [rmd1, rmd2, rmd3]
131 self.assertIsNotNone(rmd)
132 self.assertEqual(rmd.version, 1)
133 self.assertIsNotNone(rmd.ctr)
134 self.assertEqual(rmd.ctr.count, 3)
135 self.assertEqual(len(rmd.ctr.array), rmd.ctr.count)
136 self.assertIsNotNone(rmd.ctr.array[0])
137 self.assertEqual(rmd.ctr.array[0].attid, 1)
139 def test_array_from_ndr(self):
140 rmd = drsblobs.replPropertyMetaDataBlob()
143 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
146 rmd1 = drsblobs.replPropertyMetaData1()
150 rmd2 = drsblobs.replPropertyMetaData1()
154 rmd3 = drsblobs.replPropertyMetaData1()
158 rmd.ctr.array = [rmd1, rmd2, rmd3]
160 packed = ndr_pack(rmd)
163 rmd_unpacked = ndr_unpack(drsblobs.replPropertyMetaDataBlob, packed)
164 self.assertIsNotNone(rmd_unpacked)
165 self.assertEqual(rmd_unpacked.version, 1)
166 self.assertIsNotNone(rmd_unpacked.ctr)
167 self.assertEqual(rmd_unpacked.ctr.count, 3)
168 self.assertEqual(len(rmd_unpacked.ctr.array), rmd_unpacked.ctr.count)
169 self.assertIsNotNone(rmd_unpacked.ctr.array[0])
170 self.assertEqual(rmd_unpacked.ctr.array[0].attid, 1)
172 self.assertEqual(rmd.ctr.array[0].attid,
173 rmd_unpacked.ctr.array[0].attid)
175 def test_array_delete(self):
176 rmd = drsblobs.replPropertyMetaDataBlob()
179 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
182 rmd1 = drsblobs.replPropertyMetaData1()
186 rmd2 = drsblobs.replPropertyMetaData1()
190 rmd3 = drsblobs.replPropertyMetaData1()
194 rmd.ctr.array = [rmd1, rmd2, rmd3]
197 self.fail("succeeded in deleting rmd1.version")
198 except AttributeError as e:
203 self.fail("succeeded in deleting rmd.ctr.array")
204 except AttributeError as e: