Skip to main content
Glama

Android MCP Server

""" Tests for configuration loading logic """ import os import tempfile from unittest.mock import mock_open, patch import pytest import yaml class TestConfigLoading: """Test configuration loading scenarios""" def setup_method(self): """Setup for each test method""" self.temp_dir = tempfile.mkdtemp() self.config_file = os.path.join(self.temp_dir, "config.yaml") def _load_config_logic(self, config_file_path): """ Simulate the config loading logic from server.py Returns: (device_name, messages) """ messages = [] device_name = None if os.path.exists(config_file_path): try: with open(config_file_path) as f: config = yaml.safe_load(f.read()) or {} device_config = config.get("device", {}) configured_device_name = device_config.get( "name") if device_config else None if configured_device_name and configured_device_name.strip(): device_name = configured_device_name.strip() messages.append(f"Loaded config from {config_file_path}") messages.append(f"Configured device: {device_name}") else: messages.append(f"Loaded config from {config_file_path}") messages.append( "No device specified in config, will auto-select if only one device connected") except Exception as e: messages.append( f"Error loading config file {config_file_path}: {e}") raise else: messages.append( f"Config file {config_file_path} not found, using auto-selection for device") return device_name, messages def test_no_config_file(self): """Test behavior when config file doesn't exist""" non_existent_file = os.path.join(self.temp_dir, "non_existent.yaml") device_name, messages = self._load_config_logic(non_existent_file) assert device_name is None assert any("not found" in msg for msg in messages) assert any("auto-selection" in msg for msg in messages) def test_config_with_null_name(self): """Test config with name: null""" config_content = """ device: name: null """ with open(self.config_file, 'w') as f: f.write(config_content) device_name, messages = self._load_config_logic(self.config_file) assert device_name is None assert any("Loaded config" in msg for msg in messages) assert any("auto-select" in msg for msg in messages) def test_config_with_empty_string_name(self): """Test config with name: ''""" config_content = """ device: name: "" """ with open(self.config_file, 'w') as f: f.write(config_content) device_name, messages = self._load_config_logic(self.config_file) assert device_name is None assert any("auto-select" in msg for msg in messages) def test_config_with_whitespace_name(self): """Test config with name containing only whitespace""" config_content = """ device: name: " \t \n " """ with open(self.config_file, 'w') as f: f.write(config_content) device_name, messages = self._load_config_logic(self.config_file) assert device_name is None assert any("auto-select" in msg for msg in messages) def test_config_without_name_field(self): """Test config with device section but no name field""" config_content = """ device: # name field is missing other_setting: value """ with open(self.config_file, 'w') as f: f.write(config_content) device_name, messages = self._load_config_logic(self.config_file) assert device_name is None assert any("auto-select" in msg for msg in messages) def test_config_without_device_section(self): """Test config without device section""" config_content = """ # No device section other_config: value """ with open(self.config_file, 'w') as f: f.write(config_content) device_name, messages = self._load_config_logic(self.config_file) assert device_name is None assert any("auto-select" in msg for msg in messages) def test_config_with_valid_device_name(self): """Test config with valid device name""" config_content = """ device: name: "test-device-123" """ with open(self.config_file, 'w') as f: f.write(config_content) device_name, messages = self._load_config_logic(self.config_file) assert device_name == "test-device-123" assert any( "Configured device: test-device-123" in msg for msg in messages) def test_config_with_device_name_with_whitespace(self): """Test config with device name that has surrounding whitespace""" config_content = """ device: name: " test-device-123 " """ with open(self.config_file, 'w') as f: f.write(config_content) device_name, messages = self._load_config_logic(self.config_file) assert device_name == "test-device-123" # Should be trimmed assert any( "Configured device: test-device-123" in msg for msg in messages) def test_invalid_yaml_config(self): """Test behavior with invalid YAML""" config_content = """ device: name: "test-device # Missing closing quote - invalid YAML """ with open(self.config_file, 'w') as f: f.write(config_content) with pytest.raises(Exception): self._load_config_logic(self.config_file) def test_empty_config_file(self): """Test behavior with empty config file""" with open(self.config_file, 'w') as f: f.write("") device_name, messages = self._load_config_logic(self.config_file) assert device_name is None assert any("auto-select" in msg for msg in messages) def teardown_method(self): """Cleanup after each test method""" if os.path.exists(self.config_file): os.remove(self.config_file) os.rmdir(self.temp_dir)

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/minhalvp/android-mcp-server'

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