Add pre test resource verifications

pull/9931/head
offirko 2019-03-04 18:55:17 +02:00 committed by David Saada
parent e41118796a
commit 4075d6ee49
1 changed files with 30 additions and 10 deletions

View File

@ -52,6 +52,7 @@ using namespace utest::v1;
#define TEST_BLOCK_COUNT 10 #define TEST_BLOCK_COUNT 10
#define TEST_ERROR_MASK 16 #define TEST_ERROR_MASK 16
#define TEST_NUM_OF_THREADS 4 #define TEST_NUM_OF_THREADS 4
#define TEST_THREAD_STACK_SIZE 1024
const struct { const struct {
const char *name; const char *name;
@ -331,10 +332,6 @@ void test_multi_threads()
TEST_SKIP_UNLESS_MESSAGE(block_device != NULL, "no block device found."); TEST_SKIP_UNLESS_MESSAGE(block_device != NULL, "no block device found.");
char *dummy = new (std::nothrow) char[TEST_NUM_OF_THREADS * OS_STACK_SIZE];
TEST_SKIP_UNLESS_MESSAGE(dummy, "Not enough memory for test.\n");
delete[] dummy;
for (unsigned atr = 0; atr < sizeof(ATTRS) / sizeof(ATTRS[0]); atr++) { for (unsigned atr = 0; atr < sizeof(ATTRS) / sizeof(ATTRS[0]); atr++) {
static const char *prefixes[] = {"", "k", "M", "G"}; static const char *prefixes[] = {"", "k", "M", "G"};
for (int i_ind = 3; i_ind >= 0; i_ind--) { for (int i_ind = 3; i_ind >= 0; i_ind--) {
@ -347,21 +344,44 @@ void test_multi_threads()
} }
} }
rtos::Thread bd_thread[TEST_NUM_OF_THREADS];
osStatus threadStatus; osStatus threadStatus;
int i_ind; int i_ind, j_ind;
char *dummy;
rtos::Thread **bd_thread = new (std::nothrow) rtos::Thread*[TEST_NUM_OF_THREADS];
TEST_SKIP_UNLESS_MESSAGE((*bd_thread) != NULL, "no block device found.");
memset(bd_thread, 0, TEST_NUM_OF_THREADS * sizeof(rtos::Thread *));
for (i_ind = 0; i_ind < TEST_NUM_OF_THREADS; i_ind++) { for (i_ind = 0; i_ind < TEST_NUM_OF_THREADS; i_ind++) {
threadStatus = bd_thread[i_ind].start(callback(test_thread_job, (void *)block_device));
bd_thread[i_ind] = new (std::nothrow) rtos::Thread((osPriority_t)((int)osPriorityNormal), TEST_THREAD_STACK_SIZE);
dummy = new (std::nothrow) char[TEST_THREAD_STACK_SIZE];
if (!bd_thread[i_ind] || !dummy) {
utest_printf("Not enough heap to run Thread %d !\n", i_ind + 1);
break;
}
delete[] dummy;
threadStatus = bd_thread[i_ind]->start(callback(test_thread_job, (void *)block_device));
if (threadStatus != 0) { if (threadStatus != 0) {
utest_printf("Thread %d Start Failed!\n", i_ind + 1); utest_printf("Thread %d Start Failed!\n", i_ind + 1);
break;
} }
} }
for (i_ind = 0; i_ind < TEST_NUM_OF_THREADS; i_ind++) { for (j_ind = 0; j_ind < i_ind; j_ind++) {
bd_thread[i_ind].join(); bd_thread[j_ind]->join();
} }
if (bd_thread) {
for (j_ind = 0; j_ind < i_ind; j_ind++) {
delete bd_thread[j_ind];
}
delete[] bd_thread;
}
} }
void test_erase_functionality() void test_erase_functionality()