/*******************************************************************************
* Copyright (C) 2010, Jens Baumgart <jens.baumgart@sap.com>
*
* 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
*******************************************************************************/
package org.eclipse.egit.ui.wizards.clone;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertTrue;
import java.io.File;
import java.util.List;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.preferences.ConfigurationScope;
import org.eclipse.core.runtime.preferences.IEclipsePreferences;
import org.eclipse.egit.ui.common.GitImportRepoWizard;
import org.eclipse.egit.ui.common.LocalRepositoryTestCase;
import org.eclipse.egit.ui.common.RepoRemoteBranchesPage;
import org.eclipse.egit.ui.common.WorkingCopyPage;
import org.eclipse.egit.ui.test.TestUtil;
import org.eclipse.equinox.internal.security.storage.PasswordProviderSelector;
import org.eclipse.equinox.internal.security.storage.PasswordProviderSelector.ExtStorageModule;
import org.eclipse.equinox.internal.security.storage.friends.IStorageConstants;
import org.eclipse.jgit.dircache.DirCache;
import org.eclipse.jgit.dircache.DirCacheEntry;
import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.storage.file.FileRepositoryBuilder;
import org.eclipse.jgit.util.FileUtils;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
@SuppressWarnings("restriction")
public abstract class GitCloneWizardTestBase extends LocalRepositoryTestCase {
protected static final int NUMBER_RANDOM_COMMITS = 100;
protected GitImportRepoWizard importWizard;
protected File destRepo;
// package private for FindBugs
static SampleTestRepository r;
@AfterClass
public static void tearDown() throws Exception {
r.shutDown();
}
public GitCloneWizardTestBase() {
super();
}
protected void cloneRepo(File destinationRepo,
RepoRemoteBranchesPage remoteBranches) throws Exception {
remoteBranches.assertRemoteBranches(SampleTestRepository.FIX,
Constants.MASTER);
remoteBranches.selectBranches(SampleTestRepository.FIX,
Constants.MASTER);
WorkingCopyPage workingCopy = remoteBranches.nextToWorkingCopy();
workingCopy.setDirectory(destinationRepo.toString());
workingCopy.assertDirectory(destinationRepo.toString());
workingCopy.assertBranch(Constants.MASTER);
workingCopy.assertRemoteName(Constants.DEFAULT_REMOTE_NAME);
workingCopy.waitForCreate();
// Some random sampling to see we got something. We do not test
// the integrity of the repository here. Only a few basic properties
// we'd expect from a clone made this way, that would possibly
// not hold true given other parameters in the GUI.
Repository repository = FileRepositoryBuilder.create(new File(
destinationRepo, Constants.DOT_GIT));
// we always have an origin/master
assertNotNull(repository.resolve("origin/master"));
// and a local master initialized from origin/master (default!)
assertEquals(repository.resolve("master"), repository
.resolve("origin/master"));
// A well known tag
assertNotNull(repository.resolve(
Constants.R_TAGS + SampleTestRepository.v1_0_name).name());
// lots of refs
int refs = repository.getAllRefs().size();
assertTrue(refs >= 4);
// and a known file in the working dir
assertTrue(new File(destinationRepo, SampleTestRepository.A_txt_name)
.exists());
DirCacheEntry fileEntry = null;
DirCache dc = repository.lockDirCache();
fileEntry = dc.getEntry(SampleTestRepository.A_txt_name);
dc.unlock();
// check that we have the file in the index
assertNotNull(fileEntry);
// No project has been imported
assertEquals(0,
ResourcesPlugin.getWorkspace().getRoot().getProjects().length);
}
@BeforeClass
public static void disableSecureStoragePasswordProviders() {
List availableModules = PasswordProviderSelector.getInstance().findAvailableModules(null);
StringBuffer tmp = new StringBuffer();
for (Object module : availableModules) {
ExtStorageModule storageModule = (ExtStorageModule) module;
tmp.append(storageModule.moduleID).append(",");
}
IEclipsePreferences node = ConfigurationScope.INSTANCE.getNode("org.eclipse.equinox.security");
node.put(IStorageConstants.DISABLED_PROVIDERS_KEY, tmp.toString());
}
@Before
public void setupViews() {
TestUtil.showExplorerView();
importWizard = new GitImportRepoWizard();
}
@After
public void cleanup() throws Exception {
if (destRepo != null)
FileUtils.delete(destRepo, FileUtils.RECURSIVE | FileUtils.RETRY);
}
}