Java Code Examples for java.net.URI#resolve()

The following examples show how to use java.net.URI#resolve() . You can vote up the ones you like or vote down the ones you don't like, and go to the original project or source file by following the links above each example. You may check out the related API usage on the sidebar.
Example 1
Source File: IRTestsLoadTest.java    From JVoiceXML with GNU Lesser General Public License v2.1 7 votes vote down vote up
@Test
public void testURIResolve() throws Exception {
    URI base1 = new URI("http://localhost:8080/jvxml/irtests");
    URI base2 = new URI("http://localhost:8080/jvxml/irtests/");
    Assert.assertNotSame(base1.toString(), base2.toString());

    URI a1, a2;

    a1 = base1.resolve("a");
    a2 = base2.resolve("a");
    Assert.assertEquals("http://localhost:8080/jvxml/a", a1.toString());
    Assert.assertEquals("http://localhost:8080/jvxml/irtests/a", a2
            .toString());

    a1 = base1.resolve("/a");
    a2 = base2.resolve("/a");
    Assert.assertEquals("http://localhost:8080/a", a1.toString());
    Assert.assertEquals("http://localhost:8080/a", a2.toString());

    a1 = base1.resolve(".");
    a2 = base2.resolve(".");
    Assert.assertEquals("http://localhost:8080/jvxml/", a1.toString());
    Assert.assertEquals("http://localhost:8080/jvxml/irtests/", a2
            .toString());
}
 
Example 2
Source File: RelativeEncoding.java    From openjdk-8-source with GNU General Public License v2.0 5 votes vote down vote up
public static void main(String[] args) {
    try {
        URI one = new URI("Relative%20with%20spaces");
        URI two = (new File("/tmp/dir with spaces/File with spaces")).toURI();
        URI three = two.resolve(one);
        if (!three.getSchemeSpecificPart().equals(three.getPath()))
            throw new RuntimeException("Bad encoding on URI.resolve");
    } catch (URISyntaxException e) {
        throw new RuntimeException("Unexpected exception: " + e);
    }
}
 
Example 3
Source File: PathResolverHelper.java    From eagle with Apache License 2.0 5 votes vote down vote up
public static String buildUrlPath(String baseUrl, String childUrl) {
    try {
        URI oldUri = new URI(baseUrl);
        URI resolved = oldUri.resolve(childUrl);
        return resolved.toString();
    } catch (URISyntaxException e) {
        e.printStackTrace();
        return baseUrl;
    }
}
 
Example 4
Source File: MirrativLiveService.java    From Alice-LiveMan with GNU Affero General Public License v3.0 5 votes vote down vote up
@Override
public VideoInfo getLiveVideoInfo(URI videoInfoUrl, ChannelInfo channelInfo,String resolution) throws Exception {
    if (videoInfoUrl == null) {
        return null;
    }
    String videoId = videoInfoUrl.toString().substring(GET_LIVE_INFO_URL.length());
    String liveDetailJson = HttpRequestUtil.downloadUrl(new URI("https://www.mirrativ.com/api/live/live?live_id=" + videoId), channelInfo != null ? channelInfo.getCookies() : null, Collections.emptyMap(), StandardCharsets.UTF_8);
    JSONObject liveDetailObj = JSON.parseObject(liveDetailJson);
    String videoTitle = liveDetailObj.getString("title");
    URI m3u8ListUrl = new URI(liveDetailObj.getString("streaming_url_hls"));
    String[] m3u8List = HttpRequestUtil.downloadUrl(m3u8ListUrl, StandardCharsets.UTF_8).split("\n");
    String mediaUrl = m3u8List[3];
    return new VideoInfo(channelInfo, videoId, videoTitle, videoInfoUrl, m3u8ListUrl.resolve(mediaUrl), "m3u8");
}
 
