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
27 class ArrayTests(samba.tests.TestCase):
30 super(ArrayTests, self).setUp()
31 talloc.enable_null_tracking()
32 self.startup_blocks = talloc.total_blocks()
35 super(ArrayTests, self).tearDown()
37 if talloc.total_blocks() != self.startup_blocks:
39 self.fail("it appears we are leaking memory")
41 def test_array_from_python(self):
42 rmd = drsblobs.replPropertyMetaDataBlob()
45 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
48 rmd1 = drsblobs.replPropertyMetaData1()
52 rmd2 = drsblobs.replPropertyMetaData1()
56 rmd3 = drsblobs.replPropertyMetaData1()
60 rmd.ctr.array = [rmd1, rmd2, rmd3]
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)
71 def test_array_with_exception(self):
73 rmd = drsblobs.replPropertyMetaDataBlob()
76 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
79 rmd1 = drsblobs.replPropertyMetaData1()
83 rmd2 = drsblobs.replPropertyMetaData1()
87 rmd3 = drsblobs.replPropertyMetaData1()
91 rmd.ctr.array = [rmd1, rmd2, rmd3]
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)
107 def test_array_from_python_function(self):
109 rmd = drsblobs.replPropertyMetaDataBlob()
112 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
115 rmd1 = drsblobs.replPropertyMetaData1()
119 rmd2 = drsblobs.replPropertyMetaData1()
123 rmd3 = drsblobs.replPropertyMetaData1()
127 rmd.ctr.array = [rmd1, rmd2, rmd3]
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)
140 def test_array_from_ndr(self):
141 rmd = drsblobs.replPropertyMetaDataBlob()
144 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
147 rmd1 = drsblobs.replPropertyMetaData1()
151 rmd2 = drsblobs.replPropertyMetaData1()
155 rmd3 = drsblobs.replPropertyMetaData1()
159 rmd.ctr.array = [rmd1, rmd2, rmd3]
161 packed = ndr_pack(rmd)
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)
173 self.assertEqual(rmd.ctr.array[0].attid,
174 rmd_unpacked.ctr.array[0].attid)
176 def test_array_delete(self):
177 rmd = drsblobs.replPropertyMetaDataBlob()
180 rmd.ctr = drsblobs.replPropertyMetaDataCtr1()
183 rmd1 = drsblobs.replPropertyMetaData1()
187 rmd2 = drsblobs.replPropertyMetaData1()
191 rmd3 = drsblobs.replPropertyMetaData1()
195 rmd.ctr.array = [rmd1, rmd2, rmd3]
198 self.fail("succeeded in deleting rmd1.version")
199 except AttributeError as e:
204 self.fail("succeeded in deleting rmd.ctr.array")
205 except AttributeError as e: