protected String getFileName(double lat, double lon) {
        lon = 1 + (180 + lon) / LAT_DEGREE;
        int lonInt = (int) lon;
        lat = 1 + (60 - lat) / LAT_DEGREE;
        int latInt = (int) lat;

        if (Math.abs(latInt - lat) < invPrecision / LAT_DEGREE)
            latInt--;

        // replace String.format as it seems to be slow
        // String.format("srtm_%02d_%02d", lonInt, latInt);
        String str = "srtm_";
        str += lonInt < 10 ? "0" : "";
        str += lonInt;
        str += latInt < 10 ? "_0" : "_";
        str += latInt;

        return str;
    }
@Test
    public void testFileNotFound() {
        File file = new File(instance.getCacheDir(), instance.getFileName(46, -20) + ".gh");
        File zipFile = new File(instance.getCacheDir(), instance.getFileName(46, -20) + ".zip");
        file.delete();
        zipFile.delete();

        instance.setDownloader(new Downloader("test GH") {
            @Override
            public void downloadFile(String url, String toFile) throws IOException {
                throw new FileNotFoundException("xyz");
            }
        });
        assertEquals(0, instance.getEle(46, -20), 1);

        // file not found
        assertTrue(file.exists());
        assertEquals(1048676, file.length());

        instance.setDownloader(new Downloader("test GH") {
            @Override
            public void downloadFile(String url, String toFile) throws IOException {
                throw new SocketTimeoutException("xyz");
            }
        });

        try {
            instance.setSleep(30);
            instance.getEle(16, -20);
            fail();
        } catch (Exception ex) {
        }

        file.delete();
        zipFile.delete();
    }