Skip to main content
Glama
test_config.cpython-312-pytest-8.4.1.pyc25.1 kB
� ���h���~�dZddlZddlmcmZddlZddlZddl Z ddl m Z ddl m Z mZGd�d�ZGd�d�Zy) z(Unit tests for configuration management.�N)�patch)�BackgroundJobConfig� load_configc�4�eZdZdZd�Zd�Zd�Zd�Zd�Zd�Z y) �TestBackgroundJobConfigz$Tests for BackgroundJobConfig model.c�� �t�}|j}d}||k(}|s�tjd|fd||f�dt j �vstj |�rtj|�ndtj|�tj|�d�z}dd|iz}ttj|���dx}x}}|j}d}d }||z}d } || z} || k(}|s�tjd|fd || f�dt j �vstj |�rtj|�ndtj|�tj|�tj|�tj| �d �z} d d | iz} ttj| ���dx}x}x}x}x}x} } |j}d}||u}|s�tjd|fd||f�dt j �vstj |�rtj|�ndtj|�tj|�d�z}dd|iz}ttj|���dx}x}}|j}d}||k(}|s�tjd|fd||f�dt j �vstj |�rtj|�ndtj|�tj|�d�z}dd|iz}ttj|���dx}x}}|j}g}||k(}|s�tjd|fd||f�dt j �vstj |�rtj|�ndtj|�tj|�d�z}dd|iz}ttj|���dx}x}}|j}d}||k(}|s�tjd|fd||f�dt j �vstj |�rtj|�ndtj|�tj|�d�z}dd|iz}ttj|���dx}x}}y)z"Test default configuration values.� ��==�z;%(py2)s {%(py2)s = %(py0)s.max_concurrent_jobs } == %(py5)s�config��py0�py2�py5�assert %(py7)s�py7N��zV%(py2)s {%(py2)s = %(py0)s.max_output_size_bytes } == ((%(py5)s * %(py7)s) * %(py10)s)�rrrr�py10�assert %(py13)s�py13��is�z;%(py2)s {%(py2)s = %(py0)s.default_job_timeout } is %(py5)si,�z@%(py2)s {%(py2)s = %(py0)s.cleanup_interval_seconds } == %(py5)s�z@%(py2)s {%(py2)s = %(py0)s.allowed_command_patterns } == %(py5)s�.)z9%(py2)s {%(py2)s = %(py0)s.working_directory } == %(py5)s)r�max_concurrent_jobs� @pytest_ar�_call_reprcompare� @py_builtins�locals�_should_repr_global_name� _saferepr�AssertionError�_format_explanation�max_output_size_bytes�default_job_timeout�cleanup_interval_seconds�allowed_command_patterns�working_directory� �selfr � @py_assert1� @py_assert4� @py_assert3� @py_format6� @py_format8� @py_assert6� @py_assert8� @py_assert9� @py_assert11� @py_format12� @py_format14s �O/Users/dylan/Workspace/mcp/servers/mcp-background-job/tests/unit/test_config.py�test_default_configz+TestBackgroundJobConfig.test_default_configs���$�&���)�)�/�R�/�)�R�/�/�/�/�)�R�/�/�/�/�/�/�v�/�/�/�v�/�/�/�)�/�/�/�R�/�/�/�/�/�/�/��+�+�?�r�?�D�?�r�D�y�?�4�?�y�4�/?�?�+�/?�?�?�?�?�+�/?�?�?�?�?�?�?�v�?�?�?�v�?�?�?�+�?�?�?�r�?�?�?�D�?�?�?�4�?�?�?�?�?�?�?�?��)�)�1�T�1�)�T�1�1�1�1�)�T�1�1�1�1�1�1�v�1�1�1�v�1�1�1�)�1�1�1�T�1�1�1�1�1�1�1��.�.�5�#�5�.�#�5�5�5�5�.�#�5�5�5�5�5�5�v�5�5�5�v�5�5�5�.�5�5�5�#�5�5�5�5�5�5�5��.�.�4�"�4�.�"�4�4�4�4�.�"�4�4�4�4�4�4�v�4�4�4�v�4�4�4�.�4�4�4�"�4�4�4�4�4�4�4��'�'�.�3�.�'�3�.�.�.�.�'�3�.�.�.�.�.�.�v�.�.�.�v�.�.�.�'�.�.�.�3�.�.�.�.�.�.�.�c � �tj�5}tddddddg|��}|j}d}||k(}|s�t j d|fd ||f�d t j�vst j|�rt j|�nd t j|�t j|�d �z}d d |iz}tt j|���dx}x}}|j}d}d}||z} d} | | z} || k(}|s�t j d|fd|| f�d t j�vst j|�rt j|�nd t j|�t j|�t j|�t j| �d�z} dd| iz} tt j| ���dx}x}x}x}x} x} } |j}d}||k(}|s�t j d|fd||f�d t j�vst j|�rt j|�nd t j|�t j|�d �z}d d |iz}tt j|���dx}x}}|j}d}||k(}|s�t j d|fd||f�d t j�vst j|�rt j|�nd t j|�t j|�d �z}d d |iz}tt j|���dx}x}}|j}ddg}||k(}|s�t j d|fd||f�d t j�vst j|�rt j|�nd t j|�t j|�d �z}d d |iz}tt j|���dx}x}}|j }t"j$}|j&}||�}||k(}|�s_t j d|fd||f�d t j�vst j|�rt j|�nd t j|�dt j�vst jt"�rt jt"�ndt j|�t j|�dt j�vst j|�rt j|�ndt j|�d�z} dd| iz} tt j| ���dx}x}x}x}}ddd�y#1swYyxYw)z!Test custom configuration values.�iP��X�echo*�ls*)r r)r*r+r,r-r r r rrrNrrrrr�z;%(py2)s {%(py2)s = %(py0)s.default_job_timeout } == %(py5)srr�z�%(py2)s {%(py2)s = %(py0)s.working_directory } == %(py11)s {%(py11)s = %(py8)s {%(py8)s = %(py6)s {%(py6)s = %(py4)s.path }.abspath }(%(py9)s) }�os�temp_dir�rr�py4�py6�py8�py9�py11)�tempfile�TemporaryDirectoryrr r!r"r#r$r%r&r'r(r)r*r+r,r-rF�path�abspath)r/rGr r0r1r2r3r4r5r6r7r8r9r:� @py_assert5� @py_assert7� @py_assert10s r;�test_custom_configz*TestBackgroundJobConfig.test_custom_configs��� � (� (� *�h�(�$%�&5�$(�),�*1�5�)9�"*� �F��-�-� 2�� 2�-��2� 2� 2� 2�-�� 2� 2� 2� 2� 2� 2�6� 2� 2� 2�6� 2� 2� 2�-� 2� 2� 2�� 2� 2� 2� 2� 2� 2� 2��/�/� B�1� B�t� B�1�t�8� B�d� B�8�d�?� B�/�?�B� B� B� B�/�?� B� B� B� B� B� B�6� B� B� B�6� B� B� B�/� B� B� B�1� B� B� B�t� B� B� B�d� B� B� B� B� B� B� B� B��-�-� 5�� 5�-��5� 5� 5� 5�-�� 5� 5� 5� 5� 5� 5�6� 5� 5� 5�6� 5� 5� 5�-� 5� 5� 5�� 5� 5� 5� 5� 5� 5� 5��2�2� 9�c� 9�2�c�9� 9� 9� 9�2�c� 9� 9� 9� 9� 9� 9�6� 9� 9� 9�6� 9� 9� 9�2� 9� 9� 9�c� 9� 9� 9� 9� 9� 9� 9��2�2� F�w��6F� F�2�6F�F� F� F� F�2�6F� F� F� F� F� F� F�6� F� F� F�6� F� F� F�2� F� F� F�6F� F� F� F� F� F� F� F��+�+� H�r�w�w� H�w��� H��x�/H� H�+�/H�H� H� H� H�+�/H� H� H� H� H� H� H�6� H� H� H�6� H� H� H�+� H� H� H� H� H� H�r� H� H� H�r� H� H� H�w� H� H� H�� H� H� H� H� H� H�x� H� H� H�x� H� H� H�/H� H� H� H� H� H� H� H�+� *� *�s �WW;�;Xc��td��td��tjt�5td��ddd�tjt�5td��ddd�y#1swY�8xYw#1swYyxYw)z'Test validation of max_concurrent_jobs.�)r �drN�e�r�pytest�raises� ValueError�r/s r;�test_validation_max_jobsz0TestBackgroundJobConfig.test_validation_max_jobs,s_�� ��2���4��]�]�:� &� �A� 6�'��]�]�:� &� �C� 8�'� &�'� &��'� &��� A6� B�6A?�B c��td��td��tjt�5td��ddd�tjt�5td��ddd�y#1swY�8xYw#1swYyxYw)z)Test validation of max_output_size_bytes.r)r)i@i�NiPrZr^s r;�test_validation_output_sizez3TestBackgroundJobConfig.test_validation_output_size9sc�� �$�7��2C�D��]�]�:� &� �d� ;�'��]�]�:� &� �&7� �'� &�'� &��'� &�r`c �(�tj�5}t|��}|j}tj }|j }||�}||k(}|�s_tjd|fd||f�dtj�vstj|�rtj|�ndtj|�dtj�vstjt�rtjt�ndtj|�tj|�dtj�vstj|�rtj|�ndtj|�d�z}dd |iz} ttj| ���d x}x}x}x}}d d d �tj t"d � �5td ��d d d �y #1swY�:xYw#1swYy xYw)z%Test validation of working_directory.)r-r rEr rFrGrHrrNz Working directory does not exist)�matchz/non/existent/path)rNrOrr-rFrPrQr!r"r#r$r%r&r'r(r[r\r]) r/rGr r0rRrSrTr2r9r:s r;�!test_validation_working_directoryz9TestBackgroundJobConfig.test_validation_working_directoryHs5�� � (� (� *�h�(�8�D�F��+�+� H�r�w�w� H�w��� H��x�/H� H�+�/H�H� H� H� H�+�/H� H� H� H� H� H� H�6� H� H� H�6� H� H� H�+� H� H� H� H� H� H�r� H� H� H�r� H� H� H�w� H� H� H�� H� H� H� H� H� H�x� H� H� H�x� H� H� H�/H� H� H� H� H� H� H� H�+� �]�]�:�-O� P� �2F� G�Q� P� +� *�� Q� P�s�F.G<�& H�<H�Hc�\�td��}|j}gd�}||k(}|s�tjd|fd||f�dt j �vstj |�rtj|�ndtj|�tj|�d�z}dd |iz}ttj|���d x}x}}td ��}|j}d d g}||k(}|s�tjd|fd||f�dt j �vstj |�rtj|�ndtj|�tj|�d�z}dd |iz}ttj|���d x}x}}y )z0Test splitting comma-separated command patterns.zecho*, ls *, pwd)r,)rBzls *�pwdr rr rrrNz echo , ls , �echo�ls) rr,r!r"r#r$r%r&r'r(�r/r r0r1r2r3r4s r;�test_command_patterns_splittingz7TestBackgroundJobConfig.test_command_patterns_splittingSs��$�>P�Q���.�.�J�2J�J�.�2J�J�J�J�J�.�2J�J�J�J�J�J�J�v�J�J�J�v�J�J�J�.�J�J�J�2J�J�J�J�J�J�J�J�$�>R�S���.�.�@�6�4�.�@�.�.�@�@�@�@�.�.�@�@�@�@�@�@�v�@�@�@�v�@�@�@�.�@�@�@�.�@�@�@�@�@�@�@r=N) �__name__� __module__� __qualname__�__doc__r<rUr_rbrerk�r=r;rr s&��.� /�I�& 9� � H�Ar=rc�.�eZdZdZd�Zd�Zd�Zd�Zd�Zy)�TestEnvironmentLoadingz;Tests for loading configuration from environment variables.c ���tjtjid��5t j �}|j }d}||k(}|s�tjd|fd||f�dtj�vstj|�rtj|�ndtj|�tj|�d�z}dd |iz}ttj|���d x}x}}|j}d}d }||z}d } || z} || k(}|s�tjd|fd || f�dtj�vstj|�rtj|�ndtj|�tj|�tj|�tj| �d �z} dd| iz} ttj| ���d x}x}x}x}x}x} } |j }d }||u}|s�tjd|fd||f�dtj�vstj|�rtj|�ndtj|�tj|�d�z}dd |iz}ttj|���d x}x}}d d d �y #1swYy xYw)z/Test loading with no environment variables set.T��clearr r r r rrrNrrrrrrr)r�dictrF�environr�from_environmentr r!r"r#r$r%r&r'r(r)r*r.s r;�test_from_environment_defaultsz5TestEnvironmentLoading.test_from_environment_defaults_s��� �Z�Z�� � �B�d� 3�(�9�9�;�F��-�-� 3�� 3�-��3� 3� 3� 3�-�� 3� 3� 3� 3� 3� 3�6� 3� 3� 3�6� 3� 3� 3�-� 3� 3� 3�� 3� 3� 3� 3� 3� 3� 3��/�/� C�2� C�� C�2��9� C�t� C�9�t�3C� C�/�3C�C� C� C� C�/�3C� C� C� C� C� C� C�6� C� C� C�6� C� C� C�/� C� C� C�2� C� C� C�� C� C� C�t� C� C� C� C� C� C� C� C��-�-� 5�� 5�-��5� 5� 5� 5�-�� 5� 5� 5� 5� 5� 5�6� 5� 5� 5�6� 5� 5� 5�-� 5� 5� 5�� 5� 5� 5� 5� 5� 5� 5� 4� 3� 3�s �J*K�K#c � �ddddddd�}tjtj|d� �5t j �}|j }d }||k(}|s�tjd |fd ||f�d tj�vstj|�rtj|�nd tj|�tj|�d�z}dd|iz}ttj|���dx}x}}|j}d}d}||z} d} | | z} || k(}|s�tjd |fd|| f�d tj�vstj|�rtj|�nd tj|�tj|�tj|�tj| �d�z} dd| iz} ttj| ���dx}x}x}x}x} x} } |j }d}||k(}|s�tjd |fd||f�d tj�vstj|�rtj|�nd tj|�tj|�d�z}dd|iz}ttj|���dx}x}}|j"}d}||k(}|s�tjd |fd||f�d tj�vstj|�rtj|�nd tj|�tj|�d�z}dd|iz}ttj|���dx}x}}|j$}ddg}||k(}|s�tjd |fd||f�d tj�vstj|�rtj|�nd tj|�tj|�d�z}dd|iz}ttj|���dx}x}}ddd�y#1swYyxYw)z0Test loading with all environment variables set.�5�20MB�1800�600z echo*,ls*r)�MCP_BG_MAX_JOBS�MCP_BG_MAX_OUTPUT_SIZE�MCP_BG_JOB_TIMEOUT�MCP_BG_CLEANUP_INTERVAL�MCP_BG_ALLOWED_COMMANDS�MCP_BG_WORKING_DIRTrtr?r r r rrrN�rrrrrr@rDrArrBrCr)rrvrFrwrrxr r!r"r#r$r%r&r'r(r)r*r+r,)r/�env_varsr r0r1r2r3r4r5r6r7r8r9r:s r;�test_from_environment_all_setz4TestEnvironmentLoading.test_from_environment_all_seths��� #�&,�"(�',�'2�"%�  ���Z�Z�� � �H�D� 9�(�9�9�;�F��-�-� 2�� 2�-��2� 2� 2� 2�-�� 2� 2� 2� 2� 2� 2�6� 2� 2� 2�6� 2� 2� 2�-� 2� 2� 2�� 2� 2� 2� 2� 2� 2� 2��/�/� C�2� C�� C�2��9� C�t� C�9�t�3C� C�/�3C�C� C� C� C�/�3C� C� C� C� C� C� C�6� C� C� C�6� C� C� C�/� C� C� C�2� C� C� C�� C� C� C�t� C� C� C� C� C� C� C� C��-�-� 5�� 5�-��5� 5� 5� 5�-�� 5� 5� 5� 5� 5� 5�6� 5� 5� 5�6� 5� 5� 5�-� 5� 5� 5�� 5� 5� 5� 5� 5� 5� 5��2�2� 9�c� 9�2�c�9� 9� 9� 9�2�c� 9� 9� 9� 9� 9� 9�6� 9� 9� 9�6� 9� 9� 9�2� 9� 9� 9�c� 9� 9� 9� 9� 9� 9� 9��2�2� F�w��6F� F�2�6F�F� F� F� F�2�6F� F� F� F� F� F� F�6� F� F� F�6� F� F� F�2� F� F� F�6F� F� F� F� F� F� F� F�:� 9� 9�s �P=Q6�6Q?c�6�tjtjddid��5t j �}|j }d}||k(}|s�tjd|fd||f�dtj�vstj|�rtj|�ndtj|�tj|�d �z}d d |iz}ttj|���d x}x}}d d d �y #1swYy xYw) z"Test parsing output size in bytes.r��1048576Trtir )z=%(py2)s {%(py2)s = %(py0)s.max_output_size_bytes } == %(py5)sr rrrN)rrvrFrwrrxr)r!r"r#r$r%r&r'r(rjs r;�'test_from_environment_output_size_bytesz>TestEnvironmentLoading.test_from_environment_output_size_bytes|s��� �Z�Z�� � �%=�y�$I�QU� V�(�9�9�;�F��/�/� :�7� :�/�7�:� :� :� :�/�7� :� :� :� :� :� :�6� :� :� :�6� :� :� :�/� :� :� :�7� :� :� :� :� :� :� :�W� V� V�s �CD�Dc�^�tjtjid��5t �}t |t �}|�s ddtj�vstjt �rtjt �nddtj�vstj|�rtj|�nddtj�vstjt �rtjt �ndtj|�d�z}ttj|���d}|j}d }||k(}|s�tjd |fd ||f�dtj�vstj|�rtj|�ndtj|�tj|�d �z}d d|iz}ttj|���dx}x}}ddd�y#1swYyxYw)z+Test load_config with fallback to defaults.Trtz5assert %(py4)s {%(py4)s = %(py0)s(%(py1)s, %(py2)s) }� isinstancer r)r�py1rrINr r r rrr)rrvrFrwrr�rr#r$r!r%r&r'r(r r")r/r r2� @py_format5r0r1r3r4s r;�test_load_config_fallbackz0TestEnvironmentLoading.test_load_config_fallback�s&�� �Z�Z�� � �B�d� 3� �]�F��f�&9�:� :�:� :� :� :� :� :�:� :� :� :�:� :� :� :� :� :� :�f� :� :� :�f� :� :� :� :� :� :�&9� :� :� :�&9� :� :� :�:� :� :� :� :� :� :��-�-� 3�� 3�-��3� 3� 3� 3�-�� 3� 3� 3� 3� 3� 3�6� 3� 3� 3�6� 3� 3� 3�-� 3� 3� 3�� 3� 3� 3� 3� 3� 3� 3�4� 3� 3�s �G3H#�#H,c�"�tjtjddid��5t �}|j }d}||k(}|s�t jd|fd||f�dtj�vst j|�rt j|�ndt j|�t j|�d �z}d d |iz}tt j|���d x}x}}d d d �y #1swYy xYw) z4Test load_config with invalid environment variables.r�invalidTrtr r r r rrrN)rrvrFrwrr r!r"r#r$r%r&r'r(rjs r;�test_load_config_invalid_envz3TestEnvironmentLoading.test_load_config_invalid_env�s��� �Z�Z�� � �%6� �$B�$� O� �]�F��-�-� 3�� 3�-��3� 3� 3� 3�-�� 3� 3� 3� 3� 3� 3�6� 3� 3� 3�6� 3� 3� 3�-� 3� 3� 3�� 3� 3� 3� 3� 3� 3� 3�P� O� O�s �CD�DN) rlrmrnroryr�r�r�r�rpr=r;rrrr\s��E�6�G�(;� 4�4r=rr)ro�builtinsr#�_pytest.assertion.rewrite� assertion�rewriter!rFrNr[� unittest.mockr�mcp_background_job.configrrrrrrpr=r;�<module>r�s4��.��� �� ��F�NA�NA�b24�24r=

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/dylan-gluck/mcp-background-job'

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