Package net.sourceforge.squirrel_sql.client.update

Source Code of net.sourceforge.squirrel_sql.client.update.UpdateControllerImplTest

/*
* Copyright (C) 2007 Rob Manning
* manningr@users.sourceforge.net
*
* 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.squirrel_sql.client.update;

import static net.sourceforge.squirrel_sql.client.update.UpdateUtil.RELEASE_XML_FILENAME;
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.expectLastCall;
import static org.easymock.EasyMock.isA;
import static org.junit.Assert.assertFalse;

import java.util.ArrayList;
import java.util.List;

import net.sourceforge.squirrel_sql.BaseSQuirreLJUnit4TestCase;
import net.sourceforge.squirrel_sql.client.IApplication;
import net.sourceforge.squirrel_sql.client.plugin.IPluginManager;
import net.sourceforge.squirrel_sql.client.preferences.IUpdateSettings;
import net.sourceforge.squirrel_sql.client.preferences.SquirrelPreferences;
import net.sourceforge.squirrel_sql.client.preferences.UpdateSettings;
import net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloader;
import net.sourceforge.squirrel_sql.client.update.downloader.ArtifactDownloaderFactory;
import net.sourceforge.squirrel_sql.client.update.gui.ArtifactAction;
import net.sourceforge.squirrel_sql.client.update.gui.ArtifactStatus;
import net.sourceforge.squirrel_sql.client.update.xmlbeans.ChannelXmlBean;
import net.sourceforge.squirrel_sql.client.update.xmlbeans.ReleaseXmlBean;
import net.sourceforge.squirrel_sql.fw.util.FileWrapper;
import net.sourceforge.squirrel_sql.fw.util.FileWrapperFactory;
import net.sourceforge.squirrel_sql.fw.util.ProxySettings;

import org.junit.After;
import org.junit.Before;
import org.junit.Test;

import utils.EasyMockHelper;

public class UpdateControllerImplTest extends BaseSQuirreLJUnit4TestCase
{

  private static final String TEST_CHANNEL = "testchannel";

  private static final String TEST_PATH = "testPath";

  private static final int TEST_UPDATE_SERVER_PORT = 80;

  private static final String TEST_UPDATE_SERVER_PORT_STR = "80";

  private static final String TEST_UPDATE_SERVER = "testUpdateServer";

  private static final String FILE_SYSTEM_UPDATE_PATH = "fileSystemUpdatePath";

  private static final String LOCAL_RELEASE_FILENAME = UpdateUtil.RELEASE_XML_FILENAME;

  UpdateControllerImpl underTest = null;

  EasyMockHelper mockHelper = new EasyMockHelper();

  /* Mock objects */
  IApplication mockApplication = null;

  SquirrelPreferences mockSquirrelPreferences = null;

  IUpdateSettings mockUpdateSettings = null;

  UpdateUtil mockUpdateUtil = null;

  ChannelXmlBean mockInstalledChannelXmlBean = null;

  ChannelXmlBean mockAvailableChannelXmlBean = null;

  IPluginManager mockPluginManager = null;

  FileWrapper mockLocalReleaseFile = null;

  FileWrapper mockLocalUpdateReleaseFile = null;

  FileWrapper mockDownloadsDir = null;

  FileWrapper mockDownloadReleaseXmlFile = null;

  FileWrapperFactory mockFileWrapperFactory = null;

  @Before
  public void setUp() throws Exception
  {

    mockApplication = mockHelper.createMock("mockApplication", IApplication.class);
    mockUpdateSettings = mockHelper.createMock("mockUpdateSettings", UpdateSettings.class);
    mockSquirrelPreferences = mockHelper.createMock("mockSquirrelPreferences", SquirrelPreferences.class);
    mockPluginManager = mockHelper.createMock("mockPluginManager", IPluginManager.class);
    mockInstalledChannelXmlBean = setupSnapshotChannelXmlBean("Installed");
    mockAvailableChannelXmlBean = mockHelper.createMock("mockAvailableChannelXmlBean", ChannelXmlBean.class);
    mockLocalReleaseFile = mockHelper.createMock("mockLocalReleaseFile", FileWrapper.class);
    mockFileWrapperFactory = mockHelper.createMock("mockFileWrapperFactory", FileWrapperFactory.class);
    mockLocalUpdateReleaseFile = mockHelper.createMock("mockLocalUpdateReleaseFile", FileWrapper.class);
    mockDownloadsDir = mockHelper.createMock("mockDownloadsDir", FileWrapper.class);
    mockDownloadReleaseXmlFile = mockHelper.createMock("mockDownloadReleaseXmlFile", FileWrapper.class);
    expect(mockLocalReleaseFile.getAbsolutePath()).andStubReturn(LOCAL_RELEASE_FILENAME);
  }

  private IUpdateSettings setupUpdateSettings(boolean isRemoteUpdateSite)
  {
    IUpdateSettings result = mockHelper.createMock("mockUpdateSettings", IUpdateSettings.class);
    expect(result.getUpdateServerPath()).andStubReturn("pathForUpdates");
    expect(result.getFileSystemUpdatePath()).andStubReturn(FILE_SYSTEM_UPDATE_PATH);
    expect(result.isRemoteUpdateSite()).andStubReturn(isRemoteUpdateSite);
    return result;
  }

  private void replayAll()
  {
    mockHelper.replayAll();
  }

  private void verifyAll()
  {
    mockHelper.verifyAll();
  }

  @After
  public void tearDown() throws Exception
  {

  }

  @Test
  public void testIsUpToDateLocalSiteUpdatesAvailable() throws Exception
  {

    /* setup expectations */
    mockUpdateUtil =
      setupUpdateUtilLocalUpdateSite(mockInstalledChannelXmlBean, mockAvailableChannelXmlBean);
    boolean isRemoteUpdateSite = false;
    mockUpdateSettings = setupUpdateSettings(isRemoteUpdateSite);

    expect(mockApplication.getPluginManager()).andReturn(mockPluginManager).anyTimes();
    expect(mockApplication.getSquirrelPreferences()).andReturn(mockSquirrelPreferences).anyTimes();
    expect(mockSquirrelPreferences.getUpdateSettings()).andReturn(mockUpdateSettings).anyTimes();
    mockSquirrelPreferences.setUpdateSettings(mockUpdateSettings);
    mockUpdateSettings.setLastUpdateCheckTimeMillis(isA(String.class));
    expect(mockFileWrapperFactory.create(FILE_SYSTEM_UPDATE_PATH, RELEASE_XML_FILENAME)).andReturn(
      mockLocalUpdateReleaseFile);
    expect(mockFileWrapperFactory.create(mockDownloadsDir, RELEASE_XML_FILENAME)).andReturn(
      mockDownloadReleaseXmlFile);
    mockUpdateUtil.copyFile(mockLocalUpdateReleaseFile, mockDownloadReleaseXmlFile);
    expectLastCall().times(1);

    replayAll();

    underTest = new UpdateControllerImpl(mockApplication);
    underTest.setUpdateUtil(mockUpdateUtil);
    underTest.setFileWrapperFactory(mockFileWrapperFactory);
    boolean result = underTest.isUpToDate();
    assertFalse(result);
    verifyAll();

  }

  @Test
  public void testIsUpToDate_RemoteSiteUpdatesAvailable() throws Exception
  {
    /* setup expectations */
    mockUpdateUtil =
      setupUpdateUtilRemoteUpdateSite(mockInstalledChannelXmlBean, mockAvailableChannelXmlBean);
    boolean isRemoteUpdateSite = true;
    mockUpdateSettings = setupUpdateSettings(isRemoteUpdateSite);

    underTest = new UpdateControllerImpl(mockApplication);

  }

  @Test
  public void testPullDownUpdateFiles_remoteSite()
  {

    List<ArtifactStatus> artifactStatusList = new ArrayList<ArtifactStatus>();
    ArtifactStatus mockArtifactStatus = mockHelper.createMock("mockArtifactStatus", ArtifactStatus.class);

    DownloadStatusEventHandler mockDownloadStatusListener =
      mockHelper.createMock("mockDownloadStatusEventHandler", DownloadStatusEventHandler.class);
    ProxySettings mockProxySettings = mockHelper.createMock("mockProxySettings", ProxySettings.class);
    ArtifactDownloaderFactory mockArtifactDownloaderFactory =
      mockHelper.createMock("ArtifactDownloaderFactory", ArtifactDownloaderFactory.class);
    ArtifactDownloader mockArtifactDownloader =
      mockHelper.createMock("mockArtifactDownloader", ArtifactDownloader.class);

    expect(mockArtifactStatus.getArtifactAction()).andStubReturn(ArtifactAction.INSTALL);

    artifactStatusList.add(mockArtifactStatus);

    expect(mockArtifactDownloaderFactory.create(artifactStatusList)).andStubReturn(mockArtifactDownloader);

    mockArtifactDownloader.setUtil(mockUpdateUtil);
    mockArtifactDownloader.setProxySettings(mockProxySettings);
    mockArtifactDownloader.setIsRemoteUpdateSite(true);
    mockArtifactDownloader.setHost(TEST_UPDATE_SERVER);
    mockArtifactDownloader.setPort(TEST_UPDATE_SERVER_PORT);
    mockArtifactDownloader.setPath(TEST_PATH);
    mockArtifactDownloader.setFileSystemUpdatePath("");
    mockArtifactDownloader.addDownloadStatusListener(mockDownloadStatusListener);
    mockArtifactDownloader.setChannelName(TEST_CHANNEL);
    mockArtifactDownloader.setReleaseVersionWillChange(true);
    mockArtifactDownloader.start();

    mockDownloadStatusListener.setDownloader(mockArtifactDownloader);

    expect(mockApplication.getSquirrelPreferences()).andStubReturn(mockSquirrelPreferences);
    expect(mockSquirrelPreferences.getProxySettings()).andStubReturn(mockProxySettings);
    expect(mockSquirrelPreferences.getUpdateSettings()).andStubReturn(mockUpdateSettings);

    expect(mockUpdateSettings.isRemoteUpdateSite()).andStubReturn(true);
    expect(mockUpdateSettings.getUpdateServer()).andStubReturn(TEST_UPDATE_SERVER);
    expect(mockUpdateSettings.getUpdateServerPort()).andStubReturn(TEST_UPDATE_SERVER_PORT_STR);
    expect(mockUpdateSettings.getUpdateServerPath()).andStubReturn(TEST_PATH);
    expect(mockUpdateSettings.getFileSystemUpdatePath()).andStubReturn("");
    expect(mockUpdateSettings.getUpdateServerChannel()).andStubReturn(TEST_CHANNEL);

    replayAll();

    underTest = new UpdateControllerImpl(mockApplication);
    underTest.setArtifactDownloaderFactory(mockArtifactDownloaderFactory);
    underTest.pullDownUpdateFiles(artifactStatusList, mockDownloadStatusListener, true);

    verifyAll();
  }

  private UpdateUtil setupUpdateUtilLocalUpdateSite(ChannelXmlBean installed, ChannelXmlBean available)
    throws Exception
  {
    UpdateUtil mockUpdateUtil = setupUpdateUtil();
    expect(mockUpdateUtil.getLocalReleaseFile()).andStubReturn(mockLocalReleaseFile);
    expect(mockUpdateUtil.getLocalReleaseInfo(LOCAL_RELEASE_FILENAME)).andStubReturn(installed);
    expect(mockUpdateUtil.loadUpdateFromFileSystem(FILE_SYSTEM_UPDATE_PATH)).andReturn(available);
    expect(mockUpdateUtil.getDownloadsDir()).andReturn(mockDownloadsDir).anyTimes();
    return mockUpdateUtil;
  }

  private UpdateUtil setupUpdateUtilRemoteUpdateSite(ChannelXmlBean installed, ChannelXmlBean available)
    throws Exception
  {
    UpdateUtil mockUpdateUtil = setupUpdateUtil();
    return mockUpdateUtil;
  }

  private UpdateUtil setupUpdateUtil()
  {
    UpdateUtil mockUpdateUtil = mockHelper.createMock("mockUpdateUtil", UpdateUtil.class);
    mockUpdateUtil.setPluginManager(mockPluginManager);
    return mockUpdateUtil;
  }

  private ChannelXmlBean setupSnapshotChannelXmlBean(String name)
  {
    ChannelXmlBean mockChannelXmlBean =
      mockHelper.createMock("mock" + name + "ChannelXmlBean", ChannelXmlBean.class);
    ReleaseXmlBean mockReleaseXmlBean =
      mockHelper.createMock("mock" + name + "ReleaseXmlBean", ReleaseXmlBean.class);
    expect(mockChannelXmlBean.getName()).andStubReturn("Snapshot");
    expect(mockChannelXmlBean.getCurrentRelease()).andStubReturn(mockReleaseXmlBean);
    return mockChannelXmlBean;
  }
}
TOP

Related Classes of net.sourceforge.squirrel_sql.client.update.UpdateControllerImplTest

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.