diff --git a/attn/attn_monitor.cpp b/attn/attn_monitor.cpp
index 96723b2..a3ecfac 100644
--- a/attn/attn_monitor.cpp
+++ b/attn/attn_monitor.cpp
@@ -30,7 +30,6 @@
 void AttnMonitor::handleGPIOEvent()
 {
     gpiod_line_event gpioEvent;
-    std::string logMessage;
 
     if (gpiod_line_event_read_fd(iv_gpioEventDescriptor.native_handle(),
                                  &gpioEvent) < 0)
diff --git a/attn/meson.build b/attn/meson.build
index 8c7d95f..6ae7e58 100644
--- a/attn/meson.build
+++ b/attn/meson.build
@@ -25,13 +25,6 @@
         dependency('systemd').get_variable(pkgconfig: 'systemdsystemunitdir')
 )
 
-# see if phosphor-logging is available, if not use test case logging code
-if (true == phosphor_logging)
-    logging_src = 'attn_logging.cpp'
-else
-    logging_src = '../test/end2end/logging.cpp'
-endif
-
 # Source files.
 attn_src = files(
     'attention.cpp',
@@ -40,10 +33,10 @@
     'attn_dbus.cpp',
     'attn_dump.cpp',
     'attn_handler.cpp',
+    'attn_logging.cpp',
     'attn_main.cpp',
     'attn_monitor.cpp',
     'bp_handler.cpp',
-    logging_src,
     'ti_handler.cpp',
     'vital_handler.cpp',
 )
diff --git a/meson.build b/meson.build
index 6ee92ce..555c482 100644
--- a/meson.build
+++ b/meson.build
@@ -67,17 +67,14 @@
   libphal_dep = cmplr.find_library('phal')
 endif
 
-# See if phosphor-logging is available, if not use test case logging code. This
-# allows for local builds outside of CI test sandbox.
+# See if phosphor-logging is available, if not use test case logging code.
 h = 'phosphor-logging/log.hpp'
 if cmplr.compiles('#include <@0@>'.format(h), name : '#include <@0@>'.format(h))
     test_arg = []
-    phosphor_logging = true
 else
     test_arg = [
         '-DTEST_TRACE',
     ]
-    phosphor_logging = false
 endif
 
 pthread = declare_dependency(link_args : '-pthread')
diff --git a/test/end2end/bp_handler.cpp b/test/end2end/bp_handler.cpp
deleted file mode 100644
index dd0935d..0000000
--- a/test/end2end/bp_handler.cpp
+++ /dev/null
@@ -1,13 +0,0 @@
-#include <util/trace.hpp>
-
-namespace attn
-{
-
-/** @brief Breakpoint special attention handler */
-void bpHandler()
-{
-    // trace message
-    trace::inf("breakpoint handler");
-}
-
-} // namespace attn
diff --git a/test/end2end/logging.cpp b/test/end2end/logging.cpp
deleted file mode 100644
index 6342e27..0000000
--- a/test/end2end/logging.cpp
+++ /dev/null
@@ -1,37 +0,0 @@
-#include <attn/attn_logging.hpp>
-
-#include <iostream>
-
-namespace attn
-{
-
-void eventAttentionFail(int i_error)
-{
-    std::cout << "event: attention fail" << i_error << std::endl;
-}
-
-void eventTerminate(std::map<std::string, std::string> i_additionalData,
-                    char* i_tiInfoData)
-{
-    std::cout << "event: terminate" << std::endl;
-
-    std::map<std::string, std::string>::iterator itr;
-    for (itr = i_additionalData.begin(); itr != i_additionalData.end(); ++itr)
-    {
-        std::cout << '\t' << itr->first << '\t' << itr->second << '\n';
-    }
-    std::cout << std::endl;
-
-    if (nullptr != i_tiInfoData)
-    {
-        std::cout << "TI data present" << std::endl;
-    }
-}
-
-uint32_t eventVital()
-{
-    std::cout << "event: vital" << std::endl;
-    return 0;
-}
-
-} // namespace attn
diff --git a/test/end2end/main.cpp b/test/end2end/main.cpp
index c523842..ff7d468 100644
--- a/test/end2end/main.cpp
+++ b/test/end2end/main.cpp
@@ -1,8 +1,20 @@
 #include <libpdbg.h>
 
