]> git.proxmox.com Git - ceph.git/blame - ceph/src/rocksdb/java/src/test/java/org/rocksdb/util/EnvironmentTest.java
update sources to ceph Nautilus 14.2.1
[ceph.git] / ceph / src / rocksdb / java / src / test / java / org / rocksdb / util / EnvironmentTest.java
CommitLineData
7c673cae 1// Copyright (c) 2014, Facebook, Inc. All rights reserved.
11fdf7f2
TL
2// This source code is licensed under both the GPLv2 (found in the
3// COPYING file in the root directory) and Apache 2.0 License
4// (found in the LICENSE.Apache file in the root directory).
7c673cae
FG
5package org.rocksdb.util;
6
7import org.junit.AfterClass;
8import org.junit.BeforeClass;
9import org.junit.Test;
10
11import java.lang.reflect.Field;
12import java.lang.reflect.Modifier;
13
14import static org.assertj.core.api.Assertions.assertThat;
15
16public class EnvironmentTest {
17 private final static String ARCH_FIELD_NAME = "ARCH";
18 private final static String OS_FIELD_NAME = "OS";
19
20 private static String INITIAL_OS;
21 private static String INITIAL_ARCH;
22
23 @BeforeClass
24 public static void saveState() {
25 INITIAL_ARCH = getEnvironmentClassField(ARCH_FIELD_NAME);
26 INITIAL_OS = getEnvironmentClassField(OS_FIELD_NAME);
27 }
28
29 @Test
30 public void mac32() {
31 setEnvironmentClassFields("mac", "32");
32 assertThat(Environment.isWindows()).isFalse();
33 assertThat(Environment.getJniLibraryExtension()).
34 isEqualTo(".jnilib");
35 assertThat(Environment.getJniLibraryFileName("rocksdb")).
36 isEqualTo("librocksdbjni-osx.jnilib");
37 assertThat(Environment.getSharedLibraryFileName("rocksdb")).
38 isEqualTo("librocksdbjni.dylib");
39 }
40
41 @Test
42 public void mac64() {
43 setEnvironmentClassFields("mac", "64");
44 assertThat(Environment.isWindows()).isFalse();
45 assertThat(Environment.getJniLibraryExtension()).
46 isEqualTo(".jnilib");
47 assertThat(Environment.getJniLibraryFileName("rocksdb")).
48 isEqualTo("librocksdbjni-osx.jnilib");
49 assertThat(Environment.getSharedLibraryFileName("rocksdb")).
50 isEqualTo("librocksdbjni.dylib");
51 }
52
53 @Test
54 public void nix32() {
55 // Linux
56 setEnvironmentClassFields("Linux", "32");
57 assertThat(Environment.isWindows()).isFalse();
58 assertThat(Environment.getJniLibraryExtension()).
59 isEqualTo(".so");
60 assertThat(Environment.getJniLibraryFileName("rocksdb")).
61 isEqualTo("librocksdbjni-linux32.so");
62 assertThat(Environment.getSharedLibraryFileName("rocksdb")).
63 isEqualTo("librocksdbjni.so");
64 // UNIX
65 setEnvironmentClassFields("Unix", "32");
66 assertThat(Environment.isWindows()).isFalse();
67 assertThat(Environment.getJniLibraryExtension()).
68 isEqualTo(".so");
69 assertThat(Environment.getJniLibraryFileName("rocksdb")).
70 isEqualTo("librocksdbjni-linux32.so");
71 assertThat(Environment.getSharedLibraryFileName("rocksdb")).
72 isEqualTo("librocksdbjni.so");
73 }
74
75 @Test(expected = UnsupportedOperationException.class)
76 public void aix32() {
77 // AIX
78 setEnvironmentClassFields("aix", "32");
79 assertThat(Environment.isWindows()).isFalse();
80 assertThat(Environment.getJniLibraryExtension()).
81 isEqualTo(".so");
82 Environment.getJniLibraryFileName("rocksdb");
83 }
84
85 @Test
86 public void nix64() {
87 setEnvironmentClassFields("Linux", "x64");
88 assertThat(Environment.isWindows()).isFalse();
89 assertThat(Environment.getJniLibraryExtension()).
90 isEqualTo(".so");
91 assertThat(Environment.getJniLibraryFileName("rocksdb")).
92 isEqualTo("librocksdbjni-linux64.so");
93 assertThat(Environment.getSharedLibraryFileName("rocksdb")).
94 isEqualTo("librocksdbjni.so");
95 // UNIX
96 setEnvironmentClassFields("Unix", "x64");
97 assertThat(Environment.isWindows()).isFalse();
98 assertThat(Environment.getJniLibraryExtension()).
99 isEqualTo(".so");
100 assertThat(Environment.getJniLibraryFileName("rocksdb")).
101 isEqualTo("librocksdbjni-linux64.so");
102 assertThat(Environment.getSharedLibraryFileName("rocksdb")).
103 isEqualTo("librocksdbjni.so");
104 // AIX
105 setEnvironmentClassFields("aix", "x64");
106 assertThat(Environment.isWindows()).isFalse();
107 assertThat(Environment.getJniLibraryExtension()).
108 isEqualTo(".so");
109 assertThat(Environment.getJniLibraryFileName("rocksdb")).
110 isEqualTo("librocksdbjni-aix64.so");
111 assertThat(Environment.getSharedLibraryFileName("rocksdb")).
112 isEqualTo("librocksdbjni.so");
113 }
114
115 @Test
116 public void detectWindows(){
117 setEnvironmentClassFields("win", "x64");
118 assertThat(Environment.isWindows()).isTrue();
119 }
120
121 @Test
122 public void win64() {
123 setEnvironmentClassFields("win", "x64");
124 assertThat(Environment.isWindows()).isTrue();
125 assertThat(Environment.getJniLibraryExtension()).
126 isEqualTo(".dll");
127 assertThat(Environment.getJniLibraryFileName("rocksdb")).
128 isEqualTo("librocksdbjni-win64.dll");
129 assertThat(Environment.getSharedLibraryFileName("rocksdb")).
130 isEqualTo("librocksdbjni.dll");
131 }
132
133 private void setEnvironmentClassFields(String osName,
134 String osArch) {
135 setEnvironmentClassField(OS_FIELD_NAME, osName);
136 setEnvironmentClassField(ARCH_FIELD_NAME, osArch);
137 }
138
139 @AfterClass
140 public static void restoreState() {
141 setEnvironmentClassField(OS_FIELD_NAME, INITIAL_OS);
142 setEnvironmentClassField(ARCH_FIELD_NAME, INITIAL_ARCH);
143 }
144
145 private static String getEnvironmentClassField(String fieldName) {
146 final Field field;
147 try {
148 field = Environment.class.getDeclaredField(fieldName);
149 field.setAccessible(true);
150 final Field modifiersField = Field.class.getDeclaredField("modifiers");
151 modifiersField.setAccessible(true);
152 modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
153 return (String)field.get(null);
154 } catch (NoSuchFieldException | IllegalAccessException e) {
155 throw new RuntimeException(e);
156 }
157 }
158
159 private static void setEnvironmentClassField(String fieldName, String value) {
160 final Field field;
161 try {
162 field = Environment.class.getDeclaredField(fieldName);
163 field.setAccessible(true);
164 final Field modifiersField = Field.class.getDeclaredField("modifiers");
165 modifiersField.setAccessible(true);
166 modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL);
167 field.set(null, value);
168 } catch (NoSuchFieldException | IllegalAccessException e) {
169 throw new RuntimeException(e);
170 }
171 }
172}