1 #include "tls_test_frame.h"
2 
3 INT demo_shared_buffer_test_entry(TLS_TEST_INSTANCE* instance_ptr);
4 
main(INT argc,CHAR * argv[])5 INT main(INT argc, CHAR* argv[])
6 {
7 INT status, exit_status;
8 UINT offset, length;
9 VOID* shared_buffer;
10 TLS_TEST_INSTANCE *ins0;
11 TLS_TEST_DIRECTOR *director;
12 
13     /* Create a test instance. */
14     status = tls_test_instance_create(&ins0,                          /* test instance ptr */
15                                       "shared_buffer_test_instance",  /* instance name */
16                                       demo_shared_buffer_test_entry,  /* test entry */
17                                       0,                              /* delay(seconds) */
18                                       10,                             /* timeout(seconds) */
19                                       1024,                           /* shared buffer size */
20                                       NULL);                          /* reserved */
21     return_value_if_fail(TLS_TEST_SUCCESS == status, status);
22 
23     status = tls_test_instance_get_shared_buffer_offset(ins0, &offset);
24     return_value_if_fail((TLS_TEST_SUCCESS == status) && (0 == offset), TLS_TEST_UNKNOWN_TYPE_ERROR);
25 
26     /* Get shared buffer. */
27     status = tls_test_instance_get_shared_buffer(ins0, &shared_buffer);
28     return_value_if_fail(TLS_TEST_SUCCESS == status, status);
29 
30     /* Write some data in the shared buffer. */
31     length = 5;
32     status = tls_test_instance_append_data_to_shared_buffer(ins0, "hello", &length);
33     return_value_if_fail((TLS_TEST_SUCCESS == status) && (5 == length), status);
34 
35     /* Get current offset. */
36     status = tls_test_instance_get_shared_buffer_offset(ins0, &offset);
37     return_value_if_fail((TLS_TEST_SUCCESS == status) && (5 == offset), TLS_TEST_UNKNOWN_TYPE_ERROR);
38 
39     /* Launch the test instance. */
40     status = tls_test_director_create(&director, NULL);
41     status += tls_test_director_register_test_instance(director, ins0);
42     status += tls_test_director_test_start(director);
43     return_value_if_fail(TLS_TEST_SUCCESS == status, status);
44 
45     /* Check exit status. */
46     status = tls_test_instance_get_exit_status(ins0, &(exit_status));
47     return_value_if_fail((0 == exit_status), status);
48 
49     /* Get shared buffer. */
50     status = tls_test_instance_get_shared_buffer(ins0, &shared_buffer);
51     return_value_if_fail(TLS_TEST_SUCCESS == status, status);
52 
53     /* Attempt to get the data written by demo_shared_buffer_test_entry. */
54     return_value_if_fail('h' == ((CHAR*)shared_buffer)[1023], TLS_TEST_UNKNOWN_TYPE_ERROR);
55 
56     /* Get current offset. */
57     status = tls_test_instance_get_shared_buffer_offset(ins0, &offset);
58     return_value_if_fail((TLS_TEST_SUCCESS == status) && (1024 == offset), TLS_TEST_UNKNOWN_TYPE_ERROR);
59 
60     /* Destroy the test director and registered test instances. */
61     status = tls_test_director_clean_all(director);
62     return_value_if_fail(TLS_TEST_SUCCESS == status, status);
63 
64     return 0;
65 }
66 
demo_shared_buffer_test_entry(TLS_TEST_INSTANCE * instance_ptr)67 INT demo_shared_buffer_test_entry(TLS_TEST_INSTANCE* instance_ptr)
68 {
69 INT offset, status;
70 UINT length;
71 
72     /* Get current offset. */
73     status = tls_test_instance_get_shared_buffer_offset(instance_ptr, &offset);
74     return_value_if_fail((TLS_TEST_SUCCESS == status) && (5 == offset), TLS_TEST_UNKNOWN_TYPE_ERROR);
75 
76     /* Set offset. */
77     status = tls_test_instance_set_shared_buffer_offset(instance_ptr, 10);
78     status += tls_test_instance_get_shared_buffer_offset(instance_ptr, &offset);
79     return_value_if_fail((TLS_TEST_SUCCESS == status) && (10 == offset), TLS_TEST_UNKNOWN_TYPE_ERROR);
80 
81     /* Exceed the size of shared buffer. */
82     status = tls_test_instance_set_shared_buffer_offset(instance_ptr, 1025);
83     return_value_if_fail(TLS_TEST_ILLEGAL_SHARED_BUFFER_ACCESS == status, status);
84     status = tls_test_instance_get_shared_buffer_offset(instance_ptr, &offset);
85     return_value_if_fail((TLS_TEST_SUCCESS == status) && (10 == offset), status);
86 
87     /* Set the offset as the maximum. */
88     status = tls_test_instance_set_shared_buffer_offset(instance_ptr, 1024);
89     status += tls_test_instance_get_shared_buffer_offset(instance_ptr, &offset);
90     return_value_if_fail((TLS_TEST_SUCCESS == status) && (1024 == offset), TLS_TEST_UNKNOWN_TYPE_ERROR);
91 
92     /* Overflow the shared buffer.. */
93     status = tls_test_instance_set_shared_buffer_offset(instance_ptr, 1023);
94     return_value_if_fail(TLS_TEST_SUCCESS == status, status);
95     length = 5;
96     status = tls_test_instance_append_data_to_shared_buffer(instance_ptr, "hello", &length);
97 
98     /* The length appended actually will be stored in the variable of length. */
99     return_value_if_fail((1 == length) && (status == TLS_TEST_ILLEGAL_SHARED_BUFFER_ACCESS), status);
100 
101     /* Now the offset is equal to the shared buffer size. */
102     status = tls_test_instance_get_shared_buffer_offset(instance_ptr, &offset);
103     return_value_if_fail((offset == 1024) && (status == TLS_TEST_SUCCESS), status);
104     return 0;
105 }
106