github-api/src/test/java/me/brianlong/git/LocalRepositoryCacheUnitTest.java
2020-12-01 10:18:56 -05:00

125 lines
4.1 KiB
Java

package me.brianlong.git;
import java.io.IOException;
import org.eclipse.jgit.api.Git;
import org.eclipse.jgit.api.errors.GitAPIException;
import org.eclipse.jgit.api.errors.InvalidRemoteException;
import org.eclipse.jgit.api.errors.TransportException;
import org.eclipse.jgit.lib.Repository;
import org.junit.AfterClass;
import org.junit.Assert;
import org.junit.Test;
public class LocalRepositoryCacheUnitTest {
private final static GitHubTestCredentials githubCreds = new GitHubTestCredentials();
@AfterClass
public static void cleanup() {
LocalRepositoryCache.getInstance().clear();
}
/**
* Since "host-does-not-exist.com" does not exist, an UnknownHostException
* is thrown. It is wrapped inside a JGit TransportException.
*/
@Test(expected = TransportException.class)
public void cacheBadHostRepo() throws GitAPIException {
LocalRepositoryCache.getInstance().acquire("https://host-does-not-exist.com/bmlong137/does-not-exist.git");
}
/**
* Since "does-not-exist" isn't a public repo, it requires authentication
* to even check to see if it is private. This causes a
* NoRemoteRepositoryException which is wrapped inside a JGit
* InvalidRemoteException. This is because SSH authentication makes this
* more like cacheNonExistentRepoAuth() than cacheNonExistentRepo().
*/
@Test(expected = InvalidRemoteException.class)
public void cacheNonExistentRepoViaSsh() throws GitAPIException {
LocalRepositoryCache.getInstance().acquire("git@github.com:bmlong137/does-not-exist.git");
}
/**
* Since "does-not-exist" isn't a public repo, it requires authentication
* to even check to see if it is private. This causes a JSchException
* which is wrapped inside a JGit TransportException.
*/
@Test(expected = TransportException.class)
public void cacheNonExistentRepo() throws GitAPIException {
LocalRepositoryCache.getInstance().acquire("https://github.com/bmlong137/does-not-exist.git");
}
/**
* Since "does-not-exist" isn't a repo, a NoRemoteRepositoryException is
* thrown. It is wrapped inside a JGit InvalidRemoteException.
*/
@Test(expected = InvalidRemoteException.class)
public void cacheNonExistentRepoAuth() throws GitAPIException {
LocalRepositoryCache.getInstance().acquire("https://github.com/bmlong137/does-not-exist.git", githubCreds);
}
@Test
public void cachePublicRepo() throws GitAPIException {
Git git = LocalRepositoryCache.getInstance().acquire("https://github.com/bmlong137/maven-file-management.git");
try {
this.validateGenericGitRepo(git);
} finally {
git.close();
}
}
@Test
public void cachePublicRepoViaSsh() throws GitAPIException {
Git git = LocalRepositoryCache.getInstance().acquire("git@github.com:bmlong137/maven-file-management.git");
try {
this.validateGenericGitRepo(git);
} finally {
git.close();
}
}
/**
* Since "github-api" isn't a public repo, it requires authentication
* to even check to see if it is private. This causes a JSchException
* which is wrapped inside a JGit TransportException.
*/
@Test(expected = TransportException.class)
public void cachePrivateRepoUnauth() throws GitAPIException {
LocalRepositoryCache.getInstance().acquire("https://github.com/bmlong137/github-api.git");
}
@Test
public void cachePrivateRepo() throws GitAPIException {
Git git = LocalRepositoryCache.getInstance().acquire("https://github.com/bmlong137/github-api.git", githubCreds);
try {
this.validateGenericGitRepo(git);
} finally {
git.close();
}
}
@Test
public void cachePublicRepoBranch() throws GitAPIException, IOException {
Git git = LocalRepositoryCache.getInstance().acquire("https://github.com/bmlong137/maven-file-management.git", "master");
try {
this.validateGenericGitRepo(git);
Assert.assertEquals("master", git.getRepository().getBranch());
} finally {
git.close();
}
}
private void validateGenericGitRepo(Git git) throws GitAPIException {
Assert.assertNotNull(git);
Repository repo = git.getRepository();
Assert.assertTrue(repo.getDirectory().exists());
Assert.assertTrue(repo.getWorkTree().exists());
Assert.assertTrue(repo.getWorkTree().listFiles().length > 0);
}
}