mirror of
https://github.com/cesanta/mongoose.git
synced 2024-12-28 23:49:44 +08:00
Add mip test
This commit is contained in:
parent
32782bab0e
commit
1c181e091e
20
Makefile
20
Makefile
@ -1,10 +1,10 @@
|
|||||||
SRCS = mongoose.c test/unit_test.c test/packed_fs.c
|
SRCS = mongoose.c test/unit_test.c test/packed_fs.c
|
||||||
HDRS = $(wildcard src/*.h) $(wildcard mip/*.h)
|
HDRS = $(wildcard src/*.h) $(wildcard mip/*.h)
|
||||||
DEFS ?= -DMG_MAX_HTTP_HEADERS=7 -DMG_ENABLE_LINES -DMG_ENABLE_PACKED_FS=1 -DMG_ENABLE_SSI=1
|
PACKED ?= 1
|
||||||
|
DEFS ?= -DMG_MAX_HTTP_HEADERS=7 -DMG_ENABLE_LINES -DMG_ENABLE_PACKED_FS=$(PACKED) -DMG_ENABLE_SSI=1
|
||||||
C_WARN ?= -Wmissing-prototypes -Wstrict-prototypes
|
C_WARN ?= -Wmissing-prototypes -Wstrict-prototypes
|
||||||
WARN ?= -pedantic -W -Wall -Werror -Wshadow -Wdouble-promotion -fno-common -Wconversion -Wundef $(C_WARN)
|
WARN ?= -pedantic -W -Wall -Werror -Wshadow -Wdouble-promotion -fno-common -Wconversion -Wundef $(C_WARN)
|
||||||
OPTS ?= -O3 -g3
|
OPTS ?= -O3 -g3
|
||||||
VALGRIND_OPTS ?= -O0 -g3
|
|
||||||
INCS ?= -Isrc -I.
|
INCS ?= -Isrc -I.
|
||||||
SSL ?= MBEDTLS
|
SSL ?= MBEDTLS
|
||||||
CWD ?= $(realpath $(CURDIR))
|
CWD ?= $(realpath $(CURDIR))
|
||||||
@ -19,7 +19,7 @@ PREFIX ?= /usr/local
|
|||||||
VERSION ?= $(shell cut -d'"' -f2 src/version.h)
|
VERSION ?= $(shell cut -d'"' -f2 src/version.h)
|
||||||
COMMON_CFLAGS ?= $(WARN) $(INCS) $(DEFS) -DMG_ENABLE_IPV6=$(IPV6) $(TFLAGS)
|
COMMON_CFLAGS ?= $(WARN) $(INCS) $(DEFS) -DMG_ENABLE_IPV6=$(IPV6) $(TFLAGS)
|
||||||
CFLAGS ?= $(OPTS) $(ASAN) $(COMMON_CFLAGS)
|
CFLAGS ?= $(OPTS) $(ASAN) $(COMMON_CFLAGS)
|
||||||
VALGRIND_CFLAGS ?= $(VALGRIND_OPTS) $(COMMON_CFLAGS)
|
VALGRIND_CFLAGS ?= $(OPTS) $(COMMON_CFLAGS)
|
||||||
VALGRIND_RUN ?= valgrind --tool=memcheck --gen-suppressions=all --leak-check=full --show-leak-kinds=all --leak-resolution=high --track-origins=yes --error-exitcode=1 --exit-on-first-error=yes
|
VALGRIND_RUN ?= valgrind --tool=memcheck --gen-suppressions=all --leak-check=full --show-leak-kinds=all --leak-resolution=high --track-origins=yes --error-exitcode=1 --exit-on-first-error=yes
|
||||||
.PHONY: examples test valgrind
|
.PHONY: examples test valgrind
|
||||||
|
|
||||||
@ -28,6 +28,7 @@ MBEDTLS ?= /usr/local
|
|||||||
CFLAGS += -DMG_ENABLE_MBEDTLS=1 -I$(MBEDTLS)/include -I/usr/include
|
CFLAGS += -DMG_ENABLE_MBEDTLS=1 -I$(MBEDTLS)/include -I/usr/include
|
||||||
LDFLAGS ?= -L$(MBEDTLS)/lib -lmbedtls -lmbedcrypto -lmbedx509
|
LDFLAGS ?= -L$(MBEDTLS)/lib -lmbedtls -lmbedcrypto -lmbedx509
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq "$(SSL)" "OPENSSL"
|
ifeq "$(SSL)" "OPENSSL"
|
||||||
OPENSSL ?= /usr/local
|
OPENSSL ?= /usr/local
|
||||||
CFLAGS += -DMG_ENABLE_OPENSSL=1 -I$(OPENSSL)/include
|
CFLAGS += -DMG_ENABLE_OPENSSL=1 -I$(OPENSSL)/include
|
||||||
@ -36,6 +37,12 @@ endif
|
|||||||
|
|
||||||
all: mg_prefix unamalgamated unpacked test test++ arm examples vc98 vc17 vc22 mingw mingw++ linux linux++ fuzz
|
all: mg_prefix unamalgamated unpacked test test++ arm examples vc98 vc17 vc22 mingw mingw++ linux linux++ fuzz
|
||||||
|
|
||||||
|
mip_test: PACKED=0
|
||||||
|
mip_test: DEFS += -DMG_ENABLE_SOCKET=0 -DMG_ENABLE_MIP=1
|
||||||
|
mip_test: test/mip_test.c mongoose.c mongoose.h Makefile
|
||||||
|
$(CC) test/mip_test.c $(CFLAGS) $(LDFLAGS) -g -o $@
|
||||||
|
ASAN_OPTIONS=$(ASAN_OPTIONS) $(RUN) ./$@
|
||||||
|
|
||||||
examples:
|
examples:
|
||||||
@for X in $(EXAMPLES); do test -f $$X/Makefile || continue; $(MAKE) -C $$X example || exit 1; done
|
@for X in $(EXAMPLES); do test -f $$X/Makefile || continue; $(MAKE) -C $$X example || exit 1; done
|
||||||
|
|
||||||
@ -43,8 +50,8 @@ test/packed_fs.c: Makefile src/ssi.h test/fuzz.c test/data/a.txt
|
|||||||
$(CC) $(CFLAGS) test/pack.c -o pack
|
$(CC) $(CFLAGS) test/pack.c -o pack
|
||||||
$(RUN) ./pack Makefile src/ssi.h test/fuzz.c test/data/a.txt test/data/range.txt > $@
|
$(RUN) ./pack Makefile src/ssi.h test/fuzz.c test/data/a.txt test/data/range.txt > $@
|
||||||
|
|
||||||
DIR ?= test/data/
|
DIR ?= test/data
|
||||||
OUT ?= fs_packed.c
|
OUT ?= packed_fs.c
|
||||||
mkfs:
|
mkfs:
|
||||||
$(CC) $(CFLAGS) test/pack.c -o pack
|
$(CC) $(CFLAGS) test/pack.c -o pack
|
||||||
$(RUN) ./pack -s $(DIR) `find $(DIR) -type f` > $(OUT)
|
$(RUN) ./pack -s $(DIR) `find $(DIR) -type f` > $(OUT)
|
||||||
@ -99,9 +106,6 @@ valgrind_unit_test: Makefile mongoose.h $(SRCS)
|
|||||||
valgrind: valgrind_unit_test
|
valgrind: valgrind_unit_test
|
||||||
$(VALGRIND_RUN) ./valgrind_unit_test
|
$(VALGRIND_RUN) ./valgrind_unit_test
|
||||||
|
|
||||||
infer:
|
|
||||||
infer run -- cc test/unit_test.c -c -W -Wall -Werror -Isrc -I. -O2 -DMG_ENABLE_MBEDTLS=1 -DMG_ENABLE_LINES -I/usr/local/Cellar/mbedtls/2.23.0/include -DMG_ENABLE_IPV6=1 -g -o /dev/null
|
|
||||||
|
|
||||||
arm: DEFS += -DMG_ENABLE_FILE=0 -DMG_ENABLE_MIP=1 -DMG_ARCH=MG_ARCH_NEWLIB
|
arm: DEFS += -DMG_ENABLE_FILE=0 -DMG_ENABLE_MIP=1 -DMG_ARCH=MG_ARCH_NEWLIB
|
||||||
arm: mongoose.h $(SRCS)
|
arm: mongoose.h $(SRCS)
|
||||||
$(DOCKER) mdashnet/armgcc arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb $(SRCS) $(OPTS) $(WARN) $(INCS) $(DEFS) $(TFLAGS) -o unit_test -nostartfiles --specs nosys.specs -e 0
|
$(DOCKER) mdashnet/armgcc arm-none-eabi-gcc -mcpu=cortex-m3 -mthumb $(SRCS) $(OPTS) $(WARN) $(INCS) $(DEFS) $(TFLAGS) -o unit_test -nostartfiles --specs nosys.specs -e 0
|
||||||
|
12
mip/mip.c
12
mip/mip.c
@ -161,15 +161,15 @@ struct pkt {
|
|||||||
|
|
||||||
static void q_copyin(struct queue *q, const uint8_t *buf, size_t len,
|
static void q_copyin(struct queue *q, const uint8_t *buf, size_t len,
|
||||||
size_t head) {
|
size_t head) {
|
||||||
size_t i = 0, left = q->len - head;
|
size_t left = q->len - head;
|
||||||
for (; i < len && i < left; i++) q->buf[head + i] = buf[i];
|
memcpy(&q->buf[head], buf, left < len ? left : len);
|
||||||
for (; i < len; i++) q->buf[i - left] = buf[i];
|
if (left < len) memcpy(q->buf, &buf[left], len - left);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void q_copyout(struct queue *q, uint8_t *buf, size_t len, size_t tail) {
|
static void q_copyout(struct queue *q, uint8_t *buf, size_t len, size_t tail) {
|
||||||
size_t i = 0, left = q->len - tail;
|
size_t left = q->len - tail;
|
||||||
for (; i < len && i < left; i++) buf[i] = q->buf[tail + i];
|
memcpy(buf, &q->buf[tail], left < len ? left : len);
|
||||||
for (; i < len; i++) buf[i] = q->buf[i - left];
|
if (left < len) memcpy(&buf[left], q->buf, len - left);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool q_write(struct queue *q, const void *buf, size_t len) {
|
static bool q_write(struct queue *q, const void *buf, size_t len) {
|
||||||
|
18
mongoose.c
18
mongoose.c
@ -5064,6 +5064,8 @@ void mg_tls_free(struct mg_connection *c) {
|
|||||||
bool mg_sock_would_block(void);
|
bool mg_sock_would_block(void);
|
||||||
bool mg_sock_conn_reset(void);
|
bool mg_sock_conn_reset(void);
|
||||||
|
|
||||||
|
#if MG_ENABLE_MIP
|
||||||
|
#else
|
||||||
static int mg_net_send(void *ctx, const unsigned char *buf, size_t len) {
|
static int mg_net_send(void *ctx, const unsigned char *buf, size_t len) {
|
||||||
struct mg_connection *c = (struct mg_connection *) ctx;
|
struct mg_connection *c = (struct mg_connection *) ctx;
|
||||||
int fd = (int) (size_t) c->fd;
|
int fd = (int) (size_t) c->fd;
|
||||||
@ -5089,11 +5091,15 @@ static int mg_net_recv(void *ctx, unsigned char *buf, size_t len) {
|
|||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void mg_tls_handshake(struct mg_connection *c) {
|
void mg_tls_handshake(struct mg_connection *c) {
|
||||||
struct mg_tls *tls = (struct mg_tls *) c->tls;
|
struct mg_tls *tls = (struct mg_tls *) c->tls;
|
||||||
int rc;
|
int rc;
|
||||||
|
#if MG_ENABLE_MIP
|
||||||
|
#else
|
||||||
mbedtls_ssl_set_bio(&tls->ssl, c, mg_net_send, mg_net_recv, 0);
|
mbedtls_ssl_set_bio(&tls->ssl, c, mg_net_send, mg_net_recv, 0);
|
||||||
|
#endif
|
||||||
rc = mbedtls_ssl_handshake(&tls->ssl);
|
rc = mbedtls_ssl_handshake(&tls->ssl);
|
||||||
if (rc == 0) { // Success
|
if (rc == 0) { // Success
|
||||||
MG_DEBUG(("%lu success", c->id));
|
MG_DEBUG(("%lu success", c->id));
|
||||||
@ -6444,15 +6450,15 @@ struct pkt {
|
|||||||
|
|
||||||
static void q_copyin(struct queue *q, const uint8_t *buf, size_t len,
|
static void q_copyin(struct queue *q, const uint8_t *buf, size_t len,
|
||||||
size_t head) {
|
size_t head) {
|
||||||
size_t i = 0, left = q->len - head;
|
size_t left = q->len - head;
|
||||||
for (; i < len && i < left; i++) q->buf[head + i] = buf[i];
|
memcpy(&q->buf[head], buf, left < len ? left : len);
|
||||||
for (; i < len; i++) q->buf[i - left] = buf[i];
|
if (left < len) memcpy(q->buf, &buf[left], len - left);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void q_copyout(struct queue *q, uint8_t *buf, size_t len, size_t tail) {
|
static void q_copyout(struct queue *q, uint8_t *buf, size_t len, size_t tail) {
|
||||||
size_t i = 0, left = q->len - tail;
|
size_t left = q->len - tail;
|
||||||
for (; i < len && i < left; i++) buf[i] = q->buf[tail + i];
|
memcpy(buf, &q->buf[tail], left < len ? left : len);
|
||||||
for (; i < len; i++) buf[i] = q->buf[i - left];
|
if (left < len) memcpy(&buf[left], q->buf, len - left);
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool q_write(struct queue *q, const void *buf, size_t len) {
|
static bool q_write(struct queue *q, const void *buf, size_t len) {
|
||||||
|
@ -27,6 +27,8 @@ void mg_tls_free(struct mg_connection *c) {
|
|||||||
bool mg_sock_would_block(void);
|
bool mg_sock_would_block(void);
|
||||||
bool mg_sock_conn_reset(void);
|
bool mg_sock_conn_reset(void);
|
||||||
|
|
||||||
|
#if MG_ENABLE_MIP
|
||||||
|
#else
|
||||||
static int mg_net_send(void *ctx, const unsigned char *buf, size_t len) {
|
static int mg_net_send(void *ctx, const unsigned char *buf, size_t len) {
|
||||||
struct mg_connection *c = (struct mg_connection *) ctx;
|
struct mg_connection *c = (struct mg_connection *) ctx;
|
||||||
int fd = (int) (size_t) c->fd;
|
int fd = (int) (size_t) c->fd;
|
||||||
@ -52,11 +54,15 @@ static int mg_net_recv(void *ctx, unsigned char *buf, size_t len) {
|
|||||||
}
|
}
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
void mg_tls_handshake(struct mg_connection *c) {
|
void mg_tls_handshake(struct mg_connection *c) {
|
||||||
struct mg_tls *tls = (struct mg_tls *) c->tls;
|
struct mg_tls *tls = (struct mg_tls *) c->tls;
|
||||||
int rc;
|
int rc;
|
||||||
|
#if MG_ENABLE_MIP
|
||||||
|
#else
|
||||||
mbedtls_ssl_set_bio(&tls->ssl, c, mg_net_send, mg_net_recv, 0);
|
mbedtls_ssl_set_bio(&tls->ssl, c, mg_net_send, mg_net_recv, 0);
|
||||||
|
#endif
|
||||||
rc = mbedtls_ssl_handshake(&tls->ssl);
|
rc = mbedtls_ssl_handshake(&tls->ssl);
|
||||||
if (rc == 0) { // Success
|
if (rc == 0) { // Success
|
||||||
MG_DEBUG(("%lu success", c->id));
|
MG_DEBUG(("%lu success", c->id));
|
||||||
|
33
test/mip_test.c
Normal file
33
test/mip_test.c
Normal file
@ -0,0 +1,33 @@
|
|||||||
|
#include <assert.h>
|
||||||
|
#include "mongoose.c"
|
||||||
|
|
||||||
|
static void test_queue(void) {
|
||||||
|
uint8_t buf[sizeof(size_t) + 5];
|
||||||
|
uint16_t val = 1234;
|
||||||
|
struct queue q = {buf, sizeof(buf), 0, 0};
|
||||||
|
|
||||||
|
// Write to an empty queue, and read back
|
||||||
|
assert(q_avail(&q) == 0);
|
||||||
|
assert(q_write(&q, &val, sizeof(val)) == true);
|
||||||
|
assert(q_avail(&q) == sizeof(val));
|
||||||
|
assert(q.head > q.tail);
|
||||||
|
val = 0;
|
||||||
|
assert(q_read(&q, &val) == sizeof(val));
|
||||||
|
assert(val == 1234);
|
||||||
|
assert(q_avail(&q) == 0);
|
||||||
|
|
||||||
|
// Second write - wrap over the buffer boundary
|
||||||
|
assert(q_write(&q, &val, sizeof(val)) == true);
|
||||||
|
assert(q_avail(&q) == sizeof(val));
|
||||||
|
assert(q.head < q.tail);
|
||||||
|
val = 0;
|
||||||
|
assert(q_read(&q, &val) == sizeof(val));
|
||||||
|
assert(val == 1234);
|
||||||
|
assert(q_avail(&q) == 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(void) {
|
||||||
|
test_queue();
|
||||||
|
printf("SUCCESS\n");
|
||||||
|
return 0;
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user