@ -409,6 +409,22 @@ public class UploadPackTest {
assertTrue ( pckIn . readString ( ) = = PacketLineIn . END ) ;
}
@Test
public void testV2CapabilitiesAllowFilter ( ) throws Exception {
server . getConfig ( ) . setBoolean ( "uploadpack" , null , "allowfilter" , true ) ;
ByteArrayInputStream recvStream =
uploadPackV2Setup ( null , null , PacketLineIn . END ) ;
PacketLineIn pckIn = new PacketLineIn ( recvStream ) ;
assertThat ( pckIn . readString ( ) , is ( "version 2" ) ) ;
assertThat (
Arrays . asList ( pckIn . readString ( ) , pckIn . readString ( ) ) ,
// TODO(jonathantanmy) This check overspecifies the
// order of the capabilities of "fetch".
hasItems ( "ls-refs" , "fetch=filter shallow" ) ) ;
assertTrue ( pckIn . readString ( ) = = PacketLineIn . END ) ;
}
@Test
@SuppressWarnings ( "boxing" )
public void testV2EmptyRequest ( ) throws Exception {
@ -1018,6 +1034,50 @@ public class UploadPackTest {
PacketLineIn . END ) ;
}
@Test
public void testV2FetchFilter ( ) throws Exception {
RevBlob big = remote . blob ( "foobar" ) ;
RevBlob small = remote . blob ( "fooba" ) ;
RevTree tree = remote . tree ( remote . file ( "1" , big ) ,
remote . file ( "2" , small ) ) ;
RevCommit commit = remote . commit ( tree ) ;
remote . update ( "master" , commit ) ;
server . getConfig ( ) . setBoolean ( "uploadpack" , null , "allowfilter" , true ) ;
ByteArrayInputStream recvStream = uploadPackV2 (
"command=fetch\n" ,
PacketLineIn . DELIM ,
"want " + commit . toObjectId ( ) . getName ( ) + "\n" ,
"filter blob:limit=5\n" ,
"done\n" ,
PacketLineIn . END ) ;
PacketLineIn pckIn = new PacketLineIn ( recvStream ) ;
assertThat ( pckIn . readString ( ) , is ( "packfile" ) ) ;
parsePack ( recvStream ) ;
assertFalse ( client . hasObject ( big . toObjectId ( ) ) ) ;
assertTrue ( client . hasObject ( small . toObjectId ( ) ) ) ;
}
@Test
public void testV2FetchFilterWhenNotAllowed ( ) throws Exception {
RevCommit commit = remote . commit ( ) . message ( "0" ) . create ( ) ;
remote . update ( "master" , commit ) ;
server . getConfig ( ) . setBoolean ( "uploadpack" , null , "allowfilter" , false ) ;
thrown . expect ( PackProtocolException . class ) ;
thrown . expectMessage ( "unexpected filter blob:limit=5" ) ;
uploadPackV2 (
"command=fetch\n" ,
PacketLineIn . DELIM ,
"want " + commit . toObjectId ( ) . getName ( ) + "\n" ,
"filter blob:limit=5\n" ,
"done\n" ,
PacketLineIn . END ) ;
}
private static class RejectAllRefFilter implements RefFilter {
@Override
public Map < String , Ref > filter ( Map < String , Ref > refs ) {