mirror of
https://github.com/chanzuckerberg/cellxgene.git
synced 2026-09-15 12:47:56 +08:00
90 lines
4.3 KiB
Python
90 lines
4.3 KiB
Python
import os
|
|
|
|
import requests
|
|
|
|
from server.common.config.app_config import AppConfig
|
|
from server.common.errors import ConfigurationError
|
|
from server.common.utils.type_conversion_utils import convert_string_to_value
|
|
|
|
from test import FIXTURES_ROOT
|
|
from test.unit import test_server
|
|
from test.unit.common.config import ConfigTests
|
|
|
|
|
|
class TestExternalConfig(ConfigTests):
|
|
def test_type_convert(self):
|
|
# The values from environment variables are returned as strings.
|
|
# These values need to be converted to the proper types.
|
|
|
|
self.assertEqual(convert_string_to_value("1"), int(1))
|
|
self.assertEqual(convert_string_to_value("1.1"), float(1.1))
|
|
self.assertEqual(convert_string_to_value("string"), "string")
|
|
self.assertEqual(convert_string_to_value("true"), True)
|
|
self.assertEqual(convert_string_to_value("True"), True)
|
|
self.assertEqual(convert_string_to_value("false"), False)
|
|
self.assertEqual(convert_string_to_value("False"), False)
|
|
self.assertEqual(convert_string_to_value("null"), None)
|
|
self.assertEqual(convert_string_to_value("None"), None)
|
|
self.assertEqual(convert_string_to_value("{'a':10, 'b':'string'}"), dict(a=int(10), b="string"))
|
|
|
|
def test_environment_variable(self):
|
|
configfile = self.custom_external_config(
|
|
environment=[
|
|
dict(name="DATAPATH", path=["server", "single_dataset", "datapath"], required=True),
|
|
dict(name="DIFFEXP", path=["dataset", "diffexp", "enable"], required=True),
|
|
],
|
|
config_file_name="environment_external_config.yaml",
|
|
)
|
|
|
|
env = os.environ
|
|
env["DATAPATH"] = f"{FIXTURES_ROOT}/pbmc3k-CSC-gz.h5ad"
|
|
env["DIFFEXP"] = "False"
|
|
with test_server(command_line_args=["-c", configfile], env=env) as server:
|
|
session = requests.Session()
|
|
response = session.get(f"{server}/api/v0.2/config")
|
|
data_config = response.json()
|
|
self.assertEqual(data_config["config"]["displayNames"]["dataset"], "pbmc3k-CSC-gz")
|
|
self.assertTrue(data_config["config"]["parameters"]["disable-diffexp"])
|
|
|
|
env["DATAPATH"] = f"{FIXTURES_ROOT}/a95c59b4-7f5d-4b80-ad53-a694834ca18b.h5ad"
|
|
env["DIFFEXP"] = "True"
|
|
with test_server(command_line_args=["-c", configfile], env=env) as server:
|
|
session = requests.Session()
|
|
response = session.get(f"{server}/api/v0.2/config")
|
|
data_config = response.json()
|
|
self.assertEqual(data_config["config"]["displayNames"]["dataset"], "a95c59b4-7f5d-4b80-ad53-a694834ca18b")
|
|
self.assertFalse(data_config["config"]["parameters"]["disable-diffexp"])
|
|
|
|
def test_environment_variable_errors(self):
|
|
# no name
|
|
app_config = AppConfig()
|
|
app_config.external_config.environment = [dict(required=True, path=["this", "is", "a", "path"])]
|
|
with self.assertRaises(ConfigurationError) as config_error:
|
|
app_config.complete_config()
|
|
self.assertEqual(config_error.exception.message, "environment: 'name' is missing")
|
|
|
|
# required has wrong type
|
|
app_config = AppConfig()
|
|
app_config.external_config.environment = [
|
|
dict(name="myenvar", required="optional", path=["this", "is", "a", "path"])
|
|
]
|
|
with self.assertRaises(ConfigurationError) as config_error:
|
|
app_config.complete_config()
|
|
self.assertEqual(config_error.exception.message, "environment: 'required' must be a bool")
|
|
|
|
# no path
|
|
app_config = AppConfig()
|
|
app_config.external_config.environment = [dict(name="myenvar", required=True)]
|
|
with self.assertRaises(ConfigurationError) as config_error:
|
|
app_config.complete_config()
|
|
self.assertEqual(config_error.exception.message, "environment: 'path' is missing")
|
|
|
|
# required environment variable is not set
|
|
app_config = AppConfig()
|
|
app_config.external_config.environment = [
|
|
dict(name="THIS_ENV_IS_NOT_SET", required=True, path=["this", "is", "a", "path"])
|
|
]
|
|
with self.assertRaises(ConfigurationError) as config_error:
|
|
app_config.complete_config()
|
|
self.assertEqual(config_error.exception.message, "required environment variable 'THIS_ENV_IS_NOT_SET' not set")
|