@ -4,24 +4,33 @@ import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue ;
import static org.junit.Assert.assertTrue ;
import java.util.Collections ;
import java.util.Collections ;
import org.eclipse.jgit.errors.TransportException ;
import org.eclipse.jgit.internal.storage.dfs.DfsGarbageCollector ;
import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription ;
import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription ;
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository ;
import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository ;
import org.eclipse.jgit.junit.TestRepository ;
import org.eclipse.jgit.junit.TestRepository ;
import org.eclipse.jgit.lib.NullProgressMonitor ;
import org.eclipse.jgit.lib.NullProgressMonitor ;
import org.eclipse.jgit.lib.Repository ;
import org.eclipse.jgit.lib.Repository ;
import org.eclipse.jgit.revwalk.RevBlob ;
import org.eclipse.jgit.revwalk.RevCommit ;
import org.eclipse.jgit.revwalk.RevCommit ;
import org.eclipse.jgit.transport.UploadPack.RequestPolicy ;
import org.eclipse.jgit.transport.UploadPack.RequestPolicy ;
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException ;
import org.eclipse.jgit.transport.resolver.ServiceNotAuthorizedException ;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException ;
import org.eclipse.jgit.transport.resolver.ServiceNotEnabledException ;
import org.eclipse.jgit.transport.resolver.UploadPackFactory ;
import org.eclipse.jgit.transport.resolver.UploadPackFactory ;
import org.hamcrest.Matchers ;
import org.junit.After ;
import org.junit.After ;
import org.junit.Before ;
import org.junit.Before ;
import org.junit.Rule ;
import org.junit.Test ;
import org.junit.Test ;
import org.junit.rules.ExpectedException ;
/ * *
/ * *
* Tests for server upload - pack utilities .
* Tests for server upload - pack utilities .
* /
* /
public class UploadPackTest {
public class UploadPackTest {
@Rule
public ExpectedException thrown = ExpectedException . none ( ) ;
private URIish uri ;
private URIish uri ;
private TestProtocol < Object > testProtocol ;
private TestProtocol < Object > testProtocol ;
@ -51,6 +60,25 @@ public class UploadPackTest {
return new InMemoryRepository ( new DfsRepositoryDescription ( name ) ) ;
return new InMemoryRepository ( new DfsRepositoryDescription ( name ) ) ;
}
}
private void generateBitmaps ( InMemoryRepository repo ) throws Exception {
new DfsGarbageCollector ( repo ) . pack ( null ) ;
repo . scanForRepoChanges ( ) ;
}
private static TestProtocol < Object > generateReachableCommitUploadPackProtocol ( ) {
return new TestProtocol < > (
new UploadPackFactory < Object > ( ) {
@Override
public UploadPack create ( Object req , Repository db )
throws ServiceNotEnabledException ,
ServiceNotAuthorizedException {
UploadPack up = new UploadPack ( db ) ;
up . setRequestPolicy ( RequestPolicy . REACHABLE_COMMIT ) ;
return up ;
}
} , null ) ;
}
@Test
@Test
public void testFetchParentOfShallowCommit ( ) throws Exception {
public void testFetchParentOfShallowCommit ( ) throws Exception {
RevCommit commit0 = remote . commit ( ) . message ( "0" ) . create ( ) ;
RevCommit commit0 = remote . commit ( ) . message ( "0" ) . create ( ) ;
@ -83,4 +111,63 @@ public class UploadPackTest {
assertTrue ( client . hasObject ( commit0 . toObjectId ( ) ) ) ;
assertTrue ( client . hasObject ( commit0 . toObjectId ( ) ) ) ;
}
}
}
}
@Test
public void testFetchUnreachableBlobWithBitmap ( ) throws Exception {
RevBlob blob = remote . blob ( "foo" ) ;
remote . commit ( remote . tree ( remote . file ( "foo" , blob ) ) ) ;
generateBitmaps ( server ) ;
testProtocol = generateReachableCommitUploadPackProtocol ( ) ;
uri = testProtocol . register ( ctx , server ) ;
assertFalse ( client . hasObject ( blob . toObjectId ( ) ) ) ;
try ( Transport tn = testProtocol . open ( uri , client , "server" ) ) {
thrown . expect ( TransportException . class ) ;
thrown . expectMessage ( Matchers . containsString (
"want " + blob . name ( ) + " not valid" ) ) ;
tn . fetch ( NullProgressMonitor . INSTANCE ,
Collections . singletonList ( new RefSpec ( blob . name ( ) ) ) ) ;
}
}
@Test
public void testFetchReachableBlobWithBitmap ( ) throws Exception {
RevBlob blob = remote . blob ( "foo" ) ;
RevCommit commit = remote . commit ( remote . tree ( remote . file ( "foo" , blob ) ) ) ;
remote . update ( "master" , commit ) ;
generateBitmaps ( server ) ;
testProtocol = generateReachableCommitUploadPackProtocol ( ) ;
uri = testProtocol . register ( ctx , server ) ;
assertFalse ( client . hasObject ( blob . toObjectId ( ) ) ) ;
try ( Transport tn = testProtocol . open ( uri , client , "server" ) ) {
tn . fetch ( NullProgressMonitor . INSTANCE ,
Collections . singletonList ( new RefSpec ( blob . name ( ) ) ) ) ;
assertTrue ( client . hasObject ( blob . toObjectId ( ) ) ) ;
}
}
@Test
public void testFetchReachableBlobWithoutBitmap ( ) throws Exception {
RevBlob blob = remote . blob ( "foo" ) ;
RevCommit commit = remote . commit ( remote . tree ( remote . file ( "foo" , blob ) ) ) ;
remote . update ( "master" , commit ) ;
testProtocol = generateReachableCommitUploadPackProtocol ( ) ;
uri = testProtocol . register ( ctx , server ) ;
assertFalse ( client . hasObject ( blob . toObjectId ( ) ) ) ;
try ( Transport tn = testProtocol . open ( uri , client , "server" ) ) {
thrown . expect ( TransportException . class ) ;
thrown . expectMessage ( Matchers . containsString (
"want " + blob . name ( ) + " not valid" ) ) ;
tn . fetch ( NullProgressMonitor . INSTANCE ,
Collections . singletonList ( new RefSpec ( blob . name ( ) ) ) ) ;
}
}
}
}