
Kc           @@  s   d  Z  d d k l Z d d k Z d d k Z d d k Z d d k l Z d d k l	 Z	 d d k
 l Z d d k l Z l Z l Z l Z d	 e	 f d
     YZ d e f d     YZ d S(   s  
A fake server that "responds" to API methods with pre-canned responses.

All of these responses come from the spec, so if for some reason the spec's
wrong the tests might fail. I've indicated in comments the places where actual
behavior differs from the spec.
i    (   t   absolute_importN(   t   assert_equal(   t   CloudServers(   t   CloudServersClienti   (   t   failt	   assert_int   assert_not_int   assert_has_keyst
   FakeServerc           B@  s,   e  Z d d d   Z d d  Z d   Z RS(   c         C@  s)   t  t |   i d d  t   |  _ d  S(   Nt   usernamet   apikey(   t   superR   t   __init__t
   FakeClientt   client(   t   selfR	   t   password(    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyR      s    c         C@  s   | | f } |  i  i d d d !} |  i  i p t d |  | | j p t d | |  | d j	 o t |  i  i d d |  n g  |  i  _ d S(   s<   
        Assert than an API method was just called.
        ii    i   s&   Expected %s %s but no calls were made.s   Expected %s %s; got %s %sN(   R   t	   callstackt   AssertionErrort   NoneR   (   R   t   methodt   urlt   bodyt   expectedt   called(    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   assert_called   s    c         C@  s   d  S(   N(    (   R   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   authenticate(   s    N(   t   __name__t
   __module__R   R   R   R   (    (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyR      s   R   c           B@  s:  e  Z d    Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z	 d   Z
 d	   Z d
   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z d   Z  d   Z! d    Z" d!   Z# RS("   c         C@  s   d |  _  d |  _ g  |  _ d  S(   NR	   R
   (   R	   R
   R   (   R   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyR   ,   s    		c         K@  s   | d j o t  d |  n | d j o t d |  n | i d  i d d  i d d  } d	 | i   | f } t |  |  p t d
 | | f  n |  i i | | | i	 d d   f  t |  |  |   \ } } t i h | d 6 | f S(   Nt   GETt   DELETER   t   PUTt   POSTt   /t   _t   .s   %s_%ss    Called unknown API method: %s %st   status(   s   GETs   DELETE(   s   PUTs   POST(   R   R   t   stript   replacet   lowert   hasattrR   R   t   appendt   getR   t   getattrt   httplib2t   Response(   R   R   R   t   kwargst
   munged_urlt   callbackR$   R   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   _cs_request1   s    '%c         C@  s   | S(   N(    (   R   R   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   _munge_get_urlD   s    c      
   K@  s8  d h h h d d 6d d 6d d 6d d	 6d
 d 6d d 6d d 6h d d 6d d 6d d 6d d	 6d d 6d d 6d d 6h d d 6d d 6d d 6d d	 6d
 d 6d d 6d d 6h d d 6d d 6d d 6d d	 6d d 6d d 6d d 6h d d 6d d 6d d 6d d	 6d d 6d d 6d d 6g d 6h d d 6d d  6d! d" 6d# 6d$ 6f S(%   Ni   R    t   verbt   *t   URIs   .*t   regexi
   t   valuei   t	   remainingt   MINUTEt   unitil,Jt	   resetTimes	   */serverss	   ^/serversi2   i1   t   DAYi_-JR   R   s   *changes-since*s   changes-sincei   R   id   t   ratei   t   maxTotalRAMSizet   maxIPGroupsi   t   maxIPGroupMemberst   absolutet   limits(    (   R   t   kw(    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt
   get_limitsK   sX    	c         K@  s3   d h h d d 6d d 6h d d 6d d 6g d 6f S(	   Ni   i  t   ids   sample-servert   namei.  s   sample-server2t   servers(    (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_servers   s    c         K@  s   d h h	 d d 6d d 6d d 6d d	 6d
 d 6d d 6d d 6h d d g d 6d g d 6d 6h d d 6d d 6d 6h d d 6d d 6d d 6d d	 6d d 6d d 6h d g d 6d  g d 6d 6h d! d 6d 6g d" 6f S(#   Ni   i  RE   s   sample-serverRF   i   t   imageIdi   t   flavorIdt    e4d909c290d0fb1ca068ffaddf22cbd0t   hostIdt   BUILDR$   i<   t   progresss   1.2.3.4s   5.6.7.8t   publics   10.11.12.13t   privatet	   addressess
   Web Head 1s   Server Labels   2.1s   Image Versiont   metadatai.  s   sample-server2t    9e107d9d372bb6826bd81d3542a419d6t   ACTIVEs
   9.10.11.12s   10.11.12.14s   DB 1RG   (    (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_servers_detail   s6    
c         K@  s   t  | i   d g  t | d d d d d g d d d d	 g d	 | d j o3 x0 | d d	 D] } t | d d
 d g qb Wn d |  i   d f S(   Nt   servert   requiredRF   RI   RJ   t   optionalt   sharedIpGroupIdRR   t   personalityt   patht   contentsi   i   (   R   t   keysR   t   get_servers_1234(   R   R   RC   t   pfile(    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   post_servers   s     c         K@  s)   h |  i    d d d d 6} d | f S(   Ni   RG   i    RV   i   (   RU   (   R   RC   t   r(    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyR^      s    c         K@  s4   t  | i   d g  t | d d d d g d S(   NRV   RX   RF   t	   adminPassi   (   i   N(   R   R]   R   R   (   R   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   put_servers_1234   s    c         K@  s   d S(   Ni   (   i   N(   R   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   delete_servers_1234   s    c         K@  s#   d h |  i    d d d d 6f S(   Ni   i   RV   RQ   (   R^   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_servers_1234_ips   s    c         K@  s#   d h |  i    d d d d 6f S(   Ni   i   RQ   RO   (   Re   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_servers_1234_ips_public   s    c         K@  s#   d h |  i    d d d d 6f S(   Ni   i   RQ   RP   (   Re   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_servers_1234_ips_private   s    c         K@  s4   t  | i   d g  t | d d d d g d S(   Nt   shareIpRW   RY   t   configureServeri   (   i   N(   R   R]   R   R   (   R   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt#   put_servers_1234_ips_public_1_2_3_4   s    c         K@  s   d S(   Ni   (   i   N(   R   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt&   delete_servers_1234_ips_public_1_2_3_4   s    c         K@  s  t  t | i    d  | i   d } | d j o9 t  | | i   d g  t | | d d d g  n | d j o t  | | i   d g  n | d	 j o t  | | i   d
 g  nT | d j o t  | | d   d S| d j o t  | | d   n t d |  d S(   Ni   i    t   reboott   typet   HARDt   SOFTt   rebuildRI   t   resizeRJ   t   confirmResizei   t   revertResizes   Unexpected server action: %si   (   i   N(   i   N(   R   t   lenR]   R   R   R   (   R   R   RC   t   action(    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   post_servers_1234_action   s     c         K@  s3   d h h d d 6d d 6h d d 6d d 6g d 6f S(	   Ni   i   RE   s   256 MB ServerRF   i   s   512 MB Servert   flavors(    (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_flavors   s    c         K@  sO   d h h d d 6d d 6d d 6d d	 6h d
 d 6d d 6d d 6d d	 6g d 6f S(   Ni   i   RE   s   256 MB ServerRF   i   t   rami
   t   diski   s   512 MB Serveri   i   Rw   (    (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_flavors_detail   s    c         K@  s#   d h |  i    d d d d 6f S(   Ni   i   Rw   i    t   flavor(   R{   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_flavors_1  s    c         K@  s#   d h |  i    d d d d 6f S(   Ni   i   Rw   R|   (   R{   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_flavors_2  s    c         K@  s3   d h h d d 6d d 6h d d 6d d 6g d 6f S(	   Ni   i   RE   s
   CentOS 5.2RF   i   s   My Server Backupt   images(    (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt
   get_images  s    c         K@  sk   d h h d d 6d d 6d d 6d d	 6d
 d 6h d d 6d d 6d d 6d d 6d d	 6d d 6d d 6g d 6f S(   Ni   i   RE   s
   CentOS 5.2RF   s   2010-10-10T12:00:00Zt   updateds   2010-08-10T12:00:00Zt   createdRT   R$   i  s   My Server Backupi   t   serverIdt   SAVINGiP   RN   R   (    (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_images_detail  s    c         K@  s#   d h |  i    d d d d 6f S(   Ni   i   R   i    t   image(   R   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_images_1&  s    c         K@  s#   d h |  i    d d d d 6f S(   Ni   i   R   R   (   R   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_images_2)  s    c         K@  sD   t  | i   d g  t | d d d d g d |  i   d f S(   NR   RW   R   RF   i   i   (   R   R]   R   R   (   R   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   post_images,  s    c         K@  s   d S(   Ni   (   i   N(   R   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   delete_images_11  s    c         K@  s&   d h h t  d 6d d 6d d 6d 6f S(   Ni   t   enabledt   THURSDAYt   weeklyt   H_0400_0600t   dailyt   backupSchedule(   t   True(   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt    get_servers_1234_backup_schedule7  s    	c         K@  s=   t  | i   d g  t | d d d g d d d g d S(	   NR   RW   R   RX   R   R   i   (   i   N(   R   R]   R   R   (   R   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt!   post_servers_1234_backup_schedule>  s    #c         K@  s   d S(   Ni   (   i   N(   R   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt#   delete_servers_1234_backup_scheduleC  s    c         K@  s3   d h h d d 6d d 6h d d 6d d 6g d 6f S(	   Ni   i   RE   t   group1RF   i   t   group2t   sharedIpGroups(    (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_shared_ip_groupsI  s    c         K@  sG   d h h d d 6d d 6d g d 6h d d 6d	 d 6d
 g d 6g d 6f S(   Ni   i   RE   R   RF   i  RG   i   R   i.  R   (    (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_shared_ip_groups_detailO  s    c         K@  s#   d h |  i    d d d d 6f S(   Ni   i   R   i    t   sharedIpGroup(   R   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   get_shared_ip_groups_1U  s    c         K@  s   t  | i   d g  t | d d d g d d g d h h d d 6| d d d 6d | d j o | d d g p d  d	 6d 6f S(
   NR   RW   RF   RX   RV   i   iu'  RE   RG   (   R   R]   R   R   (   R   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   post_shared_ip_groupsX  s     	c         K@  s   d S(   Ni   (   i   N(   R   (   R   RC   (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   delete_shared_ip_groups_1a  s    ($   R   R   R   R1   R2   RD   RH   RU   R`   R^   Rc   Rd   Re   Rf   Rg   Rj   Rk   Rv   Rx   R{   R}   R~   R   R   R   R   R   R   R   R   R   R   R   R   R   R   (    (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyR   +   sD   				;		$	
																											(   t   __doc__t
   __future__R    R,   t   urlparset   urllibt
   nose.toolsR   t   cloudserversR   t   cloudservers.clientR   t   utilsR   R   R   R   R   R   (    (    (    s6   /Users/jacob/Projects/cloudservers/tests/fakeserver.pyt   <module>   s   "