+#include <attn/attention.hpp>
 #include <attn/attn_config.hpp>
 #include <attn/attn_handler.hpp>
 #include <cli.hpp>
+#include <util/trace.hpp>
+
+#include <vector>
+
+namespace attn
+{
+// these are in the attn_lib but not all exposed via headers
+int handleSpecial(Attention* i_attention);
+int handleCheckstop(Attention* i_attention);
+int handleVital(Attention* i_attention);
+} // namespace attn
 
 /** @brief Attention handler test application */
 int main(int argc, char* argv[])
@@ -21,5 +33,39 @@
     // exercise attention gpio event path
     attn::attnHandler(&attnConfig);
 
+    // Get first enabled proc for testing
+    pdbg_target* target = nullptr;
+    pdbg_for_each_class_target("proc", target)
+    {
+        trace::inf("proc: %u", pdbg_target_index(target));
+        if (PDBG_TARGET_ENABLED == pdbg_target_probe(target))
+        {
+            trace::inf("target enabled");
+            break;
+        }
+    }
+
+    // Exercise special, checkstop and vital attention handler paths
+    if ((nullptr != target) &&
+        (PDBG_TARGET_ENABLED == pdbg_target_probe(target)))
+    {
+        std::vector<attn::Attention> attentions;
+
+        attentions.emplace_back(attn::Attention::AttentionType::Special,
+                                attn::handleSpecial, target, &attnConfig);
+
+        attentions.emplace_back(attn::Attention::AttentionType::Checkstop,
+                                attn::handleCheckstop, target, &attnConfig);
+
+        attentions.emplace_back(attn::Attention::AttentionType::Vital,
+                                attn::handleVital, target, &attnConfig);
+
+        std::for_each(std::begin(attentions), std::end(attentions),
+                      [](attn::Attention attention) {
+                          trace::inf("calling handler");
+                          attention.handle();
+                      });
+    }
+
     return rc;
 }
diff --git a/test/end2end/meson.build b/test/end2end/meson.build
index 9a12d7b..adb8eeb 100644
--- a/test/end2end/meson.build
+++ b/test/end2end/meson.build
@@ -1,10 +1,6 @@
 # Source files specific to end2end test.
 end2end_src = [
-    'bp_handler.cpp',
-    'logging.cpp',
     'main.cpp',
-    'ti_handler.cpp',
-    'vital_handler.cpp'
 ]
 
 # Additional source files needed for test.
@@ -13,11 +9,11 @@
 ]
 
 # create openpower-hw-diags executable for local testing
-end2end = executable('openpower-hw-diags-test',
+end2end = executable('test-openpower-hw-diags',
             end2end_src, additional_src,
             link_with : hwdiags_libs,
             include_directories : incdir,
             cpp_args : test_arg,
             install : false)
 
-test('openpower-hw-diags-test', end2end)
+test('test-openpower-hw-diags', end2end)
diff --git a/test/end2end/ti_handler.cpp b/test/end2end/ti_handler.cpp
deleted file mode 100644
index f869c81..0000000
--- a/test/end2end/ti_handler.cpp
+++ /dev/null
@@ -1,14 +0,0 @@
-//#include <attn/attn_logging.hpp>
-#include <util/trace.hpp>
-
-namespace attn
-{
-
-/** @brief Handle TI special attention */
-void tiHandler()
-{
-    // trace message
-    trace::inf("TI handler");
-}
-
-} // namespace attn
diff --git a/test/end2end/vital_handler.cpp b/test/end2end/vital_handler.cpp
deleted file mode 100644
index 342ab69..0000000
--- a/test/end2end/vital_handler.cpp
+++ /dev/null
@@ -1,26 +0,0 @@
-#include <attn/attention.hpp>   // for Attention
-#include <attn/attn_common.hpp> // for RC_SUCCESS
-#include <util/trace.hpp>
-
-namespace attn
-{
-
-/** @brief Handle SBE vital attention */
-int handleVital(Attention* i_attention)
-{
-    int rc = RC_SUCCESS;
-
-    // trace message
-    trace::inf("Vital handler");
-
-    // sanity check
-    if (nullptr == i_attention)
-    {
-        trace::inf("attention type is null");
-        rc = RC_NOT_HANDLED;
-    }
-
-    return rc;
-}
-
-} // namespace attn
