This is an automated email from the ASF dual-hosted git repository. zwoop pushed a commit to branch 9.0.x in repository https://gitbox.apache.org/repos/asf/trafficserver.git
commit 59b78e5c297899d3a203a448bf2ed81f1e0f2406 Author: Masaori Koshiba <[email protected]> AuthorDate: Tue Aug 20 10:11:04 2019 +0900 Convert check programs in iocore/eventsystem/ into Catch based unit tests (cherry picked from commit 39522703d7b9fdf4834b797e2d812f37f8970f71) --- .gitignore | 4 +- iocore/eventsystem/Makefile.am | 32 +++---- iocore/eventsystem/test_Buffer.cc | 64 -------------- iocore/eventsystem/test_Event.cc | 83 ------------------ iocore/eventsystem/unit_tests/test_EventSystem.cc | 101 ++++++++++++++++++++++ iocore/eventsystem/unit_tests/test_IOBuffer.cc | 72 +++++++++++++++ 6 files changed, 189 insertions(+), 167 deletions(-) diff --git a/.gitignore b/.gitignore index c683ae3..23cdc5d 100644 --- a/.gitignore +++ b/.gitignore @@ -117,8 +117,8 @@ iocore/net/quic/test_QUICType iocore/net/quic/test_QUICTypeUtil iocore/net/quic/test_QUICVersionNegotiator iocore/aio/test_AIO -iocore/eventsystem/test_Buffer -iocore/eventsystem/test_Event +iocore/eventsystem/test_IOBuffer +iocore/eventsystem/test_EventSystem iocore/eventsystem/test_MIOBufferWriter iocore/hostdb/test_RefCountCache diff --git a/iocore/eventsystem/Makefile.am b/iocore/eventsystem/Makefile.am index 369bf55..970d0ba 100644 --- a/iocore/eventsystem/Makefile.am +++ b/iocore/eventsystem/Makefile.am @@ -69,7 +69,8 @@ libinkevent_a_SOURCES = \ UnixEvent.cc \ UnixEventProcessor.cc -check_PROGRAMS = test_Buffer test_Event \ +check_PROGRAMS = test_IOBuffer \ + test_EventSystem \ test_MIOBufferWriter test_LD_FLAGS = \ @@ -85,6 +86,7 @@ test_CPP_FLAGS = \ -I$(abs_top_srcdir)/proxy/logging \ -I$(abs_top_srcdir)/mgmt \ -I$(abs_top_srcdir)/mgmt/utils \ + -I$(abs_top_srcdir)/tests/include \ @OPENSSL_INCLUDES@ test_LD_ADD = \ @@ -92,29 +94,23 @@ test_LD_ADD = \ $(top_builddir)/lib/records/librecords_p.a \ $(top_builddir)/mgmt/libmgmt_p.la \ $(top_builddir)/iocore/eventsystem/libinkevent.a \ - $(top_builddir)/src/tscore/libtscore.la $(top_builddir)/src/tscpp/util/libtscpputil.la \ + $(top_builddir)/src/tscore/libtscore.la \ + $(top_builddir)/src/tscpp/util/libtscpputil.la \ $(top_builddir)/proxy/shared/libUglyLogStubs.a \ @HWLOC_LIBS@ -test_Buffer_SOURCES = \ - test_Buffer.cc - -test_Event_SOURCES = \ - test_Event.cc - -test_Buffer_CPPFLAGS = $(test_CPP_FLAGS) -test_Event_CPPFLAGS = $(test_CPP_FLAGS) - -test_Buffer_LDFLAGS = $(test_LD_FLAGS) -test_Event_LDFLAGS = $(test_LD_FLAGS) - -test_Buffer_LDADD = $(test_LD_ADD) -test_Event_LDADD = $(test_LD_ADD) +test_EventSystem_SOURCES = unit_tests/test_EventSystem.cc +test_EventSystem_CPPFLAGS = $(test_CPP_FLAGS) +test_EventSystem_LDFLAGS = $(test_LD_FLAGS) +test_EventSystem_LDADD = $(test_LD_ADD) +test_IOBuffer_SOURCES = unit_tests/test_IOBuffer.cc +test_IOBuffer_CPPFLAGS = $(test_CPP_FLAGS) +test_IOBuffer_LDFLAGS = $(test_LD_FLAGS) +test_IOBuffer_LDADD = $(test_LD_ADD) test_MIOBufferWriter_SOURCES = unit_tests/test_MIOBufferWriter.cc - -test_MIOBufferWriter_CPPFLAGS = $(test_CPP_FLAGS) -I$(abs_top_srcdir)/tests/include +test_MIOBufferWriter_CPPFLAGS = $(test_CPP_FLAGS) test_MIOBufferWriter_LDFLAGS = $(test_LD_FLAGS) test_MIOBufferWriter_LDADD = $(test_LD_ADD) diff --git a/iocore/eventsystem/test_Buffer.cc b/iocore/eventsystem/test_Buffer.cc deleted file mode 100644 index ccef103..0000000 --- a/iocore/eventsystem/test_Buffer.cc +++ /dev/null @@ -1,64 +0,0 @@ -/** @file - - A brief file description - - @section license License - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#include "I_EventSystem.h" -#include "tscore/I_Layout.h" -#include "tscore/ink_string.h" - -#include "diags.i" - -#define TEST_TIME_SECOND 60 -#define TEST_THREADS 2 - -int -main(int /* argc ATS_UNUSED */, const char * /* argv ATS_UNUSED */ []) -{ - RecModeT mode_type = RECM_STAND_ALONE; - - Layout::create(); - init_diags("", nullptr); - RecProcessInit(mode_type); - - ink_event_system_init(EVENT_SYSTEM_MODULE_PUBLIC_VERSION); - eventProcessor.start(TEST_THREADS); - - Thread *main_thread = new EThread; - main_thread->set_specific(); - - for (unsigned i = 0; i < 100; ++i) { - MIOBuffer *b1 = new_MIOBuffer(default_large_iobuffer_size); - IOBufferReader *b1reader ATS_UNUSED = b1->alloc_reader(); - b1->fill(b1->write_avail()); - - MIOBuffer *b2 = new_MIOBuffer(default_large_iobuffer_size); - IOBufferReader *b2reader ATS_UNUSED = b2->alloc_reader(); - b2->fill(b2->write_avail()); - - // b1->write(b2reader, 2*1024); - - free_MIOBuffer(b2); - free_MIOBuffer(b1); - } - - exit(0); -} diff --git a/iocore/eventsystem/test_Event.cc b/iocore/eventsystem/test_Event.cc deleted file mode 100644 index 78c47bb..0000000 --- a/iocore/eventsystem/test_Event.cc +++ /dev/null @@ -1,83 +0,0 @@ -/** @file - - A brief file description - - @section license License - - Licensed to the Apache Software Foundation (ASF) under one - or more contributor license agreements. See the NOTICE file - distributed with this work for additional information - regarding copyright ownership. The ASF licenses this file - to you under the Apache License, Version 2.0 (the - "License"); you may not use this file except in compliance - with the License. You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. - */ - -#include "I_EventSystem.h" -#include "tscore/I_Layout.h" -#include "tscore/TSSystemState.h" - -#include "diags.i" - -#define TEST_TIME_SECOND 60 -#define TEST_THREADS 2 - -static int count; - -struct alarm_printer : public Continuation { - alarm_printer(ProxyMutex *m) : Continuation(m) { SET_HANDLER(&alarm_printer::dummy_function); } - int - dummy_function(int /* event ATS_UNUSED */, Event * /* e ATS_UNUSED */) - { - ink_atomic_increment((int *)&count, 1); - printf("Count = %d\n", count); - return 0; - } -}; -struct process_killer : public Continuation { - process_killer(ProxyMutex *m) : Continuation(m) { SET_HANDLER(&process_killer::kill_function); } - int - kill_function(int /* event ATS_UNUSED */, Event * /* e ATS_UNUSED */) - { - printf("Count is %d \n", count); - if (count <= 0) { - exit(1); - } - if (count > TEST_TIME_SECOND * TEST_THREADS) { - exit(1); - } - exit(0); - return 0; - } -}; - -int -main(int /* argc ATS_UNUSED */, const char * /* argv ATS_UNUSED */ []) -{ - RecModeT mode_type = RECM_STAND_ALONE; - count = 0; - - Layout::create(); - init_diags("", nullptr); - RecProcessInit(mode_type); - - ink_event_system_init(EVENT_SYSTEM_MODULE_PUBLIC_VERSION); - eventProcessor.start(TEST_THREADS, 1048576); // Hardcoded stacksize at 1MB - - alarm_printer *alrm = new alarm_printer(new_ProxyMutex()); - process_killer *killer = new process_killer(new_ProxyMutex()); - eventProcessor.schedule_in(killer, HRTIME_SECONDS(10)); - eventProcessor.schedule_every(alrm, HRTIME_SECONDS(1)); - while (!TSSystemState::is_event_system_shut_down()) { - sleep(1); - } - return 0; -} diff --git a/iocore/eventsystem/unit_tests/test_EventSystem.cc b/iocore/eventsystem/unit_tests/test_EventSystem.cc new file mode 100644 index 0000000..75faad2 --- /dev/null +++ b/iocore/eventsystem/unit_tests/test_EventSystem.cc @@ -0,0 +1,101 @@ +/** @file + + Catch based unit tests for EventSystem + + @section license License + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#define CATCH_CONFIG_MAIN +#include "catch.hpp" + +#include "I_EventSystem.h" +#include "tscore/I_Layout.h" +#include "tscore/TSSystemState.h" + +#include "diags.i" + +#define TEST_TIME_SECOND 60 +#define TEST_THREADS 2 + +TEST_CASE("EventSystem", "[iocore]") +{ + static int count; + + struct alarm_printer : public Continuation { + alarm_printer(ProxyMutex *m) : Continuation(m) { SET_HANDLER(&alarm_printer::dummy_function); } + + int + dummy_function(int /* event ATS_UNUSED */, Event * /* e ATS_UNUSED */) + { + ink_atomic_increment((int *)&count, 1); + + EThread *e = this_ethread(); + printf("thread=%d (%p) count = %d\n", e->id, e, count); + + return 0; + } + }; + + struct process_killer : public Continuation { + process_killer(ProxyMutex *m) : Continuation(m) { SET_HANDLER(&process_killer::kill_function); } + + int + kill_function(int /* event ATS_UNUSED */, Event * /* e ATS_UNUSED */) + { + EThread *e = this_ethread(); + printf("thread=%d (%p) count is %d\n", e->id, e, count); + + REQUIRE(count > 0); + REQUIRE(count <= TEST_TIME_SECOND * TEST_THREADS); + + TSSystemState::shut_down_event_system(); + + return 0; + } + }; + + alarm_printer *alrm = new alarm_printer(new_ProxyMutex()); + process_killer *killer = new process_killer(new_ProxyMutex()); + eventProcessor.schedule_in(killer, HRTIME_SECONDS(10)); + eventProcessor.schedule_every(alrm, HRTIME_SECONDS(1)); + + while (!TSSystemState::is_event_system_shut_down()) { + sleep(1); + } +} + +struct EventProcessorListener : Catch::TestEventListenerBase { + using TestEventListenerBase::TestEventListenerBase; + + void + testRunStarting(Catch::TestRunInfo const &testRunInfo) override + { + Layout::create(); + init_diags("", nullptr); + RecProcessInit(RECM_STAND_ALONE); + + ink_event_system_init(EVENT_SYSTEM_MODULE_PUBLIC_VERSION); + eventProcessor.start(TEST_THREADS, 1048576); // Hardcoded stacksize at 1MB + + EThread *main_thread = new EThread; + main_thread->set_specific(); + } +}; + +CATCH_REGISTER_LISTENER(EventProcessorListener); diff --git a/iocore/eventsystem/unit_tests/test_IOBuffer.cc b/iocore/eventsystem/unit_tests/test_IOBuffer.cc new file mode 100644 index 0000000..d3fd5d3 --- /dev/null +++ b/iocore/eventsystem/unit_tests/test_IOBuffer.cc @@ -0,0 +1,72 @@ +/** @file + + Catch based unit tests for IOBuffer + + @section license License + + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + */ + +#define CATCH_CONFIG_MAIN +#include "catch.hpp" + +#include "I_EventSystem.h" +#include "tscore/I_Layout.h" + +#include "diags.i" + +#define TEST_THREADS 1 + +TEST_CASE("MIOBuffer", "[iocore]") +{ + for (unsigned i = 0; i < 100; ++i) { + MIOBuffer *b1 = new_MIOBuffer(default_small_iobuffer_size); + int64_t len1 = b1->write_avail(); + IOBufferReader *b1reader = b1->alloc_reader(); + b1->fill(len1); + CHECK(b1reader->read_avail() == len1); + + MIOBuffer *b2 = new_MIOBuffer(default_large_iobuffer_size); + int64_t len2 = b1->write_avail(); + IOBufferReader *b2reader = b2->alloc_reader(); + b2->fill(len2); + CHECK(b2reader->read_avail() == len2); + + free_MIOBuffer(b2); + free_MIOBuffer(b1); + } +} + +struct EventProcessorListener : Catch::TestEventListenerBase { + using TestEventListenerBase::TestEventListenerBase; + + void + testRunStarting(Catch::TestRunInfo const &testRunInfo) override + { + Layout::create(); + init_diags("", nullptr); + RecProcessInit(RECM_STAND_ALONE); + + ink_event_system_init(EVENT_SYSTEM_MODULE_PUBLIC_VERSION); + eventProcessor.start(TEST_THREADS); + + EThread *main_thread = new EThread; + main_thread->set_specific(); + } +}; + +CATCH_REGISTER_LISTENER(EventProcessorListener);
