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