@@ -425,7 +425,7 @@ impl EventObserver {
425
425
Ok ( ( ) )
426
426
}
427
427
428
- fn process_pending_payloads ( conn : & Connection ) {
428
+ fn process_pending_payloads ( & self , conn : & Connection ) {
429
429
let pending_payloads = match Self :: get_pending_payloads ( conn) {
430
430
Ok ( payloads) => payloads,
431
431
Err ( e) => {
@@ -438,6 +438,10 @@ impl EventObserver {
438
438
} ;
439
439
440
440
for ( id, url, payload, timeout_ms) in pending_payloads {
441
+ // If the URL is not the same as the endpoint, skip it
442
+ if !url. starts_with ( & self . endpoint ) {
443
+ continue ;
444
+ }
441
445
let timeout = Duration :: from_millis ( timeout_ms) ;
442
446
Self :: send_payload_directly ( & payload, & url, timeout) ;
443
447
@@ -563,7 +567,7 @@ impl EventObserver {
563
567
Self :: insert_payload_with_retry ( & conn, & full_url, payload, self . timeout ) ;
564
568
565
569
// Process all pending payloads
566
- Self :: process_pending_payloads ( & conn) ;
570
+ self . process_pending_payloads ( & conn) ;
567
571
} else {
568
572
// No database, just send the payload
569
573
Self :: send_payload_directly ( payload, & full_url, self . timeout ) ;
@@ -2042,16 +2046,19 @@ mod test {
2042
2046
use mockito:: Matcher ;
2043
2047
2044
2048
let dir = tempdir ( ) . unwrap ( ) ;
2045
- let db_path = dir. path ( ) . join ( "test_process_payloads .sqlite" ) ;
2049
+ let db_path = dir. path ( ) . join ( "event_observers .sqlite" ) ;
2046
2050
let db_path_str = db_path. to_str ( ) . unwrap ( ) ;
2051
+ let mut server = mockito:: Server :: new ( ) ;
2052
+ let endpoint = server. url ( ) . to_string ( ) ;
2053
+ let timeout = Duration :: from_secs ( 5 ) ;
2054
+ let observer =
2055
+ EventObserver :: new ( Some ( dir. path ( ) . to_path_buf ( ) ) , endpoint. clone ( ) , timeout) ;
2047
2056
2048
2057
let conn = EventObserver :: init_db ( db_path_str) . expect ( "Failed to initialize the database" ) ;
2049
2058
2050
2059
let payload = json ! ( { "key" : "value" } ) ;
2051
2060
let timeout = Duration :: from_secs ( 5 ) ;
2052
2061
2053
- // Create a mock server
2054
- let mut server = mockito:: Server :: new ( ) ;
2055
2062
let _m = server
2056
2063
. mock ( "POST" , "/api" )
2057
2064
. match_header ( "content-type" , Matcher :: Regex ( "application/json.*" . into ( ) ) )
@@ -2068,7 +2075,7 @@ mod test {
2068
2075
. expect ( "Failed to insert payload" ) ;
2069
2076
2070
2077
// Process pending payloads
2071
- EventObserver :: process_pending_payloads ( & conn) ;
2078
+ observer . process_pending_payloads ( & conn) ;
2072
2079
2073
2080
// Verify that the pending payloads list is empty
2074
2081
let pending_payloads =
@@ -2079,6 +2086,54 @@ mod test {
2079
2086
_m. assert ( ) ;
2080
2087
}
2081
2088
2089
+ #[ test]
2090
+ fn pending_payloads_are_skipped_if_url_does_not_match ( ) {
2091
+ let dir = tempdir ( ) . unwrap ( ) ;
2092
+ let db_path = dir. path ( ) . join ( "event_observers.sqlite" ) ;
2093
+ let db_path_str = db_path. to_str ( ) . unwrap ( ) ;
2094
+
2095
+ let mut server = mockito:: Server :: new ( ) ;
2096
+ let endpoint = server. url ( ) . to_string ( ) ;
2097
+ let timeout = Duration :: from_secs ( 5 ) ;
2098
+ let observer =
2099
+ EventObserver :: new ( Some ( dir. path ( ) . to_path_buf ( ) ) , endpoint. clone ( ) , timeout) ;
2100
+
2101
+ let conn = EventObserver :: init_db ( db_path_str) . expect ( "Failed to initialize the database" ) ;
2102
+
2103
+ let payload = json ! ( { "key" : "value" } ) ;
2104
+ let timeout = Duration :: from_secs ( 5 ) ;
2105
+
2106
+ let mock = server
2107
+ . mock ( "POST" , "/api" )
2108
+ . match_header (
2109
+ "content-type" ,
2110
+ mockito:: Matcher :: Regex ( "application/json.*" . into ( ) ) ,
2111
+ )
2112
+ . match_body ( mockito:: Matcher :: Json ( payload. clone ( ) ) )
2113
+ . with_status ( 200 )
2114
+ . expect ( 0 ) // Expect 0 calls to this endpoint
2115
+ . create ( ) ;
2116
+
2117
+ // Use a different URL than the observer's endpoint
2118
+ let url = "http://different-domain.com/api" ;
2119
+
2120
+ EventObserver :: insert_payload ( & conn, url, & payload, timeout)
2121
+ . expect ( "Failed to insert payload" ) ;
2122
+
2123
+ observer. process_pending_payloads ( & conn) ;
2124
+
2125
+ let pending_payloads =
2126
+ EventObserver :: get_pending_payloads ( & conn) . expect ( "Failed to get pending payloads" ) ;
2127
+ // Verify that the pending payload is still in the database
2128
+ assert_eq ! (
2129
+ pending_payloads. len( ) ,
2130
+ 1 ,
2131
+ "Expected payload to remain in database since URL didn't match"
2132
+ ) ;
2133
+
2134
+ mock. assert ( ) ;
2135
+ }
2136
+
2082
2137
#[ test]
2083
2138
fn test_new_event_observer_with_db ( ) {
2084
2139
let dir = tempdir ( ) . unwrap ( ) ;
0 commit comments