Add Test for Takion Send Buffer

This commit is contained in:
Florian Märkl 2019-07-31 16:48:03 +02:00
commit 03b81e9509
No known key found for this signature in database
GPG key ID: 125BC8A5A6A1E857
6 changed files with 192 additions and 4 deletions

View file

@ -23,6 +23,8 @@
#include "thread.h"
#include "seqnum.h"
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
@ -47,12 +49,18 @@ typedef struct chiaki_takion_send_buffer_t
} ChiakiTakionSendBuffer;
/**
* Init a Send Buffer and start a thread that automatically re-sends packets on takion.
*
* @param takion if NULL, the Send Buffer thread will effectively do nothing (for unit testing)
* @param size number of packet slots
*/
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_init(ChiakiTakionSendBuffer *send_buffer, ChiakiTakion *takion, size_t size);
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_start(ChiakiTakionSendBuffer *send_buffer);
CHIAKI_EXPORT void chiaki_takion_send_buffer_fini(ChiakiTakionSendBuffer *send_buffer);
/**
* @param buf ownership of this is taken by the ChiakiTakionSendBuffer, which will free it automatically later!
* On error, buf is freed immediately.
*/
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_push(ChiakiTakionSendBuffer *send_buffer, ChiakiSeqNum32 seq_num, uint8_t *buf, size_t buf_size);
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_ack(ChiakiTakionSendBuffer *send_buffer, ChiakiSeqNum32 seq_num);

View file

@ -15,6 +15,8 @@
* along with Chiaki. If not, see <https://www.gnu.org/licenses/>.
*/
#ifndef CHIAKI_UNIT_TEST
#include <chiaki/takionsendbuffer.h>
#include <chiaki/takion.h>
#include <chiaki/time.h>
@ -22,11 +24,11 @@
#include <string.h>
#include <assert.h>
#define TAKION_DATA_RESEND_TIMEOUT_MS 200
#define TAKION_DATA_RESEND_WAKEUP_TIMEOUT_MS (TAKION_DATA_RESEND_TIMEOUT_MS/2)
#define TAKION_DATA_RESEND_TRIES_MAX 10
#endif
struct chiaki_takion_send_buffer_packet_t
{
@ -37,12 +39,14 @@ struct chiaki_takion_send_buffer_packet_t
size_t buf_size;
}; // ChiakiTakionSendBufferPacket
#ifndef CHIAKI_UNIT_TEST
static void *takion_send_buffer_thread_func(void *user);
CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_init(ChiakiTakionSendBuffer *send_buffer, ChiakiTakion *takion, size_t size)
{
send_buffer->takion = takion;
send_buffer->log = takion->log;
send_buffer->log = takion ? takion->log : NULL;
send_buffer->packets = calloc(size, sizeof(ChiakiTakionSendBufferPacket));
if(!send_buffer->packets)
@ -132,6 +136,8 @@ CHIAKI_EXPORT ChiakiErrorCode chiaki_takion_send_buffer_push(ChiakiTakionSendBuf
}
beach:
if(err != CHIAKI_ERR_SUCCESS)
free(buf);
chiaki_mutex_unlock(&send_buffer->mutex);
return err;
}
@ -214,6 +220,9 @@ static void *takion_send_buffer_thread_func(void *user)
static void takion_send_buffer_resend(ChiakiTakionSendBuffer *send_buffer)
{
if(!send_buffer->takion)
return;
uint64_t now = chiaki_time_now_monotonic_ms();
for(size_t i=0; i<send_buffer->packets_count; i++)
@ -229,3 +238,5 @@ static void takion_send_buffer_resend(ChiakiTakionSendBuffer *send_buffer)
}
}
}
#endif