Example 5
Source File: Profiles.java    From ttt with BSD 2-Clause "Simplified" License 5 votes vote down vote up
public static void badProfileDesignator(String value, Location location, VerifierContext context, URI ttmlProfileNamespaceUri, Profile.Type profileType, Set<URI> designators) {
    Reporter reporter = context.getReporter();
    Locator locator = location.getLocator();
    Matcher m = badDelimiterSuffixPattern.matcher(value);
    if (m.matches()) {
        String suffix = m.group(1);
        reporter.logInfo(reporter.message(locator, "*KEY*",
            "Bad profile designator ''{0}'' ends with unexpected delimiter suffix ''{1}''.", value, suffix));
    } else {
        try {
            URI uri = new URI(value);
            if (!uri.isAbsolute())
                uri = ttmlProfileNamespaceUri.resolve(uri);
            if (!designators.contains(uri)) {
                String s = uri.toString();
                if (s.indexOf(ttmlProfileNamespaceUri.toString()) == 0) {
                    reporter.logInfo(reporter.message(locator, "*KEY*",
                        "Bad profile designator, unrecognized designator ''{0}'' in TT Profile Namespace.", value));
                } else {
                    reporter.logInfo(reporter.message(locator, "*KEY*",
                        "Bad profile designator, unrecognized designator ''{0}'' in Other Profile Namespace.", value));
                }
            }
        } catch (URISyntaxException e) {
            reporter.logInfo(reporter.message(locator, "*KEY*",
                "Bad profile designator ''{0}'', invalid designator syntax.", value));
        }
    }
}
 
Example 6
Source File: DefaultRequestHandler.java    From htmlview with Apache License 2.0 5 votes vote down vote up
@Override
public void submitForm(HtmlView htmlView, Element form, URI uri, boolean post, 
    List<Map.Entry<String, String>> formData) {
  if (log) {
    Log.d(LOG_TAG, "onSubmitForm " + form + " " + HtmlUtils.toString(uri) + " " + formData);
  }
  
  StringBuilder sb = new StringBuilder();
  try {
    for (Map.Entry<String, String> entry: formData) {
      if (sb.length() > 0) {
        sb.append('&');
      }
      // TODO(haustein): ASCII-Encode for safety?
      sb.append(URLEncoder.encode(entry.getKey(), HtmlUtils.UTF8));
      sb.append('=');
      sb.append(URLEncoder.encode(entry.getValue(), HtmlUtils.UTF8));
    }
    byte[] postData = null;
    if (post) {
      postData = sb.toString().getBytes(HtmlUtils.UTF8);
    } else {
      uri = uri.resolve("?" + sb.toString());
    }
    htmlView.loadAsync(uri, postData, Onload.SHOW_HTML);
  } catch(UnsupportedEncodingException e) {
    // Should be impossible, as UTF8 is mandatory
    Log.e(LOG_TAG, "Error encoding form data", e);
  }
}
 
Example 7
Source File: URITools.java    From incubator-taverna-language with Apache License 2.0 5 votes vote down vote up
public URI relativePath(URI base, URI uri) {
	URI root = base.resolve("/");
	if (!root.equals(uri.resolve("/")))
		// Different protocol/host/auth
		return uri;
	base = base.normalize();
	uri = uri.normalize();
	if (base.resolve("#").equals(uri.resolve("#")))
		// Same path, easy
		return base.relativize(uri);

	if (base.isAbsolute()) {
		// Ignore hostname and protocol
		base = root.relativize(base).resolve(".");
		uri = root.relativize(uri);
	}
	// Pretend they start from /
	base = root.resolve(base).resolve(".");
	uri = root.resolve(uri);

	URI candidate = base.relativize(uri);
	URI relation = DOT;
	while (candidate.getPath().startsWith("/")
			&& !(base.getPath().isEmpty() || base.getPath().equals("/"))) {
		base = base.resolve("../");
		relation = relation.resolve("../");
		candidate = base.relativize(uri);
	}
	// Add the ../.. again
	URI resolved = relation.resolve(candidate);
	return resolved;
}
 
