Package net.sf.hajdbc.sql

Source Code of net.sf.hajdbc.sql.SQLExceptionFactoryTest

/*
* HA-JDBC: High-Availability JDBC
* Copyright (C) 2012  Paul Ferraro
*
* This program 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 3 of the License, or
* (at your option) any later version.
*
* This program 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 program.  If not, see <http://www.gnu.org/licenses/>.
*/
package net.sf.hajdbc.sql;

import java.sql.ClientInfoStatus;
import java.sql.SQLException;
import java.util.Collections;

import net.sf.hajdbc.ExceptionFactory;
import net.sf.hajdbc.ExceptionType;
import net.sf.hajdbc.dialect.Dialect;
import net.sf.hajdbc.durability.Durability.Phase;

import static org.junit.Assert.*;
import org.junit.Test;
import static org.mockito.Mockito.*;

/**
* @author Paul Ferraro
*/
public class SQLExceptionFactoryTest
{
  private final ExceptionFactory<SQLException> factory = new SQLExceptionFactory();
 
  @Test
  public void getTargetClass()
  {
    assertSame(SQLException.class, this.factory.getTargetClass());
  }
 
  @Test
  public void createExceptionFromMessage()
  {
    String message = "message";
   
    SQLException result = this.factory.createException(message);
   
    assertSame(message, result.getMessage());
    assertNull(result.getCause());
  }
 
  @Test
  public void createExceptionFromException()
  {
    String message = "message";
    Exception exception = new Exception(message);
   
    SQLException result = this.factory.createException(exception);
   
    assertNotNull(result.getMessage());
    assertSame(exception.getMessage(), result.getMessage());
    assertSame(exception, result.getCause());
  }
 
  @Test
  public void createExceptionFromSQLException()
  {
    SQLException exception = new SQLException();
   
    SQLException result = this.factory.createException(exception);
   
    assertSame(exception, result);
  }
 
  @Test
  public void getType()
  {
    ExceptionType result = this.factory.getType();
   
    assertSame(ExceptionType.SQL, result);
  }
 
  @Test
  public void equals()
  {
    assertTrue(this.factory.equals(null, null));
    assertFalse(this.factory.equals(new SQLException(), null));
    assertTrue(this.factory.equals(new SQLException(), new SQLException()));

    assertTrue(this.factory.equals(new java.sql.SQLDataException(), new java.sql.SQLDataException()));
    assertFalse(this.factory.equals(new java.sql.SQLClientInfoException(), new java.sql.SQLDataException()));

    assertTrue(this.factory.equals(new java.sql.BatchUpdateException(new int[] { 1, 2 }), new java.sql.BatchUpdateException(new int[] { 1, 2 })));
    assertFalse(this.factory.equals(new java.sql.BatchUpdateException(new int[] { 1, 2 }), new java.sql.BatchUpdateException(new int[] { 1, 3 })));

    assertTrue(this.factory.equals(new java.sql.DataTruncation(1, true, true, 1, 1), new java.sql.DataTruncation(1, true, true, 1, 1)));
    assertFalse(this.factory.equals(new java.sql.DataTruncation(1, true, true, 1, 1), new java.sql.DataTruncation(2, true, true, 1, 1)));
    assertFalse(this.factory.equals(new java.sql.DataTruncation(1, true, true, 1, 1), new java.sql.DataTruncation(1, false, true, 1, 1)));
    assertFalse(this.factory.equals(new java.sql.DataTruncation(1, true, true, 1, 1), new java.sql.DataTruncation(1, true, false, 1, 1)));
    assertFalse(this.factory.equals(new java.sql.DataTruncation(1, true, true, 1, 1), new java.sql.DataTruncation(1, true, true, 2, 1)));
    assertFalse(this.factory.equals(new java.sql.DataTruncation(1, true, true, 1, 1), new java.sql.DataTruncation(1, true, true, 1, 2)));
   
    assertTrue(this.factory.equals(new java.sql.SQLClientInfoException(Collections.singletonMap("test", ClientInfoStatus.REASON_UNKNOWN)), new java.sql.SQLClientInfoException(Collections.singletonMap("test", ClientInfoStatus.REASON_UNKNOWN))));
    assertFalse(this.factory.equals(new java.sql.SQLClientInfoException(Collections.singletonMap("test", ClientInfoStatus.REASON_UNKNOWN)), new java.sql.SQLClientInfoException(Collections.singletonMap("test", ClientInfoStatus.REASON_UNKNOWN_PROPERTY))));
   
    assertTrue(this.factory.equals(new SQLException("reason1", "sql.state1", 1), new SQLException("reason2", "sql.state2", 1)));
    assertFalse(this.factory.equals(new SQLException("reason", "sql.state", 1), new SQLException("reason", "sql.state", 2)));
    assertFalse(this.factory.equals(new SQLException("reason", "sql.state", 1), new SQLException("reason", "sql.state", 0)));
   
    assertTrue(this.factory.equals(new SQLException("reason1", "sql.state", 0), new SQLException("reason2", "sql.state", 0)));
    assertFalse(this.factory.equals(new SQLException("reason", "sql.state1", 0), new SQLException("reason", "sql.state2", 0)));
    assertFalse(this.factory.equals(new SQLException("reason", "sql.state1", 0), new SQLException("reason", null, 0)));
   
    assertTrue(this.factory.equals(new SQLException("reason", null, 0), new SQLException("reason", null, 0)));
    assertFalse(this.factory.equals(new SQLException("reason1", null, 0), new SQLException("reason2", null, 0)));
   
    SQLException exception1 = new SQLException();
    SQLException exception2 = new SQLException();
   
    exception1.setNextException(new SQLException());
    exception2.setNextException(new SQLException());
   
    assertTrue(this.factory.equals(exception1, exception2));
   
    exception1.setNextException(new SQLException("reason1"));
    exception2.setNextException(new SQLException("reason2"));
   
    assertFalse(this.factory.equals(exception1, exception2));
  }
 
  @Test
  public void correctHeuristic()
  {
    assertFalse(this.factory.correctHeuristic(new SQLException(), Phase.COMMIT));
    assertFalse(this.factory.correctHeuristic(new SQLException(), Phase.FORGET));
    assertFalse(this.factory.correctHeuristic(new SQLException(), Phase.PREPARE));
    assertFalse(this.factory.correctHeuristic(new SQLException(), Phase.ROLLBACK));
  }
 
  @Test
  public void indicatesFailure()
  {
    Dialect dialect = mock(Dialect.class);
    SQLException exception = new SQLException();
    SQLException nextException = new SQLException();
   
    when(dialect.indicatesFailure(exception)).thenReturn(true);
   
    boolean result = this.factory.indicatesFailure(exception, dialect);
   
    assertTrue(result);

    reset(dialect);
   
    exception.setNextException(nextException);
   
    when(dialect.indicatesFailure(exception)).thenReturn(false);
    when(dialect.indicatesFailure(nextException)).thenReturn(true);
   
    result = this.factory.indicatesFailure(exception, dialect);
   
    assertTrue(result);
  }
}
TOP

Related Classes of net.sf.hajdbc.sql.SQLExceptionFactoryTest

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.