@Test public void testStatVFS() throws Exception, VolumeNotFoundException { final String VOLUME_NAME_1 = "foobar"; client.createVolume(mrcAddress, auth, userCredentials, VOLUME_NAME_1); Volume volume = client.openVolume(VOLUME_NAME_1, null, options); StatVFS volumeVFS = volume.statFS(userCredentials); MRCServiceClient mrcClient = new MRCServiceClient(testEnv.getRpcClient(), null); StatVFS mrcClientVFS = null; RPCResponse<StatVFS> resp = null; try { statvfsRequest input = statvfsRequest.newBuilder().setVolumeName(VOLUME_NAME_1).setKnownEtag(0).build(); resp = mrcClient.statvfs(testEnv.getMRCAddress(), auth, userCredentials, input); mrcClientVFS = resp.get(); } catch (Exception e) { e.printStackTrace(); } finally { if (resp != null) { resp.freeBuffers(); } } assertNotNull(volumeVFS); assertEquals(mrcClientVFS, volumeVFS); }
@Test public void testHardLink() throws Exception { VOLUME_NAME = "testHardLink"; final String ORIG_FILE = "test.txt"; final String LINKED_FILE = "test-link.txt"; final String LINKED_FILE2 = "test-link2.txt"; 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>()); // create file openResponse open = null; RPCResponse<openResponse> resp = null; try { resp = mrcClient.open( testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, ORIG_FILE, FileAccessManager.O_CREAT, 0, 0777, defaultCoordinates); open = resp.get(); } finally { if (resp != null) { resp.freeBuffers(); } } assertNotNull(open); // create link Volume volume = client.openVolume(VOLUME_NAME, null, options); volume.link(userCredentials, ORIG_FILE, LINKED_FILE); open = null; resp = null; try { resp = mrcClient.open( testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, "test-hardlink.txt", FileAccessManager.O_CREAT, 0, 0, defaultCoordinates); open = resp.get(); } catch (Exception e) { e.printStackTrace(); } finally { if (resp != null) { resp.freeBuffers(); } } assertNotNull(open); // check whether both filenames refer to the same file Stat stat1 = null; Stat stat2 = null; RPCResponse<getattrResponse> resp1 = null; RPCResponse<getattrResponse> resp2 = null; try { resp1 = mrcClient.getattr( testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, ORIG_FILE, 0); stat1 = resp1.get().getStbuf(); resp2 = mrcClient.getattr( testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, LINKED_FILE, 0); stat2 = resp2.get().getStbuf(); } catch (Exception e) { e.printStackTrace(); } finally { if (resp1 != null) { resp1.freeBuffers(); } if (resp2 != null) { resp.freeBuffers(); } } assertNotNull(stat1); assertNotNull(stat2); assertEquals(stat1.getIno(), stat1.getIno()); assertEquals(2, stat1.getNlink()); // create another link to the second file volume.link(userCredentials, LINKED_FILE, LINKED_FILE2); // check whether both links refer to the same file stat1 = null; stat2 = null; resp1 = null; resp2 = null; try { resp1 = mrcClient.getattr( testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, LINKED_FILE, 0); stat1 = resp1.get().getStbuf(); resp2 = mrcClient.getattr( testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, LINKED_FILE2, 0); stat2 = resp2.get().getStbuf(); } catch (Exception e) { e.printStackTrace(); } finally { if (resp1 != null) { resp1.freeBuffers(); } if (resp2 != null) { resp2.freeBuffers(); } } assertEquals(stat1.getIno(), stat2.getIno()); assertEquals(3, stat1.getNlink()); // delete one of the links volume.unlink(userCredentials, LINKED_FILE); // check whether remaining links refer to the same file stat1 = null; stat2 = null; resp1 = null; resp2 = null; try { resp1 = mrcClient.getattr( testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, ORIG_FILE, 0); stat1 = resp1.get().getStbuf(); resp2 = mrcClient.getattr( testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, LINKED_FILE2, 0); stat2 = resp2.get().getStbuf(); } catch (Exception e) { e.printStackTrace(); } finally { if (resp1 != null) { resp1.freeBuffers(); } if (resp2 != null) { resp2.freeBuffers(); } } assertEquals(stat1.getIno(), stat2.getIno()); assertEquals(2, stat1.getNlink()); // delete the other two links volume.unlink(userCredentials, ORIG_FILE); volume.unlink(userCredentials, LINKED_FILE2); try { mrcClient .getattr(testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, LINKED_FILE2, 0) .get(); fail("file should not exist anymore"); } catch (Exception exc) { } try { mrcClient .getattr(testEnv.getMRCAddress(), auth, userCredentials, VOLUME_NAME, ORIG_FILE, 0) .get(); fail("file should not exist anymore"); } catch (Exception exc) { } // // // create two links to a directory // invokeSync(client.mkdir(mrcAddress, RPCAuthentication.authNone, uc, // volumeName, "testDir1", 0)); // try { // invokeSync(client.link(mrcAddress, RPCAuthentication.authNone, uc, // volumeName, "testDir1", // "testDir1/testDir2")); // fail("links to directories should not be allowed"); // } catch (Exception exc) { // } // } // }
public void start() throws Exception { try { // ensure that TEST_DIR is empty File testDir = new File(SetupUtils.TEST_DIR); FSUtils.delTree(testDir); testDir.mkdirs(); rpcClient = SetupUtils.createRPCClient(10000); getRpcClient().start(); getRpcClient().waitForStartup(); dirClient = SetupUtils.createDIRClient(getRpcClient()); if (enabledServs.contains(Services.DIR_SERVICE)) { dirService = new DIRRequestDispatcher(SetupUtils.createDIRConfig(), SetupUtils.createDIRdbsConfig()); dirService.startup(); dirService.waitForStartup(); Logging.logMessage(Logging.LEVEL_DEBUG, this, "DIR running"); } if (enabledServs.contains(Services.TIME_SYNC) || enabledServs.contains(Services.MOCKUP_OSD)) { tsInstance = TimeSync.initializeLocal(50); tsInstance.waitForStartup(); } if (enabledServs.contains(Services.UUID_RESOLVER)) { DIRClient dc = new DIRClient(dirClient, new InetSocketAddress[] {getDIRAddress()}, 10, 1000 * 5); UUIDResolver.start(dc, 1000, 10 * 10 * 1000); SetupUtils.localResolver(); } if (enabledServs.contains(Services.MOCKUP_OSD)) { Map<String, String> dmap = new HashMap(); dmap.put("free", "1000000000"); dmap.put("total", "1000000000"); dmap.put("load", "0"); dmap.put("totalRAM", "1000000000"); dmap.put("usedRAM", "0"); dmap.put("proto_version", "" + OSDServiceConstants.INTERFACE_ID); Service reg = Service.newBuilder() .setType(ServiceType.SERVICE_TYPE_OSD) .setName("mockUpOSD") .setUuid("mockUpOSD") .setVersion(0) .setLastUpdatedS(0) .setData(ServiceDataMap.newBuilder().addAllData(KeyValuePairs.fromMap(dmap))) .build(); RPCResponse<serviceRegisterResponse> response = dirClient.xtreemfs_service_register( null, RPCAuthentication.authNone, RPCAuthentication.userService, reg); response.get(); response.freeBuffers(); UUIDResolver.addLocalMapping("mockUpOSD", 11111, Schemes.SCHEME_PBRPC); } if (enabledServs.contains(Services.MOCKUP_OSD2)) { Map<String, String> dmap = new HashMap(); dmap.put("free", "1000000000"); dmap.put("total", "1000000000"); dmap.put("load", "0"); dmap.put("totalRAM", "1000000000"); dmap.put("usedRAM", "0"); dmap.put("proto_version", "" + OSDServiceConstants.INTERFACE_ID); Service reg = Service.newBuilder() .setType(ServiceType.SERVICE_TYPE_OSD) .setName("mockUpOSD2") .setUuid("mockUpOSD2") .setVersion(0) .setLastUpdatedS(0) .setData(ServiceDataMap.newBuilder().addAllData(KeyValuePairs.fromMap(dmap))) .build(); RPCResponse<serviceRegisterResponse> response = dirClient.xtreemfs_service_register( null, RPCAuthentication.authNone, RPCAuthentication.userService, reg); response.get(); response.freeBuffers(); UUIDResolver.addLocalMapping("mockUpOSD2", 11111, Schemes.SCHEME_PBRPC); } if (enabledServs.contains(Services.MOCKUP_OSD3)) { Map<String, String> dmap = new HashMap(); dmap.put("free", "1000000000"); dmap.put("total", "1000000000"); dmap.put("load", "0"); dmap.put("totalRAM", "1000000000"); dmap.put("usedRAM", "0"); dmap.put("proto_version", "" + OSDServiceConstants.INTERFACE_ID); Service reg = Service.newBuilder() .setType(ServiceType.SERVICE_TYPE_OSD) .setName("mockUpOSD3") .setUuid("mockUpOSD3") .setVersion(0) .setLastUpdatedS(0) .setData(ServiceDataMap.newBuilder().addAllData(KeyValuePairs.fromMap(dmap))) .build(); RPCResponse<serviceRegisterResponse> response = dirClient.xtreemfs_service_register( null, RPCAuthentication.authNone, RPCAuthentication.userService, reg); response.get(); response.freeBuffers(); UUIDResolver.addLocalMapping("mockUpOSD3", 11111, Schemes.SCHEME_PBRPC); } if (enabledServs.contains(Services.OSD)) { int osdCount = Collections.frequency(enabledServs, Services.OSD); osds = new HashMap<String, TestOSD>(osdCount); osdConfigs = SetupUtils.createMultipleOSDConfigs(osdCount); for (OSDConfig config : osdConfigs) { TestOSD osd = new TestOSD(new OSDRequestDispatcher(config)); osd.start(); osds.put(config.getUUID().toString(), osd); } // Save address of first OSD for getOSDAdress method. firstOSDAddress = osdConfigs[0].getUUID().getAddress(); Logging.logMessage(Logging.LEVEL_DEBUG, this, "OSDs 1-" + osdCount + " running"); } if (enabledServs.contains(Services.MRC)) { mrc = new MRCRequestDispatcher( SetupUtils.createMRC1Config(), SetupUtils.createMRC1dbsConfig()); mrc.startup(); Logging.logMessage(Logging.LEVEL_DEBUG, this, "MRC running"); } if (enabledServs.contains(Services.MRC_CLIENT)) { mrcClient = new MRCServiceClient(rpcClient, null); } if (enabledServs.contains(Services.OSD_CLIENT)) { osdClient = new OSDServiceClient(rpcClient, null); } } catch (Exception ex) { ex.printStackTrace(); // Shutdown servers which were already started or they will block ports. shutdown(); // After shutdown, log remaining threads in case of blocked ports to debug the issue. if (ex instanceof BindException && ex.getMessage().contains("Address already in use")) { Logging.logMessage( Logging.LEVEL_ERROR, this, "TestEnvironment could not be started because: " + ex.getMessage() + " Please examine the following dump of threads to check if a previous test method did not correctly stop all servers."); StringBuilder threadStates = new StringBuilder(); CrashReporter.reportThreadStates(threadStates); Logging.logMessage(Logging.LEVEL_ERROR, this, "Thread States: %s", threadStates.toString()); } throw ex; } }