test_runtime_paths.mojo (7196B)
1 from std.collections import List 2 from std.testing import TestSuite, assert_equal, assert_raises 3 4 from hyf_runtime.env import ( 5 hyf_paths_profile_env_name, 6 hyf_paths_repo_local_root_env_name, 7 ) 8 from hyf_runtime.paths import ( 9 hyf_runtime_paths_for_unix_profile, 10 runtime_paths_for_namespace, 11 ) 12 from hyf_runtime.roots import runtime_roots_from_base_root 13 from hyf_runtime.startup import RuntimeStartupInput, resolve_startup_context 14 15 16 def test_runtime_paths_repo_local_contract_vector() raises: 17 var paths = hyf_runtime_paths_for_unix_profile( 18 "repo_local", "/home/unused", "/tmp/radroots-local/" 19 ) 20 21 assert_equal(paths.namespace, "services/hyf") 22 assert_equal(paths.config_dir, "/tmp/radroots-local/config/services/hyf") 23 assert_equal( 24 paths.config_path, 25 "/tmp/radroots-local/config/services/hyf/config.toml", 26 ) 27 assert_equal(paths.data_dir, "/tmp/radroots-local/data/services/hyf") 28 assert_equal(paths.cache_dir, "/tmp/radroots-local/cache/services/hyf") 29 assert_equal(paths.logs_dir, "/tmp/radroots-local/logs/services/hyf") 30 assert_equal( 31 paths.diagnostics_dir, 32 "/tmp/radroots-local/logs/services/hyf/diagnostics", 33 ) 34 assert_equal(paths.run_dir, "/tmp/radroots-local/run/services/hyf") 35 assert_equal( 36 paths.identity_path, 37 "/tmp/radroots-local/secrets/services/hyf/identity.secret.json", 38 ) 39 40 41 def test_runtime_paths_interactive_user_contract_vector() raises: 42 var paths = hyf_runtime_paths_for_unix_profile( 43 "interactive_user", "/Users/radroots-test", "" 44 ) 45 46 assert_equal( 47 paths.config_path, 48 "/Users/radroots-test/.radroots/config/services/hyf/config.toml", 49 ) 50 assert_equal( 51 paths.data_dir, "/Users/radroots-test/.radroots/data/services/hyf" 52 ) 53 assert_equal( 54 paths.secrets_dir, 55 "/Users/radroots-test/.radroots/secrets/services/hyf", 56 ) 57 58 59 def test_runtime_paths_service_host_contract_vector() raises: 60 var paths = hyf_runtime_paths_for_unix_profile( 61 "service_host", "/home/unused", "" 62 ) 63 64 assert_equal(paths.config_path, "/etc/radroots/services/hyf/config.toml") 65 assert_equal(paths.data_dir, "/var/lib/radroots/services/hyf") 66 assert_equal(paths.cache_dir, "/var/cache/radroots/services/hyf") 67 assert_equal(paths.logs_dir, "/var/log/radroots/services/hyf") 68 assert_equal(paths.run_dir, "/run/radroots/services/hyf") 69 assert_equal(paths.secrets_dir, "/etc/radroots/secrets/services/hyf") 70 71 72 def test_runtime_paths_reject_invalid_profile_namespace_and_base_root() raises: 73 with assert_raises(): 74 _ = hyf_runtime_paths_for_unix_profile( 75 "developer_laptop", "/Users/radroots-test", "" 76 ) 77 78 with assert_raises(): 79 _ = hyf_runtime_paths_for_unix_profile( 80 "repo_local", "/Users/radroots-test", "" 81 ) 82 83 with assert_raises(): 84 _ = runtime_paths_for_namespace( 85 runtime_roots_from_base_root("/tmp/radroots-local"), "hyf" 86 ) 87 88 89 def _startup_argv() -> List[String]: 90 return List[String]() 91 92 93 def _startup_argv2(first: String, second: String) -> List[String]: 94 var args = List[String]() 95 args.append(first) 96 args.append(second) 97 return args^ 98 99 100 def test_runtime_env_contract_names_are_frozen() raises: 101 assert_equal(hyf_paths_profile_env_name(), "HYF_PATHS_PROFILE") 102 assert_equal( 103 hyf_paths_repo_local_root_env_name(), "HYF_PATHS_REPO_LOCAL_ROOT" 104 ) 105 106 107 def test_startup_context_defaults_from_env_and_home() raises: 108 var context = resolve_startup_context( 109 RuntimeStartupInput( 110 env_paths_profile="interactive_user", 111 env_repo_local_base_root="", 112 user_home="/home/hyf-test", 113 argv=_startup_argv(), 114 ) 115 ) 116 117 assert_equal(context.paths_profile, "interactive_user") 118 assert_equal( 119 context.paths.config_path, 120 "/home/hyf-test/.radroots/config/services/hyf/config.toml", 121 ) 122 assert_equal(context.startup_config_path, context.paths.config_path) 123 assert_equal(context.startup_config_path_source, "canonical_runtime_path") 124 125 126 def test_startup_context_cli_flags_override_env() raises: 127 var context = resolve_startup_context( 128 RuntimeStartupInput( 129 env_paths_profile="service_host", 130 env_repo_local_base_root="", 131 user_home="/home/ignored", 132 argv=_startup_argv2( 133 "--paths-profile=repo_local", 134 "--repo-local-root=/tmp/hyf-runtime", 135 ), 136 ) 137 ) 138 139 assert_equal(context.paths_profile, "repo_local") 140 assert_equal(context.repo_local_base_root, "/tmp/hyf-runtime") 141 assert_equal( 142 context.paths.config_path, 143 "/tmp/hyf-runtime/config/services/hyf/config.toml", 144 ) 145 146 147 def test_startup_context_clears_inactive_repo_local_root() raises: 148 var context = resolve_startup_context( 149 RuntimeStartupInput( 150 env_paths_profile="interactive_user", 151 env_repo_local_base_root="/tmp/hyf-runtime", 152 user_home="/home/hyf-test", 153 argv=_startup_argv2("--repo-local-root", "/tmp/hyf-override"), 154 ) 155 ) 156 157 assert_equal(context.paths_profile, "interactive_user") 158 assert_equal(context.repo_local_base_root, "") 159 assert_equal( 160 context.paths.config_path, 161 "/home/hyf-test/.radroots/config/services/hyf/config.toml", 162 ) 163 164 165 def test_startup_context_config_flag_overrides_config_artifact_only() raises: 166 var context = resolve_startup_context( 167 RuntimeStartupInput( 168 env_paths_profile="repo_local", 169 env_repo_local_base_root="/tmp/hyf-runtime", 170 user_home="/home/ignored", 171 argv=_startup_argv2("--config", "/tmp/hyf-config/config.toml"), 172 ) 173 ) 174 175 assert_equal( 176 context.paths.config_path, 177 "/tmp/hyf-runtime/config/services/hyf/config.toml", 178 ) 179 assert_equal(context.startup_config_path, "/tmp/hyf-config/config.toml") 180 assert_equal(context.startup_config_path_source, "startup_flag") 181 182 183 def test_startup_context_rejects_missing_root_unknown_flag_and_flag_as_value() raises: 184 with assert_raises(): 185 _ = resolve_startup_context( 186 RuntimeStartupInput( 187 env_paths_profile="repo_local", 188 env_repo_local_base_root="", 189 user_home="/home/ignored", 190 argv=_startup_argv(), 191 ) 192 ) 193 194 with assert_raises(): 195 _ = resolve_startup_context( 196 RuntimeStartupInput( 197 env_paths_profile="interactive_user", 198 env_repo_local_base_root="", 199 user_home="/home/ignored", 200 argv=_startup_argv2("--profile", "repo_local"), 201 ) 202 ) 203 204 with assert_raises(): 205 _ = resolve_startup_context( 206 RuntimeStartupInput( 207 env_paths_profile="interactive_user", 208 env_repo_local_base_root="", 209 user_home="/home/ignored", 210 argv=_startup_argv2("--paths-profile", "--repo-local-root"), 211 ) 212 ) 213 214 215 def main() raises: 216 TestSuite.discover_tests[__functions_in_module()]().run()