summaryrefslogtreecommitdiffstats
path: root/org.eclipse.jgit.test
diff options
context:
space:
mode:
Diffstat (limited to 'org.eclipse.jgit.test')
-rw-r--r--org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java42
1 files changed, 42 insertions, 0 deletions
diff --git a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java
index a83a993330..658b971acb 100644
--- a/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java
+++ b/org.eclipse.jgit.test/tst/org/eclipse/jgit/transport/BundleWriterTest.java
@@ -45,7 +45,10 @@
package org.eclipse.jgit.transport;
+import static java.nio.charset.StandardCharsets.UTF_8;
+import static org.eclipse.jgit.lib.Constants.OBJ_BLOB;
import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertNotNull;
import static org.junit.Assert.assertNull;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
@@ -59,10 +62,16 @@ import java.util.Collections;
import java.util.Set;
import org.eclipse.jgit.errors.MissingBundlePrerequisiteException;
+import org.eclipse.jgit.errors.MissingObjectException;
import org.eclipse.jgit.errors.NotSupportedException;
import org.eclipse.jgit.errors.TransportException;
+import org.eclipse.jgit.internal.storage.dfs.DfsRepositoryDescription;
+import org.eclipse.jgit.internal.storage.dfs.InMemoryRepository;
+import org.eclipse.jgit.lib.Constants;
import org.eclipse.jgit.lib.NullProgressMonitor;
import org.eclipse.jgit.lib.ObjectId;
+import org.eclipse.jgit.lib.ObjectInserter;
+import org.eclipse.jgit.lib.ObjectReader;
import org.eclipse.jgit.lib.Ref;
import org.eclipse.jgit.lib.Repository;
import org.eclipse.jgit.revwalk.RevCommit;
@@ -161,6 +170,39 @@ public class BundleWriterTest extends SampleDataRepositoryTestCase {
assertTrue(caught);
}
+ @Test
+ public void testCustomObjectReader() throws Exception {
+ String refName = "refs/heads/blob";
+ String data = "unflushed data";
+ ObjectId id;
+ ByteArrayOutputStream out = new ByteArrayOutputStream();
+ try (Repository repo = new InMemoryRepository(
+ new DfsRepositoryDescription("repo"));
+ ObjectInserter ins = repo.newObjectInserter();
+ ObjectReader or = ins.newReader()) {
+ id = ins.insert(OBJ_BLOB, Constants.encode(data));
+ BundleWriter bw = new BundleWriter(or);
+ bw.include(refName, id);
+ bw.writeBundle(NullProgressMonitor.INSTANCE, out);
+ assertNull(repo.exactRef(refName));
+ try {
+ repo.open(id, OBJ_BLOB);
+ fail("We should not be able to open the unflushed blob");
+ } catch (MissingObjectException e) {
+ // Expected.
+ }
+ }
+
+ try (Repository repo = new InMemoryRepository(
+ new DfsRepositoryDescription("copy"))) {
+ fetchFromBundle(repo, out.toByteArray());
+ Ref ref = repo.exactRef(refName);
+ assertNotNull(ref);
+ assertEquals(id, ref.getObjectId());
+ assertEquals(data, new String(repo.open(id, OBJ_BLOB).getBytes(), UTF_8));
+ }
+ }
+
private static FetchResult fetchFromBundle(final Repository newRepo,
final byte[] bundle) throws URISyntaxException,
NotSupportedException, TransportException {