Jun 16th update

This commit is contained in:
noam
2023-01-17 11:34:09 +02:00
parent 90bcc544a2
commit ad04b8d063
168 changed files with 64034 additions and 932 deletions

View File

@@ -21,7 +21,7 @@ extern void (*debug_int)(int is_error, const char *func, const char *file, int l
#define __FILENAME__ (strrchr(__FILE__, '/') ? strrchr(__FILE__, '/') + 1 : __FILE__)
#endif
enum debugLevel { TraceLevel = 0, WarningLevel = 3 };
enum debugLevel { TraceLevel = 0, DebugLevel = 1, WarningLevel = 3 };
#define writeDebug(debug_level, fmt, ...) \
{ \

View File

@@ -140,14 +140,13 @@ createSharedRingQueue(const char *shared_location_name, uint16_t num_of_data_seg
g_num_of_data_segments = num_of_data_segments;
fd = shm_open(shared_location_name, shmem_fd_flags, S_IRUSR | S_IWUSR);
fd = shm_open(shared_location_name, shmem_fd_flags, S_IRWXU | S_IRWXG | S_IRWXO);
if (fd == -1) {
writeDebug(
WarningLevel,
"createSharedRingQueue: Failed to open shared memory for '%s'. Errno: %d (%s)\n",
"createSharedRingQueue: Failed to open shared memory for '%s'. Errno: %d\n",
shared_location_name,
errno,
strerror(errno)
errno
);
return NULL;
}
@@ -384,7 +383,7 @@ pushBuffersToQueue(
large_total_elem_size,
max_write_size
);
return -1;
return -2;
}
}
total_elem_size = (uint16_t)large_total_elem_size;
@@ -400,18 +399,18 @@ pushBuffersToQueue(
if (!isThereEnoughMemoryInQueue(write_pos, read_pos, num_of_segments_to_write)) {
writeDebug(WarningLevel, "Cannot write to a full queue\n");
return -1;
writeDebug(DebugLevel, "Cannot write to a full queue");
return -3;
}
if (write_pos >= g_num_of_data_segments) {
writeDebug(
WarningLevel,
DebugLevel,
"Cannot write to a location outside the queue. Write index: %u, number of queue elements: %u",
write_pos,
g_num_of_data_segments
);
return -1;
return -4;
}
if (write_pos + num_of_segments_to_write > g_num_of_data_segments) {
@@ -488,16 +487,14 @@ popFromQueue(SharedRingQueue *queue)
}
num_of_read_segments = getNumOfDataSegmentsNeeded(buffer_mgmt[read_pos]);
end_pos = read_pos + num_of_read_segments;
if (read_pos + num_of_read_segments > g_num_of_data_segments) {
for ( ; read_pos < g_num_of_data_segments; ++read_pos ) {
buffer_mgmt[read_pos] = empty_buff_mgmt_magic;
}
read_pos = 0;
}
writeDebug(
TraceLevel,
"Size of data to remove: %u, number of queue elements to free: %u, current read index: %u, end index: %u",
buffer_mgmt[read_pos],
num_of_read_segments,
read_pos,
end_pos
);
end_pos = read_pos + num_of_read_segments;
for ( ; read_pos < end_pos; ++read_pos ) {
buffer_mgmt[read_pos] = empty_buff_mgmt_magic;
@@ -509,6 +506,15 @@ popFromQueue(SharedRingQueue *queue)
}
}
writeDebug(
TraceLevel,
"Size of data to remove: %u, number of queue elements to free: %u, current read index: %u, end index: %u",
buffer_mgmt[read_pos],
num_of_read_segments,
read_pos,
end_pos
);
if (read_pos == g_num_of_data_segments) read_pos = 0;
queue->read_pos = read_pos;

View File

@@ -50,7 +50,6 @@ debugInitial(int is_error, const char *func, const char *file, int line_num, con
va_start(args, fmt);
vprintf(fmt, args);
va_end(args);
printf("\n");
}
void (*debug_int)(int is_error, const char *func, const char *file, int line_num, const char *fmt, ...) = debugInitial;
@@ -101,7 +100,7 @@ createOneWayIPCQueue(
return NULL;
}
if (is_owner && chown(shmem_path, user_id, group_id) == -1) {
if (is_owner && chmod(shmem_path, 0666) == -1) {
writeDebug(WarningLevel, "Failed to set the permissions");
destroySharedRingQueue(ring_queue, is_owner, isTowardsOwner(is_owner, is_tx_queue));
return NULL;

View File

@@ -6,8 +6,7 @@ using namespace std;
using namespace testing;
const static string bad_shmem_path = "/root/sadsadsadad/444";
const static string valid_shmem_file_name = "shmem_ut";
const static string valid_shmem_path = "/dev/shm/" + valid_shmem_file_name;
const static string valid_shmem_path = "shmem_ut";
const uint16_t max_num_of_data_segments = sizeof(DataSegment)/sizeof(uint16_t);
const static uint16_t num_of_shmem_elem = 11;
@@ -16,11 +15,8 @@ class SharedRingQueueTest : public Test
public:
SharedRingQueueTest()
{
// remove old fd from prev tests
unlink(valid_shmem_path.c_str());
owners_queue = createSharedRingQueue(valid_shmem_file_name.c_str(), num_of_shmem_elem, 1, 1);
users_queue = createSharedRingQueue(valid_shmem_file_name.c_str(), num_of_shmem_elem, 0, 0);
owners_queue = createSharedRingQueue(valid_shmem_path.c_str(), num_of_shmem_elem, 1, 1);
users_queue = createSharedRingQueue(valid_shmem_path.c_str(), num_of_shmem_elem, 0, 0);
}
~SharedRingQueueTest()
@@ -194,7 +190,7 @@ TEST_F(SharedRingQueueTest, write_read_pop_over_multiple_segments)
}
vector<char> no_more_space_data(SHARED_MEMORY_SEGMENT_ENTRY_SIZE*2, '6');
EXPECT_EQ(pushToQueue(users_queue, no_more_space_data.data(), no_more_space_data.size()), -1);
EXPECT_EQ(pushToQueue(users_queue, no_more_space_data.data(), no_more_space_data.size()), -3);
const char *read_data = nullptr;
uint16_t read_bytes = 0;
@@ -217,7 +213,7 @@ TEST_F(SharedRingQueueTest, write_element_that_fills_the_entire_queue)
vector<char> long_data(SHARED_MEMORY_SEGMENT_ENTRY_SIZE*(num_of_shmem_elem - 1), '2');
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), 0);
EXPECT_EQ(pushToQueue(users_queue, short_data.data(), short_data.size()), -1);
EXPECT_EQ(pushToQueue(users_queue, short_data.data(), short_data.size()), -3);
const char *data_to_read = nullptr;
uint16_t read_bytes = 0;
@@ -225,7 +221,7 @@ TEST_F(SharedRingQueueTest, write_element_that_fills_the_entire_queue)
EXPECT_EQ(read_bytes, long_data.size());
EXPECT_EQ(popFromQueue(owners_queue), 0);
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -1);
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -3);
EXPECT_EQ(pushToQueue(users_queue, short_data.data(), short_data.size()), 0);
EXPECT_EQ(peekToQueue(owners_queue, &data_to_read, &read_bytes), 0);
@@ -244,11 +240,11 @@ TEST_F(SharedRingQueueTest, not_enought_space_to_push_on_end_but_enought_on_star
for (uint i = 0; i < num_of_shmem_elem - 1; i++) {
EXPECT_EQ(pushToQueue(users_queue, short_data.data(), short_data.size()), 0);
}
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -1);
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -3);
for (uint i = 0; i < 3; i++) {
EXPECT_EQ(popFromQueue(owners_queue), 0);
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -1);
EXPECT_EQ(pushToQueue(users_queue, long_data.data(), long_data.size()), -3);
}
EXPECT_EQ(popFromQueue(owners_queue), 0);
@@ -264,7 +260,7 @@ TEST_F(SharedRingQueueTest, attempt_write_to_full_queue)
for (uint i = 0; i < num_of_shmem_elem - 1; i ++) {
EXPECT_EQ(pushToQueue(users_queue, reinterpret_cast<char *>(&data_to_write), sizeof(data_to_write)), 0);
}
EXPECT_EQ(pushToQueue(users_queue, reinterpret_cast<char *>(&data_to_write), sizeof(data_to_write)), -1);
EXPECT_EQ(pushToQueue(users_queue, reinterpret_cast<char *>(&data_to_write), sizeof(data_to_write)), -3);
const char *data_to_read = nullptr;
uint16_t read_bytes = 0;
@@ -278,7 +274,7 @@ TEST_F(SharedRingQueueTest, attempt_write_to_full_queue)
);
EXPECT_EQ(
pushToQueue(users_queue, reinterpret_cast<char *>(&data_to_write), sizeof(data_to_write)),
-1
-3
);
int popped_items_count = 0;
@@ -326,14 +322,12 @@ TEST_F(SharedRingQueueTest, ilegal_queue)
ASSERT_NE(users_queue, nullptr);
destroySharedRingQueue(users_queue, 0, 1);
users_queue = createSharedRingQueue(valid_shmem_file_name.c_str(), max_num_of_data_segments + 1, 0, 0);
users_queue = createSharedRingQueue(valid_shmem_path.c_str(), max_num_of_data_segments + 1, 0, 0);
EXPECT_EQ(users_queue, nullptr);
users_queue = createSharedRingQueue(bad_shmem_path.c_str(), max_num_of_data_segments, 0, 0);
EXPECT_EQ(users_queue, nullptr);
ASSERT_NE(owners_queue, nullptr);
destroySharedRingQueue(owners_queue, 1, 1);
owners_queue = createSharedRingQueue(valid_shmem_file_name.c_str(), max_num_of_data_segments, 1, 1);
owners_queue = createSharedRingQueue(valid_shmem_path.c_str(), max_num_of_data_segments, 1, 1);
EXPECT_NE(owners_queue, nullptr);
}