Skip to main content
Glama
test_error_handling.cpython-313-pytest-8.3.5.pyc44.4 kB
� .zh�;��z�SSKrSSKJs Jr SSKrSSKJrJ r J r SSK r SSK J r JrJrJrJrJrJrJr SSKrSSKr\R.S5r\R.S5r\R4R6S5r\R4R6S5r\R4R6S5r\R4R6S 5r\R4R6S 5r \R4R6S 5r!\R4R6S 5r"\R4R6S 5r#\R4R6S5r$\R4R6S5r%\R4R6S5r&\R4R6S5r'\R4R6S5r(\R4R6S5r)\R4R6S5r*\R4R6S5r+\R4R6\"S5\"S5S555r,\R4R6\"S5S55r-\R4R6\"S5S55r.\R4R6\"S5S55r/\R4R6\"S5S55r0\R4R6\"S5S55r1\R4R6\"S5S55r2g)�N)�patch� MagicMock�Mock)�handle_request� create_vm�start_vm�stop_vm� reboot_vm� get_vnc_ports� get_vm_ip�list_vmsc��[5nU$)z,Fixture to provide a mock libvirt connection�r)�conns �9/home/steve/projects/kvm-mcp/tests/test_error_handling.py� mock_connrs�� �;�D� �K�c��[5nU$)z(Fixture to provide a mock libvirt domainr)�domains r� mock_domainrs���[�F� �Mrc ��z# �[S5n[S5n[SS9Ul[5nX l[R"S5UR l[R"S5URlSSS S S S S S.S.SS.n[[R"U55IShv�N nUSnSoeU:How(do[R"SU4SXV45[R"U5[R"U5S.-nSSU0-n [[R"U 55eS=n=pvSoUU;ow(d�[R"SU4SXT45[R"U5S[ R""5;d[R$"U5(a[R"U5OSS.-n SSU 0-n [[R"U 55eS=pWUSS nS!of*o�U :How(do[R"SU4S"X\45[R"U5[R"U5S.-n S#S$U 0-n [[R"U 55eS=n=n=plSoTSS%oeU;ow(do[R"SU4S&XV45[R"U5[R"U5S.-nSSU0-n [[R"U 55eS=n=pvSSS5 SSS5 gGNb!,(df  N=f!,(df  g=f7f)'z2Test handling of libvirt errors during VM creation� libvirt.open�subprocess.runr)� returncodezdomain not foundzFailed to define VM�2.0� tools/callr�test-vm�����name�memory�vcpus� disk_size�r"� arguments���jsonrpc�method�params�idNr*��==�z%(py1)s == %(py4)s��py1�py4�assert %(py6)s�py6�error��in�z%(py1)s in %(py3)s�response�r2�py3�assert %(py5)s�py5�code�[�z%(py1)s == -%(py4)s�assert %(py7)s�py7�message�z%(py1)s in %(py4)s)rr� return_value�libvirt� libvirtError� lookupByName� side_effect� defineXMLr�json�dumps� @pytest_ar�_call_reprcompare� _saferepr�AssertionError�_format_explanation� @py_builtins�locals�_should_repr_global_name)� mock_open�mock_runr�requestr:� @py_assert0� @py_assert3� @py_assert2� @py_format5� @py_format7� @py_format4� @py_format6� @py_assert5� @py_format8s r�test_create_vm_libvirt_errorrbs,��� �~� �)� �� �H� )�Q� 7����K� �!*��-4�-A�-A�BT�-U� ���*�*1�*>�*>�?T�*U� ���'��"�#�%�"��!#� ���  ��(�� � �7�(;�<�<��� �"�+�e�+�e�+�+�+�+�+�"�+�+�+�"�+�+�+�e�+�+�+�+�+�+�+��"�(�"�"�"�"�"�w�"�"�"�w�"�"�"�"�"�"�(�"�"�"�"�(�"�"�"�"�"�"�"��� ��(�2�U�2�F�2�F�2�2�2�2�2�(�2�2�2�(�2�2�2�U�2�2�2�2�2�2�2�$�D��(9�)�(D�D�(D�D�D�D�D�D�$�D�D�D�$�D�D�D�(D�D�D�D�D�D�D�D�= !� � �6=�5 !� �� � �sG� L;� L*�BL�4L�5IL�L*� L;�L� L' �#L*�* L8�4L;c��# �[S5n[R"S5URlXlSSSSS0S.S S .n[ [R"U55IS hv�N nUS nSoTU:Hof(do[R"S U4SXE45[R"U5[R"U5S.-nSSU0-n[[R"U55eS =n=peSoDU;of(d�[R"SU4SXC45[R"U5S[R"5;d[R "U5(a[R"U5OSS.-n SSU 0-n [[R"U 55eS =pFUSSnSoU*o�U :Hof(do[R"S U4SXK45[R"U5[R"U5S.-n SSU 0-n [[R"U 55eS =n=n=p[SoCSSoTU;of(do[R"SU4SXE45[R"U5[R"U5S.-nSSU0-n[[R"U55eS =n=peS S S 5 g GNZ!,(df  g =f7f) z/Test handling of libvirt errors during VM startr� VM not foundrrrr"rr&r(r)Nr*r.r0r1r4r5r6r7r9r:r;r=r>r?r@rArBrCrDrE�rrGrHrIrJrFrrLrMrNrOrPrQrRrSrTrU� �mock_libvirt_connrVrXr:rYrZr[r\r]r^r_r`ras r�test_start_vm_libvirt_errorrh8s���� �~� �)�5<�5I�5I�.�5Y��&�&�2�!2���"�"��I��� �  ��(�� � �7�(;�<�<��� �"�+�e�+�e�+�+�+�+�+�"�+�+�+�"�+�+�+�e�+�+�+�+�+�+�+��"�(�"�"�"�"�"�w�"�"�"�w�"�"�"�"�"�"�(�"�"�"�"�(�"�"�"�"�"�"�"��� ��(�2�U�2�F�2�F�2�2�2�2�2�(�2�2�2�(�2�2�2�U�2�2�2�2�2�2�2��=�'�!2�9�!=�=�!=�=�=�=�=�=�~�=�=�=�~�=�=�=�!=�=�=�=�=�=�=�=�) � � =�! � ��0� K�AK�(K�)IK�9 K�K� K�Kc��# �[S5n[R"S5URlXlSSSSS0S.S S .n[ [R"U55IS hv�N nUS nSoTU:Hof(do[R"S U4SXE45[R"U5[R"U5S.-nSSU0-n[[R"U55eS =n=peSoDU;of(d�[R"SU4SXC45[R"U5S[R"5;d[R "U5(a[R"U5OSS.-n SSU 0-n [[R"U 55eS =pFUSSnSoU*o�U :Hof(do[R"S U4SXK45[R"U5[R"U5S.-n SSU 0-n [[R"U 55eS =n=n=p[SoCSSoTU;of(do[R"SU4SXE45[R"U5[R"U5S.-nSSU0-n[[R"U55eS =n=peS S S 5 g GNZ!,(df  g =f7f) z.Test handling of libvirt errors during VM stoprrdrrr r"rr&r(r)Nr*r.r0r1r4r5r6r7r9r:r;r=r>r?r@rArBrCrDrErerfs r�test_stop_vm_libvirt_errorrkQs���� �~� �)�5<�5I�5I�.�5Y��&�&�2�!2���"�!��I��� �  ��(�� � �7�(;�<�<��� �"�+�e�+�e�+�+�+�+�+�"�+�+�+�"�+�+�+�e�+�+�+�+�+�+�+��"�(�"�"�"�"�"�w�"�"�"�w�"�"�"�"�"�"�(�"�"�"�"�(�"�"�"�"�"�"�"��� ��(�2�U�2�F�2�F�2�2�2�2�2�(�2�2�2�(�2�2�2�U�2�2�2�2�2�2�2��=�'�!2�9�!=�=�!=�=�=�=�=�=�~�=�=�=�~�=�=�=�!=�=�=�=�=�=�=�=�) � � =�! � �ric��# �[S5n[R"S5URlXlSSSSS0S.S S .n[ [R"U55IS hv�N nUS nSoTU:Hof(do[R"S U4SXE45[R"U5[R"U5S.-nSSU0-n[[R"U55eS =n=peSoDU;of(d�[R"SU4SXC45[R"U5S[R"5;d[R "U5(a[R"U5OSS.-n SSU 0-n [[R"U 55eS =pFUSSnSoU*o�U :Hof(do[R"S U4SXK45[R"U5[R"U5S.-n SSU 0-n [[R"U 55eS =n=n=p[SoCSSoTU;of(do[R"SU4SXE45[R"U5[R"U5S.-nSSU0-n[[R"U55eS =n=peS S S 5 g GNZ!,(df  g =f7f) z0Test handling of libvirt errors during VM rebootrrdrrr r"rr&r(r)Nr*r.r0r1r4r5r6r7r9r:r;r=r>r?r@rArBrCrDrErerfs r�test_reboot_vm_libvirt_errorrmjs���� �~� �)�5<�5I�5I�.�5Y��&�&�2�!2���"�#��I��� �  ��(�� � �7�(;�<�<��� �"�+�e�+�e�+�+�+�+�+�"�+�+�+�"�+�+�+�e�+�+�+�+�+�+�+��"�(�"�"�"�"�"�w�"�"�"�w�"�"�"�"�"�"�(�"�"�"�"�(�"�"�"�"�"�"�"��� ��(�2�U�2�F�2�F�2�2�2�2�2�(�2�2�2�(�2�2�2�U�2�2�2�2�2�2�2��=�'�!2�9�!=�=�!=�=�=�=�=�=�~�=�=�=�~�=�=�=�!=�=�=�=�=�=�=�=�) � � =�! � �ric��v# �[S5n[S5UlSSS0S.SS.n[[R "U55IS hv�N nUS nSoCU:HoU(do[ R"S U4S X445[ R"U5[ R"U5S .-nSSU0-n[[ R"U55eS =n=pTSo3U;oU(d�[ R"SU4SX245[ R"U5S[R"5;d[ R"U5(a[ R"U5OSS.-nSSU0-n [[ R"U 55eS =p5USSnSoD*o�U :HoU(do[ R"S U4SX:45[ R"U5[ R"U5S .-n SSU 0-n [[ R"U 55eS =n=n=pJSo2SSoCU;oU(do[ R"SU4SX445[ R"U5[ R"U5S .-nSSU0-n[[ R"U55eS =n=pTS S S 5 g GNZ!,(df  g =f7f)z1Test handling of errors during VNC port retrievalrzFailed to run virsh commandrrr r&r(r)Nr*r.r0r1r4r5r6r7r9r:r;r=r>r?r@rArBrCrDrE)r� ExceptionrJrrLrMrNrOrPrQrRrSrTrU) rWrXr:rYrZr[r\r]r^r_r`ras r�test_get_vnc_ports_errorrp�s���� �� �H�(�)F�G����"�'���� ��(�� � �7�(;�<�<��� �"�+�e�+�e�+�+�+�+�+�"�+�+�+�"�+�+�+�e�+�+�+�+�+�+�+��"�(�"�"�"�"�"�w�"�"�"�w�"�"�"�"�"�"�(�"�"�"�"�(�"�"�"�"�"�"�"��� ��(�2�U�2�F�2�F�2�2�2�2�2�(�2�2�2�(�2�2�2�U�2�2�2�2�2�2�2�,�L��0A�)�0L�L�0L�L�L�L�L�L�,�L�L�L�,�L�L�L�0L�L�L�L�L�L�L�L�# !� �=� !� �s/� J9�=J(� J%� IJ(� J9�%J(�( J6�2J9c��p# �[S5n[5nXl[5nX!Rl[R "S5UR l[U5nSoCULoU(d�[R"SU4SX445S[R"5;d[R"U5(a[R"U5OS[R"U5S.-nSS U0-n[[R "U55eS=pTSSS5 g!,(df  g=f7f) z.Test handling of errors during VM IP retrievalrz!Failed to get interface addressesN)�is)z%(py0)s is %(py3)s�ip)�py0r<r=r>)rrrFrIrGrH�interfaceAddressesrJr rNrOrSrTrUrPrQrR)rVrrrsr[� @py_assert1r^r_s r�test_get_vm_ip_errorrw�s���� �~� �)��K� �!*���k� �.9���+�5<�5I�5I�Jm�5n� �&�&�2� �{� #����T�z�����r�������r�����r����T�������� � � �s� D6�DD%� D6�% D3�/D6c��# �SSSSS.n[[R"U55IShv�N nUSnSo2U:HoD(do[R"SU4S X#45[R "U5[R "U5S .-nS S U0-n[ [R"U55eS=n=pCS o"U;oD(d�[R"SU4SX!45[R "U5S[R"5;d[R"U5(a[R "U5OSS.-nSSU0-n[ [R"U55eS=p$US SnSo3*o�U :HoD(do[R"SU4SX)45[R "U5[R "U5S .-nSSU0-n [ [R"U 55eS=n=n=p9So!S So2U;oD(do[R"SU4SX#45[R "U5[R "U5S .-nS S U0-n[ [R"U55eS=n=pCgGNR7f)z8Test handling of invalid parameters in JSON-RPC requestsrr�invalidr(r)Nr*r.r0r1r4r5r6r7r9r:r;r=r>r?iZrArBrCzInvalid paramsrDrE) rrLrMrNrOrPrQrRrSrTrU� rXr:rYrZr[r\r]r^r_r`ras r�"test_handle_request_invalid_paramsr{�s�������� �G�$�D�J�J�w�$7�8�8�H� �I� �'�%�'�%� '�'�'�'�'� �'�'�'� �'�'�'�%�'�'�'�'�'�'�'� ��h� �����7����7�������h�����h�������� �G� �V� $�.��.��.�� .�.�.�.�.� $�.�.�.� $�.�.�.��.�.�.�.�.�.�.� �;��0��;�;�;� ;�;�;�;�;� �;�;�;� �;�;�;�;�;�;�;�;�;�;�;� 9�s�*J�I>�IJc��n# �[S[S5S9 SSSSSS S .S .S S .n[[R"U55IShv�N nUSnSo2U:HoD(do[ R "SU4SX#45[ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS=n=pCSo"U;oD(d�[ R "SU4SX!45[ R"U5S[R"5;d[ R"U5(a[ R"U5OSS.-nSSU0-n[[ R"U55eS=p$USSnSo3*o�U :HoD(do[ R "SU4SX)45[ R"U5[ R"U5S.-nSS U0-n [[ R"U 55eS=n=n=p9So!SS!o2U;oD(do[ R "SU4S"X#45[ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS=n=pCSSS5 gGNZ!,(df  g=f7f)#z5Test handling of internal errors in JSON-RPC requestszkvm_mcp_server.create_vmzInternal error�rJrrrrrr)r"r#r$r&r(r)Nr*r.r0r1r4r5r6r7r9r:r;r=r>r?r@rArBrCrDrE) rrorrLrMrNrOrPrQrRrSrTrUrzs r�"test_handle_request_internal_errorr~�s���� �)�y�AQ�7R� S��"�#�%�"�����  ��(�� � �7�(;�<�<��� �"�+�e�+�e�+�+�+�+�+�"�+�+�+�"�+�+�+�e�+�+�+�+�+�+�+��"�(�"�"�"�"�"�w�"�"�"�w�"�"�"�"�"�"�(�"�"�"�"�(�"�"�"�"�"�"�"��� ��(�2�U�2�F�2�F�2�2�2�2�2�(�2�2�2�(�2�2�2�U�2�2�2�2�2�2�2��?�G�#4�Y�#?�?�#?�?�?�?�?�?��?�?�?��?�?�?�#?�?�?�?�?�?�?�?�' T� S�=� T� S�s/�J5�1J$�J!�IJ$� J5�!J$�$ J2�.J5c ���# �[S5n[S[S5S9 XlSSS0SS 0S .S S .n[[R "U55IS hv�N nUSnSoTU:Hof(do[ R"SU4SXE45[ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS =n=peSoDU;of(d�[ R"SU4SXC45[ R"U5S[R"5;d[ R"U5(a[ R"U5OSS.-n SSU 0-n [[ R"U 55eS =pFUSSnSoU*o�U :Hof(do[ R"SU4SXK45[ R"U5[ R"U5S.-n SSU 0-n [[ R"U 55eS =n=n=p[SoCSS oTU;of(do[ R"SU4S!XE45[ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS =n=peS S S 5 S S S 5 g GNb!,(df  N=f!,(df  g =f7f)"z-Test handling of errors during initializationrz kvm_mcp_server.handle_initializezInitialization failedr}r� initializez1.0r"z test-client)�protocolVersion� capabilities� clientInfor(r)Nr*r.r0r1r4r5r6r7r9r:r;r=r>r?r@rArBrCrDrE)rrorFrrLrMrNrOrPrQrRrSrTrUrfs r�test_handle_initialize_errorr��s���� �~� �)� �1�y�I`�?a� b�!2���"�#(� "�%�}�5�� �  ��(�� � �7�(;�<�<��� �"�+�e�+�e�+�+�+�+�+�"�+�+�+�"�+�+�+�e�+�+�+�+�+�+�+��"�(�"�"�"�"�"�w�"�"�"�w�"�"�"�"�"�"�(�"�"�"�"�(�"�"�"�"�"�"�"��� ��(�2�U�2�F�2�F�2�2�2�2�2�(�2�2�2�(�2�2�2�U�2�2�2�2�2�2�2�&�F�7�*;�I�*F�F�*F�F�F�F�F�F�&�F�F�F�&�F�F�F�*F�F�F�F�F�F�F�F�% c� � �=� c� b�� � �sF� K�K�6J=�J:�IJ=�)K�1 K�:J=�= K �K� K�Kc��# �[S5nU/URlSURl[R "S5UR lXl[S05IShv�N n[U5nSoTU:Hof(Gd [R"SU4SXE45S [R"5;d[R"[5(a[R"[5OS S [R"5;d[R"U5(a[R"U5OS [R"U5[R"U5S .-nS S U0-n[![R""U55eS=n=peSo�So�U ;oD(do[R"SU4SX�45[R"U 5[R"U 5S.-n SSU 0-n[![R""U55eS=n =pJSo�SSo�U ;oD(do[R"SU4SX�45[R"U 5[R"U 5S.-n SSU 0-n[![R""U55eS=n =pJSSS5 gGNC!,(df  g=f7f)z!Test VM listing with domain errorr)r(rz Domain errorr Nr(r.)z0%(py3)s {%(py3)s = %(py0)s(%(py1)s) } == %(py6)s�len�result)rtr2r<r5zassert %(py8)s�py8r6rr7rEr1r4r5)r�listAllDomainsrF�staterGrHr"rJr r�rNrOrSrTrUrPrQrR) rg�mock_libvirt_domainrVr�r[r`� @py_assert4r]� @py_format9rYrZr\s r�test_list_vms_domain_errorr��s���� �~� �)�9L�8M��(�(�5�17��!�!�.�/6�/C�/C�N�/S�� � �,�!2��� �B�/�/���6�{��a��a������{�������s�����s�������6�����6����{����a���������#��)�#�)�#�#�#�#�#�w�#�#�#�w�#�#�#�)�#�#�#�#�#�#�#��3���7�!3�3�!3�3�3�3�3�3�~�3�3�3�~�3�3�3�!3�3�3�3�3�3�3�3� � � 0� � �s0� K�AJ2�,J/�-H9J2�& K�/J2�2 K�<Kc��n# �[S5n[R"S5URlXl[ SSS05IShv�N nUSnSoCU:HoU(do[R"S U4S X445[R"U5[R"U5S .-nS S U0-n[[R"U55eS=n=pTSo2SoDRo�"5o�U ;oU(d�[R"SU4SX945[R"U5[R"U5[R"U5[R"U 5S.-n SSU 0-n [[R"U 55eS=n=n=n=p�SSS5 gGNV!,(df  g=f7f)z.Test handling of domain errors during VM startr�Domain not foundrr"rN�statusr6r.r0r1r4r5� not foundrDr7�zD%(py1)s in %(py8)s {%(py8)s = %(py6)s {%(py6)s = %(py4)s.lower }() }�r2r3r5r��assert %(py10)s�py10) rrGrHrIrJrFrrNrOrPrQrR�lower� rgrVr�rYrZr[r\r]r`� @py_assert7r�� @py_format11s r�test_start_vm_domain_errorr��s$��� �~� �)�5<�5I�5I�J\�5]��&�&�2�!2��� �V�Y�,?�@�@���h��*�7�*�7�*�*�*�*�*��*�*�*��*�*�*�7�*�*�*�*�*�*�*��7�Y�/�7�5�5�7�5�7�7�7�7�7�7�7�7�{�7�7�7�{�7�7�7�/�7�7�7�5�7�7�7�7�7�7�7�7�7�7�7� � �A� � ��/� F5�=F$� F!� E F$� F5�!F$�$ F2�.F5c��f# �[S5nXRlSURlXl[ SSS05IShv�N nUSnSoTU:Hof(do[ R "S U4S XE45[ R"U5[ R"U5S .-nS S U0-n[[ R"U55eS=n=peSoCSoURo�"5o�U ;of(d�[ R "SU4SXJ45[ R"U5[ R"U5[ R"U 5[ R"U 5S.-n SSU 0-n [[ R"U 55eS=n=n=n=p�SSS5 gGNV!,(df  g=f7f)z.Test handling of create errors during VM startr�����rr"rNr�r6r.r0r1r4r5zfailed to startrDr7r�r�r�r�) rrIrF�createrrNrOrPrQrRr�� rgr�rVr�rYrZr[r\r]r`r�r�r�s r�test_start_vm_create_errorr�s&��� �~� �)�6I�&�&�3�24��"�"�/�!2��� �V�Y�,?�@�@���h��*�7�*�7�*�*�*�*�*��*�*�*��*�*�*�7�*�*�*�*�*�*�*� �=�9�$5�=�$;�$;�=�$;�$=�=�$=�=�=�=�=�=� �=�=�=� �=�=�=�$5�=�=�=�$;�=�=�=�$=�=�=�=�=�=�=�=� � � A� � ��/� F1�9F �F�E F � F1�F � F.�*F1c��n# �[S5n[R"S5URlXl[ SSS05IShv�N nUSnSoCU:HoU(do[R"S U4S X445[R"U5[R"U5S .-nS S U0-n[[R"U55eS=n=pTSo2SoDRo�"5o�U ;oU(d�[R"SU4SX945[R"U5[R"U5[R"U5[R"U 5S.-n SSU 0-n [[R"U 55eS=n=n=n=p�SSS5 gGNV!,(df  g=f7f)z-Test handling of domain errors during VM stoprr�r r"rNr�r6r.r0r1r4r5r�rDr7r�r�r�r�) rrGrHrIrJrFr rNrOrPrQrRr�r�s r�test_stop_vm_domain_errorr� s#��� �~� �)�5<�5I�5I�J\�5]��&�&�2�!2���y�6�9�*=�>�>���h��*�7�*�7�*�*�*�*�*��*�*�*��*�*�*�7�*�*�*�*�*�*�*��7�Y�/�7�5�5�7�5�7�7�7�7�7�7�7�7�{�7�7�7�{�7�7�7�/�7�7�7�5�7�7�7�7�7�7�7�7�7�7�7� � �?� � �r�c��f# �[S5nXRlSURlXl[ SSS05IShv�N nUSnSoTU:Hof(do[ R "S U4S XE45[ R"U5[ R"U5S .-nS S U0-n[[ R"U55eS=n=peSoCSoURo�"5o�U ;of(d�[ R "SU4SXJ45[ R"U5[ R"U5[ R"U 5[ R"U 5S.-n SSU 0-n [[ R"U 55eS=n=n=n=p�SSS5 gGNV!,(df  g=f7f)z/Test handling of shutdown errors during VM stoprr�r r"rNr�r6r.r0r1r4r5zfailed to stoprDr7r�r�r�r�) rrIrF�shutdownr rNrOrPrQrRr�r�s r�test_stop_vm_shutdown_errorr�s%��� �~� �)�6I�&�&�3�46��$�$�1�!2���y�6�9�*=�>�>���h��*�7�*�7�*�*�*�*�*��*�*�*��*�*�*�7�*�*�*�*�*�*�*��<�)�#4�<�#:�#:�<�#:�#<�<�#<�<�<�<�<�<��<�<�<��<�<�<�#4�<�<�<�#:�<�<�<�#<�<�<�<�<�<�<�<� � � ?� � �r�c��n# �[S5n[R"S5URlXl[ SSS05IShv�N nUSnSoCU:HoU(do[R"S U4S X445[R"U5[R"U5S .-nS S U0-n[[R"U55eS=n=pTSo2SoDRo�"5o�U ;oU(d�[R"SU4SX945[R"U5[R"U5[R"U5[R"U 5S.-n SSU 0-n [[R"U 55eS=n=n=n=p�SSS5 gGNV!,(df  g=f7f)z/Test handling of domain errors during VM rebootrr�r r"rNr�r6r.r0r1r4r5r�rDr7r�r�r�r�) rrGrHrIrJrFr rNrOrPrQrRr�r�s r�test_reboot_vm_domain_errorr�#s$��� �~� �)�5<�5I�5I�J\�5]��&�&�2�!2�� ��v�y�.A�B�B���h��*�7�*�7�*�*�*�*�*��*�*�*��*�*�*�7�*�*�*�*�*�*�*��7�Y�/�7�5�5�7�5�7�7�7�7�7�7�7�7�{�7�7�7�{�7�7�7�/�7�7�7�5�7�7�7�7�7�7�7�7�7�7�7� � �C� � �r�c��f# �[S5nXRlSURlXl[ SSS05IShv�N nUSnSoTU:Hof(do[ R "S U4S XE45[ R"U5[ R"U5S .-nS S U0-n[[ R"U55eS=n=peSoCSoURo�"5o�U ;of(d�[ R "SU4SXJ45[ R"U5[ R"U5[ R"U 5[ R"U 5S.-n SSU 0-n [[ R"U 55eS=n=n=n=p�SSS5 gGNV!,(df  g=f7f)z/Test handling of reboot errors during VM rebootrr�r r"rNr�r6r.r0r1r4r5zfailed to rebootrDr7r�r�r�r�) rrIrF�rebootr rNrOrPrQrRr�r�s r�test_reboot_vm_reboot_errorr�.s&��� �~� �)�6I�&�&�3�24��"�"�/�!2�� ��v�y�.A�B�B���h��*�7�*�7�*�*�*�*�*��*�*�*��*�*�*�7�*�*�*�*�*�*�*�!�>�I�%6�>�%<�%<�>�%<�%>�>�%>�>�>�>�>�>�!�>�>�>�!�>�>�>�%6�>�>�>�%<�>�>�>�%>�>�>�>�>�>�>�>� � � C� � �r�rrc��# �X l[SSSS9Ul[S05IShv�N nUSnSoTU:Hof(do[R"S U4S XE45[R "U5[R "U5S .-nS S U0-n[ [R"U55eS=n=peSoCSoTU;of(do[R"SU4SXE45[R "U5[R "U5S .-nS S U0-n[ [R"U55eS=n=peSoCSoTU;of(do[R"SU4SXE45[R "U5[R "U5S .-nS S U0-n[ [R"U55eS=n=pegGN�7f)z(Test VNC port retrieval with virsh errorr(�z Virsh error)r�stdout�stderrr Nr�r6r.r0r1r4r5zFailed to get VM listrDr7rE)rFrr rNrOrPrQrR) �mock_libvirt_openrWrr�rYrZr[r\r]s r�test_get_vnc_ports_virsh_errorr�:s$��� &/�"�%�����H�� !��"�5� 5�F� �(� �&�w�&�w� &�&�&�&�&� �&�&�&� �&�&�&�w�&�&�&�&�&�&�&� "�7�Y�&7�7�&7� 7�7�7�7�7� "�7�7�7� "�7�7�7�&7�7�7�7�7�7�7�7� �+�7�O�+�O� +�+�+�+�+�=�+�+�+�=�+�+�+�O�+�+�+�+�+�+�+� 6�s�&F>�F;�FF>c��p# �[SSS05IShv�N nUSnSo2U:HoD(do[R"SU4SX#45[R"U5[R"U5S .-nS S U0-n[ [R "U55eS=n=pCS o!S o2U;oD(do[R"SU4SX#45[R"U5[R"U5S .-nS S U0-n[ [R "U55eS=n=pCUR 5 gGN7f)z"Test VM creation with invalid namerr"z invalid@nameNr�r6r.r0r1r4r5z#VM name contains invalid charactersrDr7rE�rrNrOrPrQrR�assert_not_called�r�r�rYrZr[r\r]s r�test_create_vm_invalid_namer�Ls�����[�6�>�*B�C� C�F� �(� �&�w�&�w� &�&�&�&�&� �&�&�&� �&�&�&�w�&�&�&�&�&�&�&� 0�E�9�4E�E�4E� E�E�E�E�E� 0�E�E�E� 0�E�E�E�4E�E�E�E�E�E�E�E��'�'�)� D�s�D6�D3�DD6c��v# �[SSSSSS.5IShv�N nUSnS o2U:HoD(do[R"S U4S X#45[R"U5[R"U5S .-nS SU0-n[ [R "U55eS=n=pCSo!So2U;oD(do[R"SU4SX#45[R"U5[R"U5S .-nS SU0-n[ [R "U55eS=n=pCUR 5 gGN7f)z$Test VM creation with invalid memoryrr�drr r!Nr�r6r.r0r1r4r5zMemory must be at least 256MBrDr7rEr�r�s r�test_create_vm_invalid_memoryr�Vs�����[����� +���F� �(� �&�w�&�w� &�&�&�&�&� �&�&�&� �&�&�&�w�&�&�&�&�&�&�&� *�?�Y�.?�?�.?� ?�?�?�?�?� *�?�?�?� *�?�?�?�.?�?�?�?�?�?�?�?��'�'�)����D9�D6�DD9c��v# �[SSSSSS.5IShv�N nUSnS o2U:HoD(do[R"S U4S X#45[R"U5[R"U5S .-nS SU0-n[ [R "U55eS=n=pCSo!So2U;oD(do[R"SU4SX#45[R"U5[R"U5S .-nS SU0-n[ [R "U55eS=n=pCUR 5 gGN7f)z#Test VM creation with invalid vCPUsrr�rr r!Nr�r6r.r0r1r4r5zMust have at least 1 vCPUrDr7rEr�r�s r�test_create_vm_invalid_vcpusr�es�����[����� +���F� �(� �&�w�&�w� &�&�&�&�&� �&�&�&� �&�&�&�w�&�&�&�&�&�&�&� &�;��*;�;�*;� ;�;�;�;�;� &�;�;�;� &�;�;�;�*;�;�;�;�;�;�;�;��'�'�)��r�c��v# �[SSSSSS.5IShv�N nUSnS o2U:HoD(do[R"S U4S X#45[R"U5[R"U5S .-nS SU0-n[ [R "U55eS=n=pCSo!So2U;oD(do[R"SU4SX#45[R"U5[R"U5S .-nS SU0-n[ [R "U55eS=n=pCUR 5 gGN7f)z'Test VM creation with invalid disk sizerrr�rrr!Nr�r6r.r0r1r4r5zDisk size must be at least 1GBrDr7rEr�r�s r� test_create_vm_invalid_disk_sizer�ts�����[����� +���F� �(� �&�w�&�w� &�&�&�&�&� �&�&�&� �&�&�&�w�&�&�&�&�&�&�&� +�@�i�/@�@�/@� @�@�@�@�@� +�@�@�@� +�@�@�@�/@�@�@�@�@�@�@�@��'�'�)��r�c��d# �SUl[SSSSSS.5IShv�N nUSnS o2U:HoD(do[R"S U4S X#45[R"U5[R"U5S .-nS SU0-n[ [R "U55eS=n=pCSo!So2U;oD(do[R"SU4SX#45[R"U5[R"U5S .-nS SU0-n[ [R "U55eS=n=pCgGN7f)z&Test VM creation with connection errorNrrr�rr r!r�r6r.r0r1r4r5z#Failed to connect to libvirt daemonrDr7rE)rFrrNrOrPrQrRr�s r�test_create_vm_connection_errorr��s����&*��"��[����� +���F� �(� �&�w�&�w� &�&�&�&�&� �&�&�&� �&�&�&�w�&�&�&�&�&�&�&� 0�E�9�4E�E�4E� E�E�E�E�E� 0�E�E�E� 0�E�E�E�4E�E�E�E�E�E�E�E��s�D0�D-�DD0c��# �Xl[5URl[SSSSSS.5IShv�N nUSnS oCU:HoU(do[R "S U4S X445[R "U5[R "U5S .-nS SU0-n[[R"U55eS=n=pTSo2SoCU;oU(do[R "SU4SX445[R "U5[R "U5S .-nS SU0-n[[R"U55eS=n=pTgGN7f)z'Test VM creation when VM already existsrrr�rr r!Nr�r6r.r0r1r4r5zVM test-vm already existsrDr7rE) rFrrIrrNrOrPrQrR)r�rr�rYrZr[r\r]s r�test_create_vm_already_existsr��s����&/�"�*.�&�I���'��[����� +���F� �(� �&�w�&�w� &�&�&�&�&� �&�&�&� �&�&�&�w�&�&�&�&�&�&�&� &�;��*;�;�*;� ;�;�;�;�;� &�;�;�;� &�;�;�;�*;�;�;�;�;�;�;�;��s�4E�E�DE)3�builtinsrS�_pytest.assertion.rewrite� assertion�rewriterN�pytest� unittest.mockrrrrG�kvm_mcp_serverrrrr r r r r rL� subprocess�fixturerr�mark�asynciorbrhrkrmrprwr{r~r�r�r�r�r�r�r�r�r�r�r�r�r�r�r��rr�<module>r�sx���� �0�0��v�v�v� �������� ������ �����!E��!E�F�����>��>�0�����>��>�0�����>��>�0�����M��M�*����� �� ������ <�� <������@��@�.�����G��G�.����� 4�� 4������8��8������ >�� >������8��8������ =�� =������8��8������ ?�� ?����������~�� ,���� ,�������~��*���*�������~�� *��� *�������~�� *��� *�������~�� *��� *�������~�� F��� F�������~�� <��� <r

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/steveydevey/kvm-mcp'

If you have feedback or need assistance with the MCP directory API, please join our Discord server