TS-1766: Add iocore/eventsystem tests to the build
Project: http://git-wip-us.apache.org/repos/asf/trafficserver/repo Commit: http://git-wip-us.apache.org/repos/asf/trafficserver/commit/67c7bf40 Tree: http://git-wip-us.apache.org/repos/asf/trafficserver/tree/67c7bf40 Diff: http://git-wip-us.apache.org/repos/asf/trafficserver/diff/67c7bf40 Branch: refs/heads/3.3.x Commit: 67c7bf4068ced8f1f100495b67b1720a6a3e0624 Parents: 8e94fa7 Author: James Peach <jpe...@apache.org> Authored: Wed Mar 27 12:09:42 2013 -0700 Committer: Leif Hedstrom <zw...@apache.org> Committed: Mon Apr 15 14:45:42 2013 -0600 ---------------------------------------------------------------------- iocore/eventsystem/I_IOBuffer.h | 2 +- iocore/eventsystem/Makefile.am | 32 ++++++ iocore/eventsystem/test_Buffer.cc | 43 ++++---- iocore/eventsystem/test_Event.cc | 175 ++++++++++++++++++++++++++++++++ iocore/eventsystem/test_Event.i | 174 ------------------------------- 5 files changed, 230 insertions(+), 196 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/trafficserver/blob/67c7bf40/iocore/eventsystem/I_IOBuffer.h ---------------------------------------------------------------------- diff --git a/iocore/eventsystem/I_IOBuffer.h b/iocore/eventsystem/I_IOBuffer.h index 23a2ddc..3a8ab08 100644 --- a/iocore/eventsystem/I_IOBuffer.h +++ b/iocore/eventsystem/I_IOBuffer.h @@ -793,7 +793,7 @@ public: the center of all IOCore data transfer. MIOBuffers are the data buffers used to transfer data to and from VConnections. A MIOBuffer points to a list of IOBufferBlocks which in turn point to IOBufferData - stucutres that in turn point to the actual data. MIOBuffer allows one + structures that in turn point to the actual data. MIOBuffer allows one producer and multiple consumers. The buffer fills up according the amount of data outstanding for the slowest consumer. Thus, MIOBuffer implements automatic flow control between readers of different speeds. http://git-wip-us.apache.org/repos/asf/trafficserver/blob/67c7bf40/iocore/eventsystem/Makefile.am ---------------------------------------------------------------------- diff --git a/iocore/eventsystem/Makefile.am b/iocore/eventsystem/Makefile.am index 0e002c1..59a8a24 100644 --- a/iocore/eventsystem/Makefile.am +++ b/iocore/eventsystem/Makefile.am @@ -22,6 +22,7 @@ AM_CPPFLAGS = \ -I$(top_srcdir)/lib/ts DEFS += @IOCORE_MODULARIZED_DEFS@ +TESTS = $(check_PROGRAMS) noinst_LIBRARIES = libinkevent.a @@ -67,3 +68,34 @@ libinkevent_a_SOURCES = \ Inline.cc \ Tasks.cc \ I_Tasks.h + +check_PROGRAMS = test_Buffer test_Event + +test_CXXFLAGS = \ + $(iocore_include_dirs) \ + -I$(top_builddir)/proxy \ + -I$(top_builddir)/proxy/api/ts \ + -I$(top_srcdir)/proxy/api \ + -I$(top_srcdir)/proxy \ + -I$(top_srcdir)/proxy/hdrs \ + -I$(top_srcdir)/proxy/http \ + -I$(top_srcdir)/proxy/logging \ + -I$(top_srcdir)/mgmt \ + -I$(top_srcdir)/mgmt/utils + +test_LDADD = \ + libinkevent.a \ + $(top_builddir)/lib/records/librecprocess.a \ + $(top_builddir)/mgmt/libmgmt_p.a \ + $(top_builddir)/mgmt/utils/libutils_p.a \ + $(top_builddir)/iocore/eventsystem/libinkevent.a \ + $(top_builddir)/lib/ts/libtsutil.la + +test_Buffer_SOURCES = ../../proxy/UglyLogStubs.cc test_Buffer.cc +test_Event_SOURCES = ../../proxy/UglyLogStubs.cc test_Event.cc +test_Buffer_CXXFLAGS = $(test_CXXFLAGS) +test_Event_CXXFLAGS = $(test_CXXFLAGS) + +test_Buffer_LDADD = $(test_LDADD) +test_Event_LDADD = $(test_LDADD) + http://git-wip-us.apache.org/repos/asf/trafficserver/blob/67c7bf40/iocore/eventsystem/test_Buffer.cc ---------------------------------------------------------------------- diff --git a/iocore/eventsystem/test_Buffer.cc b/iocore/eventsystem/test_Buffer.cc index e0b8f23..5638368 100644 --- a/iocore/eventsystem/test_Buffer.cc +++ b/iocore/eventsystem/test_Buffer.cc @@ -22,14 +22,18 @@ */ #include "I_EventSystem.h" +#include "I_Layout.h" #define TEST_TIME_SECOND 60 #define TEST_THREADS 2 -int count; Diags *diags; #define DIAGS_LOG_FILE "diags.log" +void syslog_thr_init(void) +{ +} + ////////////////////////////////////////////////////////////////////////////// // // void reconfigure_diags() @@ -45,7 +49,6 @@ reconfigure_diags() int i; DiagsConfigState c; - // initial value set to 0 or 1 based on command line tags c.enabled[DiagsTagType_Debug] = (diags->base_debug_tags != NULL); c.enabled[DiagsTagType_Action] = (diags->base_action_tags != NULL); @@ -54,7 +57,6 @@ reconfigure_diags() c.enabled[DiagsTagType_Action] = 1; diags->show_location = 1; - // read output routing values for (i = 0; i < DiagsLevel_Count; i++) { @@ -91,10 +93,8 @@ reconfigure_diags() } - - static void -init_diags(char *bdt, char *bat) +init_diags(const char *bdt, const char *bat) { FILE *diags_log_fp; char diags_logpath[500]; @@ -113,41 +113,42 @@ init_diags(char *bdt, char *bat) diags = NEW(new Diags(bdt, bat, diags_log_fp)); if (diags_log_fp == NULL) { - SrcLoc loc(__FILE__, __FUNCTION__, __LINE__); - - diags->print(NULL, DL_Warning, NULL, &loc, - "couldn't open diags log file '%s', " "will not log to this file", diags_logpath); + Warning("couldn't open diags log file '%s', " "will not log to this file", diags_logpath); } - diags->print(NULL, DL_Status, "STATUS", NULL, "opened %s", diags_logpath); + Status("opened %s", diags_logpath); reconfigure_diags(); } - int -main() +main(int argc, const char *argv[]) { RecModeT mode_type = RECM_STAND_ALONE; - count = 0; + + Layout::create(); + init_diags("", NULL); RecProcessInit(mode_type); ink_event_system_init(EVENT_SYSTEM_MODULE_VERSION); eventProcessor.start(TEST_THREADS); - for (int i = 0; i < 100; i++) { + for (unsigned i = 0; i < 100; ++i) { MIOBuffer *b1 = new_MIOBuffer(default_large_iobuffer_size); IOBufferReader *b1reader = b1->alloc_reader(); - b1->fill(1024 * 3); + b1->fill(b1->write_avail()); + MIOBuffer *b2 = new_MIOBuffer(default_large_iobuffer_size); IOBufferReader *b2reader = b2->alloc_reader(); - b2->fill(1024 * 3); + b2->fill(b2->write_avail()); + //b1->write(b2reader, 2*1024); + free_MIOBuffer(b2); - /* leak this */ - b1 = NULL; - if ((i % 20) == 0) - xdump_to_file(stderr); + free_MIOBuffer(b1); + + NOWARN_UNUSED(b1reader); + NOWARN_UNUSED(b2reader); } exit(0); http://git-wip-us.apache.org/repos/asf/trafficserver/blob/67c7bf40/iocore/eventsystem/test_Event.cc ---------------------------------------------------------------------- diff --git a/iocore/eventsystem/test_Event.cc b/iocore/eventsystem/test_Event.cc new file mode 100644 index 0000000..cc4b9db --- /dev/null +++ b/iocore/eventsystem/test_Event.cc @@ -0,0 +1,175 @@ +/** @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 "I_Layout.h" + +#define TEST_TIME_SECOND 60 +#define TEST_THREADS 2 + +int count; +Diags *diags; +#define DIAGS_LOG_FILE "diags.log" + +void syslog_thr_init(void) +{ +} + +////////////////////////////////////////////////////////////////////////////// +// +// void reconfigure_diags() +// +// This function extracts the current diags configuration settings from +// records.config, and rebuilds the Diags data structures. +// +////////////////////////////////////////////////////////////////////////////// + +static void +reconfigure_diags() +{ + int i; + DiagsConfigState c; + + // initial value set to 0 or 1 based on command line tags + c.enabled[DiagsTagType_Debug] = (diags->base_debug_tags != NULL); + c.enabled[DiagsTagType_Action] = (diags->base_action_tags != NULL); + + c.enabled[DiagsTagType_Debug] = 1; + c.enabled[DiagsTagType_Action] = 1; + diags->show_location = 1; + + // read output routing values + for (i = 0; i < DiagsLevel_Count; i++) { + + c.outputs[i].to_stdout = 0; + c.outputs[i].to_stderr = 1; + c.outputs[i].to_syslog = 1; + c.outputs[i].to_diagslog = 1; + } + + ////////////////////////////// + // clear out old tag tables // + ////////////////////////////// + + diags->deactivate_all(DiagsTagType_Debug); + diags->deactivate_all(DiagsTagType_Action); + + ////////////////////////////////////////////////////////////////////// + // add new tag tables + ////////////////////////////////////////////////////////////////////// + + if (diags->base_debug_tags) + diags->activate_taglist(diags->base_debug_tags, DiagsTagType_Debug); + if (diags->base_action_tags) + diags->activate_taglist(diags->base_action_tags, DiagsTagType_Action); + + //////////////////////////////////// + // change the diags config values // + //////////////////////////////////// +#if !defined(__GNUC__) && !defined(hpux) + diags->config = c; +#else + memcpy(((void *) &diags->config), ((void *) &c), sizeof(DiagsConfigState)); +#endif + +} + +static void +init_diags(const char *bdt, const char *bat) +{ + FILE *diags_log_fp; + char diags_logpath[500]; + strcpy(diags_logpath, DIAGS_LOG_FILE); + + diags_log_fp = fopen(diags_logpath, "w"); + if (diags_log_fp) { + int status; + status = setvbuf(diags_log_fp, NULL, _IOLBF, 512); + if (status != 0) { + fclose(diags_log_fp); + diags_log_fp = NULL; + } + } + + diags = NEW(new Diags(bdt, bat, diags_log_fp)); + + if (diags_log_fp == NULL) { + Warning("couldn't open diags log file '%s', " "will not log to this file", diags_logpath); + } + + Status("opened %s", diags_logpath); + reconfigure_diags(); + +} + +struct alarm_printer:public Continuation +{ + alarm_printer(ProxyMutex * m):Continuation(m) + { + SET_HANDLER(&alarm_printer::dummy_function); + } + int dummy_function(int event, Event * e) + { + 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, Event * e) + { + 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, const char *argv[]) +{ + RecModeT mode_type = RECM_STAND_ALONE; + count = 0; + + Layout::create(); + init_diags("", NULL); + RecProcessInit(mode_type); + + ink_event_system_init(EVENT_SYSTEM_MODULE_VERSION); + eventProcessor.start(TEST_THREADS); + + 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)); + this_thread()->execute(); + return 0; +} http://git-wip-us.apache.org/repos/asf/trafficserver/blob/67c7bf40/iocore/eventsystem/test_Event.i ---------------------------------------------------------------------- diff --git a/iocore/eventsystem/test_Event.i b/iocore/eventsystem/test_Event.i deleted file mode 100644 index 3370047..0000000 --- a/iocore/eventsystem/test_Event.i +++ /dev/null @@ -1,174 +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. - */ - -#define TEST_TIME_SECOND 60 -#define TEST_THREADS 2 - -int count; -Diags *diags; -#define DIAGS_LOG_FILE "diags.log" - -////////////////////////////////////////////////////////////////////////////// -// -// void reconfigure_diags() -// -// This function extracts the current diags configuration settings from -// records.config, and rebuilds the Diags data structures. -// -////////////////////////////////////////////////////////////////////////////// - -static void -reconfigure_diags() -{ - int i; - DiagsConfigState c; - - - // initial value set to 0 or 1 based on command line tags - c.enabled[DiagsTagType_Debug] = (diags->base_debug_tags != NULL); - c.enabled[DiagsTagType_Action] = (diags->base_action_tags != NULL); - - c.enabled[DiagsTagType_Debug] = 1; - c.enabled[DiagsTagType_Action] = 1; - diags->show_location = 1; - - - // read output routing values - for (i = 0; i < DiagsLevel_Count; i++) { - - c.outputs[i].to_stdout = 0; - c.outputs[i].to_stderr = 1; - c.outputs[i].to_syslog = 1; - c.outputs[i].to_diagslog = 1; - } - - ////////////////////////////// - // clear out old tag tables // - ////////////////////////////// - - diags->deactivate_all(DiagsTagType_Debug); - diags->deactivate_all(DiagsTagType_Action); - - ////////////////////////////////////////////////////////////////////// - // add new tag tables - ////////////////////////////////////////////////////////////////////// - - if (diags->base_debug_tags) - diags->activate_taglist(diags->base_debug_tags, DiagsTagType_Debug); - if (diags->base_action_tags) - diags->activate_taglist(diags->base_action_tags, DiagsTagType_Action); - - //////////////////////////////////// - // change the diags config values // - //////////////////////////////////// -#if !defined(__GNUC__) && !defined(hpux) - diags->config = c; -#else - memcpy(((void *) &diags->config), ((void *) &c), sizeof(DiagsConfigState)); -#endif - -} - - - -static void -init_diags(char *bdt, char *bat) -{ - FILE *diags_log_fp; - char diags_logpath[500]; - strcpy(diags_logpath, DIAGS_LOG_FILE); - - diags_log_fp = fopen(diags_logpath, "w"); - if (diags_log_fp) { - int status; - status = setvbuf(diags_log_fp, NULL, _IOLBF, 512); - if (status != 0) { - fclose(diags_log_fp); - diags_log_fp = NULL; - } - } - - diags = NEW(new Diags(bdt, bat, diags_log_fp)); - - if (diags_log_fp == NULL) { - SrcLoc loc(__FILE__, __FUNCTION__, __LINE__); - - diags->print(NULL, DL_Warning, NULL, &loc, - "couldn't open diags log file '%s', " "will not log to this file", diags_logpath); - } - - diags->print(NULL, DL_Status, "STATUS", NULL, "opened %s", diags_logpath); - reconfigure_diags(); - -} - -struct alarm_printer:public Continuation -{ - alarm_printer(ProxyMutex * m):Continuation(m) - { - SET_HANDLER(&alarm_printer::dummy_function); - } - int dummy_function(int event, Event * e) - { - 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, Event * e) - { - 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, char *argv[]) -{ - RecModeT mode_type = RECM_STAND_ALONE; - count = 0; - RecProcessInit(mode_type); - - ink_event_system_init(EVENT_SYSTEM_MODULE_VERSION); - eventProcessor.start(TEST_THREADS); - - alarm_printer *alrm = new alarm_printer(new_ProxyMutex()); - process_killer *killer = new process_killer(new_ProxyMutex()); - eventProcessor.schedule_in(killer, HRTIME_SECONDS(60)); - eventProcessor.schedule_every(alrm, HRTIME_SECONDS(1)); - this_thread()->execute(); - return 0; -}