View Javadoc
1   /*
2    * Licensed to the Apache Software Foundation (ASF) under one or more
3    * contributor license agreements.  See the NOTICE file distributed with
4    * this work for additional information regarding copyright ownership.
5    * The ASF licenses this file to You under the Apache License, Version 2.0
6    * (the "License"); you may not use this file except in compliance with
7    * the License.  You may obtain a copy of the License at
8    *
9    *      https://www.apache.org/licenses/LICENSE-2.0
10   *
11   * Unless required by applicable law or agreed to in writing, software
12   * distributed under the License is distributed on an "AS IS" BASIS,
13   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   * See the License for the specific language governing permissions and
15   * limitations under the License.
16   */
17  package org.apache.commons.lang3;
18  
19  import static org.junit.jupiter.api.Assertions.assertEquals;
20  import static org.junit.jupiter.api.Assertions.assertFalse;
21  import static org.junit.jupiter.api.Assertions.assertNotEquals;
22  import static org.junit.jupiter.api.Assertions.assertNotNull;
23  import static org.junit.jupiter.api.Assertions.assertNull;
24  import static org.junit.jupiter.api.Assertions.assertTrue;
25  
26  import org.apache.commons.lang3.arch.Processor;
27  import org.apache.commons.lang3.arch.Processor.Arch;
28  import org.apache.commons.lang3.arch.Processor.Type;
29  import org.junit.jupiter.api.Test;
30  
31  /**
32   * Test class for {@link ArchUtils}.
33   */
34  class ArchUtilsTest extends AbstractLangTest {
35  
36      private static final String IA64 = "ia64";
37      private static final String IA64_32 = "ia64_32";
38      private static final String PPC = "ppc";
39      private static final String PPC64 = "ppc64";
40      private static final String PPC64_LE = "ppc64le";
41      private static final String X86 = "x86";
42      private static final String X86_64 = "x86_64";
43      private static final String AARCH_64 = "aarch64";
44      private static final String RISCV_64 = "riscv64";
45      private static final String RISCV_32 = "riscv32";
46  
47      private void assertEqualsArchNotNull(final Processor.Arch arch, final Processor processor) {
48          assertNotNull(arch);
49          assertNotNull(processor);
50          assertEquals(arch, processor.getArch());
51      }
52  
53      private void assertEqualsTypeNotNull(final Processor.Type type, final Processor processor) {
54          assertNotNull(type);
55          assertNotNull(processor);
56          assertEquals(type, processor.getType());
57      }
58  
59      private void assertNotEqualsArchNotNull(final Processor.Arch arch, final Processor processor) {
60          assertNotNull(arch);
61          assertNotNull(processor);
62          assertNotEquals(arch, processor.getArch());
63      }
64  
65      private void assertNotEqualsTypeNotNull(final Processor.Type type, final Processor processor) {
66          assertNotNull(type);
67          assertNotNull(processor);
68          assertNotEquals(type, processor.getType());
69      }
70  
71      @Test
72      void testArch() {
73          // X86
74          Processor processor = ArchUtils.getProcessor(X86);
75          assertEqualsTypeNotNull(Processor.Type.X86, processor);
76          assertTrue(processor.isX86());
77          assertNotEqualsTypeNotNull(Processor.Type.PPC, processor);
78          assertFalse(processor.isPPC());
79          // X86_64
80          processor = ArchUtils.getProcessor(X86_64);
81          assertEqualsTypeNotNull(Processor.Type.X86, processor);
82          assertTrue(processor.isX86());
83          // IA64_32
84          processor = ArchUtils.getProcessor(IA64_32);
85          assertEqualsTypeNotNull(Processor.Type.IA_64, processor);
86          assertTrue(processor.isIA64());
87          // IA64
88          processor = ArchUtils.getProcessor(IA64);
89          assertEqualsTypeNotNull(Processor.Type.IA_64, processor);
90          assertTrue(processor.isIA64());
91          assertNotEqualsTypeNotNull(Processor.Type.X86, processor);
92          assertFalse(processor.isX86());
93          // PPC
94          processor = ArchUtils.getProcessor(PPC);
95          assertEqualsTypeNotNull(Processor.Type.PPC, processor);
96          assertTrue(processor.isPPC());
97          assertNotEqualsTypeNotNull(Processor.Type.IA_64, processor);
98          assertFalse(processor.isIA64());
99          // PPC64
100         processor = ArchUtils.getProcessor(PPC64);
101         assertEqualsTypeNotNull(Processor.Type.PPC, processor);
102         assertTrue(processor.isPPC());
103         // PPC64_LE
104         processor = ArchUtils.getProcessor(PPC64_LE);
105         assertEqualsTypeNotNull(Processor.Type.PPC, processor);
106         assertTrue(processor.isPPC());
107         // AARCH_64
108         processor = ArchUtils.getProcessor(AARCH_64);
109         assertEqualsTypeNotNull(Processor.Type.AARCH_64, processor);
110         assertTrue(processor.isAarch64());
111         // RISCV_32
112         processor = ArchUtils.getProcessor(RISCV_32);
113         assertEqualsTypeNotNull(Processor.Type.RISC_V, processor);
114         assertTrue(processor.isRISCV());
115         // RISCV_64
116         processor = ArchUtils.getProcessor(RISCV_64);
117         assertEqualsTypeNotNull(Processor.Type.RISC_V, processor);
118         assertTrue(processor.isRISCV());
119     }
120 
121     @Test
122     void testArchLabels() {
123         for (final Arch arch : Arch.values()) {
124             // Only test label presence.
125             assertFalse(arch.getLabel().isEmpty());
126         }
127     }
128 
129     @Test
130     void testGetProcessor() {
131         assertNotNull(ArchUtils.getProcessor(X86));
132         assertNull(ArchUtils.getProcessor("NA"));
133         assertNull(ArchUtils.getProcessor(null));
134 
135         final Processor processor = ArchUtils.getProcessor();
136         assertNotEquals(ObjectUtils.identityToString(processor), processor.toString());
137     }
138 
139     @Test
140     void testIs32BitJVM() {
141         // X86
142         Processor processor = ArchUtils.getProcessor(X86);
143         assertEqualsArchNotNull(Processor.Arch.BIT_32, processor);
144         assertTrue(processor.is32Bit());
145         // IA64_32
146         processor = ArchUtils.getProcessor(IA64_32);
147         assertEqualsArchNotNull(Processor.Arch.BIT_32, processor);
148         assertTrue(processor.is32Bit());
149         // PPC
150         processor = ArchUtils.getProcessor(PPC);
151         assertEqualsArchNotNull(Processor.Arch.BIT_32, processor);
152         processor.is32Bit();
153         // RISCV_32
154         processor = ArchUtils.getProcessor(RISCV_32);
155         assertEqualsArchNotNull(Processor.Arch.BIT_32, processor);
156         assertTrue(processor.is32Bit());
157         // X86_64
158         processor = ArchUtils.getProcessor(X86_64);
159         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
160         assertFalse(processor.is32Bit());
161         // PPC64
162         processor = ArchUtils.getProcessor(PPC64);
163         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
164         assertFalse(processor.is32Bit());
165         // PPC64_LE
166         processor = ArchUtils.getProcessor(PPC64_LE);
167         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
168         assertFalse(processor.is32Bit());
169         // IA64
170         processor = ArchUtils.getProcessor(IA64);
171         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
172         assertFalse(processor.is32Bit());
173         // RISCV_64
174         processor = ArchUtils.getProcessor(RISCV_64);
175         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
176         assertFalse(processor.is32Bit());
177     }
178 
179     @Test
180     void testIs64BitJVM() {
181         // X86_64
182         Processor processor = ArchUtils.getProcessor(X86_64);
183         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
184         assertTrue(processor.is64Bit());
185         // PPC64
186         processor = ArchUtils.getProcessor(PPC64);
187         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
188         assertTrue(processor.is64Bit());
189         // PPC64_LE
190         processor = ArchUtils.getProcessor(PPC64_LE);
191         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
192         assertTrue(processor.is64Bit());
193         // IA64
194         processor = ArchUtils.getProcessor(IA64);
195         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
196         assertTrue(processor.is64Bit());
197         // RISCV_64
198         processor = ArchUtils.getProcessor(RISCV_64);
199         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
200         assertTrue(processor.is64Bit());
201         // X86
202         processor = ArchUtils.getProcessor(X86);
203         assertNotEqualsArchNotNull(Processor.Arch.BIT_64, processor);
204         assertFalse(processor.is64Bit());
205         // PPC
206         processor = ArchUtils.getProcessor(PPC);
207         assertNotEqualsArchNotNull(Processor.Arch.BIT_64, processor);
208         assertFalse(processor.is64Bit());
209         // IA64_32
210         processor = ArchUtils.getProcessor(IA64_32);
211         assertNotEqualsArchNotNull(Processor.Arch.BIT_64, processor);
212         assertFalse(processor.is64Bit());
213         // RISCV_32
214         processor = ArchUtils.getProcessor(RISCV_32);
215         assertNotEqualsArchNotNull(Processor.Arch.BIT_64, processor);
216         assertFalse(processor.is64Bit());
217         // AARCH_64
218         processor = ArchUtils.getProcessor(AARCH_64);
219         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
220         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
221         assertTrue(processor.is64Bit());
222         assertFalse(processor.is32Bit());
223     }
224 
225     @Test
226     void testTypeLabels() {
227         for (final Type type : Type.values()) {
228             // Only test label presence.
229             assertFalse(type.getLabel().isEmpty());
230         }
231     }
232 
233 }