Example 8
Source File: URIDescriptor.java    From ldp4j with Apache License 2.0 5 votes vote down vote up
public static URIDescriptor create(URI target) {
	if(target==null) {
		throw new NullPointerException("URI cannot be null");
	}
	if(target.isOpaque()) {
		throw new IllegalArgumentException("URI must be hierarchical");
	}
	URI targetDir = target.resolve(".");
	String targetFile=target.getPath().substring(targetDir.getPath().length());
	String targetQuery = target.getQuery();
	String targetFragment=target.getFragment();
	return new URIDescriptor(target,targetDir.getPath(),targetFile,targetQuery,targetFragment);
}
 
Example 9
Source File: RelativeEncoding.java    From jdk8u-jdk with GNU General Public License v2.0 5 votes vote down vote up
public static void main(String[] args) {
    try {
        URI one = new URI("Relative%20with%20spaces");
        URI two = (new File("/tmp/dir with spaces/File with spaces")).toURI();
        URI three = two.resolve(one);
        if (!three.getSchemeSpecificPart().equals(three.getPath()))
            throw new RuntimeException("Bad encoding on URI.resolve");
    } catch (URISyntaxException e) {
        throw new RuntimeException("Unexpected exception: " + e);
    }
}
 
Example 10
Source File: CatalogModelImpl.java    From netbeans with Apache License 2.0 5 votes vote down vote up
private void useSuitableCatalogFile(ModelSource modelSourceOfSourceDocument) {
    // if the modelSource's project has XMLCatalogProvider then use that to
    // see which catalog file to use for this modelSource
    if(modelSourceOfSourceDocument != null){
        FileObject msfo = (FileObject) modelSourceOfSourceDocument.getLookup().
                lookup(FileObject.class);
        if(msfo == null)
            return;
        Project prj = FileOwnerQuery.getOwner(msfo);
        if(prj == null)
            return;
        XMLCatalogProvider catPovider = (XMLCatalogProvider) prj.getLookup().
                lookup(XMLCatalogProvider.class);
        if(catPovider == null)
            return;
        URI caturi = catPovider.getCatalog(msfo);
        if(caturi == null)
            return;
        URI prjuri = FileUtil.toFile(prj.getProjectDirectory()).toURI();
        URI catFileURI = prjuri.resolve(caturi);
        if(catFileURI == null)
            return;
        File catFile = new File(catFileURI);
        if(!catFile.isFile()){
            try {
                catFile.createNewFile();
            } catch (IOException ex) {
                return;
            }
        }
        FileObject catFO = FileUtil.toFileObject(FileUtil.normalizeFile(catFile));
        if(catFO == null)
            return;
        //assign new catalog file that needs to be used for resolution
        this.catalogFileObject = catFO;
    }
}
 
Example 11
Source File: URITest.java    From j2objc with Apache License 2.0 5 votes vote down vote up
public void testRfc1808AbnormalExampleRelativeScheme() throws Exception {
    URI base = new URI("http://a/b/c/d;p?q");
    URI uri = base.resolve("http:g");
    assertEquals("http:g", uri.toString()); // this is an opaque URI
    assertEquals(true, uri.isOpaque());
    assertEquals(true, uri.isAbsolute());
}
 
Example 12
Source File: UpdateSiteLoader.java    From ant-ivy with Apache License 2.0 5 votes vote down vote up
private boolean readCompositeContent(URI repoUri, String name, P2Descriptor p2Descriptor)
        throws IOException, ParseException, SAXException {
    P2CompositeParser p2CompositeParser = new P2CompositeParser();
    boolean exist = readJarOrXml(repoUri, name, p2CompositeParser);
    if (exist) {
        for (String childLocation : p2CompositeParser.getChildLocations()) {
            if (!childLocation.endsWith("/")) {
                childLocation += "/";
            }
            URI childUri = repoUri.resolve(childLocation);
            readContent(childUri, p2Descriptor);
        }
    }
    return exist;
}
 
