1 #include <cgreen/cgreen.h>
2 #include <cgreen/mocks.h>
3 #include "../rdesktop.h"
4
5 char g_codepage[16];
6
7 /* Boilerplate */
8 Describe(ASN1);
BeforeEach(ASN1)9 BeforeEach(ASN1) {}
AfterEach(ASN1)10 AfterEach(ASN1) {}
11
12 /* malloc; exit if out of memory */
13 void *
xmalloc(int size)14 xmalloc(int size)
15 {
16 void *mem = malloc(size);
17 if (mem == NULL)
18 {
19 logger(Core, Error, "xmalloc, failed to allocate %d bytes", size);
20 exit(EX_UNAVAILABLE);
21 }
22 return mem;
23 }
24
25 /* realloc; exit if out of memory */
26 void *
xrealloc(void * oldmem,size_t size)27 xrealloc(void *oldmem, size_t size)
28 {
29 void *mem;
30
31 if (size == 0)
32 size = 1;
33 mem = realloc(oldmem, size);
34 if (mem == NULL)
35 {
36 logger(Core, Error, "xrealloc, failed to reallocate %ld bytes", size);
37 exit(EX_UNAVAILABLE);
38 }
39 return mem;
40 }
41
42 /* free */
43 void
xfree(void * mem)44 xfree(void *mem)
45 {
46 free(mem);
47 }
48
Ensure(ASN1,can_create_empty_sequence)49 Ensure(ASN1, can_create_empty_sequence)
50 {
51 struct stream *s, *empty;
52 uint8_t expected_data[] = {0x30, 0x00};
53
54 s = s_alloc(100);
55 empty = s_alloc(100);
56
57 ber_out_sequence(s, empty);
58 s_mark_end(s);
59
60 assert_that(s_length(s), is_equal_to(sizeof(expected_data)));
61 assert_that(s->data, is_equal_to_contents_of(expected_data, sizeof(expected_data)));
62 }
63
Ensure(ASN1,can_create_empty_sequence_using_null)64 Ensure(ASN1, can_create_empty_sequence_using_null)
65 {
66 struct stream *s;
67 uint8_t expected_data[] = {0x30, 0x00};
68
69 s = s_alloc(100);
70
71 ber_out_sequence(s, NULL);
72 s_mark_end(s);
73
74 assert_that(s_length(s), is_equal_to(sizeof(expected_data)));
75 assert_that(s->data, is_equal_to_contents_of(expected_data, sizeof(expected_data)));
76 }
77
Ensure(ASN1,can_create_sequence_of_two_integers)78 Ensure(ASN1, can_create_sequence_of_two_integers)
79 {
80 struct stream *s, *content;
81 uint8_t expected_data[] = {0x30, 0x08, 0x02, 0x02, 0x00, 0xbe, 0x02, 0x02, 0x00, 0xef};
82
83 s = s_alloc(100);
84 content = s_alloc(100);
85
86 ber_out_integer(content, 0xbe);
87 ber_out_integer(content, 0xef);
88 s_mark_end(content);
89
90 ber_out_sequence(s, content);
91 s_mark_end(s);
92
93 assert_that(s_length(s), is_equal_to(sizeof(expected_data)));
94 assert_that(s->data, is_equal_to_contents_of(expected_data, sizeof(expected_data)));
95 }
96
Ensure(ASN1,can_create_sequence_of_one_integer)97 Ensure(ASN1, can_create_sequence_of_one_integer)
98 {
99 struct stream *s, *content;
100 uint8_t expected_data[] = {0x30, 0x04, 0x02, 0x02, 0x00, 0xbe};
101
102 s = s_alloc(100);
103 content = s_alloc(100);
104
105 ber_out_integer(content, 0xbe);
106 s_mark_end(content);
107
108 ber_out_sequence(s, content);
109 s_mark_end(s);
110
111 assert_that(s_length(s), is_equal_to(sizeof(expected_data)));
112 assert_that(s->data, is_equal_to_contents_of(expected_data, sizeof(expected_data)));
113 }
114