public void testVappTemplateMetadataValue() {
    final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
    URI uri = URI.create(endpoint + templateId);

    MetadataApi api =
        orderedRequestsSendResponses(
                loginRequest,
                sessionResponse,
                new VcloudHttpRequestPrimer()
                    .apiCommand("GET", templateId + "/metadata/12345")
                    .acceptMedia(METADATA_ENTRY)
                    .httpRequestBuilder()
                    .build(),
                new VcloudHttpResponsePrimer()
                    .xmlFilePayload("/vapptemplate/metadataValue.xml", METADATA_ENTRY)
                    .httpResponseBuilder()
                    .build(),
                new VcloudHttpRequestPrimer()
                    .apiCommand("PUT", templateId + "/metadata/12345")
                    .xmlFilePayload("/vapptemplate/metadataValue.xml", METADATA_ENTRY)
                    .acceptMedia(TASK)
                    .httpRequestBuilder()
                    .build(),
                new VcloudHttpResponsePrimer()
                    .xmlFilePayload("/task/task.xml", TASK)
                    .httpResponseBuilder()
                    .build(),
                new VcloudHttpRequestPrimer()
                    .apiCommand("DELETE", templateId + "/metadata/12345")
                    .acceptMedia(TASK)
                    .httpRequestBuilder()
                    .build(),
                new VcloudHttpResponsePrimer()
                    .xmlFilePayload("/task/task.xml", TASK)
                    .httpResponseBuilder()
                    .build())
            .getMetadataApi(uri);

    assertNotNull(api);
    String metadata = api.get("12345");

    assertEquals(metadata, "some value");

    Task task = api.put("12345", "some value");
    assertNotNull(task);

    task = api.remove("12345");
    assertNotNull(task);
  }
  public void testErrorGetMetadataValue() {
    final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
    URI uri = URI.create(endpoint + templateId);

    MetadataApi api =
        orderedRequestsSendResponses(
                loginRequest,
                sessionResponse,
                new VcloudHttpRequestPrimer()
                    .apiCommand("GET", templateId + "/metadata/12345")
                    .acceptMedia(METADATA_ENTRY)
                    .httpRequestBuilder()
                    .build(),
                new VcloudHttpResponsePrimer()
                    .xmlFilePayload("/vapptemplate/error403.xml", ERROR)
                    .httpResponseBuilder()
                    .statusCode(403)
                    .build())
            .getMetadataApi(uri);

    assertNull(api.get("12345"));
  }
  @Test(expectedExceptions = VCloudDirectorException.class)
  public void testErrorGetMetadata() {
    final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
    URI uri = URI.create(endpoint + templateId);

    MetadataApi api =
        orderedRequestsSendResponses(
                loginRequest,
                sessionResponse,
                new VcloudHttpRequestPrimer()
                    .apiCommand("GET", templateId + "/metadata")
                    .acceptMedia(ANY)
                    .httpRequestBuilder()
                    .build(),
                new VcloudHttpResponsePrimer()
                    .xmlFilePayload("/vapptemplate/error400.xml", ERROR)
                    .httpResponseBuilder()
                    .statusCode(400)
                    .build())
            .getMetadataApi(uri);

    api.get();
  }
  @Test(expectedExceptions = ResourceNotFoundException.class)
  public void testRemoveMissingMetadataValue() {
    final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
    URI uri = URI.create(endpoint + templateId);

    MetadataApi api =
        orderedRequestsSendResponses(
                loginRequest,
                sessionResponse,
                new VcloudHttpRequestPrimer()
                    .apiCommand("DELETE", templateId + "/metadata/12345")
                    .acceptMedia(TASK)
                    .httpRequestBuilder()
                    .build(),
                new VcloudHttpResponsePrimer()
                    .xmlFilePayload("/vapptemplate/error403.xml", ERROR)
                    .httpResponseBuilder()
                    .statusCode(403)
                    .build())
            .getMetadataApi(uri);

    api.remove("12345");
  }
  public void testVappTemplateMetadata() {
    final String templateId = "/vAppTemplate/vappTemplate-ef4415e6-d413-4cbb-9262-f9bbec5f2ea9";
    URI uri = URI.create(endpoint + templateId);

    MetadataApi api =
        orderedRequestsSendResponses(
                loginRequest,
                sessionResponse,
                new VcloudHttpRequestPrimer()
                    .apiCommand("GET", templateId + "/metadata")
                    .acceptMedia(ANY)
                    .httpRequestBuilder()
                    .build(),
                new VcloudHttpResponsePrimer()
                    .xmlFilePayload("/vapptemplate/metadata.xml", METADATA)
                    .httpResponseBuilder()
                    .build(),
                new VcloudHttpRequestPrimer()
                    .apiCommand("POST", templateId + "/metadata")
                    .xmlFilePayload("/vapptemplate/metadata.xml", METADATA)
                    .acceptMedia(TASK)
                    .httpRequestBuilder()
                    .build(),
                new VcloudHttpResponsePrimer()
                    .xmlFilePayload("/task/task.xml", TASK)
                    .httpResponseBuilder()
                    .build())
            .getMetadataApi(uri);

    assertNotNull(api);
    Metadata metadata = api.get();

    assertEquals(metadata, exampleMetadata());

    Task task = api.putAll(exampleMetadata());
    assertNotNull(task);
  }