| | |
| | | assertTrue(failure.getMessage().contains(account)); |
| | | } |
| | | } |
| | | |
| | | /** |
| | | * 口令取值顺序:本地凭据文件 → 环境变量 → 启动参数; |
| | | * 三者都没有时失败信息同时点名文件路径与键名,使"忘了放口令"是可见的失败。 |
| | | */ |
| | | @Test |
| | | void credentialPrefersTheLocalFileThenEnvironmentThenStartupParameter() throws Exception |
| | | { |
| | | java.nio.file.Path directory = java.nio.file.Files.createTempDirectory("vendor-credentials"); |
| | | java.nio.file.Path file = directory.resolve("vendor-credentials.properties"); |
| | | String key = "BATTERY_VENDOR_DB_PASSWORD"; |
| | | try |
| | | { |
| | | // 文件、环境变量、启动参数都在时取文件。 |
| | | java.nio.file.Files.writeString(file, key + "=from-file\n"); |
| | | assertEquals("from-file", NewareMysqlAdapterFactory.credential(key, file, |
| | | Map.of(key, "from-env"), name -> "from-parameter")); |
| | | |
| | | // 没有文件时退到环境变量。 |
| | | java.nio.file.Files.delete(file); |
| | | assertEquals("from-env", NewareMysqlAdapterFactory.credential(key, file, |
| | | Map.of(key, "from-env"), name -> "from-parameter")); |
| | | |
| | | // 前两者都没有时退到启动参数。 |
| | | assertEquals("from-parameter", NewareMysqlAdapterFactory.credential(key, file, |
| | | Map.of(), name -> "from-parameter")); |
| | | |
| | | // 三者都没有:失败信息里同时出现文件路径与键名。 |
| | | var failure = org.junit.jupiter.api.Assertions.assertThrows( |
| | | com.battery.device.api.DeviceAdapterException.class, |
| | | () -> NewareMysqlAdapterFactory.credential(key, file, Map.of(), name -> null)); |
| | | assertTrue(failure.getMessage().contains(file.toString())); |
| | | assertTrue(failure.getMessage().contains(key)); |
| | | } |
| | | finally |
| | | { |
| | | java.nio.file.Files.deleteIfExists(file); |
| | | java.nio.file.Files.deleteIfExists(directory); |
| | | } |
| | | } |
| | | |
| | | /** 凭据文件里的空白值不算配置过:否则一个空模板会把失败推到连接阶段。 */ |
| | | @Test |
| | | void blankCredentialInTheFileIsTreatedAsMissing() throws Exception |
| | | { |
| | | java.nio.file.Path directory = java.nio.file.Files.createTempDirectory("vendor-credentials-blank"); |
| | | java.nio.file.Path file = directory.resolve("vendor-credentials.properties"); |
| | | String key = "BATTERY_VENDOR_DB_PASSWORD"; |
| | | try |
| | | { |
| | | java.nio.file.Files.writeString(file, key + "=\n"); |
| | | assertEquals("from-env", NewareMysqlAdapterFactory.credential(key, file, Map.of(key, "from-env"), |
| | | name -> null)); |
| | | } |
| | | finally |
| | | { |
| | | java.nio.file.Files.deleteIfExists(file); |
| | | java.nio.file.Files.deleteIfExists(directory); |
| | | } |
| | | } |
| | | } |