Package org.springframework.jca.cci

Source Code of org.springframework.jca.cci.CciTemplateTests

/*
* Copyright 2002-2013 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

package org.springframework.jca.cci;

import java.sql.SQLException;
import javax.resource.NotSupportedException;
import javax.resource.ResourceException;
import javax.resource.cci.Connection;
import javax.resource.cci.ConnectionFactory;
import javax.resource.cci.ConnectionSpec;
import javax.resource.cci.IndexedRecord;
import javax.resource.cci.Interaction;
import javax.resource.cci.InteractionSpec;
import javax.resource.cci.MappedRecord;
import javax.resource.cci.Record;
import javax.resource.cci.RecordFactory;
import javax.resource.cci.ResultSet;

import org.junit.Test;

import org.springframework.jca.cci.connection.ConnectionSpecConnectionFactoryAdapter;
import org.springframework.jca.cci.connection.NotSupportedRecordFactory;
import org.springframework.jca.cci.core.CciTemplate;
import org.springframework.jca.cci.core.ConnectionCallback;
import org.springframework.jca.cci.core.InteractionCallback;
import org.springframework.jca.cci.core.RecordCreator;
import org.springframework.jca.cci.core.RecordExtractor;

import static org.junit.Assert.*;
import static org.mockito.BDDMockito.*;

/**
* @author Thierry Templier
* @author Juergen Hoeller
* @author Chris Beams
*/
public class CciTemplateTests {

  @Test
  public void testCreateIndexedRecord() throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    RecordFactory recordFactory = mock(RecordFactory.class);
    IndexedRecord indexedRecord = mock(IndexedRecord.class);
    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(recordFactory.createIndexedRecord("name")).willReturn(indexedRecord);

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.createIndexedRecord("name");

