ó
pAçRc           @   sS   d  d l  Z d  d l Z d  d l j Z d  d l j Z d e j f d „  ƒ  YZ d S(   iÿÿÿÿNt   Runnerc           B   sV   e  Z d  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z d „  Z	 d „  Z
 RS(	   i   c         C   sf   t  t |  ƒ j | ƒ t j d ƒ |  _ d |  _ d d g |  _ t j	 j
 t j d |  j ƒ |  _ d  S(   Ni   t   3000t   3001t   3002s   results-%s.json(   t   superR    t   __init__t   utilt   random_letterst   secrett   client_portt   backend_portst   ost   patht   joint   test_frameworkt   data_directoryt   results_path(   t   selft   options(    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyR      s    		c         C   s   t  j j t  j j t ƒ d ƒ S(   Ns   ..(   R   R   R   t   dirnamet   __file__(   R   (    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyt   code_directory   s    c         C   s   |  j  ƒ  d  S(   N(   t   run_build_sh(   R   (    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyt   hook_prerun   s    c         C   sE   y t  | ƒ } Wn t k
 r$ d  SXt j j | ƒ } | j ƒ  | S(   N(   t   opent   IOErrort   NoneR   t   jsont   loadt   close(   R   R   t   ft   results(    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyt   read_result_file   s    
c         C   s   t  d | d | d d ƒ S(   Ng{®Gáz„?t   good_responsest   backend_deficitg       @(   t   max(   R   R   (    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyt   score#   s    c         C   s7   t  j t j j |  j ƒ  d d ƒ d |  j d | g ƒ S(   Nt   network_simulations
   backend.jss   --secrets	   --in-port(   t
   subprocesst   PopenR   R   R   R   R   (   R   t   port(    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyt   spinup_backend&   s    	c      	   C   s¹  t  j j d ƒ g  } x' |  j D] } | j |  j | ƒ ƒ q  Wt j t j	 j
 |  j ƒ  d ƒ d |  j d d j
 |  j ƒ g ƒ } t j t j	 j
 |  j ƒ  d d ƒ d |  j d	 |  j d
 |  j | g d t j ƒ} | j ƒ  \ } } x | D] } | j ƒ  qì W| j ƒ  t  j j d ƒ |  j |  j ƒ }	 |	 d  k ryi |  j |	 ƒ d 6|	 d d 6|	 d d 6|	 d d 6|	 d 6}
 n i t d 6d d 6}
 |
 j i | d 6|  j d 6| j d 6ƒ |
 S(   Ns   Beginning run.t   shields	   --in-ports   --out-portst   ,R%   s   sword.jss   --secrets
   --out-ports   --results-patht   stdins   Finished runR$   R!   R"   t   correctR   s'   `sword.js` did not write a results filet   unclean_descriptiont   inputt   levelt
   exitstatus(   R   t   loggert   infoR
   t   appendR)   R&   R'   R   R   R   R   R	   R   R   t   PIPEt   communicatet	   terminateR    R   R$   t   Falset   updatet   LEVELt
   returncode(   R   R/   t   backend_runnersR(   t   shield_runnert   sword_runnert   stdoutt   stderrt   brR   t   output_dictionary(    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyt	   run_input-   sF    			 

	
c         C   s  | d } | d k r, t  j j d | ƒ nâ | d sP t  j j d | d ƒ n¾ | d } | d } | d | } | d	 d
 } t | d	 d d d ƒ } | d	 d
 }	 t | d	 d d d ƒ }
 d } t  j j | i | d 6| d 6| d 6| d 6| d 6|	 d 6|
 d 6ƒ d  S(   NR1   i    s-   Your `shield` exited uncleanly. Exit code: %iR-   s   Test case failed. Reason: %sR.   R$   g        R   R!   R"   g       @i   sc  Test case passed. Your score: %(your_score)f. Benchmark score: %(benchmark_score)f. You/Benchmark: %(score_ratio)f.You handled %(your_good_responses)s legitimate responses and you received %(your_deficit)s negative points for idle time on the backends. The benchmark handled %(benchmark_good_responses)s and received %(benchmark_deficit)s negative points.t
   your_scoret   benchmark_scoret   score_ratiot   your_good_responsest   your_deficitt   benchmark_good_responsest   benchmark_deficit(   R   R2   R3   t   errort   round(   R   t	   test_caset   resultR;   RE   RD   RF   RG   RH   RI   RJ   t   msg(    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyt   report_resultV   s,    





(   t   __name__t
   __module__R:   R   R   R   R    R$   R)   RC   RP   (    (    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyR       s   									)(	   t   os.pathR   R&   t   lib.test_frameworkR   t   lib.utilR   t   AbstractRunnerR    (    (    (    s+   /Users/bryon/r-bryfry/level2/test/runner.pyt   <module>   s   