Example 13
Source File: MapFolder.java    From ProjectAres with GNU Affero General Public License v3.0 5 votes vote down vote up
private @Nullable URL getRelativeUrl(Path path) {
    // Resolving a Path against a URL is surprisingly tricky, due to character escaping issues.
    // The safest approach seems to be appending the path components one at a time, wrapping
    // each one in a URI to ensure that the filename is properly escaped. Trying to append the
    // entire thing at once either fails to escape illegal chars at all, or escapes characters
    // that shouldn't be, like the path seperator.
    try {
        URL url = source.getUrl();
        if(url == null) return null;

        URI uri = url.toURI();

        if(uri.getPath() == null || "".equals(uri.getPath())) {
            uri = uri.resolve("/");
        }

        Path dir = Files.isDirectory(source.getPath().resolve(path)) ? path : path.getParent();
        if(dir == null) return null;
        for(Path part : dir) {
            uri = uri.resolve(new URI(null, null, part.toString() + "/", null));
        }
        if(path != dir) {
            uri = uri.resolve(new URI(null, null, path.getFileName().toString(), null));
        }

        return uri.toURL();
    } catch(MalformedURLException | URISyntaxException e) {
        return null;
    }
}
 
Example 14
Source File: MavenRepositoryClient.java    From vespa with Apache License 2.0 4 votes vote down vote up
static URI withArtifactPath(URI baseUrl, ArtifactId id) {
    List<String> parts = new ArrayList<>(List.of(id.groupId().split("\\.")));
    parts.add(id.artifactId());
    parts.add("maven-metadata.xml");
    return baseUrl.resolve(String.join("/", parts));
}
 
Example 15
Source File: Json.java    From burp-requests with MIT License 4 votes vote down vote up
/**
     * <p>
     * Replace all JSON references, as per the http://tools.ietf.org/html/draft-pbryan-zyp-json-ref-03 
     * specification, by their referants. 
     * </p>
     * @param json
     * @param duplicate
     * @param done
     * @return
     */
	static Json expandReferences(Json json, 
								 Json topdoc, 
								 URI base, 
								 Map<String, Json> resolved, 
								 Map<Json, Json> expanded,
								 Function<URI, Json> uriResolver) throws Exception
	{
		if (expanded.containsKey(json)) return json;
		if (json.isObject())
		{
			if (json.has("id") && json.at("id").isString()) // change scope of nest references
			{
				base = base.resolve(json.at("id").asString());
			}
			
			if (json.has("$ref"))
			{
				URI refuri = makeAbsolute(base, json.at("$ref").asString()); // base.resolve(json.at("$ref").asString());
				Json ref = resolved.get(refuri.toString());
				if (ref == null)
				{
					ref = resolveRef(base, topdoc, refuri, resolved, expanded, uriResolver);
					resolved.put(refuri.toString(), ref);					
					ref = expandReferences(ref, topdoc, base, resolved, expanded, uriResolver);
					resolved.put(refuri.toString(), ref);
				}
				json = ref;
			}
			else 
			{
				Json O = Json.object();
				for (Map.Entry<String, Json> e : json.asJsonMap().entrySet())
					O.set(e.getKey(), expandReferences(e.getValue(), topdoc, base, resolved, expanded, uriResolver));
				json.with(O, new Json[0]);
			}
		}
		else if (json.isArray())
		{
//			Json A = Json.array();
			for (int i = 0; i < json.asJsonList().size(); i++)
			{
				//A.add(expandReferences(j, topdoc, base, resolved));
				Json el = expandReferences(json.at(i), topdoc, base, resolved, expanded, uriResolver);
				json.set(i, el);				
			}
//			return A;
		}
		expanded.put(json,  json);
		return json;
	}
 
Example 16
Source File: RegionFolder.java    From BlockMap with MIT License 4 votes vote down vote up
@Override
protected URI getSibling(URI basePath, String sibling) {
	return basePath.resolve(sibling);
}
 
