source: trunk/server/pidl/tests/ndr_align.pl

Last change on this file was 414, checked in by Herwig Bauernfeind, 15 years ago

Samba 3.5.0: Initial import

File size: 3.0 KB
Line 
1#!/usr/bin/perl
2# NDR alignment tests
3# (C) 2005 Jelmer Vernooij. Published under the GNU GPL
4use strict;
5
6use Test::More tests => 5 * 8;
7use FindBin qw($RealBin);
8use lib "$RealBin";
9use Util qw(test_samba4_ndr);
10
11test_samba4_ndr('align-uint8-uint16',
12'
13 typedef [public] struct {
14 uint8 x;
15 uint16 y;
16 } bla;
17',
18'
19 struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);
20 struct bla r;
21 uint8_t expected[] = { 0x0D, 0x00, 0xef, 0xbe };
22 DATA_BLOB expected_blob = { expected, 4 };
23 DATA_BLOB result_blob;
24 r.x = 13;
25 r.y = 0xbeef;
26
27 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
28 return 1;
29
30 result_blob = ndr_push_blob(ndr);
31
32 if (data_blob_cmp(&result_blob, &expected_blob) != 0)
33 return 2;
34');
35
36test_samba4_ndr('align-uint8-uint32',
37'
38 typedef [public] struct {
39 uint8 x;
40 uint32 y;
41 } bla;
42',
43'
44 struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);
45 struct bla r;
46 uint8_t expected[] = { 0x0D, 0x00, 0x00, 0x00, 0xef, 0xbe, 0xef, 0xbe };
47 DATA_BLOB expected_blob = { expected, 8 };
48 DATA_BLOB result_blob;
49 r.x = 13;
50 r.y = 0xbeefbeef;
51
52 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
53 return 1;
54
55 result_blob = ndr_push_blob(ndr);
56
57 if (data_blob_cmp(&result_blob, &expected_blob) != 0)
58 return 2;
59');
60
61
62test_samba4_ndr('align-uint8-hyper',
63'
64 typedef [public] struct {
65 uint8 x;
66 hyper y;
67 } bla;
68',
69'
70 struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);
71 struct bla r;
72 uint8_t expected[] = { 0x0D, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
73 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe, 0xef, 0xbe };
74 DATA_BLOB expected_blob = { expected, 16 };
75 DATA_BLOB result_blob;
76 r.x = 13;
77 r.y = 0xbeefbeefbeefbeefLLU;
78
79 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
80 return 1;
81
82 result_blob = ndr_push_blob(ndr);
83
84 if (data_blob_cmp(&result_blob, &expected_blob) != 0)
85 return 2;
86');
87
88test_samba4_ndr('noalignflag-uint8-uint16',
89'
90 typedef [public] struct {
91 uint8 x;
92 uint16 y;
93 } bla;
94',
95'
96 struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);
97 struct bla r;
98 uint8_t expected[] = { 0x0D, 0xef, 0xbe };
99 DATA_BLOB expected_blob = { expected, 3 };
100 DATA_BLOB result_blob;
101 ndr->flags |= LIBNDR_FLAG_NOALIGN;
102
103 r.x = 13;
104 r.y = 0xbeef;
105
106 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_bla(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
107 return 1;
108
109 result_blob = ndr_push_blob(ndr);
110
111 if (data_blob_cmp(&result_blob, &expected_blob) != 0)
112 return 2;
113');
114
115test_samba4_ndr('align-blob-align2',
116'
117 typedef [public] struct {
118 uint8 x;
119 [flag(LIBNDR_FLAG_ALIGN2)] DATA_BLOB data;
120 uint8 y;
121 } blie;
122',
123'
124 struct ndr_push *ndr = ndr_push_init_ctx(NULL, NULL);
125 struct blie r;
126 uint8_t data[] = { 0x01, 0x02 };
127 uint8_t expected[] = { 0x0D, 0x00, 0x0E };
128 DATA_BLOB expected_blob = { expected, 3 };
129 DATA_BLOB result_blob;
130
131 r.x = 13;
132 r.y = 14;
133 r.data.data = data;
134 r.data.length = 2;
135
136 if (!NDR_ERR_CODE_IS_SUCCESS(ndr_push_blie(ndr, NDR_SCALARS|NDR_BUFFERS, &r)))
137 return 1;
138
139 result_blob = ndr_push_blob(ndr);
140
141 if (data_blob_cmp(&result_blob, &expected_blob) != 0)
142 return 2;
143');
Note: See TracBrowser for help on using the repository browser.