    verify(recordFactory).createIndexedRecord("name");
  }

  @Test
  public void testCreateMappedRecord() throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    RecordFactory recordFactory = mock(RecordFactory.class);
    MappedRecord mappedRecord = mock(MappedRecord.class);

    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(recordFactory.createMappedRecord("name")).willReturn(mappedRecord);

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.createMappedRecord("name");

    verify(recordFactory).createMappedRecord("name");
  }

  @Test
  public void testTemplateExecuteInputOutput() throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);

    Record inputRecord = mock(Record.class);
    Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);


    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.execute(interactionSpec, inputRecord, outputRecord);

    verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @Test
  public void testTemplateExecuteWithCreatorAndRecordFactoryNotSupported()
      throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);

    Record inputRecord = mock(Record.class);
    final Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connectionFactory.getRecordFactory()).willThrow(new NotSupportedException("not supported"));
    given(connection.createInteraction()).willReturn(interaction);
    given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.setOutputRecordCreator(new RecordCreator() {
      @Override
      public Record createRecord(RecordFactory recordFactory) {
        assertTrue(recordFactory instanceof NotSupportedRecordFactory);
        return outputRecord;
      }
    });
    ct.execute(interactionSpec, inputRecord);

    verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @Test
  public void testTemplateExecuteInputTrueWithCreator2()
      throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    RecordFactory recordFactory = mock(RecordFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    RecordCreator creator = mock(RecordCreator.class);

    Record inputRecord = mock(Record.class);
    final Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(connection.createInteraction()).willReturn(interaction);
    given(creator.createRecord(recordFactory)).willReturn(outputRecord);
    given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.setOutputRecordCreator(creator);
    ct.execute(interactionSpec, inputRecord);

    verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @Test
  public void testTemplateExecuteInputFalse() throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);

    Record inputRecord = mock(Record.class);
    Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.execute(interactionSpec, inputRecord);

    verify(interaction).execute(interactionSpec, inputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testTemplateExecuteInputExtractorTrueWithCreator()
      throws ResourceException, SQLException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    RecordFactory recordFactory = mock(RecordFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    RecordExtractor<Object> extractor = mock(RecordExtractor.class);
    RecordCreator creator = mock(RecordCreator.class);

    Record inputRecord = mock(Record.class);
    Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(creator.createRecord(recordFactory)).willReturn(outputRecord);
    given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
    given(extractor.extractData(outputRecord)).willReturn(new Object());

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.setOutputRecordCreator(creator);
    ct.execute(interactionSpec, inputRecord, extractor);

    verify(extractor).extractData(outputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testTemplateExecuteInputExtractorFalse()
      throws ResourceException, SQLException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    RecordExtractor<Object> extractor = mock(RecordExtractor.class);

    Record inputRecord = mock(Record.class);
    Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);
    given(extractor.extractData(outputRecord)).willReturn(new Object());

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.execute(interactionSpec, inputRecord, extractor);

    verify(extractor).extractData(outputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @Test
  public void testTemplateExecuteInputGeneratorTrueWithCreator()
      throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    RecordFactory recordFactory = mock(RecordFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    RecordCreator generator = mock(RecordCreator.class);
    RecordCreator creator = mock(RecordCreator.class);

    Record inputRecord = mock(Record.class);
    Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(generator.createRecord(recordFactory)).willReturn(inputRecord);
    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(creator.createRecord(recordFactory)).willReturn(outputRecord);
    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);


    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.setOutputRecordCreator(creator);
    ct.execute(interactionSpec, generator);

    verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @Test
  public void testTemplateExecuteInputGeneratorFalse()
      throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    RecordFactory recordFactory = mock(RecordFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    RecordCreator generator = mock(RecordCreator.class);

    Record inputRecord = mock(Record.class);
    Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(generator.createRecord(recordFactory)).willReturn(inputRecord);
    given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.execute(interactionSpec, generator);

    verify(interaction).execute(interactionSpec, inputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testTemplateExecuteInputGeneratorExtractorTrueWithCreator()
      throws ResourceException, SQLException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    RecordFactory recordFactory = mock(RecordFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    RecordCreator generator = mock(RecordCreator.class);
    RecordExtractor<Object> extractor = mock(RecordExtractor.class);
    RecordCreator creator = mock(RecordCreator.class);

    Record inputRecord = mock(Record.class);
    Record outputRecord = mock(Record.class);

    Object obj = new Object();

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(creator.createRecord(recordFactory)).willReturn(outputRecord);
    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(generator.createRecord(recordFactory)).willReturn(inputRecord);
    given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);
    given(extractor.extractData(outputRecord)).willReturn(obj);

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.setOutputRecordCreator(creator);
    assertEquals(obj, ct.execute(interactionSpec, generator, extractor));

    verify(interaction).close();
    verify(connection).close();
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testTemplateExecuteInputGeneratorExtractorFalse()
      throws ResourceException, SQLException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    RecordFactory recordFactory = mock(RecordFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    RecordCreator generator = mock(RecordCreator.class);
    RecordExtractor<Object> extractor = mock(RecordExtractor.class);

    Record inputRecord = mock(Record.class);
    Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(generator.createRecord(recordFactory)).willReturn(inputRecord);
    given(interaction.execute(interactionSpec, inputRecord)).willReturn(outputRecord);
    given(extractor.extractData(outputRecord)).willReturn(new Object());

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.execute(interactionSpec, generator, extractor);

    verify(extractor).extractData(outputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @Test
  public void testTemplateExecuteInputOutputConnectionSpec() throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    ConnectionSpec connectionSpec = mock(ConnectionSpec.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);

    Record inputRecord = mock(Record.class);
    Record outputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection(connectionSpec)).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(interaction.execute(interactionSpec, inputRecord, outputRecord)).willReturn(true);

    ConnectionSpecConnectionFactoryAdapter adapter = new ConnectionSpecConnectionFactoryAdapter();
    adapter.setTargetConnectionFactory(connectionFactory);
    adapter.setConnectionSpec(connectionSpec);
    CciTemplate ct = new CciTemplate(adapter);
    ct.execute(interactionSpec, inputRecord, outputRecord);

    verify(interaction).execute(interactionSpec, inputRecord, outputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testTemplateExecuteInputOutputResultsSetFalse()
      throws ResourceException, SQLException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    RecordFactory recordFactory = mock(RecordFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    Record record = mock(Record.class);
    ResultSet resultset = mock(ResultSet.class);
    RecordCreator generator = mock(RecordCreator.class);
    RecordExtractor<Object> extractor = mock(RecordExtractor.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getRecordFactory()).willReturn(recordFactory);
    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(generator.createRecord(recordFactory)).willReturn(record);
    given(interaction.execute(interactionSpec, record)).willReturn(resultset);
    given(extractor.extractData(resultset)).willReturn(new Object());

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.execute(interactionSpec, generator, extractor);

    verify(extractor).extractData(resultset);
    verify(resultset).close();
    verify(interaction).close();
    verify(connection).close();
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testTemplateExecuteConnectionCallback()
      throws ResourceException, SQLException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    ConnectionCallback<Object> connectionCallback = mock(ConnectionCallback.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connectionCallback.doInConnection(connection, connectionFactory)).willReturn(new Object());

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.execute(connectionCallback);

    verify(connectionCallback).doInConnection(connection, connectionFactory);
    verify(connection).close();
  }

  @SuppressWarnings("unchecked")
  @Test
  public void testTemplateExecuteInteractionCallback()
      throws ResourceException, SQLException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    InteractionCallback<Object> interactionCallback = mock(InteractionCallback.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(interactionCallback.doInInteraction(interaction,connectionFactory)).willReturn(new Object());

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.execute(interactionCallback);

    verify(interactionCallback).doInInteraction(interaction,connectionFactory);
    verify(interaction).close();
    verify(connection).close();
  }

  @Test
  public void testTemplateExecuteInputTrueTrueWithCreator()
      throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    RecordCreator creator = mock(RecordCreator.class);

    Record inputOutputRecord = mock(Record.class);

    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(interaction.execute(interactionSpec, inputOutputRecord, inputOutputRecord)).willReturn(true);

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.setOutputRecordCreator(creator);
    ct.execute(interactionSpec, inputOutputRecord, inputOutputRecord);

    verify(interaction).execute(interactionSpec, inputOutputRecord, inputOutputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @Test
  public void testTemplateExecuteInputTrueTrue() throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    Record inputOutputRecord = mock(Record.class);
    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(interaction.execute(interactionSpec, inputOutputRecord, inputOutputRecord)).willReturn(true);

    CciTemplate ct = new CciTemplate(connectionFactory);
    ct.execute(interactionSpec, inputOutputRecord, inputOutputRecord);

    verify(interaction).execute(interactionSpec, inputOutputRecord, inputOutputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

  @Test
  public void testTemplateExecuteInputFalseTrue() throws ResourceException {
    ConnectionFactory connectionFactory = mock(ConnectionFactory.class);
    Connection connection = mock(Connection.class);
    Interaction interaction = mock(Interaction.class);
    Record inputOutputRecord = mock(Record.class);
    InteractionSpec interactionSpec = mock(InteractionSpec.class);

    given(connectionFactory.getConnection()).willReturn(connection);
    given(connection.createInteraction()).willReturn(interaction);
    given(interaction.execute(interactionSpec, inputOutputRecord)).willReturn(null);

    CciTemplate ct = new CciTemplate(connectionFactory);
    Record tmpOutputRecord = ct.execute(interactionSpec,
        inputOutputRecord);
    assertNull(tmpOutputRecord);

    verify(interaction).execute(interactionSpec, inputOutputRecord);
    verify(interaction).close();
    verify(connection).close();
  }

}
TOP

Related Classes of org.springframework.jca.cci.CciTemplateTests

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.