FhirIO { public static Read readResources() { return new Read(); }  static Read readResources(); static Import importResources(
      String fhirStore,
      String tempDir,
      String deadLetterDir,
      FhirIO.Import.@Nullable ContentStructure contentStructure); static Import importResources(
      ValueProvider<String> fhirStore,
      ValueProvider<String> tempDir,
      ValueProvider<String> deadLetterDir,
      FhirIO.Import.@Nullable ContentStructure contentStructure); static Export exportResourcesToGcs(String fhirStore, String exportGcsUriPrefix); static Export exportResourcesToGcs(
      ValueProvider<String> fhirStore, ValueProvider<String> exportGcsUriPrefix); static Deidentify deidentify(
      String sourceFhirStore, String destinationFhirStore, DeidentifyConfig deidConfig); static Deidentify deidentify(
      ValueProvider<String> sourceFhirStore,
      ValueProvider<String> destinationFhirStore,
      ValueProvider<DeidentifyConfig> deidConfig);  }
@Test public void test_FhirIO_failedReads() { List<String> badMessageIDs = Arrays.asList("foo", "bar"); FhirIO.Read.Result readResult = pipeline.apply(Create.of(badMessageIDs)).apply(FhirIO.readResources()); PCollection<HealthcareIOError<String>> failed = readResult.getFailedReads(); PCollection<String> resources = readResult.getResources(); PCollection<String> failedMsgIds = failed.apply( MapElements.into(TypeDescriptors.strings()).via(HealthcareIOError::getDataResource)); PAssert.that(failedMsgIds).containsInAnyOrder(badMessageIDs); PAssert.that(resources).empty(); pipeline.run(); }