Support_Resources.java revision a0696ae076ed7ea66387057c7a1b34d42e10f140
16ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org/* 26ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Licensed to the Apache Software Foundation (ASF) under one or more 36ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * contributor license agreements. See the NOTICE file distributed with 46ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * this work for additional information regarding copyright ownership. 56ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * The ASF licenses this file to You under the Apache License, Version 2.0 66ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * (the "License"); you may not use this file except in compliance with 76ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * the License. You may obtain a copy of the License at 86ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 96ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * http://www.apache.org/licenses/LICENSE-2.0 106ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * 116ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * Unless required by applicable law or agreed to in writing, software 126ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * distributed under the License is distributed on an "AS IS" BASIS, 136ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 146ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * See the License for the specific language governing permissions and 156ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org * limitations under the License. 166ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org */ 176ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 186ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgpackage tests.support.resource; 196ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 206ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgimport java.io.File; 216ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgimport java.io.FileNotFoundException; 226ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgimport java.io.FileOutputStream; 236ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgimport java.io.IOException; 246ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgimport java.io.InputStream; 256ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgimport java.net.MalformedURLException; 266ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgimport java.net.URISyntaxException; 276ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgimport java.net.URL; 286ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 296ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgimport tests.support.Support_Configuration; 306ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 316ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.orgpublic class Support_Resources { 326ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 336ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org public static final String RESOURCE_PACKAGE = "/tests/resources/"; 346ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 356ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org public static final String RESOURCE_PACKAGE_NAME = "tests.resources"; 366ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 376ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org public static InputStream getStream(String name) { 386ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org // System.err.println("getResourceAsStream(" + RESOURCE_PACKAGE + name + ")"); 396ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org return Support_Resources.class.getResourceAsStream(RESOURCE_PACKAGE + name); 406ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } 416ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 426ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org public static String getURL(String name) { 436ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org String folder = null; 446ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org String fileName = name; 456ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org File resources = createTempFolder(); 466ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org int index = name.lastIndexOf("/"); 476ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org if (index != -1) { 486ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org folder = name.substring(0, index); 496ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org name = name.substring(index + 1); 506ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } 516ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org copyFile(resources, folder, name); 526ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org URL url = null; 536ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org String resPath = resources.toString(); 546ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org if (resPath.charAt(0) == '/' || resPath.charAt(0) == '\\') { 556ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org resPath = resPath.substring(1); 566ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } 576ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org try { 586ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org url = new URL("file:/" + resPath + "/" + fileName); 596ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } catch (MalformedURLException e) { 606ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org throw new RuntimeException(e); 616ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } 626ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org return url.toString(); 636ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } 646ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 656ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org public static File createTempFolder() { 666ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org File folder = null; 676ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org try { 686ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org folder = File.createTempFile("hyts_resources", "", null); 696ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org folder.delete(); 706ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org folder.mkdirs(); 716ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } catch (IOException e) { 726ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org throw new RuntimeException(e); 736ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } 746ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org folder.deleteOnExit(); 756ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org return folder; 766ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } 776ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 786ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org public static void copyFile(File root, String folder, String file) { 796ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org File f; 806ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org if (folder != null) { 816ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org f = new File(root.toString() + "/" + folder); 826ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org if (!f.exists()) { 836ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org f.mkdirs(); 846ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org f.deleteOnExit(); 856ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } 866ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } else { 876ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org f = root; 886ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org } 896ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org 906ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org String src = folder == null ? file : folder + "/" + file; 916ed0ee98e1c3d29a0ef79996f7d1abf174f39besergeyu@chromium.org InputStream in = Support_Resources.getStream(src); 92 try { 93 File dst = new File(f.toString() + "/" + file); 94 copyLocalFileTo(dst, in); 95 } catch (Exception e) { 96 throw new RuntimeException("copyFile failed: root=" + root + " folder=" + folder + " file=" + file + " (src=" + src + ")", e); 97 } 98 } 99 100 public static File createTempFile(String suffix) throws IOException { 101 return File.createTempFile("hyts_", suffix, null); 102 } 103 104 public static void copyLocalFileTo(File dest, InputStream in) throws IOException { 105 if (!dest.exists()) { 106 FileOutputStream out = new FileOutputStream(dest); 107 int result; 108 byte[] buf = new byte[4096]; 109 while ((result = in.read(buf)) != -1) { 110 out.write(buf, 0, result); 111 } 112 in.close(); 113 out.close(); 114 dest.deleteOnExit(); 115 } 116 } 117 118 public static File getExternalLocalFile(String url) throws IOException, MalformedURLException { 119 File resources = createTempFolder(); 120 InputStream in = new URL(url).openStream(); 121 File temp = new File(resources.toString() + "/local.tmp"); 122 copyLocalFileTo(temp, in); 123 return temp; 124 } 125 126 public static String getResourceURL(String resource) { 127 return "http://" + Support_Configuration.TestResources + resource; 128 } 129 130 /** 131 * Util method to load resource files 132 * 133 * @param name - name of resource file 134 * @return - resource input stream 135 */ 136 public static InputStream getResourceStream(String name) { 137 InputStream is = ClassLoader.getSystemClassLoader().getResourceAsStream(name); 138 if (is == null) { 139 throw new RuntimeException("Failed to load resource: " + name); 140 } 141 return is; 142 } 143 144 /** 145 * Util method to get absolute path to resource file 146 * 147 * @param name - name of resource file 148 * @return - path to resource 149 */ 150 public static String getAbsoluteResourcePath(String name) { 151 URL url = ClassLoader.getSystemClassLoader().getResource(name); 152 if (url == null) { 153 throw new RuntimeException("Failed to load resource: " + name); 154 } 155 156 try { 157 return new File(url.toURI()).getAbsolutePath(); 158 } catch (URISyntaxException e) { 159 throw new RuntimeException("Failed to load resource: " + name); 160 } 161 } 162} 163