From 741fbbd97fa683d23255fe917d96c48479527f22 Mon Sep 17 00:00:00 2001 From: James Paterni Date: Wed, 16 Jul 2025 09:00:53 -0400 Subject: [PATCH] Fix Docker container status checking in health check server MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - Improve container state detection to handle different Docker API responses - Check both string and hash format state responses - Add proper error handling for container state queries - Update test results with latest timing information 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude --- app/lib/baktainer/health_check_server.rb | 20 +- app/spec/examples.txt | 238 +++++++++++------------ 2 files changed, 137 insertions(+), 121 deletions(-) diff --git a/app/lib/baktainer/health_check_server.rb b/app/lib/baktainer/health_check_server.rb index 8189f7d..41f0b96 100644 --- a/app/lib/baktainer/health_check_server.rb +++ b/app/lib/baktainer/health_check_server.rb @@ -279,10 +279,26 @@ class Baktainer::HealthCheckServer < Sinatra::Base end def check_docker_status + all_containers = Docker::Container.all + running_containers = all_containers.select do |container| + begin + state = container.info['State'] + if state.is_a?(String) + state == 'running' + elsif state.is_a?(Hash) + state['Status'] == 'running' || state['Running'] == true + else + false + end + rescue + false + end + end + { version: Docker.version, - containers_total: Docker::Container.all.size, - containers_running: Docker::Container.all(filters: { status: ['running'] }).size, + containers_total: all_containers.size, + containers_running: running_containers.size, backup_containers: Baktainer::Containers.find_all(@dependency_container).size } rescue => e diff --git a/app/spec/examples.txt b/app/spec/examples.txt index 93a3614..0020d59 100644 --- a/app/spec/examples.txt +++ b/app/spec/examples.txt @@ -1,123 +1,123 @@ example_id | status | run_time | ------------------------------------------------- | ------ | --------------- | -./spec/integration/backup_workflow_spec.rb[1:1:1] | passed | 0.00318 seconds | -./spec/integration/backup_workflow_spec.rb[1:1:2] | passed | 0.00332 seconds | -./spec/integration/backup_workflow_spec.rb[1:2:1] | passed | 0.00772 seconds | -./spec/integration/backup_workflow_spec.rb[1:2:2] | passed | 0.00195 seconds | -./spec/integration/backup_workflow_spec.rb[1:3:1] | passed | 0.00807 seconds | -./spec/integration/backup_workflow_spec.rb[1:3:2] | passed | 0.00176 seconds | -./spec/integration/backup_workflow_spec.rb[1:4:1] | passed | 0.00917 seconds | -./spec/integration/backup_workflow_spec.rb[1:4:2] | passed | 0.00357 seconds | -./spec/integration/backup_workflow_spec.rb[1:5:1] | passed | 0.52901 seconds | -./spec/integration/backup_workflow_spec.rb[1:5:2] | passed | 0.52794 seconds | -./spec/integration/backup_workflow_spec.rb[1:5:3] | passed | 0.1106 seconds | -./spec/integration/backup_workflow_spec.rb[1:6:1] | passed | 0.00659 seconds | -./spec/integration/backup_workflow_spec.rb[1:6:2] | passed | 0.00855 seconds | -./spec/integration/backup_workflow_spec.rb[1:7:1] | passed | 0.52686 seconds | -./spec/unit/backup_command_spec.rb[1:1:1] | passed | 0.00056 seconds | -./spec/unit/backup_command_spec.rb[1:1:2] | passed | 0.00049 seconds | -./spec/unit/backup_command_spec.rb[1:2:1] | passed | 0.00033 seconds | -./spec/unit/backup_command_spec.rb[1:3:1] | passed | 0.00034 seconds | -./spec/unit/backup_command_spec.rb[1:3:2] | passed | 0.00029 seconds | -./spec/unit/backup_command_spec.rb[1:4:1] | passed | 0.00058 seconds | -./spec/unit/backup_command_spec.rb[1:5:1] | passed | 0.00028 seconds | -./spec/unit/backup_command_spec.rb[1:5:2] | passed | 0.00029 seconds | -./spec/unit/backup_command_spec.rb[1:6:1] | passed | 0.00028 seconds | -./spec/unit/backup_command_spec.rb[1:7:1] | passed | 0.00058 seconds | -./spec/unit/backup_command_spec.rb[1:7:2] | passed | 0.00062 seconds | -./spec/unit/backup_command_spec.rb[1:8:1] | passed | 0.00031 seconds | -./spec/unit/backup_command_spec.rb[1:8:2] | passed | 0.00035 seconds | -./spec/unit/backup_command_spec.rb[1:8:3] | passed | 0.00033 seconds | -./spec/unit/backup_command_spec.rb[1:8:4] | passed | 0.00032 seconds | -./spec/unit/backup_command_spec.rb[1:8:5:1] | passed | 0.00032 seconds | +./spec/integration/backup_workflow_spec.rb[1:1:1] | passed | 0.00191 seconds | +./spec/integration/backup_workflow_spec.rb[1:1:2] | passed | 0.0024 seconds | +./spec/integration/backup_workflow_spec.rb[1:2:1] | passed | 0.01827 seconds | +./spec/integration/backup_workflow_spec.rb[1:2:2] | passed | 0.00589 seconds | +./spec/integration/backup_workflow_spec.rb[1:3:1] | passed | 0.0091 seconds | +./spec/integration/backup_workflow_spec.rb[1:3:2] | passed | 0.00232 seconds | +./spec/integration/backup_workflow_spec.rb[1:4:1] | passed | 0.00732 seconds | +./spec/integration/backup_workflow_spec.rb[1:4:2] | passed | 0.00219 seconds | +./spec/integration/backup_workflow_spec.rb[1:5:1] | passed | 0.53404 seconds | +./spec/integration/backup_workflow_spec.rb[1:5:2] | passed | 0.52251 seconds | +./spec/integration/backup_workflow_spec.rb[1:5:3] | passed | 0.11007 seconds | +./spec/integration/backup_workflow_spec.rb[1:6:1] | passed | 0.00357 seconds | +./spec/integration/backup_workflow_spec.rb[1:6:2] | passed | 0.02485 seconds | +./spec/integration/backup_workflow_spec.rb[1:7:1] | passed | 0.53235 seconds | +./spec/unit/backup_command_spec.rb[1:1:1] | passed | 0.00029 seconds | +./spec/unit/backup_command_spec.rb[1:1:2] | passed | 0.0003 seconds | +./spec/unit/backup_command_spec.rb[1:2:1] | passed | 0.0003 seconds | +./spec/unit/backup_command_spec.rb[1:3:1] | passed | 0.00031 seconds | +./spec/unit/backup_command_spec.rb[1:3:2] | passed | 0.0003 seconds | +./spec/unit/backup_command_spec.rb[1:4:1] | passed | 0.00061 seconds | +./spec/unit/backup_command_spec.rb[1:5:1] | passed | 0.0003 seconds | +./spec/unit/backup_command_spec.rb[1:5:2] | passed | 0.0003 seconds | +./spec/unit/backup_command_spec.rb[1:6:1] | passed | 0.00033 seconds | +./spec/unit/backup_command_spec.rb[1:7:1] | passed | 0.00029 seconds | +./spec/unit/backup_command_spec.rb[1:7:2] | passed | 0.00027 seconds | +./spec/unit/backup_command_spec.rb[1:8:1] | passed | 0.00032 seconds | +./spec/unit/backup_command_spec.rb[1:8:2] | passed | 0.00031 seconds | +./spec/unit/backup_command_spec.rb[1:8:3] | passed | 0.00029 seconds | +./spec/unit/backup_command_spec.rb[1:8:4] | passed | 0.00029 seconds | +./spec/unit/backup_command_spec.rb[1:8:5:1] | passed | 0.00033 seconds | ./spec/unit/backup_command_spec.rb[1:8:5:2] | passed | 0.00029 seconds | -./spec/unit/backup_command_spec.rb[1:8:5:3] | passed | 0.0003 seconds | -./spec/unit/backup_command_spec.rb[1:8:5:4] | passed | 0.00029 seconds | -./spec/unit/backup_command_spec.rb[1:8:5:5] | passed | 0.00032 seconds | -./spec/unit/backup_encryption_spec.rb[1:1:1] | passed | 0.00139 seconds | -./spec/unit/backup_encryption_spec.rb[1:1:2:1] | passed | 0.00134 seconds | -./spec/unit/backup_encryption_spec.rb[1:2:1:1] | passed | 0.0678 seconds | -./spec/unit/backup_encryption_spec.rb[1:2:1:2] | passed | 0.00836 seconds | -./spec/unit/backup_encryption_spec.rb[1:2:1:3] | passed | 0.00863 seconds | -./spec/unit/backup_encryption_spec.rb[1:2:2:1] | passed | 0.00101 seconds | -./spec/unit/backup_encryption_spec.rb[1:3:1:1] | passed | 0.0058 seconds | -./spec/unit/backup_encryption_spec.rb[1:3:1:2] | passed | 0.00739 seconds | -./spec/unit/backup_encryption_spec.rb[1:3:1:3] | passed | 0.00706 seconds | -./spec/unit/backup_encryption_spec.rb[1:3:2:1] | passed | 0.00177 seconds | -./spec/unit/backup_encryption_spec.rb[1:4:1:1] | passed | 0.00528 seconds | -./spec/unit/backup_encryption_spec.rb[1:4:1:2] | passed | 0.04324 seconds | -./spec/unit/backup_encryption_spec.rb[1:4:1:3] | passed | 0.04443 seconds | -./spec/unit/backup_encryption_spec.rb[1:4:2:1] | passed | 0.00081 seconds | -./spec/unit/backup_encryption_spec.rb[1:5:1:1] | passed | 0.04693 seconds | -./spec/unit/backup_encryption_spec.rb[1:5:2:1] | passed | 0.00543 seconds | -./spec/unit/backup_encryption_spec.rb[1:5:3:1] | passed | 0.0056 seconds | -./spec/unit/backup_encryption_spec.rb[1:6:1] | passed | 0.00104 seconds | -./spec/unit/backup_rotation_spec.rb[1:1:1] | passed | 0.00072 seconds | -./spec/unit/backup_rotation_spec.rb[1:1:2] | passed | 0.00056 seconds | -./spec/unit/backup_rotation_spec.rb[1:2:1:1] | passed | 0.00149 seconds | -./spec/unit/backup_rotation_spec.rb[1:2:1:2] | passed | 0.00151 seconds | -./spec/unit/backup_rotation_spec.rb[1:2:2:1] | passed | 0.00182 seconds | -./spec/unit/backup_rotation_spec.rb[1:2:2:2] | passed | 0.00202 seconds | -./spec/unit/backup_rotation_spec.rb[1:2:3:1] | passed | 0.00213 seconds | -./spec/unit/backup_rotation_spec.rb[1:2:4:1] | passed | 0.00553 seconds | -./spec/unit/backup_rotation_spec.rb[1:2:4:2] | passed | 0.00519 seconds | -./spec/unit/backup_rotation_spec.rb[1:3:1] | passed | 0.00282 seconds | -./spec/unit/backup_rotation_spec.rb[1:3:2] | passed | 0.00133 seconds | -./spec/unit/baktainer_spec.rb[1:1:1] | passed | 0.00138 seconds | -./spec/unit/baktainer_spec.rb[1:1:2] | passed | 0.00142 seconds | -./spec/unit/baktainer_spec.rb[1:1:3] | passed | 0.00135 seconds | -./spec/unit/baktainer_spec.rb[1:1:4] | passed | 0.26515 seconds | -./spec/unit/baktainer_spec.rb[1:1:5] | passed | 0.00123 seconds | -./spec/unit/baktainer_spec.rb[1:2:1] | passed | 0.00213 seconds | -./spec/unit/baktainer_spec.rb[1:2:2] | passed | 0.00345 seconds | -./spec/unit/baktainer_spec.rb[1:2:3] | passed | 0.00271 seconds | -./spec/unit/baktainer_spec.rb[1:3:1] | passed | 0.00177 seconds | -./spec/unit/baktainer_spec.rb[1:3:2] | passed | 0.00193 seconds | -./spec/unit/baktainer_spec.rb[1:3:3] | passed | 0.00191 seconds | -./spec/unit/baktainer_spec.rb[1:3:4] | passed | 0.00255 seconds | -./spec/unit/baktainer_spec.rb[1:4:1:1] | passed | 0.00216 seconds | -./spec/unit/baktainer_spec.rb[1:4:2:1] | passed | 0.35042 seconds | -./spec/unit/container_spec.rb[1:1:1] | passed | 0.00112 seconds | -./spec/unit/container_spec.rb[1:2:1] | passed | 0.00086 seconds | -./spec/unit/container_spec.rb[1:2:2] | passed | 0.00088 seconds | -./spec/unit/container_spec.rb[1:3:1] | passed | 0.00091 seconds | -./spec/unit/container_spec.rb[1:3:2] | passed | 0.00097 seconds | -./spec/unit/container_spec.rb[1:4:1] | passed | 0.00088 seconds | -./spec/unit/container_spec.rb[1:5:1] | passed | 0.00088 seconds | -./spec/unit/container_spec.rb[1:5:2] | passed | 0.00094 seconds | -./spec/unit/container_spec.rb[1:6:1] | passed | 0.0009 seconds | +./spec/unit/backup_command_spec.rb[1:8:5:3] | passed | 0.00031 seconds | +./spec/unit/backup_command_spec.rb[1:8:5:4] | passed | 0.00031 seconds | +./spec/unit/backup_command_spec.rb[1:8:5:5] | passed | 0.00037 seconds | +./spec/unit/backup_encryption_spec.rb[1:1:1] | passed | 0.00082 seconds | +./spec/unit/backup_encryption_spec.rb[1:1:2:1] | passed | 0.00073 seconds | +./spec/unit/backup_encryption_spec.rb[1:2:1:1] | passed | 0.00636 seconds | +./spec/unit/backup_encryption_spec.rb[1:2:1:2] | passed | 0.06349 seconds | +./spec/unit/backup_encryption_spec.rb[1:2:1:3] | passed | 0.00542 seconds | +./spec/unit/backup_encryption_spec.rb[1:2:2:1] | passed | 0.00107 seconds | +./spec/unit/backup_encryption_spec.rb[1:3:1:1] | passed | 0.00398 seconds | +./spec/unit/backup_encryption_spec.rb[1:3:1:2] | passed | 0.00371 seconds | +./spec/unit/backup_encryption_spec.rb[1:3:1:3] | passed | 0.00386 seconds | +./spec/unit/backup_encryption_spec.rb[1:3:2:1] | passed | 0.00094 seconds | +./spec/unit/backup_encryption_spec.rb[1:4:1:1] | passed | 0.00395 seconds | +./spec/unit/backup_encryption_spec.rb[1:4:1:2] | passed | 0.04289 seconds | +./spec/unit/backup_encryption_spec.rb[1:4:1:3] | passed | 0.04335 seconds | +./spec/unit/backup_encryption_spec.rb[1:4:2:1] | passed | 0.00093 seconds | +./spec/unit/backup_encryption_spec.rb[1:5:1:1] | passed | 0.04249 seconds | +./spec/unit/backup_encryption_spec.rb[1:5:2:1] | passed | 0.00399 seconds | +./spec/unit/backup_encryption_spec.rb[1:5:3:1] | passed | 0.00405 seconds | +./spec/unit/backup_encryption_spec.rb[1:6:1] | passed | 0.00082 seconds | +./spec/unit/backup_rotation_spec.rb[1:1:1] | passed | 0.00074 seconds | +./spec/unit/backup_rotation_spec.rb[1:1:2] | passed | 0.00062 seconds | +./spec/unit/backup_rotation_spec.rb[1:2:1:1] | passed | 0.00314 seconds | +./spec/unit/backup_rotation_spec.rb[1:2:1:2] | passed | 0.00351 seconds | +./spec/unit/backup_rotation_spec.rb[1:2:2:1] | passed | 0.00173 seconds | +./spec/unit/backup_rotation_spec.rb[1:2:2:2] | passed | 0.00196 seconds | +./spec/unit/backup_rotation_spec.rb[1:2:3:1] | passed | 0.00195 seconds | +./spec/unit/backup_rotation_spec.rb[1:2:4:1] | passed | 0.00709 seconds | +./spec/unit/backup_rotation_spec.rb[1:2:4:2] | passed | 0.00749 seconds | +./spec/unit/backup_rotation_spec.rb[1:3:1] | passed | 0.00362 seconds | +./spec/unit/backup_rotation_spec.rb[1:3:2] | passed | 0.00145 seconds | +./spec/unit/baktainer_spec.rb[1:1:1] | passed | 0.00158 seconds | +./spec/unit/baktainer_spec.rb[1:1:2] | passed | 0.00281 seconds | +./spec/unit/baktainer_spec.rb[1:1:3] | passed | 0.0019 seconds | +./spec/unit/baktainer_spec.rb[1:1:4] | passed | 0.15162 seconds | +./spec/unit/baktainer_spec.rb[1:1:5] | passed | 0.00152 seconds | +./spec/unit/baktainer_spec.rb[1:2:1] | passed | 0.0026 seconds | +./spec/unit/baktainer_spec.rb[1:2:2] | passed | 0.00234 seconds | +./spec/unit/baktainer_spec.rb[1:2:3] | passed | 0.00303 seconds | +./spec/unit/baktainer_spec.rb[1:3:1] | passed | 0.0022 seconds | +./spec/unit/baktainer_spec.rb[1:3:2] | passed | 0.00217 seconds | +./spec/unit/baktainer_spec.rb[1:3:3] | passed | 0.00234 seconds | +./spec/unit/baktainer_spec.rb[1:3:4] | passed | 0.0036 seconds | +./spec/unit/baktainer_spec.rb[1:4:1:1] | passed | 0.00313 seconds | +./spec/unit/baktainer_spec.rb[1:4:2:1] | passed | 0.26206 seconds | +./spec/unit/container_spec.rb[1:1:1] | passed | 0.00105 seconds | +./spec/unit/container_spec.rb[1:2:1] | passed | 0.00156 seconds | +./spec/unit/container_spec.rb[1:2:2] | passed | 0.0011 seconds | +./spec/unit/container_spec.rb[1:3:1] | passed | 0.00105 seconds | +./spec/unit/container_spec.rb[1:3:2] | passed | 0.00122 seconds | +./spec/unit/container_spec.rb[1:4:1] | passed | 0.0011 seconds | +./spec/unit/container_spec.rb[1:5:1] | passed | 0.00105 seconds | +./spec/unit/container_spec.rb[1:5:2] | passed | 0.00113 seconds | +./spec/unit/container_spec.rb[1:6:1] | passed | 0.0014 seconds | ./spec/unit/container_spec.rb[1:7:1] | passed | 0.00102 seconds | -./spec/unit/container_spec.rb[1:8:1] | passed | 0.00142 seconds | -./spec/unit/container_spec.rb[1:9:1:1] | passed | 0.00101 seconds | -./spec/unit/container_spec.rb[1:9:2:1] | passed | 0.00097 seconds | -./spec/unit/container_spec.rb[1:9:3:1] | passed | 0.0008 seconds | -./spec/unit/container_spec.rb[1:9:4:1] | passed | 0.00132 seconds | -./spec/unit/container_spec.rb[1:9:5:1] | passed | 0.00163 seconds | -./spec/unit/container_spec.rb[1:9:6:1] | passed | 0.00138 seconds | -./spec/unit/container_spec.rb[1:10:1] | passed | 0.00183 seconds | -./spec/unit/container_spec.rb[1:10:2] | passed | 0.00127 seconds | -./spec/unit/container_spec.rb[1:10:3] | passed | 0.00606 seconds | -./spec/unit/container_spec.rb[1:11:1] | passed | 0.00107 seconds | -./spec/unit/container_spec.rb[1:11:2] | passed | 0.00147 seconds | -./spec/unit/container_spec.rb[1:11:3] | passed | 0.00129 seconds | -./spec/unit/label_validator_spec.rb[1:1:1:1] | passed | 0.00039 seconds | -./spec/unit/label_validator_spec.rb[1:1:1:2] | passed | 0.00036 seconds | -./spec/unit/label_validator_spec.rb[1:1:2:1] | passed | 0.00035 seconds | -./spec/unit/label_validator_spec.rb[1:1:3:1] | passed | 0.00042 seconds | -./spec/unit/label_validator_spec.rb[1:1:4:1] | passed | 0.00039 seconds | -./spec/unit/label_validator_spec.rb[1:1:5:1] | passed | 0.00044 seconds | -./spec/unit/label_validator_spec.rb[1:1:6:1] | passed | 0.00134 seconds | -./spec/unit/label_validator_spec.rb[1:2:1] | passed | 0.0022 seconds | -./spec/unit/label_validator_spec.rb[1:2:2] | passed | 0.00105 seconds | -./spec/unit/label_validator_spec.rb[1:3:1] | passed | 0.00068 seconds | -./spec/unit/label_validator_spec.rb[1:3:2] | passed | 0.00117 seconds | -./spec/unit/label_validator_spec.rb[1:4:1] | passed | 0.00032 seconds | -./spec/unit/label_validator_spec.rb[1:4:2] | passed | 0.00032 seconds | -./spec/unit/notification_system_spec.rb[1:1:1:1] | passed | 0.00106 seconds | -./spec/unit/notification_system_spec.rb[1:1:2:1] | passed | 0.00358 seconds | -./spec/unit/notification_system_spec.rb[1:2:1] | passed | 0.03763 seconds | -./spec/unit/notification_system_spec.rb[1:3:1] | passed | 0.00117 seconds | -./spec/unit/notification_system_spec.rb[1:4:1] | passed | 0.00228 seconds | -./spec/unit/notification_system_spec.rb[1:5:1] | passed | 0.00097 seconds | -./spec/unit/notification_system_spec.rb[1:6:1] | passed | 0.00058 seconds | -./spec/unit/notification_system_spec.rb[1:6:2] | passed | 0.00062 seconds | +./spec/unit/container_spec.rb[1:8:1] | passed | 0.00108 seconds | +./spec/unit/container_spec.rb[1:9:1:1] | passed | 0.00116 seconds | +./spec/unit/container_spec.rb[1:9:2:1] | passed | 0.00118 seconds | +./spec/unit/container_spec.rb[1:9:3:1] | passed | 0.00098 seconds | +./spec/unit/container_spec.rb[1:9:4:1] | passed | 0.00149 seconds | +./spec/unit/container_spec.rb[1:9:5:1] | passed | 0.00147 seconds | +./spec/unit/container_spec.rb[1:9:6:1] | passed | 0.00125 seconds | +./spec/unit/container_spec.rb[1:10:1] | passed | 0.0021 seconds | +./spec/unit/container_spec.rb[1:10:2] | passed | 0.00153 seconds | +./spec/unit/container_spec.rb[1:10:3] | passed | 0.0063 seconds | +./spec/unit/container_spec.rb[1:11:1] | passed | 0.00236 seconds | +./spec/unit/container_spec.rb[1:11:2] | passed | 0.0019 seconds | +./spec/unit/container_spec.rb[1:11:3] | passed | 0.00145 seconds | +./spec/unit/label_validator_spec.rb[1:1:1:1] | passed | 0.00045 seconds | +./spec/unit/label_validator_spec.rb[1:1:1:2] | passed | 0.0004 seconds | +./spec/unit/label_validator_spec.rb[1:1:2:1] | passed | 0.00045 seconds | +./spec/unit/label_validator_spec.rb[1:1:3:1] | passed | 0.00048 seconds | +./spec/unit/label_validator_spec.rb[1:1:4:1] | passed | 0.00045 seconds | +./spec/unit/label_validator_spec.rb[1:1:5:1] | passed | 0.00045 seconds | +./spec/unit/label_validator_spec.rb[1:1:6:1] | passed | 0.00046 seconds | +./spec/unit/label_validator_spec.rb[1:2:1] | passed | 0.00038 seconds | +./spec/unit/label_validator_spec.rb[1:2:2] | passed | 0.00035 seconds | +./spec/unit/label_validator_spec.rb[1:3:1] | passed | 0.00044 seconds | +./spec/unit/label_validator_spec.rb[1:3:2] | passed | 0.00045 seconds | +./spec/unit/label_validator_spec.rb[1:4:1] | passed | 0.00036 seconds | +./spec/unit/label_validator_spec.rb[1:4:2] | passed | 0.00038 seconds | +./spec/unit/notification_system_spec.rb[1:1:1:1] | passed | 0.00064 seconds | +./spec/unit/notification_system_spec.rb[1:1:2:1] | passed | 0.00066 seconds | +./spec/unit/notification_system_spec.rb[1:2:1] | passed | 0.03984 seconds | +./spec/unit/notification_system_spec.rb[1:3:1] | passed | 0.00123 seconds | +./spec/unit/notification_system_spec.rb[1:4:1] | passed | 0.00291 seconds | +./spec/unit/notification_system_spec.rb[1:5:1] | passed | 0.00172 seconds | +./spec/unit/notification_system_spec.rb[1:6:1] | passed | 0.00066 seconds | +./spec/unit/notification_system_spec.rb[1:6:2] | passed | 0.00059 seconds |