// jTDS JDBC Driver for Microsoft SQL Server and Sybase
// Copyright (C) 2004 The jTDS Project
//
// This library is free software; you can redistribute it and/or
// modify it under the terms of the GNU Lesser General Public
// License as published by the Free Software Foundation; either
// version 2.1 of the License, or (at your option) any later version.
//
// This library is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
// Lesser General Public License for more details.
//
// You should have received a copy of the GNU Lesser General Public
// License along with this library; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
//
package net.sourceforge.jtds.jdbc;
import java.util.Properties;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import net.sourceforge.jtds.jdbc.DefaultProperties;
import net.sourceforge.jtds.jdbc.Driver;
import net.sourceforge.jtds.jdbc.Messages;
/**
* Library for testing default properties.
* <p/>
* Uses a {@link DefaultPropertiesTester} object to test different methods
* in different classes.
* <p/>
* To extend this class, the programmer must implement the following items:
* <ol>
* <li>Set the <code>#tester</code> field in a <code>public</code> default
* constructor that takes no arguments.</li>
* <li>A <code>public static Test suite()</code> method that takes one or more
* arguments. (The {@link #suite()} method in this class should
* <em>not</em> be overridden.)</li>
* </ol>
*
* @author David D. Kilzer
* @version $Id: DefaultPropertiesTestLibrary.java,v 1.26.2.1 2009-08-07 14:02:11 ickzon Exp $
*/
public abstract class DefaultPropertiesTestLibrary extends TestCase {
/** Test JDBC URL for SQL Server. */
private static final String URL_SQLSERVER =
"jdbc:jtds:" + DefaultProperties.SERVER_TYPE_SQLSERVER + "://servername";
/** Test JDBC URL for Sybase. */
private static final String URL_SYBASE =
"jdbc:jtds:" + DefaultProperties.SERVER_TYPE_SYBASE + "://servername";
/** Object used to run all of the tests. */
private DefaultPropertiesTester tester;
/** If true, only run tests for SQL Server, not Sybase. */
private boolean onlySqlServerTests = false;
/** If true, only run tests for TDS 7.0. */
private boolean onlyTds70Tests = false;
/**
* Provides a null test suite so that JUnit will not try to instantiate
* this class directly.
*
* @return The test suite (always <code>null</code>).
*/
public static final Test suite() {
return new TestSuite();
}
/**
* Default constructor.
* <p/>
* The extender of this class is required to set the <code>#tester</code>
* field in a <code>public</code> default constructor.
*/
public DefaultPropertiesTestLibrary() {
}
/**
* Test the <code>serverType</code> property.
* <p/>
* Different values are set depending on whether SQL Server or
* Sybase is used.
*/
public void test_serverType() {
String fieldName = "serverType";
String messageKey = Driver.SERVERTYPE;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, String.valueOf(Driver.SQLSERVER));
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, String.valueOf(Driver.SYBASE));
}
}
/**
* Test the <code>tds</code> (version) property.
*/
public void test_tds() {
String fieldName = "tdsVersion";
String messageKey = Driver.TDS;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, DefaultProperties.TDS_VERSION_80);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, DefaultProperties.TDS_VERSION_50);
}
}
/**
* Test the <code>portNumber</code> property.
* <p/>
* Different values are set depending on whether SQL Server or
* Sybase is used.
*/
public void test_portNumber() {
String fieldName = "portNumber";
String messageKey = Driver.PORTNUMBER;
assertDefaultPropertyByServerType(
URL_SQLSERVER, messageKey, fieldName, DefaultProperties.PORT_NUMBER_SQLSERVER);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(
URL_SYBASE, messageKey, fieldName, DefaultProperties.PORT_NUMBER_SYBASE);
}
}
/**
* Test the <code>databaseName</code> property.
*/
public void test_databaseName() {
String fieldName = "databaseName";
String messageKey = Driver.DATABASENAME;
String expectedValue = DefaultProperties.DATABASE_NAME;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>appName</code> property.
*/
public void test_appName() {
String fieldName = "appName";
String messageKey = Driver.APPNAME;
String expectedValue = DefaultProperties.APP_NAME;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>bindAddress</code> property.
*/
public void test_bindAddress() {
String fieldName = "bindAddress";
String messageKey = Driver.BINDADDRESS;
String expectedValue = DefaultProperties.BIND_ADDRESS;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>lastUpdateCount</code> property.
*/
public void test_lastUpdateCount() {
String fieldName = "lastUpdateCount";
String messageKey = Driver.LASTUPDATECOUNT;
String expectedValue = DefaultProperties.LAST_UPDATE_COUNT;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>lobBuffer</code> property.
*/
public void test_lobBuffer() {
String fieldName = "lobBuffer";
String messageKey = Driver.LOBBUFFER;
String expectedValue = DefaultProperties.LOB_BUFFER_SIZE;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>loginTimeout</code> property.
*/
public void test_loginTimeout() {
String fieldName = "loginTimeout";
String messageKey = Driver.LOGINTIMEOUT;
String expectedValue = DefaultProperties.LOGIN_TIMEOUT;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>socketTimeout</code> property.
*/
public void test_socketTimeout() {
String fieldName = "socketTimeout";
String messageKey = Driver.SOTIMEOUT;
String expectedValue = DefaultProperties.SOCKET_TIMEOUT;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>socketKeepAlive</code> property.
*/
public void test_socketKeepAlive() {
String fieldName = "socketKeepAlive";
String messageKey = Driver.SOKEEPALIVE;
String expectedValue = DefaultProperties.SOCKET_KEEPALIVE;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>processId</code> property.
*/
public void test_processId() {
String fieldName = "processId";
String messageKey = Driver.PROCESSID;
String expectedValue = DefaultProperties.PROCESS_ID;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>macAddress</code> property.
*/
public void test_macAddress() {
String fieldName = "macAddress";
String messageKey = Driver.MACADDRESS;
String expectedValue = DefaultProperties.MAC_ADDRESS;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>namedPipe</code> property.
*/
public void test_namedPipe() {
String fieldName = "namedPipe";
String messageKey = Driver.NAMEDPIPE;
String expectedValue = DefaultProperties.NAMED_PIPE;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>packetSize</code> property.
*/
public void test_packetSize() {
String fieldName = "packetSize";
String messageKey = Driver.PACKETSIZE;
if (!isOnlyTds70Tests()) {
String expectedValue = DefaultProperties.PACKET_SIZE_42;
assertDefaultPropertyByTdsVersion(
URL_SQLSERVER, DefaultProperties.TDS_VERSION_42, messageKey, fieldName, expectedValue);
expectedValue = DefaultProperties.PACKET_SIZE_50;
assertDefaultPropertyByTdsVersion(
URL_SYBASE, DefaultProperties.TDS_VERSION_50, messageKey, fieldName, expectedValue);
}
String expectedValue = DefaultProperties.PACKET_SIZE_70_80;
assertDefaultPropertyByTdsVersion(
URL_SQLSERVER, DefaultProperties.TDS_VERSION_70, messageKey, fieldName, expectedValue);
if (!isOnlyTds70Tests()) {
assertDefaultPropertyByTdsVersion(
URL_SQLSERVER, DefaultProperties.TDS_VERSION_80, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>prepareSql</code> property.
*/
public void test_prepareSql() {
String fieldName = "prepareSql";
String messageKey = Driver.PREPARESQL;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName,
DefaultProperties.PREPARE_SQLSERVER);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName,
DefaultProperties.PREPARE_SYBASE);
}
}
/**
* Test the <code>progName</code> property.
*/
public void test_progName() {
String fieldName = "progName";
String messageKey = Driver.PROGNAME;
String expectedValue = DefaultProperties.PROG_NAME;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>sendStringParametersAsUnicode</code> property.
*/
public void test_sendStringParametersAsUnicode() {
String fieldName = "sendStringParametersAsUnicode";
String messageKey = Driver.SENDSTRINGPARAMETERSASUNICODE;
String expectedValue = DefaultProperties.USE_UNICODE;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>batchSize</code> property.
*/
public void test_batchSize() {
String fieldName = "batchSize";
String messageKey = Driver.BATCHSIZE;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName,
DefaultProperties.BATCH_SIZE_SQLSERVER);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName,
DefaultProperties.BATCH_SIZE_SYBASE);
}
}
/**
* Test the <code>bufferDir</code> property.
*/
public void test_bufferDir() {
String fieldName = "bufferDir";
String messageKey = Driver.BUFFERDIR;
String expectedValue = DefaultProperties.BUFFER_DIR;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>bufferMaxMemory</code> property.
*/
public void test_bufferMaxMemory() {
String fieldName = "bufferMaxMemory";
String messageKey = Driver.BUFFERMAXMEMORY;
String expectedValue = DefaultProperties.BUFFER_MAX_MEMORY;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>bufferMinPackets</code> property.
*/
public void test_bufferMinPackets() {
String fieldName = "bufferMinPackets";
String messageKey = Driver.BUFFERMINPACKETS;
String expectedValue = DefaultProperties.BUFFER_MIN_PACKETS;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>cacheMetaData</code> property.
*/
public void test_cacheMetaData() {
String fieldName = "useMetadataCache";
String messageKey = Driver.CACHEMETA;
String expectedValue = DefaultProperties.CACHEMETA;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>tcpNoDelay</code> property.
*/
public void test_tcpNoDelay() {
String fieldName = "tcpNoDelay";
String messageKey = Driver.TCPNODELAY;
String expectedValue = DefaultProperties.TCP_NODELAY;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>useCursors</code> property.
*/
public void test_useCursors() {
String fieldName = "useCursors";
String messageKey = Driver.USECURSORS;
String expectedValue = DefaultProperties.USECURSORS;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>useJCIFS</code> property.
*/
public void test_useJCIFS() {
String fieldName = "useJCIFS";
String messageKey = Driver.USEJCIFS;
String expectedValue = DefaultProperties.USEJCIFS;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>useLOBs</code> property.
*/
public void test_useLOBs() {
String fieldName = "useLOBs";
String messageKey = Driver.USELOBS;
String expectedValue = DefaultProperties.USELOBS;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Test the <code>wsid</code> property.
*/
public void test_wsid() {
String fieldName = "wsid";
String messageKey = Driver.WSID;
String expectedValue = DefaultProperties.WSID;
assertDefaultPropertyByServerType(URL_SQLSERVER, messageKey, fieldName, expectedValue);
if (!isOnlySqlServerTests()) {
assertDefaultPropertyByServerType(URL_SYBASE, messageKey, fieldName, expectedValue);
}
}
/**
* Assert that the <code>expected</code> property value is set using
* a given <code>url</code> and <code>tdsVersion</code> property.
*
* @param url The JDBC URL.
* @param tdsVersion The TDS version.
* @param key The message key.
* @param fieldName The field name used in the class.
* @param expected The expected value of the property.
*/
private void assertDefaultPropertyByTdsVersion(
String url, String tdsVersion, String key, String fieldName, String expected) {
Properties properties = new Properties();
properties.setProperty(Messages.get(Driver.TDS), tdsVersion);
getTester().assertDefaultProperty("Default property incorrect", url, properties, fieldName, key, expected);
}
/**
* Assert that the <code>expected</code> property value is set using
* a given <code>url</code>.
*
* @param url The JDBC URL.
* @param key The message key.
* @param fieldName The field name used in the class.
* @param expected The expected value of the property.
*/
private void assertDefaultPropertyByServerType(String url, String key, String fieldName, String expected) {
getTester().assertDefaultProperty("Default property incorrect", url, new Properties(), fieldName, key, expected);
}
/**
* Getter for {@link #tester}.
*
* @return Value of {@link #tester}.
*/
protected DefaultPropertiesTester getTester() {
return tester;
}
/**
* Setter for <code>#tester</code>.
*
* @param tester The value to set <code>#tester</code> to.
*/
public void setTester(DefaultPropertiesTester tester) {
this.tester = tester;
}
/**
* Getter for <code>#onlySqlServerTests</code>.
*
* @return Value of <code>#onlySqlServerTests</code>.
*/
public boolean isOnlySqlServerTests() {
return onlySqlServerTests;
}
/**
* Setter for {@link #onlySqlServerTests}.
*
* @param onlySqlServerTests The value to set {@link #onlySqlServerTests} to.
*/
protected void setOnlySqlServerTests(boolean onlySqlServerTests) {
this.onlySqlServerTests = onlySqlServerTests;
}
/**
* Getter for <code>#onlyTds70Tests</code>.
*
* @return Value of <code>#onlyTds70Tests</code>.
*/
public boolean isOnlyTds70Tests() {
return onlyTds70Tests;
}
/**
* Setter for {@link #onlyTds70Tests}.
*
* @param onlyTds70Tests The value to set {@link #onlyTds70Tests} to.
*/
protected void setOnlyTds70Tests(boolean onlyTds70Tests) {
this.onlyTds70Tests = onlyTds70Tests;
}
}