o
    b
&                     @   sX   d dl Z dd Zdd Zdd Zdd	 Zd
d Zdd ZG dd dZG dd dZdS )    Nc                  C   s8   dd l } d}| tdd}|d | }d d d |d |gS )Nr   i   @   d   )randomchoicerange)r   total	fakepcent	remaining r
   3/usr/share/virt-manager/virtManager/lib/testmock.pyfake_job_info   s
   r   c                 C   s   dd l }| j}||jkr2|dddddddddd	ddgd
dddddddddgd
d}|S d|ddddgd
i}|S )Nr   z10.0.0.1   )addrprefixtypezfd00:beef::1   r   zfe80::1@   )hwaddraddrsz00:00:00:00:00:00z	127.0.0.1   z::1)enp1s0lovnet0z10.0.0.3)libvirtmacaddr(VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_AGENT)ifacesourcer   macretr
   r
   r   fake_interface_addresses   s$   







r    c                  C   s4   ddd ddddddd		d
dd d dddddd		g} | S )NXXXiAH_
1448103320virbr1zfd00:beef::2BADr   r   )	clientid
expirytimehostnameiaidr   ipaddrr   r   r   YYYz10.0.0.2NOPEr   r   r
   )r   r
   r
   r   fake_dhcp_leases*   s,   
r,   c                    sJ   dd l }| jjj|   |j|j fdd}| d| d S )Nr   c                     s     }  | d  d S N)lookupByName)dombackendcbreasonstatevmnamer
   r   time_cbH   s   
z*schedule_fake_agent_event.<locals>.time_cb  )r   configCLITestOptionsfake_agent_eventget_backend8VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_STATE_CONNECTED7VIR_CONNECT_DOMAIN_EVENT_AGENT_LIFECYCLE_REASON_CHANNELtimeout_add)connr2   r   r6   r
   r0   r   schedule_fake_agent_eventA   s   
r@   c                    sX   dd l | jjj|    fdd} fdd}| d| | d| d S )Nr   c                     s(     } j}d} | ||d  d S )Nr   )nodeDeviceLookupByNameVIR_NODE_DEVICE_EVENT_CREATED)nodedevr4   r3   )r1   r   lifecycle_cbnodenamer
   r   lifecycle_cb_wrapperT   s   
z9schedule_fake_nodedev_event.<locals>.lifecycle_cb_wrapperc                     s     }  | d  d S r-   )rA   )rC   )r1   rE   	update_cbr
   r   update_cb_wrapperZ   s   
z6schedule_fake_nodedev_event.<locals>.update_cb_wrapperr7   i  )r   r8   r9   fake_nodedev_eventr;   r>   )r?   rD   rG   rF   rH   r
   )r1   r   rD   rE   rG   r   schedule_fake_nodedev_eventO   s   
rJ   c                 C   sP   | }dd l }|jdd d d g|jdd d d gg}||| tdd |D s&J d S )Nr   UsernamePasswordc                 S   s   g | ]}t |d  qS )   )bool).0credr
   r
   r   
<listcomp>j   s    z!fake_openauth.<locals>.<listcomp>)r   VIR_CRED_USERNAMEVIR_CRED_PASSPHRASEall)r?   r2   dataignorer   credsr
   r
   r   fake_openauthb   s   
rX   c                   @   s   e Zd Zedd ZdS )fakeVirtBootstrapc                  K   s   dd l }dd l}|d}|d | d ddi |d |d | d dd	i |d |d
 | d ddi d| v rFtdd S )Nr   virtBootstrapzmock virtBootstrap msg1progress_cbstatusmsg1g      ?zmock virtBootstrap msg2msg2zmock virtBootstrap msg3msg3usernamez$fakeVirtBootstrap mock auth failure!)timelogging	getLoggerinfosleepRuntimeError)kwargsra   rb   logr
   r
   r   	bootstrapn   s   





