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 X86 = "x86";
41      private static final String X86_64 = "x86_64";
42      private static final String AARCH_64 = "aarch64";
43      private static final String RISCV_64 = "riscv64";
44      private static final String RISCV_32 = "riscv32";
45  
46      private void assertEqualsArchNotNull(final Processor.Arch arch, final Processor processor) {
47          assertNotNull(arch);
48          assertNotNull(processor);
49          assertEquals(arch, processor.getArch());
50      }
51  
52      private void assertEqualsTypeNotNull(final Processor.Type type, final Processor processor) {
53          assertNotNull(type);
54          assertNotNull(processor);
55          assertEquals(type, processor.getType());
56      }
57  
58      private void assertNotEqualsArchNotNull(final Processor.Arch arch, final Processor processor) {
59          assertNotNull(arch);
60          assertNotNull(processor);
61          assertNotEquals(arch, processor.getArch());
62      }
63  
64      private void assertNotEqualsTypeNotNull(final Processor.Type type, final Processor processor) {
65          assertNotNull(type);
66          assertNotNull(processor);
67          assertNotEquals(type, processor.getType());
68      }
69  
70      @Test
71      void testArch() {
72          // X86
73          Processor processor = ArchUtils.getProcessor(X86);
74          assertEqualsTypeNotNull(Processor.Type.X86, processor);
75          assertTrue(processor.isX86());
76          assertNotEqualsTypeNotNull(Processor.Type.PPC, processor);
77          assertFalse(processor.isPPC());
78          // X86_64
79          processor = ArchUtils.getProcessor(X86_64);
80          assertEqualsTypeNotNull(Processor.Type.X86, processor);
81          assertTrue(processor.isX86());
82          // IA64_32
83          processor = ArchUtils.getProcessor(IA64_32);
84          assertEqualsTypeNotNull(Processor.Type.IA_64, processor);
85          assertTrue(processor.isIA64());
86          // IA64
87          processor = ArchUtils.getProcessor(IA64);
88          assertEqualsTypeNotNull(Processor.Type.IA_64, processor);
89          assertTrue(processor.isIA64());
90          assertNotEqualsTypeNotNull(Processor.Type.X86, processor);
91          assertFalse(processor.isX86());
92          // PPC
93          processor = ArchUtils.getProcessor(PPC);
94          assertEqualsTypeNotNull(Processor.Type.PPC, processor);
95          assertTrue(processor.isPPC());
96          assertNotEqualsTypeNotNull(Processor.Type.IA_64, processor);
97          assertFalse(processor.isIA64());
98          // PPC64
99          processor = ArchUtils.getProcessor(PPC64);
100         assertEqualsTypeNotNull(Processor.Type.PPC, processor);
101         assertTrue(processor.isPPC());
102         // AARCH_64
103         processor = ArchUtils.getProcessor(AARCH_64);
104         assertEqualsTypeNotNull(Processor.Type.AARCH_64, processor);
105         assertTrue(processor.isAarch64());
106         // RISCV_32
107         processor = ArchUtils.getProcessor(RISCV_32);
108         assertEqualsTypeNotNull(Processor.Type.RISC_V, processor);
109         assertTrue(processor.isRISCV());
110         // RISCV_64
111         processor = ArchUtils.getProcessor(RISCV_64);
112         assertEqualsTypeNotNull(Processor.Type.RISC_V, processor);
113         assertTrue(processor.isRISCV());
114     }
115 
116     @Test
117     void testArchLabels() {
118         for (final Arch arch : Arch.values()) {
119             // Only test label presence.
120             assertFalse(arch.getLabel().isEmpty());
121         }
122     }
123 
124     @Test
125     void testGetProcessor() {
126         assertNotNull(ArchUtils.getProcessor(X86));
127         assertNull(ArchUtils.getProcessor("NA"));
128         assertNull(ArchUtils.getProcessor(null));
129 
130         final Processor processor = ArchUtils.getProcessor();
131         assertNotEquals(ObjectUtils.identityToString(processor), processor.toString());
132     }
133 
134     @Test
135     void testIs32BitJVM() {
136         // X86
137         Processor processor = ArchUtils.getProcessor(X86);
138         assertEqualsArchNotNull(Processor.Arch.BIT_32, processor);
139         assertTrue(processor.is32Bit());
140         // IA64_32
141         processor = ArchUtils.getProcessor(IA64_32);
142         assertEqualsArchNotNull(Processor.Arch.BIT_32, processor);
143         assertTrue(processor.is32Bit());
144         // PPC
145         processor = ArchUtils.getProcessor(PPC);
146         assertEqualsArchNotNull(Processor.Arch.BIT_32, processor);
147         processor.is32Bit();
148         // RISCV_32
149         processor = ArchUtils.getProcessor(RISCV_32);
150         assertEqualsArchNotNull(Processor.Arch.BIT_32, processor);
151         assertTrue(processor.is32Bit());
152         // X86_64
153         processor = ArchUtils.getProcessor(X86_64);
154         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
155         assertFalse(processor.is32Bit());
156         // PPC64
157         processor = ArchUtils.getProcessor(PPC64);
158         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
159         assertFalse(processor.is32Bit());
160         // IA64
161         processor = ArchUtils.getProcessor(IA64);
162         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
163         assertFalse(processor.is32Bit());
164         // RISCV_64
165         processor = ArchUtils.getProcessor(RISCV_64);
166         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
167         assertFalse(processor.is32Bit());
168     }
169 
170     @Test
171     void testIs64BitJVM() {
172         // X86_64
173         Processor processor = ArchUtils.getProcessor(X86_64);
174         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
175         assertTrue(processor.is64Bit());
176         // PPC64
177         processor = ArchUtils.getProcessor(PPC64);
178         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
179         assertTrue(processor.is64Bit());
180         // IA64
181         processor = ArchUtils.getProcessor(IA64);
182         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
183         assertTrue(processor.is64Bit());
184         // RISCV_64
185         processor = ArchUtils.getProcessor(RISCV_64);
186         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
187         assertTrue(processor.is64Bit());
188         // X86
189         processor = ArchUtils.getProcessor(X86);
190         assertNotEqualsArchNotNull(Processor.Arch.BIT_64, processor);
191         assertFalse(processor.is64Bit());
192         // PPC
193         processor = ArchUtils.getProcessor(PPC);
194         assertNotEqualsArchNotNull(Processor.Arch.BIT_64, processor);
195         assertFalse(processor.is64Bit());
196         // IA64_32
197         processor = ArchUtils.getProcessor(IA64_32);
198         assertNotEqualsArchNotNull(Processor.Arch.BIT_64, processor);
199         assertFalse(processor.is64Bit());
200         // RISCV_32
201         processor = ArchUtils.getProcessor(RISCV_32);
202         assertNotEqualsArchNotNull(Processor.Arch.BIT_64, processor);
203         assertFalse(processor.is64Bit());
204         // AARCH_64
205         processor = ArchUtils.getProcessor(AARCH_64);
206         assertEqualsArchNotNull(Processor.Arch.BIT_64, processor);
207         assertNotEqualsArchNotNull(Processor.Arch.BIT_32, processor);
208         assertTrue(processor.is64Bit());
209         assertFalse(processor.is32Bit());
210     }
211 
212     @Test
213     void testTypeLabels() {
214         for (final Type type : Type.values()) {
215             // Only test label presence.
216             assertFalse(type.getLabel().isEmpty());
217         }
218     }
219 
220 }