mirror of
https://github.com/ossrs/srs.git
synced 2025-03-09 15:49:59 +00:00
Merge ST, support utest and coverage by gtest.
This commit is contained in:
parent
3bb1b673c5
commit
7d12c3641a
11 changed files with 444 additions and 3 deletions
24
trunk/3rdparty/st-srs/.circleci/config.yml
vendored
Normal file
24
trunk/3rdparty/st-srs/.circleci/config.yml
vendored
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
version: 2
|
||||||
|
jobs:
|
||||||
|
build:
|
||||||
|
docker:
|
||||||
|
- image: ossrs/srs:dev
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run: |
|
||||||
|
make linux-debug
|
||||||
|
test:
|
||||||
|
docker:
|
||||||
|
- image: ossrs/srs:dev
|
||||||
|
steps:
|
||||||
|
- checkout
|
||||||
|
- run: |
|
||||||
|
ln -sf /usr/local/gtest utest/gtest &&
|
||||||
|
make linux-debug-gcov &&
|
||||||
|
./obj/st_utest && bash auto/codecov.sh
|
||||||
|
workflows:
|
||||||
|
version: 2
|
||||||
|
build_and_test:
|
||||||
|
jobs:
|
||||||
|
- build
|
||||||
|
- test
|
8
trunk/3rdparty/st-srs/.gitignore
vendored
8
trunk/3rdparty/st-srs/.gitignore
vendored
|
@ -2,3 +2,11 @@ DARWIN_*_DBG
|
||||||
LINUX_*_DBG
|
LINUX_*_DBG
|
||||||
obj
|
obj
|
||||||
st.pc
|
st.pc
|
||||||
|
.idea
|
||||||
|
|
||||||
|
gtest*
|
||||||
|
googletest-*
|
||||||
|
*.gcda
|
||||||
|
*.gcno
|
||||||
|
coverage
|
||||||
|
codecov
|
||||||
|
|
32
trunk/3rdparty/st-srs/Makefile
vendored
32
trunk/3rdparty/st-srs/Makefile
vendored
|
@ -98,6 +98,9 @@ TARGETS = aix-debug aix-optimized \
|
||||||
solaris-debug solaris-optimized \
|
solaris-debug solaris-optimized \
|
||||||
solaris-64-debug solaris-64-optimized
|
solaris-64-debug solaris-64-optimized
|
||||||
|
|
||||||
|
UTEST_TARGETS = darwin-debug-utest linux-debug-utest \
|
||||||
|
darwin-debug-gcov linux-debug-gcov
|
||||||
|
|
||||||
#
|
#
|
||||||
# Platform specifics
|
# Platform specifics
|
||||||
#
|
#
|
||||||
|
@ -282,12 +285,21 @@ endif
|
||||||
#
|
#
|
||||||
# make EXTRA_CFLAGS=-UMD_HAVE_EPOLL <target>
|
# make EXTRA_CFLAGS=-UMD_HAVE_EPOLL <target>
|
||||||
#
|
#
|
||||||
|
# or to enable sendmmsg(2) support:
|
||||||
|
#
|
||||||
|
# make EXTRA_CFLAGS="-DMD_HAVE_SENDMMSG -D_GNU_SOURCE"
|
||||||
|
#
|
||||||
# or to enable stats for ST:
|
# or to enable stats for ST:
|
||||||
#
|
#
|
||||||
# make EXTRA_CFLAGS=-DDEBUG_STATS
|
# make EXTRA_CFLAGS=-DDEBUG_STATS
|
||||||
|
#
|
||||||
|
# or enable the coverage for utest:
|
||||||
|
# make UTEST_FLAGS="-fprofile-arcs -ftest-coverage"
|
||||||
|
#
|
||||||
##########################
|
##########################
|
||||||
|
|
||||||
CFLAGS += $(DEFINES) $(OTHER_FLAGS) $(EXTRA_CFLAGS)
|
CFLAGS += $(DEFINES) $(OTHER_FLAGS) $(EXTRA_CFLAGS)
|
||||||
|
CFLAGS += $(UTEST_FLAGS)
|
||||||
|
|
||||||
OBJS = $(TARGETDIR)/sched.o \
|
OBJS = $(TARGETDIR)/sched.o \
|
||||||
$(TARGETDIR)/stk.o \
|
$(TARGETDIR)/stk.o \
|
||||||
|
@ -347,6 +359,8 @@ unknown:
|
||||||
@echo
|
@echo
|
||||||
@for target in $(TARGETS); do echo $$target; done
|
@for target in $(TARGETS); do echo $$target; done
|
||||||
@echo
|
@echo
|
||||||
|
@for target in $(UTEST_TARGETS); do echo $$target; done
|
||||||
|
@echo
|
||||||
|
|
||||||
st.pc: st.pc.in
|
st.pc: st.pc.in
|
||||||
sed "s/@VERSION@/${VERSION}/g" < $< > $@
|
sed "s/@VERSION@/${VERSION}/g" < $< > $@
|
||||||
|
@ -479,5 +493,23 @@ solaris-64-debug:
|
||||||
solaris-64-optimized:
|
solaris-64-optimized:
|
||||||
$(MAKE) OS="SOLARIS_64" BUILD="OPT"
|
$(MAKE) OS="SOLARIS_64" BUILD="OPT"
|
||||||
|
|
||||||
|
darwin-debug-utest:
|
||||||
|
@echo "Build utest for state-threads"
|
||||||
|
$(MAKE) OS="DARWIN" BUILD="DBG"
|
||||||
|
cd utest && $(MAKE)
|
||||||
|
linux-debug-utest:
|
||||||
|
@echo "Build utest for state-threads"
|
||||||
|
$(MAKE) OS="LINUX" BUILD="DBG"
|
||||||
|
cd utest && $(MAKE)
|
||||||
|
|
||||||
|
darwin-debug-gcov:
|
||||||
|
@echo "Build utest with gcov for state-threads"
|
||||||
|
$(MAKE) OS="DARWIN" BUILD="DBG" UTEST_FLAGS="-fprofile-arcs -ftest-coverage" STATIC_ONLY=yes
|
||||||
|
cd utest && $(MAKE) UTEST_FLAGS="-fprofile-arcs -ftest-coverage"
|
||||||
|
linux-debug-gcov:
|
||||||
|
@echo "Build utest with gcov for state-threads"
|
||||||
|
$(MAKE) OS="LINUX" BUILD="DBG" UTEST_FLAGS="-fprofile-arcs -ftest-coverage" STATIC_ONLY=yes
|
||||||
|
cd utest && $(MAKE) UTEST_FLAGS="-fprofile-arcs -ftest-coverage"
|
||||||
|
|
||||||
##########################
|
##########################
|
||||||
|
|
||||||
|
|
52
trunk/3rdparty/st-srs/README.md
vendored
52
trunk/3rdparty/st-srs/README.md
vendored
|
@ -1,6 +1,8 @@
|
||||||
# state-threads
|
# state-threads
|
||||||
|
|
||||||

