### Question:
OSMReader implements DataReader, TurnCostParser.ExternalInternalMap { @Override public OSMReader setElevationProvider(ElevationProvider eleProvider) { if (eleProvider == null) throw new IllegalStateException("Use the NOOP elevation provider instead of null or don't call setElevationProvider"); if (!nodeAccess.is3D() && ElevationProvider.NOOP != eleProvider) throw new IllegalStateException("Make sure you graph accepts 3D data"); this.eleProvider = eleProvider; return this; } OSMReader(GraphHopperStorage ghStorage); @Override void readGraph(); void processRelation(ReaderRelation relation); @Override long getOsmIdOfInternalEdge(int edgeId); @Override int getInternalNodeIdOfOsmNode(long nodeOsmId); @Override OSMReader setWayPointMaxDistance(double maxDist); @Override DataReader setSmoothElevation(boolean smoothElevation); @Override OSMReader setWorkerThreads(int numOfWorkers); @Override OSMReader setElevationProvider(ElevationProvider eleProvider); @Override DataReader setFile(File osmFile); @Override Date getDataDate(); @Override String toString();  }### Answer:
@Test public void testReadEleFromDataProvider() { GraphHopper hopper = new GraphHopperFacade("test-osm5.xml"); ElevationProvider provider = new SRTMProvider(GraphHopperIT.DIR); hopper.setElevationProvider(provider); hopper.importOrLoad(); Graph graph = hopper.getGraphHopperStorage(); int n10 = AbstractGraphStorageTester.getIdOf(graph, 49.501); int n30 = AbstractGraphStorageTester.getIdOf(graph, 49.5011); int n50 = AbstractGraphStorageTester.getIdOf(graph, 49.5001); EdgeIteratorState edge = GHUtility.getEdge(graph, n50, n30); assertEquals(Helper.createPointList3D(49.5001, 11.501, 426, 49.5002, 11.5015, 441, 49.5011, 11.502, 410.0), edge.fetchWayGeometry(3)); edge = GHUtility.getEdge(graph, n10, n50); assertEquals(Helper.createPointList3D(49.501, 11.5001, 383.0, 49.5001, 11.501, 426.0), edge.fetchWayGeometry(3)); }