public virtual void TestDelta_SmallObjectChain() { ObjectInserter.Formatter fmt = new ObjectInserter.Formatter(); byte[] data0 = new byte[512]; Arrays.Fill(data0, unchecked ((byte)unchecked ((int)(0xf3)))); ObjectId id0 = fmt.IdFor(Constants.OBJ_BLOB, data0); TemporaryBuffer.Heap pack = new TemporaryBuffer.Heap(64 * 1024); PackHeader(pack, 4); ObjectHeader(pack, Constants.OBJ_BLOB, data0.Length); Deflate(pack, data0); byte[] data1 = Clone(unchecked ((int)(0x01)), data0); byte[] delta1 = Delta(data0, data1); ObjectId id1 = fmt.IdFor(Constants.OBJ_BLOB, data1); ObjectHeader(pack, Constants.OBJ_REF_DELTA, delta1.Length); id0.CopyRawTo(pack); Deflate(pack, delta1); byte[] data2 = Clone(unchecked ((int)(0x02)), data1); byte[] delta2 = Delta(data1, data2); ObjectId id2 = fmt.IdFor(Constants.OBJ_BLOB, data2); ObjectHeader(pack, Constants.OBJ_REF_DELTA, delta2.Length); id1.CopyRawTo(pack); Deflate(pack, delta2); byte[] data3 = Clone(unchecked ((int)(0x03)), data2); byte[] delta3 = Delta(data2, data3); ObjectId id3 = fmt.IdFor(Constants.OBJ_BLOB, data3); ObjectHeader(pack, Constants.OBJ_REF_DELTA, delta3.Length); id2.CopyRawTo(pack); Deflate(pack, delta3); Digest(pack); PackParser ip = Index(pack.ToByteArray()); ip.SetAllowThin(true); ip.Parse(NullProgressMonitor.INSTANCE); NUnit.Framework.Assert.IsTrue(wc.Has(id3), "has blob"); ObjectLoader ol = wc.Open(id3); NUnit.Framework.Assert.IsNotNull(ol, "created loader"); NUnit.Framework.Assert.AreEqual(Constants.OBJ_BLOB, ol.GetType()); NUnit.Framework.Assert.AreEqual(data3.Length, ol.GetSize()); NUnit.Framework.Assert.IsFalse(ol.IsLarge(), "is large"); NUnit.Framework.Assert.IsNotNull(ol.GetCachedBytes()); CollectionAssert.AreEquivalent(data3, ol.GetCachedBytes()); ObjectStream @in = ol.OpenStream(); NUnit.Framework.Assert.IsNotNull(@in, "have stream"); NUnit.Framework.Assert.AreEqual(Constants.OBJ_BLOB, @in.GetType()); NUnit.Framework.Assert.AreEqual(data3.Length, @in.GetSize()); byte[] act = new byte[data3.Length]; IOUtil.ReadFully(@in, act, 0, data3.Length); NUnit.Framework.Assert.IsTrue(Arrays.Equals(act, data3), "same content"); NUnit.Framework.Assert.AreEqual(-1, @in.Read(), "stream at EOF"); @in.Close(); }
public virtual void Test025_computeSha1NoStore() { byte[] data = Sharpen.Runtime.GetBytesForString("test025 some data, more than 16 bytes to get good coverage" , "ISO-8859-1"); ObjectId id = new ObjectInserter.Formatter().IdFor(Constants.OBJ_BLOB, data); NUnit.Framework.Assert.AreEqual("4f561df5ecf0dfbd53a0dc0f37262fef075d9dde", id.Name ); }
/// <summary>Parse an annotated tag from its canonical format.</summary> /// <remarks> /// Parse an annotated tag from its canonical format. /// This method inserts the tag directly into the caller supplied revision /// pool, making it appear as though the tag exists in the repository, even /// if it doesn't. The repository under the pool is not affected. /// </remarks> /// <param name="rw"> /// the revision pool to allocate the tag within. The tag's object /// pointer will be obtained from this pool. /// </param> /// <param name="raw">the canonical formatted tag to be parsed.</param> /// <returns> /// the parsed tag, in an isolated revision pool that is not /// available to the caller. /// </returns> /// <exception cref="NGit.Errors.CorruptObjectException">the tag contains a malformed header that cannot be handled. /// </exception> public static NGit.Revwalk.RevTag Parse(RevWalk rw, byte[] raw) { ObjectInserter.Formatter fmt = new ObjectInserter.Formatter(); bool retain = rw.IsRetainBody(); rw.SetRetainBody(true); NGit.Revwalk.RevTag r = rw.LookupTag(fmt.IdFor(Constants.OBJ_TAG, raw)); r.ParseCanonical(rw, raw); rw.SetRetainBody(retain); return(r); }
public virtual void TestPackFormat_LargeObject() { int type = Constants.OBJ_BLOB; byte[] data = GetRng().NextBytes(streamThreshold + 5); ObjectId id = new ObjectInserter.Formatter().IdFor(type, data); Write(id, CompressPackFormat(type, data)); ObjectLoader ol; { FileInputStream fs = new FileInputStream(Path(id)); try { ol = UnpackedObject.Open(fs, Path(id), id, wc); } finally { fs.Close(); } } NUnit.Framework.Assert.IsNotNull(ol, "created loader"); NUnit.Framework.Assert.AreEqual(type, ol.GetType()); NUnit.Framework.Assert.AreEqual(data.Length, ol.GetSize()); NUnit.Framework.Assert.IsTrue(ol.IsLarge(), "is large"); try { ol.GetCachedBytes(); NUnit.Framework.Assert.Fail("Should have thrown LargeObjectException"); } catch (LargeObjectException tooBig) { NUnit.Framework.Assert.AreEqual(MessageFormat.Format(JGitText.Get().largeObjectException , id.Name), tooBig.Message); } ObjectStream @in = ol.OpenStream(); NUnit.Framework.Assert.IsNotNull(@in, "have stream"); NUnit.Framework.Assert.AreEqual(type, @in.GetType()); NUnit.Framework.Assert.AreEqual(data.Length, @in.GetSize()); byte[] data2 = new byte[data.Length]; IOUtil.ReadFully(@in, data2, 0, data.Length); NUnit.Framework.Assert.IsTrue(Arrays.Equals(data2, data), "same content"); NUnit.Framework.Assert.AreEqual(-1, @in.Read(), "stream at EOF"); @in.Close(); }
public virtual void TestParse_PublicParseMethod() { ObjectInserter.Formatter fmt = new ObjectInserter.Formatter(); NGit.CommitBuilder src = new NGit.CommitBuilder(); src.TreeId = fmt.IdFor(Constants.OBJ_TREE, new byte[] { }); src.Author = author; src.Committer = committer; src.Message = "Test commit\n\nThis is a test.\n"; RevCommit p = RevCommit.Parse(src.Build()); NUnit.Framework.Assert.AreEqual(src.TreeId, p.Tree); NUnit.Framework.Assert.AreEqual(0, p.ParentCount); NUnit.Framework.Assert.AreEqual(author, p.GetAuthorIdent()); NUnit.Framework.Assert.AreEqual(committer, p.GetCommitterIdent()); NUnit.Framework.Assert.AreEqual("Test commit", p.GetShortMessage()); NUnit.Framework.Assert.AreEqual(src.Message, p.GetFullMessage()); }
public virtual void TestParse_PublicParseMethod() { ObjectInserter.Formatter fmt = new ObjectInserter.Formatter(); TagBuilder src = new TagBuilder(); src.SetObjectId(fmt.IdFor(Constants.OBJ_TREE, new byte[] { }), Constants.OBJ_TREE ); src.SetTagger(committer); src.SetTag("a.test"); src.SetMessage("Test tag\n\nThis is a test.\n"); RevTag p = RevTag.Parse(src.Build()); NUnit.Framework.Assert.AreEqual(src.GetObjectId(), p.GetObject()); NUnit.Framework.Assert.AreEqual(committer, p.GetTaggerIdent()); NUnit.Framework.Assert.AreEqual("a.test", p.GetTagName()); NUnit.Framework.Assert.AreEqual("Test tag", p.GetShortMessage()); NUnit.Framework.Assert.AreEqual(src.GetMessage(), p.GetFullMessage()); }
public virtual void TestStandardFormat_LargeObject_CorruptZLibStream() { int type = Constants.OBJ_BLOB; byte[] data = GetRng().NextBytes(streamThreshold + 5); ObjectId id = new ObjectInserter.Formatter().IdFor(type, data); byte[] gz = CompressStandardFormat(type, data); gz[gz.Length - 1] = 0; gz[gz.Length - 2] = 0; Write(id, gz); ObjectLoader ol; { FileInputStream fs = new FileInputStream(Path(id)); try { ol = UnpackedObject.Open(fs, Path(id), id, wc); } finally { fs.Close(); } } try { byte[] tmp = new byte[data.Length]; InputStream @in = ol.OpenStream(); try { IOUtil.ReadFully(@in, tmp, 0, tmp.Length); } finally { @in.Close(); } NUnit.Framework.Assert.Fail("Did not throw CorruptObjectException"); } catch (CorruptObjectException coe) { NUnit.Framework.Assert.AreEqual(MessageFormat.Format(JGitText.Get().objectIsCorrupt , id.Name, JGitText.Get().corruptObjectBadStream), coe.Message); } }