
    Jf*                         d Z ddlmZmZmZmZ ddlmZ ddlm	Z	 ddl
mZ ddlmZ ddlmZmZ dd	lmZ dd
lmZ  G d dej*                        Zy)z-
Test cases for L{twisted.logger._observer}.
    )DictListTuplecast)implementer)BrokenMethodImplementation)verifyObject)unittest   )ILogObserverLogEvent)Logger)LogPublisherc                   `    e Zd ZdZddZddZddZddZddZddZ	dd	Z
dd
ZddZddZy)LogPublisherTestsz$
    Tests for L{LogPublisher}.
    Nc                     t               }	 t        t        |       y# t        $ r}| j	                  |       Y d}~yd}~ww xY w)z8
        L{LogPublisher} is an L{ILogObserver}.
        N)r   r	   r   r   fail)self	publisheres      \/var/www/cs2snipe.com/venv/lib/python3.12/site-packages/twisted/logger/test/test_observer.pytest_interfacez LogPublisherTests.test_interface   s7     !N		y1) 	IIaLL	s    	A<Ac                     t        t        d       }t        t        d       }t        ||      }| j                  ||ht	        |j
                               y)zB
        L{LogPublisher.observers} returns the observers.
        c                      y N r   s    r   <lambda>z2LogPublisherTests.test_observers.<locals>.<lambda>'           c                      y r   r   r   s    r   r   z2LogPublisherTests.test_observers.<locals>.<lambda>(   r   r    N)r   r   r   assertEqualset
_observers)r   o1o2r   s       r   test_observersz LogPublisherTests.test_observers#   sG     ,/,/ R(	"b3y';';#<=r    c                     t        t        d       }t        t        d       }t        t        d       }t        ||      }|j                  |       | j	                  |||ht        |j                               y)z?
        L{LogPublisher.addObserver} adds an observer.
        c                      y r   r   r   s    r   r   z4LogPublisherTests.test_addObserver.<locals>.<lambda>1   r   r    c                      y r   r   r   s    r   r   z4LogPublisherTests.test_addObserver.<locals>.<lambda>2   r   r    c                      y r   r   r   s    r   r   z4LogPublisherTests.test_addObserver.<locals>.<lambda>3   r   r    N)r   r   r   addObserverr"   r#   r$   r   r%   r&   o3r   s        r   test_addObserverz"LogPublisherTests.test_addObserver-   sc     ,/,/,/ R(	b!"b"s9+?+?'@Ar    c                 j    t               }| j                  t        |j                  t	                      y)ze
        L{LogPublisher.addObserver} refuses to add an observer that's
        not callable.
        N)r   assertRaises	TypeErrorr,   object)r   r   s     r   test_addObserverNotCallablez-LogPublisherTests.test_addObserverNotCallable9   s%    
 !N	)Y%:%:FHEr    c                     t        t        d       }t        t        d       }t        t        d       }t        |||      }|j                  |       | j	                  ||ht        |j                               y)zE
        L{LogPublisher.removeObserver} removes an observer.
        c                      y r   r   r   s    r   r   z7LogPublisherTests.test_removeObserver.<locals>.<lambda>E   r   r    c                      y r   r   r   s    r   r   z7LogPublisherTests.test_removeObserver.<locals>.<lambda>F   r   r    c                      y r   r   r   s    r   r   z7LogPublisherTests.test_removeObserver.<locals>.<lambda>G   r   r    Nr   r   r   removeObserverr"   r#   r$   r-   s        r   test_removeObserverz%LogPublisherTests.test_removeObserverA   sc     ,/,/,/ R,	  $"b3y';';#<=r    c                     t        t        d       }t        t        d       }t        t        d       }t        ||      }|j                  |       | j	                  ||ht        |j                               y)zd
        L{LogPublisher.removeObserver} removes an observer that is not
        registered.
        c                      y r   r   r   s    r   r   zDLogPublisherTests.test_removeObserverNotRegistered.<locals>.<lambda>R   r   r    c                      y r   r   r   s    r   r   zDLogPublisherTests.test_removeObserverNotRegistered.<locals>.<lambda>S   r   r    c                      y r   r   r   s    r   r   zDLogPublisherTests.test_removeObserverNotRegistered.<locals>.<lambda>T   r   r    Nr9   r-   s        r    test_removeObserverNotRegisteredz2LogPublisherTests.test_removeObserverNotRegisteredM   sa    
 ,/,/,/ R(	  $"b3y';';#<=r    c                 \   t        dd      }g }g }g }t        t        |j                        }t        t        |j                        }t        t        |j                        }t	        |||      } ||       | j                  ||       | j                  ||       | j                  ||       y)z6
        L{LogPublisher} calls its observers.
           r   foobarN)dictr   r   appendr   assertIn)	r   eventevents1events2events3r%   r&   r.   r   s	            r   test_fanOutzLogPublisherTests.test_fanOutZ   s     ""$"$"$,/,/,/ R,	%eW%eW%eW%r    c                    t        dd      }t        d      g t        t              dt        ddffd       }g }t        |t        t        |j                              } ||       | j                  |       |D cg c]  }d	|v s|d	    }}| j                  t        |      d       | j                  |d
   j                         | j                  t              d       yc c}w )z}
        Observer raises an exception during fan out: a failure is logged, but
        not re-raised.  Life goes on.
        rB   r   rC   ARGH! EVIL DEATH!rI   returnNc                 6     }j                  |        |ry r   )rG   )rI   shouldRaiseevents	exceptions     r   observerz7LogPublisherTests.test_observerRaises.<locals>.observerx   s#    $*KMM%  r    log_failurer   )rF   RuntimeErrorr   r   r   r   r   rG   rH   r"   lenassertIsvalue)	r   rI   rU   	collectorr   r   errorsrS   rT   s	          @@r   test_observerRaisesz%LogPublisherTests.test_observerRaisesn   s    
 " !45	!#	\	"	 H 	  	  
#	  %'	 4i>N>N+OP	% 	eV$ -6Lq!9K!M"LLVa(fQiooy1Va(	 Ms   	C+C+c                     t        dd      }t        d      t        t              dt        ddfd       } G fd	d
t
              }t        |      } |       |_         ||       y)z
        Observer raises an exception during fan out and the publisher's Logger
        pukes when the failure is reported.  The exception does not propagate
        back to the caller.
        rB   r   rC   rO   rI   rP   Nc                     t        d      )Nz	Sad panda)rW   )rI   s    r   rU   zGLogPublisherTests.test_observerRaisesAndLoggerHatesMe.<locals>.observer   s    {++r    c                   &    e Zd Zdededdf fdZy)ILogPublisherTests.test_observerRaisesAndLoggerHatesMe.<locals>.GurkLoggerargskwargsrP   Nc                     r   r   )r   rb   rc   rT   s      r   failurezQLogPublisherTests.test_observerRaisesAndLoggerHatesMe.<locals>.GurkLogger.failure   s    r    )__name__
__module____qualname__r3   re   )rT   s   r   
GurkLoggerra      s     V  v  $  r    ri   )rF   rW   r   r   r   r   r   log)r   rI   rU   ri   r   rT   s        @r   #test_observerRaisesAndLoggerHatesMez5LogPublisherTests.test_observerRaisesAndLoggerHatesMe   sj     " !45		\	"	,H 	, 	, 
#	,	  	  !*	"	%r    c                 4   t        ddg       }i t        t              dt        ddffd       }t        t              dt        ddffd       }t	        ||      } ||       | j                  d   ||ff       | j                  d   ||f||ff       y)	zA
        Tracing keeps track of forwarding to observers.
        rB   r   )rD   rE   	log_tracer   rP   Nc           
          j                  dt        t        t        t        t        f      t        | d                      y )NrB   rm   
setdefaultr   r   r   r   tupler   tracess    r   r%   z(LogPublisherTests.test_trace.<locals>.o1   5    4eFL$89:E!K.<QRr    c           
          j                  dt        t        t        t        t        f      t        | d                      y )Nr   rm   ro   rr   s    r   r&   z(LogPublisherTests.test_trace.<locals>.o2   rt   r    )rF   r   r   r   r   r"   )r   rI   r%   r&   r   rs   s        @r   
test_tracezLogPublisherTests.test_trace   s     R0@B
 
\	"	( 	t 	 
#	
 
\	"	( 	t 	 
#	
 !R(	%i_$67i_y"o$FGr    )rP   N)rf   rg   rh   __doc__r   r'   r/   r4   r;   r@   rM   r]   rk   rv   r   r    r   r   r      s=    >
BF
>>&()@.Hr    r   N)rw   typingr   r   r   r   zope.interfacer   zope.interface.exceptionsr   zope.interface.verifyr	   twisted.trialr
   _interfacesr   r   _loggerr   	_observerr   TestCaser   r   r    r   <module>r      s=    + * & @ . " 0  $lH)) lHr    