Package org.springframework.integration.smb.config

Source Code of org.springframework.integration.smb.config.SmbInboundOutboundSample

/**
* 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.integration.smb.config;

import static org.junit.Assert.assertTrue;

import java.io.File;

import org.junit.Test;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext;
import org.springframework.integration.MessageChannel;
import org.springframework.integration.endpoint.EventDrivenConsumer;
import org.springframework.integration.endpoint.SourcePollingChannelAdapter;
import org.springframework.integration.file.remote.handler.FileTransferringMessageHandler;
import org.springframework.integration.message.GenericMessage;
import org.springframework.integration.smb.AbstractBaseTest;
import org.springframework.integration.smb.inbound.SmbInboundFileSynchronizingMessageSource;
import org.springframework.integration.smb.session.SmbSession;
import org.springframework.integration.smb.session.SmbSessionFactory;
import org.springframework.integration.test.util.TestUtils;

/**
* System tests that perform SMB access without any mocking.
* These tests are annotated with '@Ignore', as they requires real SMB share configured
* in the application context/smbClientFactory in order to succeed.
* The test cases create directories and files autonomously and perform clean-up
* on a best effort basis.
*
* @author Markus Spann
* @author Gunnar Hillert
*/
public class SmbInboundOutboundSample extends AbstractBaseTest {

  private static final String INBOUND_APPLICATION_CONTEXT_XML  = "SmbInboundChannelAdapterSample-context.xml";
  private static final String OUTBOUND_APPLICATION_CONTEXT_XML = "SmbOutboundChannelAdapterSample-context.xml";

  @org.junit.Ignore("Actual SMB share must be configured in file [" + INBOUND_APPLICATION_CONTEXT_XML + "].")
  @Test
  public void testSmbInboundChannelAdapter() throws Exception {
    String testLocalDir = "test-temp/local-4/";
    String testRemoteDir = "test-temp/remote-4/";

    ApplicationContext ac = new ClassPathXmlApplicationContext(INBOUND_APPLICATION_CONTEXT_XML, this.getClass());

    Object consumer = ac.getBean("smbInboundChannelAdapter");
    assertTrue(consumer instanceof SourcePollingChannelAdapter);
    Object messageSource = TestUtils.getPropertyValue(consumer, "source");
    assertTrue(messageSource instanceof SmbInboundFileSynchronizingMessageSource);

    // retrieve the session factory bean to place a couple of test files remotely using a new session
    SmbSessionFactory smbSessionFactory = ac.getBean("smbSessionFactory", SmbSessionFactory.class);
    smbSessionFactory.setReplaceFile(true);
    SmbSession smbSession = smbSessionFactory.getSession();

    // place text files onto the share
    smbSession.mkdir(testRemoteDir);

    String[] fileNames = createTestFileNames(5);
    for (int i = 0; i < fileNames.length; i++) {
      smbSession.write(("File [" + fileNames[i] + "] written by test case [" + getMethodName() + "].").getBytes(), testRemoteDir + fileNames[i]);
    }

    // allow time for the files to arrive locally
    Thread.sleep(5000);

    // confirm the local presence of all test files
    for (int i = 0; i < fileNames.length; i++) {
      assertFileExists(testLocalDir + fileNames[i]).deleteOnExit();
    }

  }

  @org.junit.Ignore("Actual SMB share must be configured in file [" + OUTBOUND_APPLICATION_CONTEXT_XML + "].")
  @Test
  public void testSmbOutboundChannelAdapter() throws Exception {
    String testRemoteDir = "test-temp/remote-8/";
    String testLocalDir = "test-temp/local-8/";
    new File(testLocalDir).mkdirs();

    String[] fileNames = createTestFileNames(5);
    for (int i = 0; i < fileNames.length; i++) {
      writeToFile(("File [" + fileNames[i] + "] written by test case [" + getMethodName() + "].").getBytes(), testLocalDir + fileNames[i]);
    }

    ApplicationContext ac = new ClassPathXmlApplicationContext(OUTBOUND_APPLICATION_CONTEXT_XML, this.getClass());

    Object consumer = ac.getBean("smbOutboundChannelAdapter");
    assertTrue(consumer instanceof EventDrivenConsumer);
    Object messageSource = TestUtils.getPropertyValue(consumer, "handler");
    assertTrue(messageSource instanceof FileTransferringMessageHandler);

    MessageChannel smbChannel = ac.getBean("smbOutboundChannel", MessageChannel.class);

    for (int i = 0; i < fileNames.length; i++) {
      smbChannel.send(new GenericMessage<File>(new File(testLocalDir + fileNames[i])));
    }

    Thread.sleep(3000);

    // retrieve the session factory bean to check the test files are present in the remote location
    SmbSessionFactory smbSessionFactory = ac.getBean("smbSessionFactory", SmbSessionFactory.class);
    smbSessionFactory.setReplaceFile(false);
    SmbSession smbSession = smbSessionFactory.getSession();

    for (int i = 0; i < fileNames.length; i++) {
      String remoteFile = testRemoteDir + fileNames[i];
      assertTrue("Remote file [" + remoteFile + "] does not exist.", smbSession.exists(remoteFile));
    }

  }

  private String[] createTestFileNames(int _nbTestFiles) {
    String[] fileNames = new String[_nbTestFiles];
    for (int i = 0; i < fileNames.length; i++) {
      fileNames[i] = "test-file-" + i + ".txt";
    }
    return fileNames;
  }

  public static void main(String[] _args) {
    runTests(SmbInboundOutboundSample.class, "testSmbOutboundChannelAdapter", "testSmbInboundChannelAdapter");
  }

}
TOP

Related Classes of org.springframework.integration.smb.config.SmbInboundOutboundSample

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.