### Question:
OSMReader implements DataReader { 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( OSMRelation relation ); Collection<TurnCostTableEntry> analyzeTurnRelation( OSMTurnRelation turnRelation ); Collection<TurnCostTableEntry> analyzeTurnRelation( FlagEncoder encoder, OSMTurnRelation turnRelation ); long getOsmIdOfInternalEdge( int edgeId ); int getInternalNodeIdOfOsmNode( long nodeOsmId ); OSMReader setEncodingManager( EncodingManager em ); OSMReader setWayPointMaxDistance( double maxDist ); OSMReader setWorkerThreads( int numOfWorkers ); OSMReader setElevationProvider( ElevationProvider eleProvider ); OSMReader setOSMFile( File osmFile ); @Override String toString();  }### Answer:
@Test public void testReadEleFromDataProvider() { GraphHopper hopper = new GraphHopperTest("test-osm5.xml"); ElevationProvider provider = new SRTMProvider(); provider.setCacheDir(new File("./files")); 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)); }