|
2 | 2 |
|
3 | 3 | import static org.junit.Assert.assertEquals;
|
4 | 4 | import static org.junit.Assert.assertThrows;
|
| 5 | +import static org.junit.Assert.fail; |
5 | 6 | import static org.mockito.ArgumentMatchers.any;
|
6 | 7 | import static org.mockito.Mockito.mockStatic;
|
| 8 | +import static org.mockito.Mockito.never; |
| 9 | +import static org.mockito.Mockito.times; |
7 | 10 |
|
8 | 11 | import com.typesafe.config.Config;
|
9 | 12 | import com.typesafe.config.ConfigFactory;
|
@@ -127,25 +130,53 @@ public void shutdownBlockTimeInitTest() {
|
127 | 130 |
|
128 | 131 | @Test
|
129 | 132 | public void testThrowIfUnsupportedJavaVersion() {
|
130 |
| - runArchTest(true, false, true); |
131 |
| - runArchTest(true, true, false); |
132 |
| - runArchTest(false, false, false); |
| 133 | + runArchTest("x86_64", "1.8", false); |
| 134 | + runArchTest("x86_64", "11", true); |
| 135 | + runArchTest("x86_64", "17", true); |
| 136 | + runArchTest("aarch64", "17", false); |
| 137 | + runArchTest("aarch64", "1.8", true); |
| 138 | + runArchTest("aarch64", "11", true); |
133 | 139 | }
|
134 | 140 |
|
135 |
| - private void runArchTest(boolean isX86, boolean isJava8, boolean expectThrow) { |
| 141 | + private void runArchTest(String osArch, String javaVersion, boolean expectThrow) { |
136 | 142 | try (MockedStatic<Arch> mocked = mockStatic(Arch.class)) {
|
| 143 | + boolean isX86 = "x86_64".equals(osArch); |
| 144 | + boolean isArm64 = "aarch64".equals(osArch); |
| 145 | + |
| 146 | + boolean isJava8 = "1.8".equals(javaVersion); |
| 147 | + boolean isJava17 = "17".equals(javaVersion); |
| 148 | + |
137 | 149 | mocked.when(Arch::isX86).thenReturn(isX86);
|
| 150 | + mocked.when(Arch::isArm64).thenReturn(isArm64); |
| 151 | + |
138 | 152 | mocked.when(Arch::isJava8).thenReturn(isJava8);
|
139 |
| - mocked.when(Arch::getOsArch).thenReturn("x86_64"); |
140 |
| - mocked.when(Arch::javaSpecificationVersion).thenReturn("17"); |
141 |
| - mocked.when(Arch::withAll).thenReturn(""); |
| 153 | + mocked.when(Arch::isJava17).thenReturn(isJava17); |
| 154 | + |
| 155 | + mocked.when(Arch::getOsArch).thenReturn(osArch); |
| 156 | + mocked.when(Arch::javaSpecificationVersion).thenReturn(javaVersion); |
| 157 | + mocked.when(Arch::withAll).thenReturn(String.format( |
| 158 | + "Architecture: %s, Java Version: %s", osArch, javaVersion)); |
| 159 | + |
142 | 160 | mocked.when(Arch::throwIfUnsupportedJavaVersion).thenCallRealMethod();
|
143 | 161 |
|
144 | 162 | if (expectThrow) {
|
145 |
| - assertEquals(TronError.ErrCode.JDK_VERSION, assertThrows( |
146 |
| - TronError.class, () -> Args.setParam(new String[]{}, Constant.TEST_CONF)).getErrCode()); |
| 163 | + TronError err = assertThrows( |
| 164 | + TronError.class, () -> Args.setParam(new String[]{}, Constant.TEST_CONF)); |
| 165 | + |
| 166 | + String expectedJavaVersion = isX86 ? "1.8" : "17"; |
| 167 | + String expectedMessage = String.format( |
| 168 | + "Java %s is required for %s architecture. Detected version %s", |
| 169 | + expectedJavaVersion, osArch, javaVersion); |
| 170 | + assertEquals(expectedMessage, err.getCause().getMessage()); |
| 171 | + assertEquals(TronError.ErrCode.JDK_VERSION, err.getErrCode()); |
| 172 | + mocked.verify(Arch::withAll, times(1)); |
147 | 173 | } else {
|
148 |
| - Arch.throwIfUnsupportedJavaVersion(); |
| 174 | + try { |
| 175 | + Arch.throwIfUnsupportedJavaVersion(); |
| 176 | + } catch (Exception e) { |
| 177 | + fail("Expected no exception, but got: " + e.getMessage()); |
| 178 | + } |
| 179 | + mocked.verify(Arch::withAll, never()); |
149 | 180 | }
|
150 | 181 | }
|
151 | 182 | }
|
|
0 commit comments