package test.object;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import ncsa.hdf.hdf5lib.H5;
import ncsa.hdf.hdf5lib.HDF5Constants;
import ncsa.hdf.object.FileFormat;
import ncsa.hdf.object.HObject;
import ncsa.hdf.object.h5.H5File;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
/**
* @author Rishi R. Sinha
*
*/
public class HObjectTest {
private final static org.slf4j.Logger log = org.slf4j.LoggerFactory.getLogger(HObjectTest.class);
private static final H5File H5FILE = new H5File();
private static final String GNAME = H5TestFile.NAME_GROUP;
private H5File testFile = null;
private HObject testObj = null;
private long testOID;
@BeforeClass
public static void createFile() throws Exception {
try {
int openID = H5.getOpenIDCount();
if (openID > 0)
System.out.println("HObjectTest BeforeClass: Number of IDs still open: " + openID);
}
catch (Exception ex) {
ex.printStackTrace();
}
try {
H5TestFile.createTestFile(null);
}
catch (final Exception ex) {
System.out.println("*** Unable to create HDF5 test file. " + ex);
System.exit(-1);
}
}
@AfterClass
public static void checkIDs() throws Exception {
try {
int openID = H5.getOpenIDCount();
if (openID > 0)
System.out.println("HObjectTest AfterClass: Number of IDs still open: " + openID);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
@Before
public void openFiles() throws Exception {
try {
int openID = H5.getOpenIDCount();
if (openID > 0)
log.debug("Before: Number of IDs still open: " + openID);
}
catch (Exception ex) {
ex.printStackTrace();
}
testFile = new H5File(H5TestFile.NAME_FILE_H5, FileFormat.WRITE);
assertNotNull(testFile);
testObj = testFile.get(GNAME);
assertNotNull(testObj);
testOID = testObj.getOID()[0];
}
@After
public void removeFiles() throws Exception {
if (testFile != null) {
try {
testFile.close();
}
catch (final Exception ex) {
}
testFile = null;
}
try {
int openID = H5.getOpenIDCount();
if (openID > 0)
log.debug("After: Number of IDs still open: " + openID);
}
catch (Exception ex) {
ex.printStackTrace();
}
}
/**
* Test method for {@link ncsa.hdf.object.HObject#getFile()}.
*
* What to test:
*
* - Make sure file name in object yields same file as filename
*
*/
@Test
public void testGetFile() {
log.debug("testGetFile");
String fullFileName = testObj.getFile();
if (!fullFileName.endsWith(H5TestFile.NAME_FILE_H5)) {
fail("Wrong File");
}
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#getName()}.
*
* What to test:
*
* - For the base group, find the name of the group and test it against the standard.
*
*/
@Test
public void testGetName() {
log.debug("testGetName");
if (!testObj.getName().equals(GNAME.substring(1))) {
fail("GetName returns wrong name");
}
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#getFullName()}.
*
* What to test:
*
* - For the base group, find the full name of the group and test it against the standard.
*
*/
@Test
public void testGetFullName() {
log.debug("testGetFullName");
if (!testObj.getFullName().equals(GNAME)) {
fail("GetFullName returns wrong name");
}
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#getPath()}. *
*
* What to test:
*
* - For the base group, find the path of the group and test it against the standard.
*
*/
@Test
public void testGetPath() {
log.debug("testGetPath");
if (!testObj.getPath().equals("/")) {
fail("GetPath returns wrong path");
}
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#setName(java.lang.String)} .
*
* What to test:
*
* - Test setting the name to null. It should not be set.
*
- Test setting the name to another existing name in the same group.
*
- Test setting the name to a new name.
*
*/
@Test
public void testSetName() {
log.debug("testSetName");
final String newName = "tmpName";
// test set name to null
try {
testObj.setName(null);
}
catch (final Exception ex) {
; // Expected - intentional
}
// set to an existing name
try {
testObj.setName(H5TestFile.NAME_DATASET_FLOAT);
}
catch (final Exception ex) {
; // Expected - intentional
}
try {
testObj.setName(newName);
}
catch (final Exception ex) {
fail("setName() failed. " + ex);
}
// close the file and reopen it
try {
testFile.close();
testFile.open();
testObj = testFile.get(newName);
}
catch (final Exception ex) {
fail("setName() failed. " + ex);
}
HObject tmpObj = null;
// test the old name
try {
tmpObj = testFile.get(GNAME);
}
catch (final Exception ex) {
fail("testFile.get(GNAME) failed. " + ex);
}
assertNull("The dataset should be null because it has been renamed", tmpObj);
// set back the original name
try {
testObj.setName(GNAME);
}
catch (final Exception ex) {
fail("setName() failed. " + ex);
}
// make sure the dataset is OK
try {
testObj = testFile.get(GNAME);
}
catch (final Exception ex) {
fail("setName() failed. " + ex);
}
assertNotNull(testObj);
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#setPath(java.lang.String)} .
*
* What to test:
*
* - Test setting the path to null. It should not be set.
*
- Test setting the path to another existing name in the same group.
*
- Test setting the path to a new name.
*
*/
@Test
public void testSetPath() {
log.debug("testSetPath");
String path = testObj.getPath();
try {
testObj.setPath(null);
}
catch (Exception e) {
;
}
if (!path.equals(testObj.getPath())) {
fail("testPath changed the path name even though null was passed to it.");
}
try {
testObj.setPath("testPath");
}
catch (Exception e) {
fail("testPath failed when trying to set it to testPath");
}
if (!testObj.getPath().equals("testPath")) {
fail("testPath failed when trying to set it to testPath");
}
try {
testObj.setPath(path);
}
catch (Exception e) {
fail("testPath failed when trying to reset the path to " + path);
}
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#open()}.
*
* What to test:
*
* - Open the Group and check that the gid returned is less than 1.
*
*/
@Test
public void testOpen() {
log.debug("testOpen");
int gid = -1;
for (int loop = 0; loop < 15; loop++) {
gid = -1;
try {
gid = testObj.open();
}
catch (final Exception ex) {
fail("open() failed. " + ex);
}
assertTrue(gid > 0);
testObj.close(gid);
}
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#close(int)}.
*
* What to test:
*
* - Run the tests for opening the group.
*
*/
@Test
public void testClose() {
log.debug("testClose");
testOpen();
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#getFID()}.
*
* What to test:
*
* - get the FID for the group and make sure that it is the same as the FID for the file.
*
*/
@Test
public void testGetFID() {
log.debug("testGetFID");
assertEquals(testObj.getFID(), testFile.getFID());
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#equalsOID(long[])}.
*
* What to test:
*
* - Check against null. It should fail.
*
- Check against the OID that we have already extraced.
*
*/
@Test
public void testEqualsOID() {
log.debug("testEqualsOID");
assertNotNull(testObj);
assertTrue(testObj.equalsOID(new long[] { testOID }));
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#getFileFormat()}.
*
* What to test:
*
* - For the group, check against null.
*
- For the group, check against the testFile.
*
*/
@Test
public void testGetFileFormat() {
log.debug("testGetFileFormat");
assertNotNull(testObj.getFileFormat());
assertEquals(testObj.getFileFormat(), testFile);
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#getOID()}.
*
* What to test:
*
* - Check that OIDlist is not null.
*
- Check that OID[0] is correct.
*
*/
@Test
public void testGetOID() {
log.debug("testGetOID");
assertNotNull(testObj.getOID());
assertEquals(testObj.getOID()[0], testOID);
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#hasAttribute()}.
*
* What to test:
*
* - Check for Image dataset which has an attribute.
*
- Check for base group which has no attributes.
*
*/
@Test
public void testHasAttribute() {
log.debug("testHasAttribute");
try {
assertTrue(testFile.get(H5TestFile.NAME_DATASET_IMAGE).hasAttribute());
}
catch (Exception e) {
fail("get() fails.");
}
assertFalse(testObj.hasAttribute());
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
/**
* Test method for {@link ncsa.hdf.object.HObject#toString()}.
*
* What to test:
*
*/
@Test
public void testToString() {
log.debug("testToString");
assertEquals(testObj.toString(), GNAME.substring(1));
int nObjs = 0;
try {
nObjs = H5.H5Fget_obj_count(testFile.getFID(), HDF5Constants.H5F_OBJ_ALL);
}
catch (final Exception ex) {
fail("H5.H5Fget_obj_count() failed. " + ex);
}
assertEquals(1, nObjs); // file id should be the only one left open
}
}