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);

Reply via email to