Example 17
Source File: CoopLockRepairIntegrationTest.java    From hadoop-connectors with Apache License 2.0 4 votes vote down vote up
@Test
public void failedDirectoryDelete_noLogFile_checkSucceeds() throws Exception {
  String bucketName = gcsfsIHelper.createUniqueBucket("coop-delete-check-no-log-failed");
  URI bucketUri = new URI("gs://" + bucketName + "/");
  String fileName = "file";
  URI dirUri = bucketUri.resolve("delete_" + UUID.randomUUID() + "/");

  // create file to delete
  gcsfsIHelper.writeTextFile(bucketName, dirUri.resolve(fileName).getPath(), "file_content");

  GoogleCloudStorageFileSystemOptions gcsFsOptions = newGcsFsOptions();

  failDeleteOperation(gcsFsOptions, bucketName, dirUri);

  GoogleCloudStorageFileSystem gcsFs = newGcsFs(gcsFsOptions, httpRequestInitializer);

  // delete operation log file
  List<URI> logFile =
      gcsFs.listFileInfo(bucketUri.resolve(LOCK_DIRECTORY)).stream()
          .map(FileInfo::getPath)
          .filter(p -> p.toString().endsWith(".log"))
          .collect(toImmutableList());
  gcsFs.delete(Iterables.getOnlyElement(logFile), /* recursive */ false);

  assertThat(gcsFs.exists(dirUri)).isTrue();
  assertThat(gcsFs.exists(dirUri.resolve(fileName))).isTrue();

  CoopLockFsck fsck = new CoopLockFsck();
  fsck.setConf(getTestConfiguration());

  fsck.run(new String[] {"--check", "gs://" + bucketName});

  assertThat(gcsFs.exists(dirUri)).isTrue();
  assertThat(gcsFs.exists(dirUri.resolve(fileName))).isTrue();

  // Validate lock files
  List<URI> lockFiles =
      gcsFs.listFileInfo(bucketUri.resolve(LOCK_DIRECTORY)).stream()
          .map(FileInfo::getPath)
          .collect(toList());

  assertThat(lockFiles).hasSize(2);
  assertThat(matchFile(lockFiles, "all\\.lock")).isNotNull();
  String filenamePattern = String.format(OPERATION_FILENAME_PATTERN_FORMAT, DELETE);
  assertThat(matchFile(lockFiles, filenamePattern + "\\.log")).isEmpty();
}
 
Example 18
Source File: DeleteApplicationRoutesCommand.java    From orion.server with Eclipse Public License 1.0 4 votes vote down vote up
@Override
protected ServerStatus _doIt() {
	MultiServerStatus status = new MultiServerStatus();

	try {
		URI targetURI = URIUtil.toURI(target.getUrl());

		// get app details
		// TODO: it should be passed along with App object
		String appsUrl = target.getSpace().getCFJSON().getJSONObject("entity").getString("apps_url"); //$NON-NLS-1$//$NON-NLS-2$
		URI appsURI = targetURI.resolve(appsUrl);
		GetMethod getAppsMethod = new GetMethod(appsURI.toString());
		ServerStatus confStatus = HttpUtil.configureHttpMethod(getAppsMethod, target.getCloud());
		if (!confStatus.isOK())
			return confStatus;
		
		getAppsMethod.setQueryString("q=name:" + appName + "&inline-relations-depth=1"); //$NON-NLS-1$ //$NON-NLS-2$

		ServerStatus appsStatus = HttpUtil.executeMethod(getAppsMethod);
		status.add(appsStatus);
		if (!status.isOK())
			return status;

		JSONObject jsonData = appsStatus.getJsonData();
		if (!jsonData.has("resources") || jsonData.getJSONArray("resources").length() == 0) //$NON-NLS-1$//$NON-NLS-2$
			return new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_NOT_FOUND, "Application not found", null);
		JSONArray apps = jsonData.getJSONArray("resources");

		// get app routes
		String routesUrl = apps.getJSONObject(0).getJSONObject("entity").getString("routes_url");
		URI routesURI = targetURI.resolve(routesUrl);
		GetMethod getRoutesMethod = new GetMethod(routesURI.toString());
		confStatus = HttpUtil.configureHttpMethod(getRoutesMethod, target.getCloud());
		if (!confStatus.isOK())
			return confStatus;

		ServerStatus routesStatus = HttpUtil.executeMethod(getRoutesMethod);
		status.add(routesStatus);
		if (!status.isOK())
			return status;

		jsonData = routesStatus.getJsonData();
		if (!jsonData.has("resources") || jsonData.getJSONArray("resources").length() == 0) //$NON-NLS-1$//$NON-NLS-2$
			return new ServerStatus(IStatus.OK, HttpServletResponse.SC_OK, "No routes for the app", null);
		JSONArray routes = jsonData.getJSONArray("resources");

		for (int i = 0; i < routes.length(); ++i) {
			JSONObject route = routes.getJSONObject(i);

			// delete route
			String routeUrl = route.getJSONObject(CFProtocolConstants.V2_KEY_METADATA).getString(CFProtocolConstants.V2_KEY_URL);
			URI routeURI = targetURI.resolve(routeUrl); //$NON-NLS-1$
			DeleteMethod deleteRouteMethod = new DeleteMethod(routeURI.toString());
			confStatus = HttpUtil.configureHttpMethod(deleteRouteMethod, target.getCloud());
			if (!confStatus.isOK())
				return confStatus;

			ServerStatus deleteStatus = HttpUtil.executeMethod(deleteRouteMethod);
			status.add(deleteStatus);
			if (!status.isOK())
				return status;
		}

		return status;

	} catch (Exception e) {
		String msg = NLS.bind("An error occured when performing operation {0}", commandName);
		logger.error(msg, e);
		return new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg, e);
	}
}
 
