tests/krb5: Use Python bindings for LZ77+Huffman compression
[Samba.git] / python / samba / tests / ndr.py
blob4629c67593af370d1aa37dd441c48fccedb88857
1 # -*- coding: utf-8 -*-
3 # Unix SMB/CIFS implementation.
4 # Copyright © Andrew Bartlett <abartlet@samba.org> 2021
6 # This program is free software; you can redistribute it and/or modify
7 # it under the terms of the GNU General Public License as published by
8 # the Free Software Foundation; either version 3 of the License, or
9 # (at your option) any later version.
11 # This program is distributed in the hope that it will be useful,
12 # but WITHOUT ANY WARRANTY; without even the implied warranty of
13 # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 # GNU General Public License for more details.
16 # You should have received a copy of the GNU General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
21 """Test of Network Data Representation (NDR) marshalling and unmarshalling."""
22 import samba
23 import samba.ndr as ndr
24 from samba.dcerpc import winbind, security, lsa
26 class NdrTestCase(samba.tests.TestCase):
27 def test_wbint_Principal(self):
28 x = winbind.wbint_Principal()
30 x.sid = security.dom_sid(security.SID_NT_SCHANNEL_AUTHENTICATION)
32 x.type = lsa.SID_NAME_USER
34 x.name = "fred"
36 b = ndr.ndr_pack(x)
38 y = ndr.ndr_unpack(winbind.wbint_Principal, b)
40 self.assertEqual(x.sid, y.sid)
41 self.assertEqual(x.type, y.type)
42 self.assertEqual(x.name, y.name)
44 def test_wbint_Principal_null_name(self):
45 x = winbind.wbint_Principal()
47 x.sid = security.dom_sid(security.SID_NT_SCHANNEL_AUTHENTICATION)
49 x.type = lsa.SID_NAME_USER
51 x.name = None
53 b = ndr.ndr_pack(x)
55 y = ndr.ndr_unpack(winbind.wbint_Principal, b)
57 self.assertEqual(x.sid, y.sid)
58 self.assertEqual(x.type, y.type)
59 self.assertEqual(x.name, y.name)
61 def test_wbint_Principals(self):
63 principals = []
65 for i in range(0, 10):
66 x = winbind.wbint_Principal()
68 x.sid = security.dom_sid(security.SID_NT_SCHANNEL_AUTHENTICATION)
70 x.type = lsa.SID_NAME_USER
72 x.name = None
74 principals.append(x)
76 wb_principals = winbind.wbint_Principals()
77 wb_principals.num_principals = 10
78 wb_principals.principals = principals
80 b = ndr.ndr_pack(wb_principals)
82 unpacked_principals = ndr.ndr_unpack(winbind.wbint_Principals,
85 self.assertEqual(wb_principals.num_principals,
86 unpacked_principals.num_principals)
88 for i in range(0, 10):
89 x = principals[i]
90 y = unpacked_principals.principals[i]
91 self.assertEqual(x.sid, y.sid)
92 self.assertEqual(x.type, y.type)
93 self.assertEqual(x.name, y.name)
95 def test_wbint_10_Principals(self):
96 num = 10
97 (principals, unpacked_principals) = self._test_wbint_Principals(num)
99 for i in range(0, num):
100 x = principals[i]
101 y = unpacked_principals.principals[i]
102 self.assertEqual(x.sid, y.sid)
103 self.assertEqual(x.type, y.type)
104 self.assertEqual(x.name, y.name)
106 def test_wbint_max_token_Principals(self):
107 self._test_wbint_Principals(samba._glue.ndr_token_max_list_size()+1)
109 def _test_wbint_Principals(self, num):
111 principals = []
112 for i in range(0, num):
113 x = winbind.wbint_Principal()
115 x.sid = security.dom_sid(security.SID_NT_SCHANNEL_AUTHENTICATION + "-%d" % num)
117 x.type = lsa.SID_NAME_USER
119 x.name = "fred%d" % num
121 principals.append(x)
123 wb_principals = winbind.wbint_Principals()
124 wb_principals.num_principals = num
125 wb_principals.principals = principals
127 b = ndr.ndr_pack(wb_principals)
129 try:
130 unpacked_principals = ndr.ndr_unpack(winbind.wbint_Principals,
132 except RuntimeError as e:
133 self.fail(e)
135 self.assertEqual(wb_principals.num_principals,
136 unpacked_principals.num_principals)
138 return (principals, unpacked_principals)