zfakeVirtBootstrap.bootstrapN)__name__
__module____qualname__staticmethodri   r
   r
   r
   r   rY   m   s    rY   c                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	CLITestOptionsClassa  
    Helper class for parsing and tracking --test-* options.
    The suboptions are:

    * first-run: Run the app with fresh gsettings values saved to
        a keyfile, mimicking a first app run. Also sets
        GSETTINGS to use memory backend, in case any other app
        preferences would be affected. The ui testsuite sets this
        for most tests.

    * xmleditor-enabled: Force the xmleditor gsettings preference on.

    * gsettings-keyfile: Override the gsettings values with those
        from the passed in keyfile, to test with different default
        settings.

    * leak-debug: Enabling this will tell us, at app exit time,
        which vmmGObjects were not garbage collected. This is caused
        by circular references to other objects, like a signal that
        wasn't disconnected. It's not a big deal, but if we have objects
        that can be created and destroyed a lot over the course of
        the app lifecycle, every non-garbage collected class is a
        memory leak. So it's nice to poke at this every now and then
        and try to track down what we need to add to class _cleanup handling.

    * no-events: Force disable libvirt event APIs for testing fallback

    * break_setfacl: For setfacl calls to fail, for test scenarios.
        This is hit via the directory search permissions checking
        for disk image usage for qemu

    * enable-libguestfs: Force enable the libguestfs gsetting
    * disable-libguestfs: Force disable the libguestfs gsetting

    * test-managed-save: Triggers a couple conditions for testing
        managed save issues

    * test-vm-run-fail: Make VM run fail, so we can test the error path

    * spice-agent: Make spice-agent detection return true in viewer.py

    * firstrun-uri: If set, use this as the initial connection URI
        if we are doing firstrun testing
    * fake-no-libvirtd: If doing firstrun testing, fake that
        libvirtd is not installed
    * fake-vnc-username: Fake VNC username auth request
    * fake-console-resolution: Fake viewer console resolution response.
        Spice doesn't return values here when we are just testing
        against seabios in uitests, this fakes it to hit more code paths
    * fake-systray: Enable the fake systray window
    * fake-virtbootstrap: Mock the virtBootstrap module, since getting
        it to actually work across fedora versions is hard
    * object-denylist=NAME: Make object initialize for that name
        fail to test some connection code paths
    * conn-crash: Test connection abruptly closing like when
        libvirtd is restarted.
    * fake-agent-event: Fake a qemu guest agent API event
    * fake-nodedev-event: Fake nodedev API events
    * fake-openauth: Fake user+pass response from libvirt openauth,
        for testing the TCP URI auth dialog
    * fake-session-error: Fake a connection open error that
        triggers logind session lookup
    * short-poll: Use a polling interval of only .1 seconds to speed
        up the uitests a bit
    c                 C   s<   t  }|D ]}|t |d q| |}| | d S )N,)setupdatesplit_parse_process)selftest_options_stroptsetoptstr	first_runr
   r
   r   __init__   s
   
zCLITestOptionsClass.__init__c                    s   fdd} fdd}|d}|d| _ |d| _|d| _|d	| _|d
| _|d| _|d| _|d| _|d| _|d| _	|d| _
|d| _|d| _|d| _|d| _|d| _|d| _|d| _|d| _|d| _|d| _|d| _|d| _ rtd  |S )Nc                    s   |  vrdS   |  dS )NFT)remove)optnamerw   r
   r   _get   s   
z(CLITestOptionsClass._parse.<locals>._getc                    s:    D ]}| | d r | |ddd   S qd S )N=r   )
startswithr{   rr   )r|   optr}   r
   r   
_get_value   s   
z.CLITestOptionsClass._parse.<locals>._get_valuez	first-runz
leak-debugz	no-eventszxmleditor-enabledzgsettings-keyfilezbreak-setfaclzdisable-libguestfszenable-libguestfsztest-managed-saveztest-vm-run-failzspice-agentzfirstrun-urizfake-no-libvirtdzfake-vnc-usernamezfake-console-resolutionzfake-systrayzobject-denylistz
conn-crashzfake-agent-eventzfake-nodedev-eventzfake-openauthzfake-session-errorz
short-pollzfake-virtbootstrapzUnknown --test-options keys: %s)
leak_debug	no_eventsxmleditor_enabledgsettings_keyfilebreak_setfacldisable_libguestfsenable_libguestfstest_managed_savetest_vm_run_failspice_agentfirstrun_urifake_no_libvirtdfake_vnc_usernamefake_console_resolutionfake_systrayobject_denylist
conn_crashr:   rI   rX   fake_session_error
short_pollfake_virtbootstraprf   )ru   rw   r~   r   ry   r
   r}   r   rs      s:   






















zCLITestOptionsClass._parsec                    sz   |rdt jd< |r&| js&dd l}dd l}|jdd  | _| fdd | jr;dd l}dd	 }d
|j	_
||j	_d S d S )NmemoryGSETTINGS_BACKENDr   zvirtmanager-firstrun-keyfile)r   c                      s
   t  S r-   )osunlinkr
   filenamer
   r   <lambda>   s   
 z.CLITestOptionsClass._process.<locals>.<lambda>c                  _   s   t d)Nz$Fake search fix fail from test suite)rf   )argsrg   r
   r
   r   fake_search  s   z1CLITestOptionsClass._process.<locals>.fake_searchgetfacl)r   environr   atexittempfilemktempregisterr   virtinst.diskbackenddiskbackendSETFACL_fix_perms_chmod)ru   ry   r   r   virtinstr   r
   r   r   rt      s   

zCLITestOptionsClass._processN)rj   rk   rl   __doc__rz   rs   rt   r
   r
   r
   r   rn      s
    A+rn   )	r   r   r    r,   r@   rJ   rX   rY   rn   r
   r
   r
   r   <module>   s   