perftest:ndr_pack: spin in do_nothing for a while
[samba.git] / source4 / dsdb / tests / python / ndr_pack_performance.py
blob45c1816df39be33aa313db6020f44dab4881589e
1 #!/usr/bin/env python3
2 # -*- coding: utf-8 -*-
3 import optparse
4 import sys
5 sys.path.insert(0, 'bin/python')
7 import samba
8 import gzip
10 # We try to use the test infrastructure of Samba 4.3+, but if it
11 # doesn't work, we are probably in a back-ported patch and trying to
12 # run on 4.1 or something.
14 # Don't copy this horror into ordinary tests -- it is special for
15 # performance tests that want to apply to old versions.
17 from samba.tests.subunitrun import TestProgram
19 from samba.ndr import ndr_pack, ndr_unpack
20 from samba.dcerpc import security
21 from samba.dcerpc import drsuapi
24 BIG_SD_SDDL = ''.join(
25 """O:S-1-5-21-3328325300-3937145445-4190589019-512G:S-1-5-2
26 1-3328325300-3937145445-4190589019-512D:AI(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;S-
27 1-5-21-3328325300-3937145445-4190589019-512)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;
28 SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPLCLORC;;;PS)(O
29 A;;CR;ab721a55-1e2f-11d0-9819-00aa0040529b;;AU)(OA;;RP;46a9b11d-60ae-405a-b7e
30 8-ff8a58d456d2;;S-1-5-32-560)(OA;CIIOID;RP;4c164200-20c0-11d0-a768-00aa006e05
31 29;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIOID;RP;4c164200-20c0-11d0-a
32 768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIOID;RP;5f2020
33 10-79a5-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CI
34 IOID;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa0030
35 49e2;RU)(OA;CIIOID;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc
36 -9b07-ad6f015e5f28;RU)(OA;CIIOID;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;bf96
37 7aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIOID;RP;59ba2f42-79a2-11d0-9020-00c
38 04fc2d3cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIOID;RP;59ba2f42-79a2
39 -11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIOID;RP
40 ;037088f8-0ae1-11d2-b422-00a0c968f939;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU
41 )(OA;CIIOID;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0de6-11d0-a285-0
42 0aa003049e2;RU)(OA;CIIOID;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0d
43 e6-11d0-a285-00aa003049e2;ED)(OA;CIID;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608
44 ;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIOID;RP;b7c69e6d-2cc7-11d2-854
45 e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIOID;RPLCLORC;;4
46 828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIID;RPLCLORC;;bf967a9c-0de6-11d0-
47 a285-00aa003049e2;RU)(OA;CIIOID;RPLCLORC;;bf967aba-0de6-11d0-a285-00aa003049e
48 2;RU)(OA;CIID;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(A;CIID;RPWPCRC
49 CDCLCLORCWOWDSDDTSW;;;S-1-5-21-3328325300-3937145445-4190589019-519)(A;CIID;L
50 C;;;RU)(A;CIID;RPWPCRCCLCLORCWOWDSDSW;;;BA)(OA;CIIOID;RP;4c164200-20c0-11d0-a
51 768-00aa006e0529;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIOID;RP;4c1642
52 00-20c0-11d0-a768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CI
53 IOID;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e
54 5f28;RU)(OA;CIIOID;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0
55 -a285-00aa003049e2;RU)(OA;CIIOID;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828
56 cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIOID;RP;bc0ac240-79a9-11d0-9020-00c
57 04fc2d4cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIOID;RP;59ba2f42-79a2
58 -11d0-9020-00c04fc2d3cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIOID;RP
59 ;59ba2f42-79a2-11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU
60 )(OA;CIIOID;RP;037088f8-0ae1-11d2-b422-00a0c968f939;4828cc14-1437-45bc-9b07-a
61 d6f015e5f28;RU)(OA;CIIOID;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0d
62 e6-11d0-a285-00aa003049e2;RU)(OA;CIIOID;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f6
63 08;bf967a86-0de6-11d0-a285-00aa003049e2;ED)(OA;CIID;RP;b7c69e6d-2cc7-11d2-854
64 e-00a0c983f608;bf967a9c-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIOID;RP;b7c69e6d
65 -2cc7-11d2-854e-00a0c983f608;bf967aba-0de6-11d0-a285-00aa003049e2;ED)(OA;CIIO
66 ID;RPLCLORC;;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIID;RPLCLORC;;bf967
67 a9c-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIOID;RPLCLORC;;bf967aba-0de6-11d0-a2
68 85-00aa003049e2;RU)(OA;CIID;RPWPCR;91e647de-d96f-4b70-9557-d63ff4f3ccd8;;PS)(
69 A;CIID;RPWPCRCCDCLCLORCWOWDSDDTSW;;;S-1-5-21-3328325300-3937145445-4190589019
70 -519)(A;CIID;LC;;;RU)(A;CIID;RPWPCRCCLCLORCWOWDSDSW;;;BA)S:AI(OU;CIIOIDSA;WP;
71 f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)
72 (OU;CIIOIDSA;WP;f30e3bbf-9ff0-11d1-b603-0000f80367c1;bf967aa5-0de6-11d0-a285-
73 00aa003049e2;WD)(OU;CIIOIDSA;WP;f30e3bbe-9ff0-11d1-b603-0000f80367c1;bf967aa5
74 -0de6-11d0-a285-00aa003049e2;WD)(OU;CIIOIDSA;WP;f30e3bbf-9ff0-11d1-b603-0000f
75 80367c1;bf967aa5-0de6-11d0-a285-00aa003049e2;WD)""".split())
77 LITTLE_SD_SDDL = ''.join(
78 """O:S-1-5-21-3328325300-3937145445-4190589019-512G:S-1-5-2
79 1-3328325300-3937145445-4190589019-512D:AI(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;S-
80 1-5-21-3328325300-3937145445-4190589019-512)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;
81 SY)(A;;RPLCLORC;;;AU)(A;;RPWPCRCCDCLCLORCWOWDSDDTSW;;;AO)(A;;RPLCLORC;;;PS)(O
82 A;;CR;ab721a55-1e2f-11d0-9819-00aa0040529b;;AU)(OA;;RP;46a9b11d-60ae-405a-b7e
83 8-ff8a58d456d2;;S-1-5-32-560)(OA;CIIOID;RP;4c164200-20c0-11d0-a768-00aa006e05
84 29;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIOID;RP;4c164200-20c0-11d0-a
85 768-00aa006e0529;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIOID;RP;5f2020
86 10-79a5-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CI
87 IOID;RP;5f202010-79a5-11d0-9020-00c04fc2d4cf;bf967aba-0de6-11d0-a285-00aa0030
88 49e2;RU)(OA;CIIOID;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;4828cc14-1437-45bc
89 -9b07-ad6f015e5f28;RU)(OA;CIIOID;RP;bc0ac240-79a9-11d0-9020-00c04fc2d4cf;bf96
90 7aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIOID;RP;59ba2f42-79a2-11d0-9020-00c
91 04fc2d3cf;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU)(OA;CIIOID;RP;59ba2f42-79a2
92 -11d0-9020-00c04fc2d3cf;bf967aba-0de6-11d0-a285-00aa003049e2;RU)(OA;CIIOID;RP
93 ;037088f8-0ae1-11d2-b422-00a0c968f939;4828cc14-1437-45bc-9b07-ad6f015e5f28;RU
94 )(OA;CIIOID;RP;037088f8-0ae1-11d2-b422-00a0c968f939;bf967aba-0de6-11d0-a285-0
95 0aa003049e2;RU)(OA;CIIOID;RP;b7c69e6d-2cc7-11d2-854e-00a0c983f608;bf967a86-0d
96 e6-11d0-a285-00aa003049e2;ED)""".split())
99 CONDITIONAL_ACE_SDDL = ('O:SYG:SYD:(XA;OICI;CR;;;WD;'
100 '(@USER.ad://ext/AuthenticationSilo == "siloname"))')
102 NON_OBJECT_SDDL = (
103 "O:S-1-5-21-2212615479-2695158682-2101375468-512"
104 "G:S-1-5-21-2212615479-2695158682-2101375468-513"
105 "D:P(A;OICI;FA;;;S-1-5-21-2212615479-2695158682-2101375468-512)"
106 "(A;OICI;FA;;;S-1-5-21-2212615479-2695158682-2101375468-519)"
107 "(A;OICIIO;FA;;;CO)"
108 "(A;OICI;FA;;;S-1-5-21-2212615479-2695158682-2101375468-512)"
109 "(A;OICI;FA;;;SY)"
110 "(A;OICI;0x1200a9;;;AU)"
111 "(A;OICI;0x1200a9;;;ED)")
115 # set SCALE = 100 for normal test, or 1 for testing the test.
116 SCALE = 100
119 class UserTests(samba.tests.TestCase):
121 def get_file_blob(self, filename):
122 if filename.endswith('.gz'):
123 f = gzip.open(filename)
124 else:
125 f = open(filename)
126 return f.read()
128 def get_desc(self, sddl):
129 dummy_sid = security.dom_sid("S-1-2-3")
130 return security.descriptor.from_sddl(sddl, dummy_sid)
132 def get_blob(self, sddl):
133 return ndr_pack(self.get_desc(sddl))
135 def test_00_00_do_nothing(self, cycles=10000):
136 # this gives us an idea of the overhead
137 for i in range(SCALE * cycles):
138 pass
140 def _test_pack(self, unpacked, cycles=10000):
141 pack = unpacked.__ndr_pack__
142 for i in range(SCALE * cycles):
143 pack()
145 def _test_unpack(self, blob, cycles=10000, cls=security.descriptor):
146 for i in range(SCALE * cycles):
147 cls().__ndr_unpack__(blob)
149 def _test_pack_unpack(self, desc, cycles=5000, cls=security.descriptor):
150 blob2 = ndr_pack(desc)
151 for i in range(SCALE * cycles):
152 blob = ndr_pack(desc)
153 desc = ndr_unpack(cls, blob)
155 self.assertEqual(blob, blob2)
157 def test_pack_big_sd_with_object_aces(self):
158 unpacked = self.get_desc(BIG_SD_SDDL)
159 self._test_pack(unpacked)
161 def test_unpack_big_sd_with_object_aces(self):
162 blob = self.get_blob(BIG_SD_SDDL)
163 self._test_unpack(blob)
165 def test_pack_unpack_big_sd_with_object_aces(self):
166 unpacked = self.get_desc(BIG_SD_SDDL)
167 self._test_pack_unpack(unpacked)
169 def test_pack_little_sd_with_object_aces(self):
170 unpacked = self.get_desc(LITTLE_SD_SDDL)
171 self._test_pack(unpacked)
173 def test_unpack_little_sd_with_object_aces(self):
174 blob = self.get_blob(LITTLE_SD_SDDL)
175 self._test_unpack(blob)
177 def test_pack_unpack_little_sd_with_object_aces(self):
178 unpacked = self.get_desc(LITTLE_SD_SDDL)
179 self._test_pack_unpack(unpacked)
181 def test_pack_conditional_ace_sd(self):
182 unpacked = self.get_desc(CONDITIONAL_ACE_SDDL)
183 self._test_pack(unpacked)
185 def test_unpack_conditional_ace_sd(self):
186 blob = self.get_blob(CONDITIONAL_ACE_SDDL)
187 self._test_unpack(blob)
189 def test_pack_unpack_conditional_ace_sd(self):
190 unpacked = self.get_desc(CONDITIONAL_ACE_SDDL)
191 self._test_pack_unpack(unpacked)
193 def test_pack_non_object_sd(self):
194 unpacked = self.get_desc(NON_OBJECT_SDDL)
195 self._test_pack(unpacked)
197 def test_unpack_non_object_sd(self):
198 blob = self.get_blob(NON_OBJECT_SDDL)
199 self._test_unpack(blob)
201 def test_pack_unpack_non_object_sd(self):
202 unpacked = self.get_desc(NON_OBJECT_SDDL)
203 self._test_pack_unpack(unpacked)
205 def test_unpack_repl_sample(self):
206 blob = self.get_file_blob('testdata/replication-ndrpack-example.gz')
207 self._test_unpack(blob, cycles=20, cls=drsuapi.DsGetNCChangesCtr6)
209 def test_pack_repl_sample(self):
210 blob = self.get_file_blob('testdata/replication-ndrpack-example.gz')
211 desc = ndr_unpack(drsuapi.DsGetNCChangesCtr6, blob)
212 self._test_pack(desc, cycles=20)
215 TestProgram(module=__name__)