View Javadoc
1   /*
2    *    Copyright 2010-2023 the original author or authors.
3    *
4    *    Licensed under the Apache License, Version 2.0 (the "License");
5    *    you may not use this file except in compliance with the License.
6    *    You may obtain a copy of the License at
7    *
8    *       https://www.apache.org/licenses/LICENSE-2.0
9    *
10   *    Unless required by applicable law or agreed to in writing, software
11   *    distributed under the License is distributed on an "AS IS" BASIS,
12   *    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   *    See the License for the specific language governing permissions and
14   *    limitations under the License.
15   */
16  package org.apache.ibatis.migration.system_property;
17  
18  import static org.junit.jupiter.api.Assertions.assertTrue;
19  
20  import java.io.File;
21  import java.io.IOException;
22  
23  import org.apache.ibatis.migration.Migrator;
24  import org.apache.ibatis.migration.io.Resources;
25  import org.apache.ibatis.migration.utils.TestUtil;
26  import org.junit.jupiter.api.BeforeAll;
27  import org.junit.jupiter.api.Test;
28  import org.junit.jupiter.api.extension.ExtendWith;
29  
30  import uk.org.webcompere.systemstubs.SystemStubs;
31  import uk.org.webcompere.systemstubs.environment.EnvironmentVariables;
32  import uk.org.webcompere.systemstubs.jupiter.SystemStub;
33  import uk.org.webcompere.systemstubs.jupiter.SystemStubsExtension;
34  
35  @ExtendWith(SystemStubsExtension.class)
36  class SystemPropertyTest {
37  
38    private static File dir;
39  
40    @SystemStub
41    private EnvironmentVariables variables = new EnvironmentVariables("MIGRATIONS_VAR3", "bogus_var3",
42        "MIGRATIONS_ENVVAR1", "Environment variable 1");
43  
44    @BeforeAll
45    static void init() throws IOException {
46      dir = Resources.getResourceAsFile("org/apache/ibatis/migration/system_property/testdir");
47    }
48  
49    @Test
50    void testSystemProperties() throws Exception {
51      variables.setup();
52      SystemStubs.restoreSystemProperties(() -> {
53        System.setProperty("MIGRATIONS_DRIVER", "org.hsqldb.jdbcDriver");
54        System.setProperty("username", "Pocahontas");
55        System.setProperty("var1", "Variable 1");
56        System.setProperty("MIGRATIONS_VAR3", "Variable 3");
57        System.setProperty("migrations_var4", "Variable 4");
58        System.setProperty("MIGRATIONS_VAR5", "Variable 5");
59  
60        String output = SystemStubs.tapSystemOut(() -> {
61          Migrator.main(TestUtil.args("--path=" + dir.getAbsolutePath(), "up", "1", "--trace"));
62        });
63        assertTrue(output.contains("SUCCESS"), "Output is:" + output);
64        assertTrue(output.contains("username: Pocahontas"), "Output is:" + output);
65        assertTrue(output.contains("var1: Variable 1"), "Output is:" + output);
66        assertTrue(output.contains("var2: ${var2}"), "Output is:" + output);
67        assertTrue(output.contains("var3: Variable 3"),
68            "System property should overwrite env var," + "Output is:" + output);
69        assertTrue(output.contains("var4: Variable 4"), "Output is:" + output);
70        assertTrue(output.contains("var5: Variable 5"), "Output is:" + output);
71        assertTrue(output.contains("Var5: Var5 in properties file"), "Output is:" + output);
72        assertTrue(output.contains("envvar1: Environment variable 1"), "Output is:" + output);
73  
74        Migrator.main(TestUtil.args("--path=" + dir.getAbsolutePath(), "down", "1"));
75      });
76      variables.teardown();
77    }
78  }