parent
36f3a0bb8e
commit
a4b28c1ae7
@ -0,0 +1,125 @@ |
|||||||
|
package org.rocksdb.test; |
||||||
|
|
||||||
|
import org.junit.Test; |
||||||
|
import org.rocksdb.util.Environment; |
||||||
|
|
||||||
|
import java.lang.reflect.Field; |
||||||
|
import java.lang.reflect.Modifier; |
||||||
|
|
||||||
|
import static org.assertj.core.api.Assertions.assertThat; |
||||||
|
|
||||||
|
public class EnvironmentTest { |
||||||
|
|
||||||
|
// Init static context
|
||||||
|
private static Environment environment = |
||||||
|
new Environment(); |
||||||
|
|
||||||
|
@Test |
||||||
|
public void mac32() { |
||||||
|
setEnvironmentClassFields("mac", "32"); |
||||||
|
assertThat(Environment.getJniLibraryExtension()). |
||||||
|
isEqualTo(".jnilib"); |
||||||
|
assertThat(Environment.getJniLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni-osx.jnilib"); |
||||||
|
assertThat(Environment.getSharedLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni.dylib"); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void mac64() { |
||||||
|
setEnvironmentClassFields("mac", "64"); |
||||||
|
assertThat(Environment.getJniLibraryExtension()). |
||||||
|
isEqualTo(".jnilib"); |
||||||
|
assertThat(Environment.getJniLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni-osx.jnilib"); |
||||||
|
assertThat(Environment.getSharedLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni.dylib"); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void nix32() { |
||||||
|
// Linux
|
||||||
|
setEnvironmentClassFields("Linux", "32"); |
||||||
|
assertThat(Environment.getJniLibraryExtension()). |
||||||
|
isEqualTo(".so"); |
||||||
|
assertThat(Environment.getJniLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni-linux32.so"); |
||||||
|
assertThat(Environment.getSharedLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni.so"); |
||||||
|
// UNIX
|
||||||
|
setEnvironmentClassFields("Unix", "32"); |
||||||
|
assertThat(Environment.getJniLibraryExtension()). |
||||||
|
isEqualTo(".so"); |
||||||
|
assertThat(Environment.getJniLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni-linux32.so"); |
||||||
|
assertThat(Environment.getSharedLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni.so"); |
||||||
|
// AIX
|
||||||
|
setEnvironmentClassFields("aix", "32"); |
||||||
|
assertThat(Environment.getJniLibraryExtension()). |
||||||
|
isEqualTo(".so"); |
||||||
|
assertThat(Environment.getJniLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni-linux32.so"); |
||||||
|
assertThat(Environment.getSharedLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni.so"); |
||||||
|
} |
||||||
|
|
||||||
|
@Test |
||||||
|
public void nix64() { |
||||||
|
setEnvironmentClassFields("Linux", "x64"); |
||||||
|
assertThat(Environment.getJniLibraryExtension()). |
||||||
|
isEqualTo(".so"); |
||||||
|
assertThat(Environment.getJniLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni-linux64.so"); |
||||||
|
assertThat(Environment.getSharedLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni.so"); |
||||||
|
// UNIX
|
||||||
|
setEnvironmentClassFields("Unix", "x64"); |
||||||
|
assertThat(Environment.getJniLibraryExtension()). |
||||||
|
isEqualTo(".so"); |
||||||
|
assertThat(Environment.getJniLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni-linux64.so"); |
||||||
|
assertThat(Environment.getSharedLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni.so"); |
||||||
|
// AIX
|
||||||
|
setEnvironmentClassFields("aix", "x64"); |
||||||
|
assertThat(Environment.getJniLibraryExtension()). |
||||||
|
isEqualTo(".so"); |
||||||
|
assertThat(Environment.getJniLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni-linux64.so"); |
||||||
|
assertThat(Environment.getSharedLibraryName("rocksdb")). |
||||||
|
isEqualTo("librocksdbjni.so"); |
||||||
|
} |
||||||
|
|
||||||
|
@Test(expected = UnsupportedOperationException.class) |
||||||
|
public void failLinuxJniLibraryName(){ |
||||||
|
setEnvironmentClassFields("win", "x64"); |
||||||
|
Environment.getJniLibraryName("rocksdb"); |
||||||
|
} |
||||||
|
|
||||||
|
@Test(expected = UnsupportedOperationException.class) |
||||||
|
public void failWinSharedLibrary(){ |
||||||
|
setEnvironmentClassFields("win", "x64"); |
||||||
|
Environment.getSharedLibraryName("rocksdb"); |
||||||
|
} |
||||||
|
|
||||||
|
private void setEnvironmentClassFields(String osName, |
||||||
|
String osArch) { |
||||||
|
setEnvironmentClassField("OS", osName); |
||||||
|
setEnvironmentClassField("ARCH", osArch); |
||||||
|
} |
||||||
|
|
||||||
|
private void setEnvironmentClassField(String fieldName, String value) { |
||||||
|
final Field field; |
||||||
|
try { |
||||||
|
field = Environment.class.getDeclaredField(fieldName); |
||||||
|
field.setAccessible(true); |
||||||
|
final Field modifiersField = Field.class.getDeclaredField("modifiers"); |
||||||
|
modifiersField.setAccessible(true); |
||||||
|
modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); |
||||||
|
field.set(null, value); |
||||||
|
} catch (NoSuchFieldException | IllegalAccessException e) { |
||||||
|
throw new RuntimeException(e); |
||||||
|
} |
||||||
|
} |
||||||
|
} |
Loading…
Reference in new issue