Skip to main content
Glama
test_config.cpython-313-pytest-8.3.5.pyc23.9 kB
� Ah�%���SSKrSSKJs Jr SSKrSSKrSSKrSSK J r J r SSK J r Jr SrSrSrSrSrS rS rS rS rS rSrSrSrSrSrSrg)�N)�patch� mock_open)�_apply_env_overrides� load_configc�"�SSSSSSSSS S S S S SSS.S. 0n[S[[R"U5S95 [ 5nX:Ho"(d�[ R "SU4SX45S[R"5;d[ R"U5(a[ R"U5OSS[R"5;d[ R"U5(a[ R"U5OSS.-nSSU0-n[[ R"U55eSnSoUU;of(d�[ R "SU4SXQ45[ R"U5S[R"5;d[ R"U5(a[ R"U5OSS.-nSS U0-n[[ R"U55eS=pVS!oQSo�U ;of(do[ R "SU4S"XY45[ R"U5[ R"U 5S#.-nS$S%U0-n [[ R"U 55eS=n=piUSS&nSo�U :Hof(do[ R "SU4S'XY45[ R"U5[ R"U 5S#.-nS$S%U0-n [[ R"U 55eS=n=piUSS(nSo�U :Hof(do[ R "SU4S'XY45[ R"U5[ R"U 5S#.-nS$S%U0-n [[ R"U 55eS=n=piSSS5 g!,(df  g=f))z'Test loading a valid configuration file�vm�/vmz/iso/ubuntu.isoz/iso/fedora.qcow2ztest-vm����generic�brforvms�coreos�corez~/.ssh/id_rsa.pub�UTCz en_US.UTF-8)�default_hostname� default_user�default_ssh_key�default_timezone�default_locale) � disk_path� default_iso�default_master_image� default_name�default_memory� default_vcpus�default_disk_size�default_os_variant�default_network�ignition� builtins.open�� read_data��==�z%(py0)s == %(py2)s�config� valid_config��py0�py2�assert %(py4)s�py4N��in�z%(py1)s in %(py3)s��py1�py3�assert %(py5)s�py5r �z%(py1)s in %(py4)s�r2r-�assert %(py6)s�py6r�z%(py1)s == %(py4)sr) rr�json�dumpsr� @pytest_ar�_call_reprcompare� @py_builtins�locals�_should_repr_global_name� _saferepr�AssertionError�_format_explanation) r(r'� @py_assert1� @py_format3� @py_format5� @py_assert0� @py_assert2� @py_format4� @py_format6� @py_assert3� @py_format7s �1/home/steve/projects/kvm-mcp/tests/test_config.py�test_load_valid_configrOs+�� ��,�$7�%�"��!#�"+�)�$,� &�#6�$)�"/� � ��L�* �� �D�J�J�|�4L� M� N�����%�%�%�%�%�v�%�%�%�%�%�%�v�%�%�%�%�v�%�%�%�%�%�%��%�%�%�%��%�%�%�%�%�%�%���v�~�����t����t�������v�����v���������)�D�\�)�\�)�)�)�)�)�z�)�)�)�z�)�)�)�\�)�)�)�)�)�)�)��d�|�,�-�5��5��5�5�5�5�5�-�5�5�5�-�5�5�5��5�5�5�5�5�5�5��d�|�O�,�1��1��1�1�1�1�1�,�1�1�1�,�1�1�1��1�1�1�1�1�1�1� O� N� N�s �L:N� Nc���[S[S5S9 [R"[5 [ 5 SSS5 SSS5 g!,(df  N=f!,(df  g=f)�+Test handling of missing configuration filer!zConfig file not found�� side_effectN�r�FileNotFoundError�pytest�raisesr��rN�test_missing_config_filerZ&sD�� ��,=�>U�,V� W� �]�]�,� -� �M�.� X� W� -� -�� X� W�s!�A� A �A� A �A� A*c���Sn[S[US95 [R"[R 5 [ 5 SSS5 SSS5 g!,(df  N=f!,(df  g=f)�3Test handling of invalid JSON in configuration filez{invalid json}r!r"N)rrrVrWr;�JSONDecodeErrorr)� invalid_jsons rN�test_invalid_jsonr_,sL��#�L� �� �L� A� B� �]�]�4�/�/� 0� �M�1� C� B� 0� 0�� C� B��"�%A(� A�A(� A% �!A(�( A6c�(�SSSS000n[S[[R"U5S95 [ 5nSo"U;o3(d�[ R "SU4SX!45[ R"U5S [R"5;d[ R"U5(a[ R"U5OS S .-nS S U0-n[[ R"U55eS =p#So!SobU;o3(do[ R "SU4SX&45[ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS =n=p6So!SSobU;o3(do[ R "SU4SX&45[ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS =n=p6S S S 5 g !,(df  g =f)z;Test handling of configuration with missing required fieldsrr rrr!r"r.r0r'r1r4r5Nr6r7r8r9) rrr;r<rr=r>rBr?r@rArCrD) �incomplete_configr'rHrIrJrKrLrGrMs rN�test_missing_required_fieldsrc3sK�� � �"�H�� ��� �� �D�J�J�?P�4Q� R� S������v�~�����t����t�������v�����v���������)�D�\�)�\�)�)�)�)�)�z�)�)�)�z�)�)�)�\�)�)�)�)�)�)�)�!�=�D�\�*�%=�=�%=�=�=�=�=�=�!�=�=�=�!�=�=�=�%=�=�=�=�=�=�=�=� T� S� S�s �G H� Hc�h�SSSSS0S.0nS[RS'S [RS 'S [RS '[S 5 [S[RRS535 [S[RRS 535 [S[RRS 535 [ S[ [ R"U5S95 [5n[S5 [SUSS35 [SUSS35 [SUSSS35 USSnSo2U:HoD(do[R"SU4SX#45[R"U5[R"U5S.-nSSU0-n[[R"U55eS=n=pCUSSnS o2U:HoD(do[R"SU4SX#45[R"U5[R"U5S.-nSSU0-n[[R"U55eS=n=pCUSSSnS o2U:HoD(do[R"SU4SX#45[R"U5[R"U5S.-nSSU0-n[[R"U55eS=n=pCSSS5 [RS [RS [RS g!,(df  NB=f)!z:Test that environment variables can override config valuesrr r rr)rrr z /custom/vm� VM_DISK_PATH�4096�VM_DEFAULT_MEMORYz custom-host�VM_IGNITION_DEFAULT_HOSTNAMEzEnvironment variables:zVM_DISK_PATH: zVM_DEFAULT_MEMORY: zVM_IGNITION_DEFAULT_HOSTNAME: r!r"zLoaded config:z disk_path: rzdefault_memory: rzdefault_hostname: r r$r:r7r8r9Ni)�os�environ�print�getrrr;r<rr=r>rBrCrD)r(r'rHrLrIrGrMs rN�"test_environment_variable_overridermFsp�� ��"�"�H�� ��L�".�B�J�J�~��&,�B�J�J�"�#�1>�B�J�J�-�.� � "�#� �N�2�:�:�>�>�.�9�:� ;�<� � �� � ���/B� C�D� E�F� � *�2�:�:�>�>�:X�+Y�*Z� [�\� �� �D�J�J�|�4L� M� N���� ��� � �F�4�L��5�6�7�8� � ����.>�!?� @�A�B� �"�6�$�<� �#;�<N�#O�"P�Q�R��d�|�K�(�8�L�8�L�8�8�8�8�8�(�8�8�8�(�8�8�8�L�8�8�8�8�8�8�8��d�|�,�-�5��5��5�5�5�5�5�-�5�5�5�-�5�5�5��5�5�5�5�5�5�5��d�|�J�'�(:�;�L�}�L�}�L�L�L�L�L�;�L�L�L�;�L�L�L�}�L�L�L�L�L�L�L� O� � � �>�"� � � �&�'� � � �1�2�! O� N�s �7G0L#�# L1c ���[S5n[S5n[S5n[S[SS95 SUlSUlS Ul[5 UR 5 UR S5 UR SS 5 S S S 5 S S S 5 S S S 5 S S S 5 g !,(df  N'=f!,(df  N0=f!,(df  N9=f!,(df  g =f) z0Test that config file path is resolved correctlyz os.path.joinzos.path.dirnamezos.path.abspathr!z{}r"z/test/path/kvm_mcp_server.pyz /test/pathz/test/path/config.jsonz config.jsonN)rr� return_valuer�assert_called_once�assert_called_once_with)� mock_join� mock_dirname� mock_abspaths rN�test_config_path_resolutionruos��� �~� �)� � � !�\� � � !�\� �� �D� 9� :�$B� �!�$0� �!�!9� ��� � �'�'�)��,�,�-K�L��)�)�,� �F� ;� "� "� � � ;� :�� "� !�� "� !�� � �sQ� C� C�B=�AB, � B=�C�C�, B: �6B=�= C �C� C �C� C-c�H�SSS.nS[RS'S[RS'[S[[R "U5S 95 [ 5nUS nSo2U:HoD(do[R"S U4S X#45[R"U5[R"U5S .-nSSU0-n[[R"U55eS=n=pCUSnSo2U:HoD(do[R"S U4S X#45[R"U5[R"U5S .-nSSU0-n[[R"U55eS=n=pCSSS5 [RS [RS g!,(df  N1=f)z)Test simple environment variable override� default_value�*)�test_key� test_number�override_value�TEST_KEY�100� TEST_NUMBERr!r"ryr$r:r7r8r9Nrz�d� rirjrrr;r<rr=r>rBrCrD)� simple_configr'rHrLrIrGrMs rN�)test_simple_environment_variable_overrider��s��$���M� .�B�J�J�z�� %�B�J�J�}�� �� �D�J�J�}�4M� N� O�����j�!�5�%5�5�%5�5�5�5�5�5�!�5�5�5�!�5�5�5�%5�5�5�5�5�5�5�5��m�$�+��+��+�+�+�+�+�$�+�+�+�$�+�+�+��+�+�+�+�+�+�+� P� � � �:�� � � �=�!� P� O�s �DF� F!c��SSSS000nS[RS'[S[[R "U5S95 [ 5nUSSSnSo2U:HoD(do[R"S U4S X#45[R"U5[R"U5S .-nS S U0-n[[R"U55eS=n=pCSSS5 [RS g!,(df  N =f)z)Test nested environment variable override�parent�child�value�default�override�PARENT_CHILD_VALUEr!r"r$r:r7r8r9Nr�)� nested_configr'rHrLrIrGrMs rN�)test_nested_environment_variable_overrider��s��� � ���� ��M�(2�B�J�J�#�$� �� �D�J�J�}�4M� N� O�����h���(��1�?�Z�?�Z�?�?�?�?�?�1�?�?�?�1�?�?�?�Z�?�?�?�?�?�?�?� P� � � �'�(� P� O�s �BC3�3 Dc���SSSS.n[R"[RSSSS.5 [ U5nUS nSo2U:HoD(do[ R "S U4S X#45[ R"U5[ R"U5S .-nS SU0-n[[ R"U55eS=n=pCUSnSo2U:HoD(do[ R "S U4S X#45[ R"U5[ R"U5S .-nS SU0-n[[ R"U55eS=n=pCUSnSo2ULoD(do[ R "SU4SX#45[ R"U5[ R"U5S .-nS SU0-n[[ R"U55eS=n=pCSSS5 g!,(df  g=f)z)Test basic environment variable overrides�value1rxT��key1�key2�key3� new_value1�99�false��KEY1�KEY2�KEY3r�r$r:r7r8r9Nr��cr�F��is�z%(py1)s is %(py4)s� r�dictrirjrr=r>rBrCrD�r'�resultrHrLrIrGrMs rN�test_apply_env_overrides_basicr��s9������F� ���B�J�J����!� � &�f�-���f�~�-��-��-�-�-�-�-�~�-�-�-�~�-�-�-��-�-�-�-�-�-�-��f�~�#��#��#�#�#�#�#�~�#�#�#�~�#�#�#��#�#�#�#�#�#�#��f�~�&��&��&�&�&�&�&�~�&�&�&�~�&�&�&��&�&�&�&�&�&�&� � � �� �FG� G!c���SSS.SS0S.n[R"[RSSS S .5 [ U5nUS S nSo2U:HoD(do[ R "S U4SX#45[ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS=n=pCUS SnSo2U:HoD(do[ R "S U4SX#45[ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS=n=pCUSSnSo2ULoD(do[ R "SU4SX#45[ R"U5[ R"U5S.-nSSU0-n[[ R"U55eS=n=pCSSS5 g!,(df  g=f)z#Test nested configuration overridesr�rx)r�r�r�T)�section1�section2r�r�r�)� SECTION1_KEY1� SECTION1_KEY2� SECTION2_KEY3r�r�r$r:r7r8r9Nr�r�r�Fr�r�r�r�s rN�test_apply_env_overrides_nestedr��s_���� � �D� � �F� ���B�J�J�%�� �!� � &�f�-���j�!�&�)�9�\�9�\�9�9�9�9�9�)�9�9�9�)�9�9�9�\�9�9�9�9�9�9�9��j�!�&�)�/�R�/�R�/�/�/�/�/�)�/�/�/�)�/�/�/�R�/�/�/�/�/�/�/��j�!�&�)�2�U�2�U�2�2�2�2�2�)�2�2�2�)�2�2�2�U�2�2�2�2�2�2�2� � � �s �F#G � G.c���SSSS.n[R"[RSSSS.5 [ U5nUS nSo2U:HoD(do[ R "S U4S X#45[ R"U5[ R"U5S .-nS SU0-n[[ R"U55eS=n=pCUSnSo2ULoD(do[ R "SU4SX#45[ R"U5[ R"U5S .-nS SU0-n[[ R"U55eS=n=pCUSnSo2U:HoD(do[ R "S U4S X#45[ R"U5[ R"U5S .-nS SU0-n[[ R"U55eS=n=pCSSS5 g!,(df  g=f)z4Test handling of invalid environment variable valuesrxTg��Q� @r�� not_a_number� not_a_boolean� not_a_floatr�r�r$r:r7r8r9Nr�r�r�r�r�r�s rN�'test_apply_env_overrides_invalid_valuesr��s9������F� ���B�J�J����!� � &�f�-���f�~�#��#��#�#�#�#�#�~�#�#�#�~�#�#�#��#�#�#�#�#�#�#��f�~�%��%��%�%�%�%�%�~�%�%�%�~�%�%�%��%�%�%�%�%�%�%��f�~�%��%��%�%�%�%�%�~�%�%�%�~�%�%�%��%�%�%�%�%�%�%� � � �r�c���SSSS.n[R"[RSSSS.5 [ U5nUSnSo2U:HoD(do[ R "SU4S X#45[ R"U5[ R"U5S .-nS S U0-n[[ R"U55eS =n=pCUSnSo2U:HoD(do[ R "SU4S X#45[ R"U5[ R"U5S .-nS S U0-n[[ R"U55eS =n=pCUSnSo2ULoD(do[ R "SU4SX#45[ R"U5[ R"U5S .-nS S U0-n[[ R"U55eS =n=pCS S S 5 g !,(df  g =f)z$Test handling of empty string valuesr�rxTr��r�r�r$r:r7r8r9Nr�r�r�r�r�r�s rN�&test_apply_env_overrides_empty_stringsr��s9������F� ���B�J�J����!� � &�f�-���f�~�#��#��#�#�#�#�#�~�#�#�#�~�#�#�#��#�#�#�#�#�#�#��f�~�#��#��#�#�#�#�#�~�#�#�#�~�#�#�#��#�#�#�#�#�#�#��f�~�%��%��%�%�%�%�%�~�%�%�%�~�%�%�%��%�%�%�%�%�%�%� � � �r�c�x�SSSS.n[[R"U5S9n[SU5 [ 5nX :Ho3(d�[ R "SU4SX 45S [R"5;d[ R"U5(a[ R"U5OS S [R"5;d[ R"U5(a[ R"U5OS S .-nS S U0-n[[ R"U55eSnSSS5 g!,(df  g=f)z(Test successful loading of configurationr�rxTr�r"r!r$r&r�� config_datar)r,r-N) rr;r<rrr=r>r?r@rArBrCrD)r�� mock_filer�rErFrGs rN�test_load_config_successr��s�������K� �D�J�J�{�$;�<�I� �� � *�����$�$�$�$�$�v�$�$�$�$�$�$�v�$�$�$�$�v�$�$�$�$�$�$��$�$�$�$��$�$�$�$�$�$�$� +� *� *�s �C2D+�+ D9c���[S[S9 [R"[5 [ 5 SSS5 SSS5 g!,(df  N=f!,(df  g=f)rQr!rRNrTrXrYrN�test_load_config_file_not_foundr�s<�� ��,=� >� �]�]�,� -� �M�.� ?� >� -� -�� ?� >�s!�A� A�A� A �A� A%c���[SS9n[SU5 [R"[R 5 [ 5 SSS5 SSS5 g!,(df  N=f!,(df  g=f)r\z invalid jsonr"r!N)rrrVrWr;r]r)r�s rN�test_load_config_invalid_jsonr�sJ���N�3�I� �� � *� �]�]�4�/�/� 0� �M�1� +� *� 0� 0�� +� *�r`c �H�SSSS.n[[R"U5S9n[SU5 [R"[ R SS05 [5nUS nSoCU:HoU(do[R"S U4S X445[R"U5[R"U5S .-nS SU0-n[[R"U55eS=n=pTUSnSoCU:HoU(do[R"S U4S X445[R"U5[R"U5S .-nS SU0-n[[R"U55eS=n=pTUSnSoCULoU(do[R"SU4SX445[R"U5[R"U5S .-nS SU0-n[[R"U55eS=n=pTSSS5 SSS5 g!,(df  N=f!,(df  g=f)z>Test loading configuration with environment variable overridesr�rxTr�r"r!r�r�r�r$r:r7r8r9Nr�r�r�r�) rr;r<rr�rirjrr=r>rBrCrD)r�r�r�rHrLrIrGrMs rN�#test_load_config_with_env_overridesr�sU������K� �D�J�J�{�$;�<�I� �� � *� ���B�J�J��� 6� 7�����f�~�-��-��-�-�-�-�-�~�-�-�-�~�-�-�-��-�-�-�-�-�-�-��f�~�#��#��#�#�#�#�#�~�#�#�#�~�#�#�#��#�#�#�#�#�#�#��f�~�%��%��%�%�%�%�%�~�%�%�%�~�%�%�%��%�%�%�%�%�%�%� 8� +� *� 7� 7�� +� *�s$�(H�FH�1H� H � H� H!)�builtinsr?�_pytest.assertion.rewrite� assertion�rewriter=rVrir;� unittest.mockrr�kvm_mcp_serverrrrOrZr_rcrmrur�r�r�r�r�r�r�r�r�r�rXrYrN�<module>r�sj���� � � �*�<�2�>� �>�&'3�RG�$"�()�('�$3�,&�$&�$ %�� �&rY

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