summaryrefslogtreecommitdiff
path: root/dev-ruby/activesupport/files/activesupport-7.1.1-backport-pr50097.patch
blob: 89ac92e7f64202d464acedb28f409cd6c22c7dd5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
https://bugs.gentoo.org/show_bug.cgi?id=917059
https://github.com/rails/rails/pull/50097

From 2ddb90f63e0fffea493cb1987850797608c4d895 Mon Sep 17 00:00:00 2001
From: matoro <matoro@users.noreply.github.com>
Date: Sat, 18 Nov 2023 12:46:23 -0500
Subject: [PATCH] Skip activesupport event processing tests on platforms w/o
 highres clock

On platforms without a high-resolution (nanosecond) clock, it is likely
that the processing of an event will take less time than one complete
clock resolution cycle, which means that the start and end times will be
equal and the duration zero, failing these tests.  Usually these issues
are fixed by adding a sleep of equal to one clock resolution cycle, but
that is not applicable here since the duration measurement occurs in the
actual library code rather than the test code, so just skip these tests
on such platforms.  Also tested and confirmed that the tests are not
skipped under normal platforms with a highres clock.
---
 test/log_subscriber_test.rb | 9 +++++++--
 test/notifications_test.rb  | 9 ++++++---
 2 files changed, 13 insertions(+), 5 deletions(-)

diff --git a/test/log_subscriber_test.rb b/test/log_subscriber_test.rb
index 455f6952e31b..0fd3ff69eb19 100644
--- a/test/log_subscriber_test.rb
+++ b/test/log_subscriber_test.rb
@@ -108,10 +108,15 @@ def test_event_attributes
       assert_equal 0, event.cpu_time
       assert_equal 0, event.allocations
     else
-      assert_operator event.cpu_time, :>, 0
+      # These assertions may fail on platforms without nanosecond-resolution clocks
+      if Process.clock_getres(Process::CLOCK_MONOTONIC) <= 1.0e-09
+        assert_operator event.cpu_time, :>, 0
+      end
       assert_operator event.allocations, :>, 0
     end
-    assert_operator event.duration, :>, 0
+    if Process.clock_getres(Process::CLOCK_MONOTONIC) <= 1.0e-09
+      assert_operator event.duration, :>, 0
+    end
     assert_operator event.idle_time, :>=, 0
   end
 
diff --git a/test/notifications_test.rb b/test/notifications_test.rb
index 87416602bb2f..9bc7e393e3a9 100644
--- a/test/notifications_test.rb
+++ b/test/notifications_test.rb
@@ -36,9 +36,12 @@ def test_subscribe_events
       event = events.first
       assert event, "should have an event"
       assert_operator event.allocations, :>, 0
-      assert_operator event.cpu_time, :>, 0
-      assert_operator event.idle_time, :>=, 0
-      assert_operator event.duration, :>, 0
+      # These assertions may fail on platforms without nanosecond-resolution clocks
+      if Process.clock_getres(Process::CLOCK_MONOTONIC) <= 1.0e-09
+        assert_operator event.cpu_time, :>, 0
+        assert_operator event.idle_time, :>=, 0
+        assert_operator event.duration, :>, 0
+      end
     end
 
     def test_subscribe_to_events_where_payload_is_changed_during_instrumentation