Fix a few "might be uninitialized" errors
[samba.git] / pidl / tests / ndr_align.pl
1 #!/usr/bin/perl
2 # NDR alignment tests
3 # (C) 2005 Jelmer Vernooij. Published under the GNU GPL
4 use strict;
5
6 use Test::More tests => 5 * 8;
7 use FindBin qw($RealBin);
8 use lib "$RealBin";
9 use Util qw(test_samba4_ndr);
10
11 test_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);
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
36 test_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);
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
62 test_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);
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
88 test_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);
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
115 test_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);
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 ');