Example 19
Source File: DeleteApplicationCommand.java    From orion.server with Eclipse Public License 1.0 4 votes vote down vote up
@Override
protected ServerStatus _doIt() {
	try {

		/* read deploy parameters */
		JSONObject appMetadata = null;
		JSONObject appEntity = null;

		URI targetURI = URIUtil.toURI(target.getUrl());

		/* get application details */
		String appsUrl = target.getSpace().getCFJSON().getJSONObject("entity").getString("apps_url"); //$NON-NLS-1$//$NON-NLS-2$
		URI appsURI = targetURI.resolve(appsUrl);
		GetMethod getAppsMethod = new GetMethod(appsURI.toString());
		ServerStatus confStatus = HttpUtil.configureHttpMethod(getAppsMethod, target.getCloud());
		if (!confStatus.isOK())
			return confStatus;
		
		getAppsMethod.setQueryString("q=name:" + appName + "&inline-relations-depth=1"); //$NON-NLS-1$ //$NON-NLS-2$

		ServerStatus appsStatus = HttpUtil.executeMethod(getAppsMethod);
		if (!appsStatus.isOK())
			return appsStatus;

		JSONObject apps = appsStatus.getJsonData();
		if (!apps.has("resources") || apps.getJSONArray("resources").length() == 0) //$NON-NLS-1$//$NON-NLS-2$
			return new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_NOT_FOUND, "Application not found", null);

		appMetadata = apps.getJSONArray("resources").getJSONObject(0).getJSONObject("metadata"); //$NON-NLS-1$ //$NON-NLS-2$
		appEntity = apps.getJSONArray("resources").getJSONObject(0).getJSONObject("entity"); //$NON-NLS-1$ //$NON-NLS-2$

		if (application.getGuid() == null) {

			String summaryAppUrl = appMetadata.getString("url") + "/summary"; //$NON-NLS-1$ //$NON-NLS-2$
			URI summaryAppURI = targetURI.resolve(summaryAppUrl);

			GetMethod getSummaryMethod = new GetMethod(summaryAppURI.toString());
			confStatus = HttpUtil.configureHttpMethod(getSummaryMethod, target.getCloud());
			if (!confStatus.isOK())
				return confStatus;

			ServerStatus getStatus = HttpUtil.executeMethod(getSummaryMethod);
			if (!getStatus.isOK())
				return getStatus;

			JSONObject summaryJSON = getStatus.getJsonData();

			/* set known application GUID */
			application.setGuid(summaryJSON.getString(CFProtocolConstants.V2_KEY_GUID));
		}

		/* gather application service bindings */
		ArrayList<String> serviceInstances = new ArrayList<String>();
		JSONArray appServiceBindings = appEntity.getJSONArray("service_bindings"); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
		for (int i = 0; i < appServiceBindings.length(); ++i) {
			JSONObject binding = appServiceBindings.getJSONObject(i).getJSONObject("entity"); //$NON-NLS-1$
			serviceInstances.add(binding.getString("service_instance_url")); //$NON-NLS-1$
		}

		/* delete the application */
		URI appURI = targetURI.resolve("/v2/apps/" + application.getGuid()); //$NON-NLS-1$

		DeleteMethod deleteAppMethod = new DeleteMethod(appURI.toString());
		confStatus = HttpUtil.configureHttpMethod(deleteAppMethod, target.getCloud());
		if (!confStatus.isOK())
			return confStatus;
		
		deleteAppMethod.setQueryString("recursive=true"); //$NON-NLS-1$

		ServerStatus status = HttpUtil.executeMethod(deleteAppMethod);
		GetAppCommand.expire(target, application.getName());
		return status;

	} catch (Exception e) {
		String msg = NLS.bind("An error occured when performing operation {0}", commandName);
		logger.error(msg, e);
		return new ServerStatus(IStatus.ERROR, HttpServletResponse.SC_INTERNAL_SERVER_ERROR, msg, e);
	}
}
 
