001: /*
002:
003: Derby - Class org.apache.derbyTesting.functionTests.tests.tools.sysinfo_api
004:
005: Licensed to the Apache Software Foundation (ASF) under one or more
006: contributor license agreements. See the NOTICE file distributed with
007: this work for additional information regarding copyright ownership.
008: The ASF licenses this file to You under the Apache License, Version 2.0
009: (the "License"); you may not use this file except in compliance with
010: the License. You may obtain a copy of the License at
011:
012: http://www.apache.org/licenses/LICENSE-2.0
013:
014: Unless required by applicable law or agreed to in writing, software
015: distributed under the License is distributed on an "AS IS" BASIS,
016: WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
017: See the License for the specific language governing permissions and
018: limitations under the License.
019:
020: */
021:
022: package org.apache.derbyTesting.functionTests.tests.tools;
023:
024: import java.io.IOException;
025: import java.io.BufferedReader;
026: import java.io.PipedReader;
027: import java.io.PipedWriter;
028: import java.io.PrintWriter;
029: import java.sql.Connection;
030: import java.sql.DatabaseMetaData;
031: import java.sql.SQLException;
032: import org.apache.derby.tools.sysinfo;
033: import org.apache.derbyTesting.junit.BaseJDBCTestCase;
034:
035: /**
036: * Test all the static public methods of the sysinfo class.
037: */
038:
039: public class sysinfo_api extends BaseJDBCTestCase {
040:
041: DatabaseMetaData dm;
042:
043: public sysinfo_api(String name) {
044: super (name);
045: }
046:
047: /*
048: * getMajorVersion()
049: */
050: public void testMajorVersion() {
051: int dmMajor = dm.getDriverMajorVersion();
052: assertEquals(dmMajor, sysinfo.getMajorVersion());
053: assertEquals(dmMajor, sysinfo.getMajorVersion(sysinfo.DBMS));
054: assertEquals(dmMajor, sysinfo.getMajorVersion(sysinfo.TOOLS));
055: assertEquals(dmMajor, sysinfo.getMajorVersion(sysinfo.NET));
056: assertEquals(dmMajor, sysinfo.getMajorVersion(sysinfo.CLIENT));
057: // bad usage
058: assertEquals(-1, sysinfo.getMajorVersion("foo"));
059: assertEquals(-1, sysinfo.getMajorVersion(null));
060: }
061:
062: /*
063: * getMinorVersion()
064: */
065: public void testMinorVersion() {
066: int dmMinor = dm.getDriverMinorVersion();
067: assertEquals(dmMinor, sysinfo.getMinorVersion());
068: assertEquals(dmMinor, sysinfo.getMinorVersion(sysinfo.DBMS));
069: assertEquals(dmMinor, sysinfo.getMinorVersion(sysinfo.TOOLS));
070: assertEquals(dmMinor, sysinfo.getMinorVersion(sysinfo.NET));
071: assertEquals(dmMinor, sysinfo.getMinorVersion(sysinfo.CLIENT));
072: // bad usage
073: assertEquals(-1, sysinfo.getMinorVersion("foo"));
074: assertEquals(-1, sysinfo.getMinorVersion(null));
075: }
076:
077: /*
078: * getProductName()
079: */
080: public void testProductName() {
081: assertEquals("Apache Derby", sysinfo.getProductName());
082: assertEquals("Apache Derby", sysinfo
083: .getProductName(sysinfo.DBMS));
084: assertEquals("Apache Derby", sysinfo
085: .getProductName(sysinfo.TOOLS));
086: assertEquals("Apache Derby", sysinfo
087: .getProductName(sysinfo.NET));
088: assertEquals("Apache Derby", sysinfo
089: .getProductName(sysinfo.CLIENT));
090: // bad usage
091: assertEquals("<no name found>", sysinfo.getProductName("foo"));
092: assertEquals("<no name found>", sysinfo.getProductName(null));
093: }
094:
095: /*
096: * getVersionString()
097: */
098: public void testVersionString() throws SQLException {
099: String dmPv = dm.getDatabaseProductVersion();
100: assertEquals(dmPv, sysinfo.getVersionString());
101: assertEquals(dmPv, sysinfo.getVersionString(sysinfo.DBMS));
102: assertEquals(dmPv, sysinfo.getVersionString(sysinfo.TOOLS));
103: assertEquals(dmPv, sysinfo.getVersionString(sysinfo.NET));
104: assertEquals(dmPv, sysinfo.getVersionString(sysinfo.CLIENT));
105: // bad usage
106: assertEquals("<no name found>", sysinfo.getVersionString("foo"));
107: assertEquals("<no name found>", sysinfo.getVersionString(null));
108: }
109:
110: /*
111: * getBuildNumber()
112: *
113: * Currently no test for sysinfo.getBuildNumber().
114: * There is not currently a way to get this information from another
115: * different public interface.
116: */
117:
118: /*
119: * getInfo()
120: *
121: * Currently only tests getInfo() by comparing the first line with the
122: * expected first line in English. Because so much of sysinfo changes from
123: * machine-to-machine, writing a better test may be difficult.
124: *
125: * Test spawns a separate thread in which to call sysinfo and feed the
126: * PipedWriter. Using PipedWriter and PipedReader from the same thread
127: * can cause a deadlock.
128: */
129: public void testGetInfo() throws IOException {
130: sysinfo_api_helper sah = new sysinfo_api_helper();
131: sah.start();
132: PipedReader pipeR = new PipedReader(sah.getPipedWriter());
133: BufferedReader br = new BufferedReader(pipeR);
134: assertEquals(
135: "------------------ Java Information ------------------",
136: br.readLine());
137: br.close();
138: pipeR.close();
139: }
140:
141: /*
142: * testSetup - get a DatabaseMetadata object with which to compare info
143: * with sysinfo
144: */
145: public void setUp() throws SQLException {
146: dm = getConnection().getMetaData();
147: }
148:
149: }
150:
151: class sysinfo_api_helper extends Thread {
152:
153: private static PipedWriter pipeW = new PipedWriter();
154:
155: public void run() {
156: PrintWriter pw = new PrintWriter(pipeW, true);
157: sysinfo.getInfo(pw);
158: try {
159: pw.close();
160: pipeW.close();
161: } catch (IOException e) {
162: e.printStackTrace();
163: }
164: }
165:
166: public PipedWriter getPipedWriter() {
167: return pipeW;
168: }
169: }
|