blob: b0a1fb6387b6d6834a42366be66ea0e7315e9d5c [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2011 University of Tennessee and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Roland Schulz - initial API and implementation
*******************************************************************************/
package org.eclipse.ptp.rdt.sync.core.tests;
import static org.junit.Assert.*;
import java.util.Random;
import org.eclipse.ptp.rdt.sync.git.core.GitRemoteSyncConnection;
import org.eclipse.ptp.rdt.sync.git.core.SyncFileFilter;
import org.eclipse.ptp.remote.core.IRemoteConnection;
import org.eclipse.ptp.remote.core.IRemoteConnectionManager;
import org.eclipse.ptp.remote.core.IRemoteFileManager;
import org.eclipse.ptp.remote.core.IRemoteServices;
import org.eclipse.ptp.remote.core.PTPRemoteCorePlugin;
import org.eclipse.ptp.remotetools.environment.generichost.core.ConfigFactory;
import org.junit.rules.ExternalResource;
import org.junit.rules.TemporaryFolder;
import org.eclipse.core.filesystem.EFS;
@SuppressWarnings("restriction")
public class TemporaryGitRemoteSyncConnection extends ExternalResource {
private GitRemoteSyncConnection fGITConn;
private IRemoteConnection fRemoteConnection;
private TemporaryFolder localFolder;
private static Random random = new Random();
private IRemoteFileManager fileManager;
private BasicGitSyncTests test;
private String remoteFolder;
private IRemoteConnectionManager connMgr;
public TemporaryGitRemoteSyncConnection(BasicGitSyncTests basicGitSyncTests) {
test = basicGitSyncTests;
}
@Override
protected void before() throws Throwable {
create();
}
@Override
protected void after() {
delete();
}
public GitRemoteSyncConnection getGITConn() {
return fGITConn;
}
public TemporaryFolder getLocalFolder() {
return localFolder;
}
public String getRemoteFolder() {
return remoteFolder;
}
public IRemoteFileManager getFileManager() {
return fileManager;
}
private void create() throws Exception {
long n = random.nextInt(1000000);
remoteFolder = test.remoteBaseDir + "/junit" + n;
/* setup remote connection */
IRemoteServices fRemoteServices;
fRemoteServices = PTPRemoteCorePlugin.getDefault().getRemoteServices(
"org.eclipse.ptp.remote.RemoteTools"); //$NON-NLS-1$
assertNotNull(fRemoteServices);
connMgr = fRemoteServices.getConnectionManager();
assertNotNull(connMgr);
//TODO: understand why it is causes problem when all connections are called the same. Should be fine because
// connections are deleted. There seems to be a problem in RemoteTools with creating a new connection with the same name
fRemoteConnection = connMgr.newConnection("test_connection"+n); //$NON-NLS-1$
assertNotNull(fRemoteConnection);
fRemoteConnection.setAddress(test.host);
fRemoteConnection.setUsername(test.username);
if (test.privatekey == null) {
fRemoteConnection.setPassword(test.password);
} else {
fRemoteConnection.setAttribute(ConfigFactory.ATTR_KEY_PATH, test.privatekey);
fRemoteConnection.setAttribute(ConfigFactory.ATTR_KEY_PASSPHRASE, test.password);
fRemoteConnection.setAttribute(ConfigFactory.ATTR_IS_PASSWORD_AUTH, Boolean.toString(false));
}
if (!fRemoteConnection.isOpen()) {
fRemoteConnection.open(null);
}
fileManager = fRemoteConnection.getRemoteServices().getFileManager(fRemoteConnection);
/*local folder*/
localFolder = new TemporaryFolder();
localFolder.create();
/*remote folder (just delete - is created by GitRemoteSyncConnection)*/
fileManager.getResource(remoteFolder).delete(EFS.NONE, null);
fGITConn = new GitRemoteSyncConnection(fRemoteConnection,
localFolder.getRoot().getPath(), remoteFolder,
new SyncFileFilter() {
public boolean shouldIgnore(String fileName) {
if (fileName.startsWith(GitRemoteSyncConnection.gitDir)) {
return true;
}
return false;
}
}, null);
}
private void delete() {
String failMessage="";
fGITConn.close();
localFolder.delete();
try {
fileManager.getResource(remoteFolder).delete(EFS.NONE, null);
} catch (Exception e){
e.printStackTrace();
failMessage += e.getMessage(); //don't fail yet - try to clean up as much as possible
}
fRemoteConnection.close();
try {
connMgr.removeConnection(fRemoteConnection);
} catch (Exception e){
e.printStackTrace();
failMessage += e.getMessage(); //don't fail yet - try to clean up as much as possible
}
if (!failMessage.equals("")) {
fail(failMessage);
}
}
public IRemoteConnection getRemoteConn() {
return fRemoteConnection;
}
}