|

|
||||||
|
[](https://circleci.com/gh/ossrs/state-threads/tree/srs)
|
||||||
|
[](https://codecov.io/gh/ossrs/state-threads/branch/srs)
|
||||||
[](https://github.com/ossrs/srs/wiki/v1_CN_Contact#wechat)
|
[](https://github.com/ossrs/srs/wiki/v1_CN_Contact#wechat)
|
||||||
|
|
||||||
Fork from http://sourceforge.net/projects/state-threads, patched for [SRS](https://github.com/ossrs/srs/tree/2.0release).
|
Fork from http://sourceforge.net/projects/state-threads, patched for [SRS](https://github.com/ossrs/srs/tree/2.0release).
|
||||||
|
@ -14,8 +16,8 @@ For original ST without any changes, checkout the [ST master branch](https://git
|
||||||
Get code:
|
Get code:
|
||||||
|
|
||||||
```
|
```
|
||||||
git clone https://github.com/ossrs/state-threads.git st-1.9 &&
|
git clone https://github.com/ossrs/state-threads.git &&
|
||||||
git checkout -b srs origin/srs
|
cd state-threads && git checkout srs
|
||||||
```
|
```
|
||||||
|
|
||||||
For Linux:
|
For Linux:
|
||||||
|
@ -66,9 +68,10 @@ The branch [srs](https://github.com/ossrs/state-threads/tree/srs) will be patche
|
||||||
- [x] Support macro `MD_ST_NO_ASM` to disable ASM, [#8](https://github.com/ossrs/state-threads/issues/8).
|
- [x] Support macro `MD_ST_NO_ASM` to disable ASM, [#8](https://github.com/ossrs/state-threads/issues/8).
|
||||||
- [x] Merge patch [srs#1282](https://github.com/ossrs/srs/issues/1282#issuecomment-445539513) to support aarch64, [#9](https://github.com/ossrs/state-threads/issues/9).
|
- [x] Merge patch [srs#1282](https://github.com/ossrs/srs/issues/1282#issuecomment-445539513) to support aarch64, [#9](https://github.com/ossrs/state-threads/issues/9).
|
||||||
- [x] Support OSX for Apple Darwin, macOS, [#11](https://github.com/ossrs/state-threads/issues/11).
|
- [x] Support OSX for Apple Darwin, macOS, [#11](https://github.com/ossrs/state-threads/issues/11).
|
||||||
- [ ] Support sendmmsg for UDP, [#12](https://github.com/ossrs/state-threads/issues/12).
|
- [x] Support sendmmsg for UDP, [#12](https://github.com/ossrs/state-threads/issues/12).
|
||||||
- [x] Refine performance for sleep or epoll_wait(0), [#17](https://github.com/ossrs/state-threads/issues/17).
|
- [x] Refine performance for sleep or epoll_wait(0), [#17](https://github.com/ossrs/state-threads/issues/17).
|
||||||
- [ ] Improve the performance of timer. [9fe8cfe5b](https://github.com/ossrs/state-threads/commit/9fe8cfe5b1c9741a2e671a46215184f267fba400), [7879c2b](https://github.com/ossrs/state-threads/commit/7879c2b), [387cddb](https://github.com/ossrs/state-threads/commit/387cddb)
|
- [ ] Improve the performance of timer. [9fe8cfe5b](https://github.com/ossrs/state-threads/commit/9fe8cfe5b1c9741a2e671a46215184f267fba400), [7879c2b](https://github.com/ossrs/state-threads/commit/7879c2b), [387cddb](https://github.com/ossrs/state-threads/commit/387cddb)
|
||||||
|
- [x] Support utest by gtest and coverage by gcov/gocvr.
|
||||||
|
|
||||||
## GDB Tools
|
## GDB Tools
|
||||||
|
|
||||||
|
@ -88,6 +91,49 @@ Important cli options:
|
||||||
1. `--track-origins=<yes|no> [default: no]`, Controls whether Memcheck tracks the origin of uninitialised values. By default, it does not, which means that although it can tell you that an uninitialised value is being used in a dangerous way, it cannot tell you where the uninitialised value came from. This often makes it difficult to track down the root problem.
|
1. `--track-origins=<yes|no> [default: no]`, Controls whether Memcheck tracks the origin of uninitialised values. By default, it does not, which means that although it can tell you that an uninitialised value is being used in a dangerous way, it cannot tell you where the uninitialised value came from. This often makes it difficult to track down the root problem.
|
||||||
1. `--show-reachable=<yes|no> , --show-possibly-lost=<yes|no>`, to show the using memory.
|
1. `--show-reachable=<yes|no> , --show-possibly-lost=<yes|no>`, to show the using memory.
|
||||||
|
|
||||||
|
## UTest and Coverage
|
||||||
|
|
||||||
|
First of all, download [google test](https://github.com/google/googletest/releases/tag/release-1.6.0) to `utest/gtest`, check by:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ls -lh utest/gtest/include/gtest/gtest.h >/dev/null && echo yes
|
||||||
|
```
|
||||||
|
|
||||||
|
To make ST with utest and run it:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
make linux-debug-gcov && ./obj/st_utest
|
||||||
|
```
|
||||||
|
|
||||||
|
> For macOS: `make darwin-debug-gcov && ./obj/st_utest`
|
||||||
|
|
||||||
|
> Run utest without coverage: `make darwin-debug-utest && ./obj/st_utest`
|
||||||
|
|
||||||
|
Then, install [gcovr](https://gcovr.com/en/stable/guide.html) for coverage:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
yum install -y python2-pip &&
|
||||||
|
pip install lxml && pip install gcovr
|
||||||
|
```
|
||||||
|
|
||||||
|
> For macOS: `pip3 install gcovr`
|
||||||
|
|
||||||
|
Finally, run test and get the report
|
||||||
|
|
||||||
|
```bash
|
||||||
|
mkdir -p coverage &&
|
||||||
|
gcovr -r . -e LINUX -e DARWIN -e examples --html --html-details -o coverage/st.html &&
|
||||||
|
open coverage/st.html
|
||||||
|
```
|
||||||
|
|
||||||
|
> Note: We ignore `LINUX*` and `DARWIN*` which is `obj` actually.
|
||||||
|
|
||||||
|
Or just run locally:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
bash auto/coverage.sh
|
||||||
|
```
|
||||||
|
|
||||||
## Docs & Analysis
|
## Docs & Analysis
|
||||||
|
|
||||||
* Introduction: http://ossrs.github.io/state-threads/docs/st.html
|
* Introduction: http://ossrs.github.io/state-threads/docs/st.html
|
||||||
|
|
52
trunk/3rdparty/st-srs/auto/codecov.sh
vendored
Executable file
52
trunk/3rdparty/st-srs/auto/codecov.sh
vendored
Executable file
|
@ -0,0 +1,52 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# In .circleci/config.yml, generate *.gcno with
|
||||||
|
# ./configure --gcov --without-research --without-librtmp && make
|
||||||
|
# and generate *.gcda by
|
||||||
|
# ./objs/srs_utest
|
||||||
|
|
||||||
|
# Workdir is objs/cover.
|
||||||
|
workdir=`pwd`/codecov && rm -rf $workdir
|
||||||
|
|
||||||
|
# Tool git is required to map the right path.
|
||||||
|
git --version >/dev/null 2>&1
|
||||||
|
ret=$?; if [[ $ret -ne 0 ]]; then echo "Tool git is required, ret=$ret"; exit $ret; fi
|
||||||
|
|
||||||
|
# Create trunk under workdir.
|
||||||
|
mkdir -p $workdir && cd $workdir
|
||||||
|
ret=$?; if [[ $ret -ne 0 ]]; then echo "Enter workdir failed, ret=$ret"; exit $ret; fi
|
||||||
|
|
||||||
|
# Collect all *.gcno and *.gcda to objs/cover.
|
||||||
|
cd $workdir && for file in $(cd .. && ls *.c); do
|
||||||
|
cp ../$file $file && echo "Copy $file" &&
|
||||||
|
if [[ -f ../obj/${file%.*}.gcno ]]; then
|
||||||
|
cp ../obj/${file%.*}.* .
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
ret=$?; if [[ $ret -ne 0 ]]; then echo "Collect *.gcno and *.gcda failed, ret=$ret"; exit $ret; fi
|
||||||
|
|
||||||
|
# Generate *.gcov for coverage.
|
||||||
|
cd $workdir &&
|
||||||
|
for file in $(ls *.c); do
|
||||||
|
gcov $file -o `dirname $file`
|
||||||
|
ret=$?; if [[ $ret -ne 0 ]]; then echo "Collect $file failed, ret=$ret"; exit $ret; fi
|
||||||
|
done
|
||||||
|
|
||||||
|
# Filter the gcov files, remove utest or gtest.
|
||||||
|
cd $workdir &&
|
||||||
|
rm -f *gtest*.gcov *utest*.gcov
|
||||||
|
ret=$?; if [[ $ret -ne 0 ]]; then echo "Cook gcov files failed, ret=$ret"; exit $ret; fi
|
||||||
|
|
||||||
|
# Upload report with *.gcov
|
||||||
|
# Remark: The file codecov.yml is not neccessary. It literally depends on git.
|
||||||
|
# Note: The right path is like:
|
||||||
|
# https://codecov.io/gh/ossrs/srs/src/3.0release/trunk/src/protocol/srs_rtmp_stack.cpp
|
||||||
|
# https://codecov.io/gh/ossrs/srs/src/20fbb4466fdc8ba5d810b8570df6004063212838/trunk/src/protocol/srs_rtmp_stack.cpp
|
||||||
|
# Remark: It takes a few minutes to sync with github, so it might not available when CircleCI is done.
|
||||||
|
# https://circleci.com/gh/ossrs/srs/tree/3.0release
|
||||||
|
#
|
||||||
|
# Note: Use '-X gcov' to avoid generate the gcov files again.
|
||||||
|
cd $workdir &&
|
||||||
|
export CODECOV_TOKEN="0d616496-f781-4e7c-b285-d1f70a1cdf24" &&
|
||||||
|
bash <(curl -s https://codecov.io/bash) -X gcov &&
|
||||||
|
echo "Done" && exit 0
|
39
trunk/3rdparty/st-srs/auto/coverage.sh
vendored
Executable file
39
trunk/3rdparty/st-srs/auto/coverage.sh
vendored
Executable file
|
@ -0,0 +1,39 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
if [[ ! -f utest/gtest/include/gtest/gtest.h ]]; then
|
||||||
|
(
|
||||||
|
cd utest && rm -rf gtest &&
|
||||||
|
curl https://github.com/google/googletest/archive/release-1.6.0.tar.gz -L -o googletest-release-1.6.0.tar.gz &&
|
||||||
|
tar xf googletest-release-1.6.0.tar.gz &&
|
||||||
|
ln -sf googletest-release-1.6.0 gtest &&
|
||||||
|
echo "Setup gtest ok"
|
||||||
|
)
|
||||||
|
fi
|
||||||
|
if [[ ! -f utest/gtest/include/gtest/gtest.h ]]; then
|
||||||
|
echo "No utest/gtest, please download from https://github.com/google/googletest/releases/tag/release-1.6.0"
|
||||||
|
exit -1
|
||||||
|
else
|
||||||
|
echo "Check utest/gtest ok"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ $(gcovr --version >/dev/null && echo yes) != yes ]]; then
|
||||||
|
echo "Please install gcovr: https://github.com/ossrs/state-threads/tree/srs#utest-and-coverage"
|
||||||
|
exit -1
|
||||||
|
fi
|
||||||
|
|
||||||
|
IS_LINUX=yes
|
||||||
|
uname -s|grep Darwin >/dev/null && IS_DARWIN=yes && IS_LINUX=no
|
||||||
|
echo "IS_LINUX: $IS_LINUX, IS_DARWIN: $IS_DARWIN"
|
||||||
|
|
||||||
|
echo "Build and run utest"
|
||||||
|
if [[ $IS_DARWIN == yes ]]; then
|
||||||
|
make clean && make darwin-debug-gcov && ./obj/st_utest
|
||||||
|
else
|
||||||
|
make clean && make linux-debug-gcov && ./obj/st_utest
|
||||||
|
fi
|
||||||
|
|
||||||
|
echo "Generating coverage"
|
||||||
|
mkdir -p coverage &&
|
||||||
|
gcovr -r . -e LINUX -e DARWIN -e examples --html --html-details -o coverage/st.html &&
|
||||||
|
echo "Coverage report at coverage/st.html" &&
|
||||||
|
open coverage/st.html
|
65
trunk/3rdparty/st-srs/io.c
vendored
65
trunk/3rdparty/st-srs/io.c
vendored
|
@ -68,6 +68,8 @@ unsigned long long _st_stat_recvmsg = 0;
|
||||||
unsigned long long _st_stat_recvmsg_eagain = 0;
|
unsigned long long _st_stat_recvmsg_eagain = 0;
|
||||||
unsigned long long _st_stat_sendmsg = 0;
|
unsigned long long _st_stat_sendmsg = 0;
|
||||||
unsigned long long _st_stat_sendmsg_eagain = 0;
|
unsigned long long _st_stat_sendmsg_eagain = 0;
|
||||||
|
unsigned long long _st_stat_sendmmsg = 0;
|
||||||
|
unsigned long long _st_stat_sendmmsg_eagain = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if EAGAIN != EWOULDBLOCK
|
#if EAGAIN != EWOULDBLOCK
|
||||||
|
@ -831,6 +833,69 @@ int st_sendmsg(_st_netfd_t *fd, const struct msghdr *msg, int flags, st_utime_t
|
||||||
return n;
|
return n;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int st_sendmmsg(st_netfd_t fd, struct st_mmsghdr *msgvec, unsigned int vlen, int flags, st_utime_t timeout)
|
||||||
|
{
|
||||||
|
#if defined(MD_HAVE_SENDMMSG) && defined(_GNU_SOURCE)
|
||||||
|
int n;
|
||||||
|
int left;
|
||||||
|
struct mmsghdr *p;
|
||||||
|
|
||||||
|
#if defined(DEBUG) && defined(DEBUG_STATS)
|
||||||
|
++_st_stat_sendmmsg;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
left = (int)vlen;
|
||||||
|
while (left > 0) {
|
||||||
|
p = (struct mmsghdr*)msgvec + (vlen - left);
|
||||||
|
|
||||||
|
if ((n = sendmmsg(fd->osfd, p, left, flags)) < 0) {
|
||||||
|
if (errno == EINTR)
|
||||||
|
continue;
|
||||||
|
if (!_IO_NOT_READY_ERROR)
|
||||||
|
break;
|
||||||
|
|
||||||
|
#if defined(DEBUG) && defined(DEBUG_STATS)
|
||||||
|
++_st_stat_sendmmsg_eagain;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Wait until the socket becomes writable */
|
||||||
|
if (st_netfd_poll(fd, POLLOUT, timeout) < 0)
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
left -= n;
|
||||||
|
}
|
||||||
|
|
||||||
|
// An error is returned only if no datagrams could be sent.
|
||||||
|
if (left == (int)vlen) {
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
return (int)vlen - left;
|
||||||
|
#else
|
||||||
|
struct st_mmsghdr *p;
|
||||||
|
int i, n;
|
||||||
|
|
||||||
|
// @see http://man7.org/linux/man-pages/man2/sendmmsg.2.html
|
||||||
|
for (i = 0; i < (int)vlen; ++i) {
|
||||||
|
p = msgvec + i;
|
||||||
|
n = st_sendmsg(fd, &p->msg_hdr, flags, timeout);
|
||||||
|
if (n < 0) {
|
||||||
|
// An error is returned only if no datagrams could be sent.
|
||||||
|
if (i == 0) {
|
||||||
|
return n;
|
||||||
|
}
|
||||||
|
return i + 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
p->msg_len = n;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the number of messages sent from msgvec; if this is less than vlen, the caller can retry with a
|
||||||
|
// further sendmmsg() call to send the remaining messages.
|
||||||
|
return vlen;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* To open FIFOs or other special files.
|
* To open FIFOs or other special files.
|
||||||
|
|
8
trunk/3rdparty/st-srs/public.h
vendored
8
trunk/3rdparty/st-srs/public.h
vendored
|
@ -153,6 +153,14 @@ extern int st_sendto(st_netfd_t fd, const void *msg, int len, const struct socka
|
||||||
extern int st_recvmsg(st_netfd_t fd, struct msghdr *msg, int flags, st_utime_t timeout);
|
extern int st_recvmsg(st_netfd_t fd, struct msghdr *msg, int flags, st_utime_t timeout);
|
||||||
extern int st_sendmsg(st_netfd_t fd, const struct msghdr *msg, int flags, st_utime_t timeout);
|
extern int st_sendmsg(st_netfd_t fd, const struct msghdr *msg, int flags, st_utime_t timeout);
|
||||||
|
|
||||||
|
// @see http://man7.org/linux/man-pages/man2/sendmmsg.2.html
|
||||||
|
#include <sys/socket.h>
|
||||||
|
struct st_mmsghdr {
|
||||||
|
struct msghdr msg_hdr; /* Message header */
|
||||||
|
unsigned int msg_len; /* Number of bytes transmitted */
|
||||||
|
};
|
||||||
|
extern int st_sendmmsg(st_netfd_t fd, struct st_mmsghdr *msgvec, unsigned int vlen, int flags, st_utime_t timeout);
|
||||||
|
|
||||||
extern st_netfd_t st_open(const char *path, int oflags, mode_t mode);
|
extern st_netfd_t st_open(const char *path, int oflags, mode_t mode);
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|
82
trunk/3rdparty/st-srs/utest/Makefile
vendored
Normal file
82
trunk/3rdparty/st-srs/utest/Makefile
vendored
Normal file
|
@ -0,0 +1,82 @@
|
||||||
|
# user must run make the objs/utest dir
|
||||||
|
# at the same dir of Makefile.
|
||||||
|
|
||||||
|
# A sample Makefile for building Google Test and using it in user
|
||||||
|
# tests. Please tweak it to suit your environment and project. You
|
||||||
|
# may want to move it to your project's root directory.
|
||||||
|
#
|
||||||
|
# SYNOPSIS:
|
||||||
|
#
|
||||||
|
# make [all] - makes everything.
|
||||||
|
# make TARGET - makes the given target.
|
||||||
|
# make clean - removes all files generated by make.
|
||||||
|
|
||||||
|
# Please tweak the following variable definitions as needed by your
|
||||||
|
# project, except GTEST_HEADERS, which you can use in your own targets
|
||||||
|
# but shouldn't modify.
|
||||||
|
|
||||||
|
# Points to the root of Google Test, relative to where this file is.
|
||||||
|
# Remember to tweak this if you move this file.
|
||||||
|
GTEST_DIR = ./gtest
|
||||||
|
|
||||||
|
# Flags passed to the preprocessor.
|
||||||
|
CPPFLAGS += -I$(GTEST_DIR)/include
|
||||||
|
|
||||||
|
# Flags passed to the C++ compiler.
|
||||||
|
CXXFLAGS += -g -O0 -std=c++11
|
||||||
|
CXXFLAGS += -Wall -Wno-deprecated-declarations -Wno-unused-private-field -Wno-unused-command-line-argument
|
||||||
|
CXXFLAGS += -DGTEST_USE_OWN_TR1_TUPLE=1
|
||||||
|
|
||||||
|
# All tests produced by this Makefile. Remember to add new tests you
|
||||||
|
# created to the list.
|
||||||
|
TESTS = ../obj/st_utest
|
||||||
|
|
||||||
|
# All Google Test headers. Usually you shouldn't change this
|
||||||
|
# definition.
|
||||||
|
GTEST_HEADERS = $(GTEST_DIR)/include/gtest/*.h \
|
||||||
|
$(GTEST_DIR)/include/gtest/internal/*.h
|
||||||
|
|
||||||
|
# House-keeping build targets.
|
||||||
|
|
||||||
|
all : $(TESTS)
|
||||||
|
|
||||||
|
clean :
|
||||||
|
rm -f $(TESTS) gtest.a gtest_main.a *.o *.gcno *.gcda
|
||||||
|
|
||||||
|
# Usually you shouldn't tweak such internal variables, indicated by a
|
||||||
|
# trailing _.
|
||||||
|
GTEST_SRCS_ = $(GTEST_DIR)/src/*.cc $(GTEST_DIR)/src/*.h $(GTEST_HEADERS)
|
||||||
|
|
||||||
|
# For simplicity and to avoid depending on Google Test's
|
||||||
|
# implementation details, the dependencies specified below are
|
||||||
|
# conservative and not optimized. This is fine as Google Test
|
||||||
|
# compiles fast and for ordinary users its source rarely changes.
|
||||||
|
../obj/gtest-all.o : $(GTEST_SRCS_)
|
||||||
|
$(CXX) $(CPPFLAGS) -I$(GTEST_DIR) $(CXXFLAGS) -c \
|
||||||
|
$(GTEST_DIR)/src/gtest-all.cc -o $@
|
||||||
|
|
||||||
|
../obj/gtest.a : ../obj/gtest-all.o
|
||||||
|
$(AR) $(ARFLAGS) $@ $^
|
||||||
|
|
||||||
|
#####################################################################################
|
||||||
|
#####################################################################################
|
||||||
|
# ST(state-threads) utest section
|
||||||
|
#####################################################################################
|
||||||
|
#####################################################################################
|
||||||
|
|
||||||
|
# Includes, the include dir.
|
||||||
|
ST_UTEST_INC = -I../obj -I./
|
||||||
|
|
||||||
|
# Depends, the depends objects
|
||||||
|
ST_UTEST_DEPS = ../obj/libst.a
|
||||||
|
|
||||||
|
# Depends, utest header files
|
||||||
|
UTEST_DEPS = st_utest.hpp
|
||||||
|
|
||||||
|
# Objects, build each object of utest
|
||||||
|
../obj/st_utest.o : st_utest.cpp $(ST_UTEST_DEPS) $(UTEST_DEPS)
|
||||||
|
$(CXX) $(CPPFLAGS) $(CXXFLAGS) $(UTEST_FLAGS) $(ST_UTEST_INC) -c st_utest.cpp -o $@
|
||||||
|
|
||||||
|
# generate the utest binary
|
||||||
|
../obj/st_utest : ../obj/st_utest.o ../obj/gtest.a $(ST_UTEST_DEPS)
|
||||||
|
$(CXX) -o $@ $(CPPFLAGS) $(CXXFLAGS) $(UTEST_FLAGS) $^ -lpthread -ldl
|
49
trunk/3rdparty/st-srs/utest/st_utest.cpp
vendored
Normal file
49
trunk/3rdparty/st-srs/utest/st_utest.cpp
vendored
Normal file
|
@ -0,0 +1,49 @@
|
||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2021 Winlin
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <st_utest.hpp>
|
||||||
|
|
||||||
|
#include <st.h>
|
||||||
|
#include <assert.h>
|
||||||
|
|
||||||
|
// We could do something in the main of utest.
|
||||||
|
// Copy from gtest-1.6.0/src/gtest_main.cc
|
||||||
|
GTEST_API_ int main(int argc, char **argv) {
|
||||||
|
// Select the best event system available on the OS. In Linux this is
|
||||||
|
// epoll(). On BSD it will be kqueue.
|
||||||
|
assert(st_set_eventsys(ST_EVENTSYS_ALT) != -1);
|
||||||
|
assert(st_init() == 0);
|
||||||
|
|
||||||
|
testing::InitGoogleTest(&argc, argv);
|
||||||
|
return RUN_ALL_TESTS();
|
||||||
|
}
|
||||||
|
|
||||||
|
// basic test and samples.
|
||||||
|
VOID TEST(SampleTest, FastSampleInt64Test)
|
||||||
|
{
|
||||||
|
EXPECT_EQ(1, (int)sizeof(int8_t));
|
||||||
|
EXPECT_EQ(2, (int)sizeof(int16_t));
|
||||||
|
EXPECT_EQ(4, (int)sizeof(int32_t));
|
||||||
|
EXPECT_EQ(8, (int)sizeof(int64_t));
|
||||||
|
}
|
||||||
|
|
36
trunk/3rdparty/st-srs/utest/st_utest.hpp
vendored
Normal file
36
trunk/3rdparty/st-srs/utest/st_utest.hpp
vendored
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
/*
|
||||||
|
The MIT License (MIT)
|
||||||
|
|
||||||
|
Copyright (c) 2021 Winlin
|
||||||
|
|
||||||
|
Permission is hereby granted, free of charge, to any person obtaining a copy of
|
||||||
|
this software and associated documentation files (the "Software"), to deal in
|
||||||
|
the Software without restriction, including without limitation the rights to
|
||||||
|
use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
|
||||||
|
the Software, and to permit persons to whom the Software is furnished to do so,
|
||||||
|
subject to the following conditions:
|
||||||
|
|
||||||
|
The above copyright notice and this permission notice shall be included in all
|
||||||
|
copies or substantial portions of the Software.
|
||||||
|
|
||||||
|
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||||
|
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
||||||
|
FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
||||||
|
COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
||||||
|
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
||||||
|
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#ifndef ST_UTEST_PUBLIC_HPP
|
||||||
|
#define ST_UTEST_PUBLIC_HPP
|
||||||
|
|
||||||
|
// Before define the private/protected, we must include some system header files.
|
||||||
|
// Or it may fail with:
|
||||||
|
// redeclared with different access struct __xfer_bufptrs
|
||||||
|
// @see https://stackoverflow.com/questions/47839718/sstream-redeclared-with-public-access-compiler-error
|
||||||
|
#include <gtest/gtest.h>
|
||||||
|
|
||||||
|
#define VOID
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue