/*- * Copyright 2015 Diamond Light Source Ltd. * * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html */ package org.eclipse.dawnsci.nexus.file; import static org.junit.Assert.fail; import java.io.File; import org.eclipse.dawnsci.nexus.NexusException; import org.eclipse.dawnsci.nexus.NexusFile; import org.eclipse.dawnsci.nexus.NexusUtils; import org.eclipse.dawnsci.nexus.TestUtils; import org.eclipse.dawnsci.nexus.test.util.NexusTestUtils; import org.eclipse.january.dataset.Dataset; import org.eclipse.january.dataset.DatasetFactory; import org.eclipse.january.dataset.ILazyWriteableDataset; import org.eclipse.january.dataset.SliceND; import org.junit.Before; import org.junit.BeforeClass; import org.junit.Test; /** * A collection of tests that causes the JVM to crash */ public class NexusFileStressTest { static String testScratchDirectoryName; static String filename; /** * Creates an empty directory for use by test code. * * @throws Exception if setup fails */ @BeforeClass public static void setUpBeforeClass() throws Exception { testScratchDirectoryName = TestUtils.generateDirectorynameFromClassname(NexusFileStressTest.class.getCanonicalName()); TestUtils.makeScratchDirectory(testScratchDirectoryName); filename = testScratchDirectoryName + "file.nxs"; } @Before public void deleteFile() { File handle = new File(filename); if (handle.isFile()) { if (!(handle.delete())) fail("Unable to delete file " + filename); } } /** * @throws Exception */ @SuppressWarnings("unused") @Test(expected=NullPointerException.class) public void testConstructor() throws Exception { NexusFile file = NexusTestUtils.openNexusFileReadOnly(null); } /** * @throws Exception */ @Test(expected=NullPointerException.class) public void testMakeGroupNPE1() throws Exception { NexusFile file = null; try { file = NexusTestUtils.createNexusFile(filename); file.getGroup(null, true); } finally { if (file != null) file.close(); } } /** * @throws Exception */ @Test(expected=NullPointerException.class) public void testMakeGroupNPE2() throws Exception { NexusFile file = null; try { file = NexusTestUtils.createNexusFile(filename); file.getGroup(null, "entry1", null, true); } finally { if (file != null) file.close(); } } /** * @throws Exception */ @Test(expected=NullPointerException.class) public void testOpenGroupNPE1() throws Exception { NexusFile file = null; try { file = NexusTestUtils.createNexusFile(filename); file.getGroup(null, false); } finally { if (file != null) file.close(); } } /** * @throws Exception */ @Test(expected=NullPointerException.class) public void testOpenGroupNPE2() throws Exception { NexusFile file = null; try { file = NexusTestUtils.createNexusFile(filename); file.getGroup(null, "entry1", null, false); } finally { if (file != null) file.close(); } } /** * @throws Exception */ @Test(expected=NullPointerException.class) public void testMakeDataNPE1() throws Exception { NexusFile file = null; try { file = NexusTestUtils.createNexusFile(filename); file.createData("/entry1:NXentry", DatasetFactory.createFromObject(2.).reshape(1), true); } finally { if (file != null) file.close(); } } /** * @throws Exception */ @Test(expected=NullPointerException.class) public void testMakeDataNPE2() throws Exception { NexusFile file = null; try { file = NexusTestUtils.createNexusFile(filename); file.createData("/entry1:NXentry", DatasetFactory.createFromObject(2.), true); } finally { if (file != null) file.close(); } } /** * @throws Exception */ @Test(expected=NullPointerException.class) public void testMultiDimPutSlab() throws Exception { //**// configure here if you like //**// // data dimension to write on each slab int[] dim = new int[] { 512, 512 }; // number of slabs int numberOfPoints = 2; // setup data etc. according to configuration int rank = dim.length+1; int[] dimArray = new int[rank]; dimArray[0] = ILazyWriteableDataset.UNLIMITED; for (int i = 0; i < dim.length; i++) { dimArray[i+1] = dim[i]; } int[] startPos = new int[rank]; int[] stop = dimArray.clone(); stop[0] = 1; Dataset data = DatasetFactory.zeros(dim, Dataset.FLOAT64).reshape(stop); // create the file NexusFile file = null; try { file = NexusTestUtils.createNexusFile(filename); ILazyWriteableDataset lazy = NexusUtils.createLazyWriteableDataset(null, Dataset.FLOAT64, stop, dimArray, stop); file.createData("/entry1:NXentry", lazy, true); // write the slabs dimArray[0] = 1; for (int i = 0; i < numberOfPoints; i++) { startPos[0] = i; stop[0] = startPos[i] + 1; lazy.setSlice(null, data, SliceND.createSlice(lazy, startPos, stop)); } } finally { if (file != null) file.close(); } } /** * @throws Exception */ @Test(expected=NexusException.class) public void testFileNotThere() throws Exception { deleteFile(); NexusFile file = NexusTestUtils.openNexusFileReadOnly(filename); file.getGroup("entry1:NXentry", false); } public static void main(String[] args) { try { NexusFileStressTest.setUpBeforeClass(); NexusFileStressTest nfsst = new NexusFileStressTest(); nfsst.testFileNotThere(); System.err.println("not good - no exception"); } catch (NexusException e) { System.out.println("all good - expected behaviour"); } catch (Exception e) { System.err.println("not so good - unexpected exception seen: "+e.getMessage()); } } }