Example 20
Source File: CoopLockRepairIntegrationTest.java    From hadoop-connectors with Apache License 2.0 4 votes vote down vote up
@Test
public void successfulDirectoryDelete_rollForward() throws Exception {
  String bucketName = gcsfsIHelper.createUniqueBucket("coop-delete-forward-successful");

  URI bucketUri = new URI("gs://" + bucketName + "/");
  String fileName = "file";
  URI dirUri = bucketUri.resolve("delete_" + UUID.randomUUID() + "/");

  // create file to delete
  gcsfsIHelper.writeTextFile(bucketName, dirUri.resolve(fileName).getPath(), "file_content");

  GoogleCloudStorageFileSystemOptions gcsFsOptions = newGcsFsOptions();

  GoogleCloudStorageFileSystem gcsFs = newGcsFs(gcsFsOptions, httpRequestInitializer);

  assertThat(gcsFs.exists(dirUri)).isTrue();
  assertThat(gcsFs.exists(dirUri.resolve(fileName))).isTrue();

  gcsFs.delete(dirUri, /* recursive= */ true);

  assertThat(gcsFs.exists(dirUri)).isFalse();
  assertThat(gcsFs.exists(dirUri.resolve(fileName))).isFalse();

  CoopLockFsck fsck = new CoopLockFsck();
  fsck.setConf(getTestConfiguration());

  fsck.run(new String[] {"--rollForward", "gs://" + bucketName, "all"});

  assertThat(gcsFs.exists(dirUri)).isFalse();
  assertThat(gcsFs.exists(dirUri.resolve(fileName))).isFalse();

  // Validate lock files
  List<URI> lockFiles =
      gcsFs.listFileInfo(bucketUri.resolve(LOCK_DIRECTORY)).stream()
          .map(FileInfo::getPath)
          .collect(toList());

  assertThat(lockFiles).hasSize(2);
  String filenamePattern = String.format(OPERATION_FILENAME_PATTERN_FORMAT, DELETE);
  URI lockFileUri = matchFile(lockFiles, filenamePattern + "\\.lock").get();
  URI logFileUri = matchFile(lockFiles, filenamePattern + "\\.log").get();
  String lockContent = gcsfsIHelper.readTextFile(bucketName, lockFileUri.getPath());
  assertThat(GSON.fromJson(lockContent, DeleteOperation.class).setLockExpiration(null))
      .isEqualTo(new DeleteOperation().setLockExpiration(null).setResource(dirUri.toString()));
  assertThat(gcsfsIHelper.readTextFile(bucketName, logFileUri.getPath()))
      .isEqualTo(dirUri.resolve(fileName) + "\n" + dirUri + "\n");
}