/* * Microsoft JDBC Driver for SQL Server * * Copyright(c) Microsoft Corporation All rights reserved. * * This program is made available under the terms of the MIT License. See the LICENSE file in the project root for more information. */ package com.microsoft.sqlserver.jdbc.connection; import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertTrue; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.ObjectInputStream; import java.io.ObjectOutput; import java.io.ObjectOutputStream; import java.io.PrintWriter; import java.sql.Connection; import java.sql.SQLException; import org.junit.jupiter.api.Test; import org.junit.platform.runner.JUnitPlatform; import org.junit.runner.RunWith; import com.microsoft.sqlserver.jdbc.ISQLServerDataSource; import com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource; import com.microsoft.sqlserver.jdbc.SQLServerDataSource; import com.microsoft.sqlserver.jdbc.SQLServerException; import com.microsoft.sqlserver.jdbc.SQLServerXADataSource; import com.microsoft.sqlserver.testframework.AbstractTest; @RunWith(JUnitPlatform.class) public class NativeMSSQLDataSourceTest extends AbstractTest { @Test public void testNativeMSSQLDataSource() throws SQLException { SQLServerXADataSource ds = new SQLServerXADataSource(); ds.setLastUpdateCount(true); assertTrue(ds.getLastUpdateCount()); } @Test public void testSerialization() throws IOException { ByteArrayOutputStream outputStream = new ByteArrayOutputStream(); ObjectOutput objectOutput = new ObjectOutputStream(outputStream); SQLServerDataSource ds = new SQLServerDataSource(); ds.setLogWriter(new PrintWriter(new ByteArrayOutputStream())); objectOutput.writeObject(ds); objectOutput.flush(); } @Test public void testDSNormal() throws SQLServerException, ClassNotFoundException, IOException { SQLServerDataSource ds = new SQLServerDataSource(); ds.setURL(connectionString); Connection conn = ds.getConnection(); ds = testSerial(ds); conn = ds.getConnection(); } @Test public void testDSTSPassword() throws SQLServerException, ClassNotFoundException, IOException { SQLServerDataSource ds = new SQLServerDataSource(); System.setProperty("java.net.preferIPv6Addresses", "true"); ds.setURL(connectionString); ds.setTrustStorePassword("wrong_password"); Connection conn = ds.getConnection(); ds = testSerial(ds); try { conn = ds.getConnection(); } catch (SQLServerException e) { assertEquals("The DataSource trustStore password needs to be set.", e.getMessage()); } } @Test public void testInterfaceWrapping() throws ClassNotFoundException, SQLException { SQLServerDataSource ds = new SQLServerDataSource(); assertEquals(true, ds.isWrapperFor(Class.forName("com.microsoft.sqlserver.jdbc.ISQLServerDataSource"))); assertEquals(true, ds.isWrapperFor(Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDataSource"))); assertEquals(true, ds.isWrapperFor(Class.forName("javax.sql.CommonDataSource"))); ISQLServerDataSource ids = (ISQLServerDataSource) (ds.unwrap(Class.forName("com.microsoft.sqlserver.jdbc.ISQLServerDataSource"))); ids.setApplicationName("AppName"); SQLServerConnectionPoolDataSource poolDS = new SQLServerConnectionPoolDataSource(); assertEquals(true, poolDS.isWrapperFor(Class.forName("com.microsoft.sqlserver.jdbc.ISQLServerDataSource"))); assertEquals(true, poolDS.isWrapperFor(Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDataSource"))); assertEquals(true, poolDS.isWrapperFor(Class.forName("com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource"))); assertEquals(true, poolDS.isWrapperFor(Class.forName("javax.sql.CommonDataSource"))); ISQLServerDataSource ids2 = (ISQLServerDataSource) (poolDS.unwrap(Class.forName("com.microsoft.sqlserver.jdbc.ISQLServerDataSource"))); ids2.setApplicationName("AppName"); SQLServerXADataSource xaDS = new SQLServerXADataSource(); assertEquals(true, xaDS.isWrapperFor(Class.forName("com.microsoft.sqlserver.jdbc.ISQLServerDataSource"))); assertEquals(true, xaDS.isWrapperFor(Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDataSource"))); assertEquals(true, xaDS.isWrapperFor(Class.forName("com.microsoft.sqlserver.jdbc.SQLServerConnectionPoolDataSource"))); assertEquals(true, xaDS.isWrapperFor(Class.forName("com.microsoft.sqlserver.jdbc.SQLServerXADataSource"))); assertEquals(true, xaDS.isWrapperFor(Class.forName("javax.sql.CommonDataSource"))); ISQLServerDataSource ids3 = (ISQLServerDataSource) (xaDS.unwrap(Class.forName("com.microsoft.sqlserver.jdbc.ISQLServerDataSource"))); ids3.setApplicationName("AppName"); } private SQLServerDataSource testSerial(SQLServerDataSource ds) throws IOException, ClassNotFoundException { java.io.ByteArrayOutputStream outputStream = new java.io.ByteArrayOutputStream(); java.io.ObjectOutput objectOutput = new java.io.ObjectOutputStream(outputStream); objectOutput.writeObject(ds); objectOutput.flush(); ObjectInputStream in = new ObjectInputStream(new ByteArrayInputStream(outputStream.toByteArray())); SQLServerDataSource dtn; dtn = (SQLServerDataSource) in.readObject(); return dtn; } }