1adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project/*
2adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Copyright (C) 2007 The Android Open Source Project
3adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
4adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * you may not use this file except in compliance with the License.
6adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * You may obtain a copy of the License at
7adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
8adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *     http://www.apache.org/licenses/LICENSE-2.0
9adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project *
10adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * See the License for the specific language governing permissions and
14adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project * limitations under the License.
15adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project */
16adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
17adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpackage tests.support;
18adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
19adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.File;
20adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.IOException;
21adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.io.InputStream;
22adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.Connection;
23adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.DriverManager;
24adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.sql.SQLException;
25adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectimport java.util.Properties;
26adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
27adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Projectpublic class Support_SQL {
28adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
29adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String sqlDriver = null;
30adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
31adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String sqlLogin = null;
32adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
33adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String sqlCatalog = null;
34adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
35adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String sqlHost = null;
36adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
37adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String sqlUrl = null;
38adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
39adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String sqlPassword = null;
40adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
41adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String sqlUser = null;
42adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
43adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static int sqlMaxConnections = 5;
44adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
45adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static int sqlMaxTasks = 1;
46f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
47adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static File dbFile = null;
48adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
49adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static void loadDriver() {
50adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        try {
5176800f98a0fabb9a636d1575062ac72d72683f8eJesse Wilson            InputStream in = Class.forName("tests.support.Support_SQL")
5276800f98a0fabb9a636d1575062ac72d72683f8eJesse Wilson                    .getResourceAsStream("/connection.properties");
5376800f98a0fabb9a636d1575062ac72d72683f8eJesse Wilson            loadProperties(in);
5476800f98a0fabb9a636d1575062ac72d72683f8eJesse Wilson            in.close();
55adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
56adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String tmp = System.getProperty("java.io.tmpdir");
57adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            File tmpDir = new File(tmp);
58adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (tmpDir.isDirectory()) {
59adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                dbFile = File.createTempFile("sqliteTest", ".db", tmpDir);
60adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                dbFile.deleteOnExit();
61adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            } else {
62adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                System.err.println("java.io.tmpdir does not exist");
63adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            }
64adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Class.forName("SQLite.JDBCDriver").newInstance();
65adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
66adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            // overwrite sqlUrl to point to valid directory
67adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            sqlUrl = "jdbc:sqlite:/" + dbFile.getPath();
68adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
69adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            Class.forName(sqlDriver).newInstance();
70adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        } catch (Exception ex) {
7176800f98a0fabb9a636d1575062ac72d72683f8eJesse Wilson            throw new RuntimeException(ex);
72adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        }
73adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
74adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
75adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Connection getConnection() throws SQLException {
762342423059f4a52db87a5ce914a8aa2e6514d66cJesse Wilson        try {
772342423059f4a52db87a5ce914a8aa2e6514d66cJesse Wilson            return DriverManager.getConnection(Support_SQL.sqlUrl,
782342423059f4a52db87a5ce914a8aa2e6514d66cJesse Wilson                    Support_SQL.sqlLogin, Support_SQL.sqlPassword);
792342423059f4a52db87a5ce914a8aa2e6514d66cJesse Wilson        } catch (SQLException e) {
802342423059f4a52db87a5ce914a8aa2e6514d66cJesse Wilson            throw new SQLException("Failed to connect. url=" + Support_SQL.sqlUrl + ", sqlLogin="
812342423059f4a52db87a5ce914a8aa2e6514d66cJesse Wilson                    + Support_SQL.sqlLogin + ", sqlPassword=" + Support_SQL.sqlPassword, e);
822342423059f4a52db87a5ce914a8aa2e6514d66cJesse Wilson        }
83adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
84adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
85adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static Connection getConnection(String url, String login,
86adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            String password) throws SQLException {
87adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
88adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return DriverManager.getConnection(url, login, password);
89adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
90adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
91adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static boolean isEqual(byte[] b1, int off1, byte[] b2, int off2,
92adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            int len) {
93adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        for (int i = 0; i < len; ++i)
94adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project            if (b1[i + off1] != b2[i + off2])
95adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                return false;
96adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return true;
97adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
98adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project
99adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    private static void loadProperties(InputStream fileName) throws IOException {
100adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        Properties properties = new Properties();
101adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        properties.load(fileName);
102adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sqlDriver = properties.getProperty("sqlDriver");
103adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sqlLogin = properties.getProperty("sqlLogin");
104adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sqlCatalog = properties.getProperty("sqlCatalog");
105adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sqlHost = properties.getProperty("sqlHost");
106adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sqlUrl = properties.getProperty("sqlUrlPrefix") + sqlHost + "/"
107adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                + sqlCatalog;
108adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sqlPassword = properties.getProperty("sqlPassword");
109adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sqlUser = properties.getProperty("sqlUser");
110adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sqlMaxConnections = Integer.parseInt(properties
111adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project                .getProperty("sqlMaxConnections"));
112adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        sqlMaxTasks = Integer.parseInt(properties.getProperty("sqlMaxTasks"));
113adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
114f33eae7e84eb6d3b0f4e86b59605bb3de73009f3Elliott Hughes
115adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    public static String getFilename() {
116adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project        return dbFile.getPath();
117adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project    }
118adc854b798c1cfe3bfd4c27d68d5cee38ca617daThe Android Open Source Project}
119