@Test public void testRenameFile() throws Exception { VOLUME_NAME = "testRenameFile"; String fileName = "testfile"; String renamedFileName = "renamed"; client.createVolume(mrcAddress, auth, userCredentials, VOLUME_NAME); Volume volume = client.openVolume(VOLUME_NAME, null, options); FileHandle fh = volume.openFile( userCredentials, fileName, SYSTEM_V_FCNTL.SYSTEM_V_FCNTL_H_O_CREAT.getNumber() | SYSTEM_V_FCNTL.SYSTEM_V_FCNTL_H_O_RDWR.getNumber(), 0777); fh.close(); // nothing should happen volume.rename(userCredentials, fileName, fileName); DirectoryEntries dir = volume.readDir(userCredentials, "/", 0, 100, true); assertEquals(fileName, dir.getEntries(2).getName()); assertEquals(3, dir.getEntriesCount()); volume.rename(userCredentials, fileName, renamedFileName); dir = volume.readDir(userCredentials, "/", 0, 100, true); assertEquals(renamedFileName, dir.getEntries(2).getName()); assertEquals(3, dir.getEntriesCount()); }
@Test public void testReadDirMultipleChunks() throws Exception { options.setReaddirChunkSize(2); VOLUME_NAME = "testReadDirMultipleChunks"; final String TESTFILE = "test"; final int fileCount = 10; // create volume client.createVolume( mrcAddress, auth, userCredentials, VOLUME_NAME, 0, userCredentials.getUsername(), userCredentials.getGroups(0), AccessControlPolicyType.ACCESS_CONTROL_POLICY_NULL, StripingPolicyType.STRIPING_POLICY_RAID0, defaultStripingPolicy.getStripeSize(), defaultStripingPolicy.getWidth(), new ArrayList<KeyValuePair>()); Volume volume = client.openVolume(VOLUME_NAME, null, options); // create some files for (int i = 0; i < fileCount; i++) { FileHandle fh = volume.openFile( userCredentials, "/" + TESTFILE + i, SYSTEM_V_FCNTL.SYSTEM_V_FCNTL_H_O_CREAT.getNumber()); fh.close(); } // test 'readDir' across multiple readDir chunks. DirectoryEntries entrySet = null; entrySet = volume.readDir(userCredentials, "/", 0, 1000, false); assertEquals(2 + fileCount, entrySet.getEntriesCount()); assertEquals("..", entrySet.getEntries(0).getName()); assertEquals(".", entrySet.getEntries(1).getName()); for (int i = 0; i < fileCount; i++) { assertEquals(TESTFILE + i, entrySet.getEntries(2 + i).getName()); } }
@Test public void testCreateDirWithEmptyPathComponents() throws Exception { VOLUME_NAME = "testCreateDirWithEmptyPathComponents"; // Both directories should be created under "/" final String DIR1 = "/test"; final String DIR2 = "/test//"; final String DIR3 = "/test//testdir"; // create volume client.createVolume( mrcAddress, auth, userCredentials, VOLUME_NAME, 0, userCredentials.getUsername(), userCredentials.getGroups(0), AccessControlPolicyType.ACCESS_CONTROL_POLICY_NULL, StripingPolicyType.STRIPING_POLICY_RAID0, defaultStripingPolicy.getStripeSize(), defaultStripingPolicy.getWidth(), new ArrayList<KeyValuePair>()); Volume volume = client.openVolume(VOLUME_NAME, null, options); // create some files and directories try { volume.createDirectory(userCredentials, DIR1, 0755); volume.createDirectory(userCredentials, DIR3, 0755); } catch (IOException ioe) { fail("failed to create testdirs"); } try { volume.createDirectory(userCredentials, DIR2, 0755); fail("existing directory could be created"); } catch (IOException ioe) { } // test 'readDir' and 'stat' DirectoryEntries entrySet = null; entrySet = volume.readDir(userCredentials, DIR2, 0, 1000, false); assertEquals(3, entrySet.getEntriesCount()); assertEquals("..", entrySet.getEntries(0).getName()); assertEquals(".", entrySet.getEntries(1).getName()); assertEquals("/testdir", "/" + entrySet.getEntries(2).getName()); entrySet = volume.readDir(userCredentials, DIR3, 0, 1000, false); assertEquals(2, entrySet.getEntriesCount()); volume.removeDirectory(userCredentials, DIR3); entrySet = volume.readDir(userCredentials, DIR1, 0, 1000, false); assertEquals(2, entrySet.getEntriesCount()); }
@Test public void testCreateListDirectory() throws Exception { VOLUME_NAME = "testCreateListDirectory"; client.createVolume(mrcAddress, auth, userCredentials, VOLUME_NAME); Volume volume = client.openVolume(VOLUME_NAME, null, options); volume.createDirectory(userCredentials, "/DIR1", 0); volume.createDirectory(userCredentials, "DIR2", 0); DirectoryEntries dirEntries = volume.readDir(userCredentials, "/", 0, Integer.MAX_VALUE, true); assertEquals(4, dirEntries.getEntriesCount()); dirEntries = volume.readDir(userCredentials, "/", 0, 0, true); assertEquals(4, dirEntries.getEntriesCount()); assertEquals("..", dirEntries.getEntries(0).getName()); assertEquals(".", dirEntries.getEntries(1).getName()); assertEquals("DIR1", dirEntries.getEntries(2).getName()); assertEquals("DIR2", dirEntries.getEntries(3).getName()); }
@Test public void testCreateDelete() throws Exception { VOLUME_NAME = "testCreateDelete"; // Both directories should be created under "/" final String DIR1 = "/testdir1"; final String DIR2 = "testdir2"; final String TESTFILE = "testfile"; // create volume client.createVolume( mrcAddress, auth, userCredentials, VOLUME_NAME, 0, userCredentials.getUsername(), userCredentials.getGroups(0), AccessControlPolicyType.ACCESS_CONTROL_POLICY_NULL, StripingPolicyType.STRIPING_POLICY_RAID0, defaultStripingPolicy.getStripeSize(), defaultStripingPolicy.getWidth(), new ArrayList<KeyValuePair>()); Volume volume = client.openVolume(VOLUME_NAME, null, options); // create some files and directories try { volume.createDirectory(userCredentials, DIR1, 0755); volume.createDirectory(userCredentials, DIR2, 0755); } catch (IOException ioe) { fail("failed to create testdirs"); } for (int i = 0; i < 10; i++) { FileHandle fh = volume.openFile( userCredentials, DIR1 + "/" + TESTFILE + i, SYSTEM_V_FCNTL.SYSTEM_V_FCNTL_H_O_CREAT.getNumber()); fh.close(); } // // try to create a file w/o a name try { volume.openFile(userCredentials, "", SYSTEM_V_FCNTL.SYSTEM_V_FCNTL_H_O_CREAT.getNumber()); fail("missing filename"); } catch (Exception e) { } // try to create an already existing file try { volume.openFile( userCredentials, DIR1 + "/" + TESTFILE + "1", SYSTEM_V_FCNTL.SYSTEM_V_FCNTL_H_O_EXCL.getNumber() | SYSTEM_V_FCNTL.SYSTEM_V_FCNTL_H_O_CREAT.getNumber()); fail("file already exists"); } catch (Exception e) { } // file in file creation should fail try { volume.openFile( userCredentials, DIR1 + "/" + TESTFILE + "1/foo.txt", SYSTEM_V_FCNTL.SYSTEM_V_FCNTL_H_O_CREAT.getNumber()); fail("file in file creation"); } catch (Exception e) { } // should fail try { volume.createDirectory(userCredentials, "/", 0); fail("directory already exists"); } catch (PosixErrorException exc) { } // test 'readDir' and 'stat' DirectoryEntries entrySet = null; entrySet = volume.readDir(userCredentials, "", 0, 1000, false); assertEquals(4, entrySet.getEntriesCount()); assertEquals("..", entrySet.getEntries(0).getName()); assertEquals(".", entrySet.getEntries(1).getName()); assertEquals(DIR1, "/" + entrySet.getEntries(2).getName()); assertEquals("/" + DIR2, "/" + entrySet.getEntries(3).getName()); entrySet = volume.readDir(userCredentials, DIR1, 0, 1000, false); assertEquals(12, entrySet.getEntriesCount()); // test 'delete' volume.unlink(userCredentials, DIR1 + "/" + TESTFILE + "4"); entrySet = volume.readDir(userCredentials, DIR1, 0, 1000, false); assertEquals(11, entrySet.getEntriesCount()); volume.removeDirectory(userCredentials, DIR2); entrySet = volume.readDir(userCredentials, "", 0, 1000, false); assertEquals(3, entrySet.getEntriesCount()); }