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