ó
[³XMc           @   s  d  Z  e Z d d l m Z d d l m Z m Z m Z d d l	 m
 Z
 d d l m Z m Z d d l m Z d d l m Z d d l m Z y d d	 l m Z Wn e k
 r» d Z n' Xd d
 l m Z m Z d d l m Z d e f d „  ƒ  YZ e ƒ  j e j ƒ  ƒ d S(   s0   
Tests for implementations of L{ITLSTransport}.
iÿÿÿÿ(   t   ReactorBuilder(   t   ServerFactoryt   ClientFactoryt   Protocol(   t   ITLSTransport(   t   Deferredt   DeferredList(   t   ConnectionClosed(   t   SkipTest(   t   platform(   t   FILETYPE_PEM(   t   PrivateCertificatet   KeyPair(   t   ClientContextFactoryt   SSLClientTestsMixinc           B   sj   e  Z d  Z e d	 k r! d Z n  e j ƒ  rJ d Z i e d 6e d 6Z	 n  d Z
 d Z d „  Z d „  Z RS(
   s<   
    Mixin defining tests relating to L{ITLSTransport}.
    s   OpenSSL is unavailablesc   For some reason, these reactors don't deal with SSL disconnection correctly on Windows.  See #3371.s*   twisted.internet.glib2reactor.Glib2Reactors(   twisted.internet.gtk2reactor.Gtk2ReactorsW  -----BEGIN CERTIFICATE-----
MIIDBjCCAm+gAwIBAgIBATANBgkqhkiG9w0BAQQFADB7MQswCQYDVQQGEwJTRzER
MA8GA1UEChMITTJDcnlwdG8xFDASBgNVBAsTC00yQ3J5cHRvIENBMSQwIgYDVQQD
ExtNMkNyeXB0byBDZXJ0aWZpY2F0ZSBNYXN0ZXIxHTAbBgkqhkiG9w0BCQEWDm5n
cHNAcG9zdDEuY29tMB4XDTAwMDkxMDA5NTEzMFoXDTAyMDkxMDA5NTEzMFowUzEL
MAkGA1UEBhMCU0cxETAPBgNVBAoTCE0yQ3J5cHRvMRIwEAYDVQQDEwlsb2NhbGhv
c3QxHTAbBgkqhkiG9w0BCQEWDm5ncHNAcG9zdDEuY29tMFwwDQYJKoZIhvcNAQEB
BQADSwAwSAJBAKy+e3dulvXzV7zoTZWc5TzgApr8DmeQHTYC8ydfzH7EECe4R1Xh
5kwIzOuuFfn178FBiS84gngaNcrFi0Z5fAkCAwEAAaOCAQQwggEAMAkGA1UdEwQC
MAAwLAYJYIZIAYb4QgENBB8WHU9wZW5TU0wgR2VuZXJhdGVkIENlcnRpZmljYXRl
MB0GA1UdDgQWBBTPhIKSvnsmYsBVNWjj0m3M2z0qVTCBpQYDVR0jBIGdMIGagBT7
hyNp65w6kxXlxb8pUU/+7Sg4AaF/pH0wezELMAkGA1UEBhMCU0cxETAPBgNVBAoT
CE0yQ3J5cHRvMRQwEgYDVQQLEwtNMkNyeXB0byBDQTEkMCIGA1UEAxMbTTJDcnlw
dG8gQ2VydGlmaWNhdGUgTWFzdGVyMR0wGwYJKoZIhvcNAQkBFg5uZ3BzQHBvc3Qx
LmNvbYIBADANBgkqhkiG9w0BAQQFAAOBgQA7/CqT6PoHycTdhEStWNZde7M/2Yc6
BoJuVwnW8YxGO8Sn6UJ4FeffZNcYZddSDKosw8LtPOeWoK3JINjAk5jiPQ2cww++
7QGG/g5NDjxFZNDJP1dGiLAxPW6JXwov4v0FmdzfLOZ01jDcgQQZqEpYlgpuI5JE
WUQ9Ho4EzbYCOQ==
-----END CERTIFICATE-----
sñ  -----BEGIN RSA PRIVATE KEY-----
MIIBPAIBAAJBAKy+e3dulvXzV7zoTZWc5TzgApr8DmeQHTYC8ydfzH7EECe4R1Xh
5kwIzOuuFfn178FBiS84gngaNcrFi0Z5fAkCAwEAAQJBAIqm/bz4NA1H++Vx5Ewx
OcKp3w19QSaZAwlGRtsUxrP7436QjnREM3Bm8ygU11BjkPVmtrKm6AayQfCHqJoT
ZIECIQDW0BoMoL0HOYM/mrTLhaykYAVqgIeJsPjvkEhTFXWBuQIhAM3deFAvWNu4
nklUQ37XsCT2c9tmNt1LAT+slG2JOTTRAiAuXDtC/m3NYVwyHfFm+zKHRzHkClk2
HjubeEgjpj32AQIhAJqMGTaZVOwevTXvvHwNEH+vRWsAYU/gbx+OQB+7VOcBAiEA
oolb6NMg/R3enNPvS1O4UU1H8wpaF77L4yiSWlE0p4w=
-----END RSA PRIVATE KEY-----
c         C   s1   t  j |  j t j |  j t ƒ t ƒ } | j ƒ  S(   sM   
        Return a new SSL context suitable for use in a test server.
        (   R   t   loadt   _certificateTextR   t   _privateKeyTextR
   t   options(   t   selft   cert(    (    sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyt   getServerContextM   s
    	c            ss  d t  f d „  ƒ  Y} t ƒ  } t ƒ  | _ | | _ |  j ƒ  | _ t ƒ  } t ƒ  | _ | | _ t ƒ  | _ | j j	 | j _	 g  ‰ t
 | j | j g d t ƒ} ‡ f d †  } | j | ƒ |  j ƒ  ‰  ˆ  j d | d d ƒ} |  j | j ƒ ˆ  j | j ƒ  j | j ƒ  j | ƒ } |  j | j ƒ | j ‡  f d †  ƒ |  j ˆ  ƒ ˆ d j t ƒ ˆ d	 j t ƒ d
 S(   sO  
        L{ITCPTransport.loseConnection} ends a connection which was set up with
        L{ITLSTransport.startTLS} and which has recently been written to.  This
        is intended to verify that a socket send error masked by the TLS
        implementation doesn't prevent the connection from being reported as
        closed.
        t   ShortProtocolc           B   s#   e  Z d  „  Z d „  Z d „  Z RS(   c         S   sk   t  j |  j ƒ sA |  j j } d  |  j _ | j t d ƒ ƒ d  S|  j j |  j j	 ƒ |  j j
 d ƒ d  S(   Ns   No ITLSTransport supportt   x(   R   t
   providedByt	   transportt   factoryt   finishedt   Nonet   errbackR   t   startTLSt   contextt   write(   R   R   (    (    sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyt   connectionMadea   s    c         S   s!   |  j  j d ƒ |  j  j ƒ  d  S(   Nt   y(   R   R    t   loseConnection(   R   t   data(    (    sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyt   dataReceivedo   s    c         S   s8   |  j  j } | d  k	 r4 d  |  j  _ | j | ƒ n  d  S(   N(   R   R   R   t   callback(   R   t   reasonR   (    (    sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyt   connectionLosty   s    (   t   __name__t
   __module__R!   R%   R(   (    (    (    sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyR   `   s   		
t   consumeErrorsc            s'   ˆ  j  |  d d |  d d g ƒ d  S(   Ni    i   (   t   extend(   t   results(   t   lostConnectionResults(    sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyt
   cbFinished   s    i    t	   interfaces	   127.0.0.1c            s
   ˆ  j  ƒ  S(   N(   t   stop(   t   ign(   t   reactor(    sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyt   <lambda>   s    i   N(   R   R   R   R   t   protocolR   R   R   R   t   methodR   t   Truet   addCallbackt   buildReactort	   listenTCPt
   addCleanupt   stopListeningt
   connectTCPt   getHostt   hostt   portt
   disconnectt
   runReactort   trapR   (   R   R   t   serverFactoryt   clientFactoryR   R/   R@   t	   connector(    (   R3   R.   sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyt&   test_disconnectAfterWriteAfterStartTLSX   s4    !					!N(   R)   R*   t   __doc__R
   R   t   skipR	   t	   isWindowst   msgt   skippedReactorsR   R   R   RG   (    (    (    sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyR      s   		N(    RH   t   typet   __metaclass__t#   twisted.internet.test.reactormixinsR    t   twisted.internet.protocolR   R   R   t   twisted.internet.interfacesR   t   twisted.internet.deferR   R   t   twisted.internet.errorR   t   twisted.trial.unittestR   t   twisted.python.runtimeR	   t   OpenSSL.cryptoR
   t   ImportErrorR   t   twisted.internet.sslR   R   R   R   t   globalst   updatet   makeTestCaseClasses(    (    (    sB   /usr/lib/python2.7/dist-packages/twisted/internet/test/test_tls.pyt   <module>   s    
‡