public void testOneBlockAndHalf_BulkWrite() { TemporaryBuffer b = new TemporaryBuffer(); byte[] test = new TestRng(getName()).nextBytes(TemporaryBuffer.Block.SZ * 3 / 2); try { b.write(test, 0, 2); b.write(test, 2, 4); b.write(test, 6, test.Length - 6 - 2); b.write(test, test.Length - 2, 2); b.close(); Assert.AreEqual(test.Length, b.Length); { byte[] r = b.ToArray(); Assert.IsNotNull(r); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } { MemoryStream o = new MemoryStream(); b.writeTo(o, null); o.Close(); byte[] r = o.ToArray(); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } } finally { b.destroy(); } }
public void testLarge_SingleWrite() { TemporaryBuffer b = new TemporaryBuffer(); byte[] test = new TestRng(getName()).nextBytes(TemporaryBuffer.DEFAULT_IN_CORE_LIMIT * 3); try { b.write(test); b.close(); Assert.AreEqual(test.Length, b.Length); { byte[] r = b.ToArray(); Assert.IsNotNull(r); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } { MemoryStream o = new MemoryStream(); b.writeTo(o, null); o.Close(); byte[] r = o.ToArray(); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } } finally { b.destroy(); } }
public void testOneBlockAndHalf_Copy() { TemporaryBuffer b = new TemporaryBuffer(); byte[] test = new TestRng(getName()) .nextBytes(TemporaryBuffer.Block.SZ * 3 / 2); try { var @in = new MemoryStream(test); // [caytchen] StreamReader buffers data After the very first Read, thus advancing the Position in the underlying stream - causing this test to fail //var inReader = new StreamReader(@in); b.write(@in.ReadByte()); b.copy(@in); b.close(); Assert.AreEqual(test.Length, b.Length); { byte[] r = b.ToArray(); Assert.IsNotNull(r); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } { MemoryStream o = new MemoryStream(); b.writeTo(o, null); o.Close(); byte[] r = o.ToArray(); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } } finally { b.destroy(); } }
public void testInCoreLimit_SwitchOnCopy() { TemporaryBuffer b = new TemporaryBuffer(); byte[] test = new TestRng(getName()) .nextBytes(TemporaryBuffer.DEFAULT_IN_CORE_LIMIT * 2); try { MemoryStream @in = new MemoryStream(test, TemporaryBuffer.DEFAULT_IN_CORE_LIMIT, test.Length - TemporaryBuffer.DEFAULT_IN_CORE_LIMIT); b.write(test, 0, TemporaryBuffer.DEFAULT_IN_CORE_LIMIT); b.copy(@in); b.close(); Assert.AreEqual(test.Length, b.Length); { byte[] r = b.ToArray(); Assert.IsNotNull(r); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } { MemoryStream o = new MemoryStream(); b.writeTo(o, null); o.Close(); byte[] r = o.ToArray(); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } } finally { b.destroy(); } }
public void testOneBlockAndHalf_SingleWrite() { TemporaryBuffer b = new TemporaryBuffer(); byte[] test = new TestRng(getName()) .nextBytes(TemporaryBuffer.Block.SZ * 3 / 2); try { for (int i = 0; i < test.Length; i++) { b.write(test[i]); } b.close(); Assert.AreEqual(test.Length, b.Length); { byte[] r = b.ToArray(); Assert.IsNotNull(r); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } { MemoryStream o = new MemoryStream(); b.writeTo(o, null); o.Close(); byte[] r = o.ToArray(); Assert.AreEqual(test.Length, r.Length); Assert.IsTrue(test.SequenceEqual(r)); } } finally { b.destroy(); } }
public void TemporaryBuffer_Add() { using var buffer = new TemporaryBuffer <int>(1); Assert.Equal(0, buffer.Count); buffer.Add(100); Assert.Equal(1, buffer.Count); Assert.True(buffer.EndsWith(100)); Assert.False(buffer.EndsWith(new [] { 100, 200 })); Assert.False(buffer.EndsWith(new [] { 100, 200, 300 })); Assert.Equal(100, buffer.Last()); buffer.Add(200); Assert.Equal(2, buffer.Count); Assert.False(buffer.EndsWith(100)); Assert.True(buffer.EndsWith(new [] { 100, 200 })); Assert.False(buffer.EndsWith(new [] { 100, 200, 300 })); Assert.Equal(200, buffer.Last()); buffer.DiscardLast(); Assert.Equal(1, buffer.Count); Assert.True(buffer.EndsWith(100)); Assert.False(buffer.EndsWith(new [] { 100, 200 })); Assert.False(buffer.EndsWith(new [] { 100, 200, 300 })); Assert.Equal(100, buffer.Last()); buffer.Add(200); buffer.Add(300); Assert.Equal(3, buffer.Count); Assert.False(buffer.EndsWith(100)); Assert.True(buffer.EndsWith(new [] { 200, 300 })); Assert.True(buffer.EndsWith(new [] { 100, 200, 300 })); Assert.Equal(300, buffer.Last()); }
public void testOneByte() { TemporaryBuffer b = new TemporaryBuffer(); byte test = (byte)new TestRng(getName()).nextInt(); try { b.write(test); b.close(); Assert.AreEqual(1, b.Length); { byte[] r = b.ToArray(); Assert.IsNotNull(r); Assert.AreEqual(1, r.Length); Assert.AreEqual(test, r[0]); } { var o = new MemoryStream(); b.writeTo(o, null); o.Close(); byte[] r = o.ToArray(); Assert.AreEqual(1, r.Length); Assert.AreEqual(test, r[0]); } } finally { b.destroy(); } }
public Cleaner(IList <char> input) { buffer = new TemporaryBuffer <char>(256); state = State.NormalText; this.input = input; output = new List <char>(input.Count); templateNestingLevel = 0; actionCommitLink = CommitLink; }
/// <exception cref="System.IO.IOException"></exception> private void PutImpl(string bucket, string key, byte[] csum, TemporaryBuffer buf, ProgressMonitor monitor, string monitorTask) { if (monitor == null) { monitor = NullProgressMonitor.INSTANCE; } if (monitorTask == null) { monitorTask = MessageFormat.Format(JGitText.Get().progressMonUploading, key); } string md5str = Base64.EncodeBytes(csum); long len = buf.Length(); string lenstr = len.ToString(); for (int curAttempt = 0; curAttempt < maxAttempts; curAttempt++) { HttpURLConnection c = Open("PUT", bucket, key); c.SetRequestProperty("Content-Length", lenstr); c.SetRequestProperty("Content-MD5", md5str); c.SetRequestProperty(X_AMZ_ACL, acl); encryption.Request(c, X_AMZ_META); Authorize(c); c.SetDoOutput(true); c.SetFixedLengthStreamingMode((int)len); monitor.BeginTask(monitorTask, (int)(len / 1024)); OutputStream os = c.GetOutputStream(); try { buf.WriteTo(os, monitor); } finally { monitor.EndTask(); os.Close(); } switch (HttpSupport.Response(c)) { case HttpURLConnection.HTTP_OK: { return; } case HttpURLConnection.HTTP_INTERNAL_ERROR: { continue; goto default; } default: { throw Error("Writing", key, c); } } } throw MaxAttempts("Writing", key); }
private void WriteTo(Stream os) { MessageDigest foot = Constants.newMessageDigest(); var dos = new DigestOutputStream(os, foot); // Write the header. // var tmp = new byte[128]; Array.Copy(SigDirc, 0, tmp, 0, SigDirc.Length); NB.encodeInt32(tmp, 4, /* version */ 2); NB.encodeInt32(tmp, 8, _entryCnt); dos.Write(tmp, 0, 12); // Write the individual file entries. // if (_lastModified == DateTime.MinValue) { // Write a new index, as no entries require smudging. // for (int i = 0; i < _entryCnt; i++) { _sortedEntries[i].write(dos); } } else { var smudge_s = _lastModified.ToUnixTime(); var smudge_ns = _lastModified.Millisecond * 1000000; // [henon] <--- this could be done with much more precision in C# since DateTime has 100 nanosec ticks for (int i = 0; i < _entryCnt; i++) { DirCacheEntry e = _sortedEntries[i]; if (e.mightBeRacilyClean(smudge_s, smudge_ns)) { e.smudgeRacilyClean(); } e.write(dos); } } if (_cacheTree != null) { var bb = new TemporaryBuffer(); _cacheTree.write(tmp, bb); bb.close(); NB.encodeInt32(tmp, 0, ExtTree); NB.encodeInt32(tmp, 4, (int)bb.Length); dos.Write(tmp, 0, 8); bb.writeTo(dos, null); } var hash = foot.Digest(); os.Write(hash, 0, hash.Length); os.Close(); }
public void TemporaryBuffer_DisposeCanBeCalledManyTimes() { using var buffer = new TemporaryBuffer <int>(1) { 100, 200, 300 }; buffer.Dispose(); buffer.Dispose(); }
public void testRandomWrites() { TemporaryBuffer b = new TemporaryBuffer(); TestRng rng = new TestRng(getName()); int max = TemporaryBuffer.DEFAULT_IN_CORE_LIMIT * 2; byte[] expect = new byte[max]; try { int written = 0; bool onebyte = true; while (written < max) { if (onebyte) { byte v = (byte)rng.nextInt(); b.write(v); expect[written++] = v; } else { int len = Math.Min(rng.nextInt() & 127, max - written); byte[] tmp = rng.nextBytes(len); b.write(tmp, 0, len); Array.Copy(tmp, 0, expect, written, len); written += len; } onebyte = !onebyte; } Assert.AreEqual(expect.Length, written); b.close(); Assert.AreEqual(expect.Length, b.Length); { byte[] r = b.ToArray(); Assert.IsNotNull(r); Assert.AreEqual(expect.Length, r.Length); Assert.IsTrue(expect.SequenceEqual(r)); } { MemoryStream o = new MemoryStream(); b.writeTo(o, null); o.Close(); byte[] r = o.ToArray(); Assert.AreEqual(expect.Length, r.Length); Assert.IsTrue(expect.SequenceEqual(r)); } } finally { b.destroy(); } }
public void TemporaryBuffer_Insert() { using var buffer = new TemporaryBuffer <int>(1) { 100, 200, 300 }; buffer.Insert(2, 700); Assert.True(buffer.EndsWith(new [] { 700, 300 })); }
public void TemporaryBuffer_DiscardLast() { using var buffer = new TemporaryBuffer <int>(1) { 100, 200, 300 }; buffer.DiscardLast(); Assert.Equal(new[] { 100, 200 }, buffer.ToArray()); }
public void testDestroyWhileOpen() { TemporaryBuffer b = new TemporaryBuffer(); try { b.write(new TestRng(getName()) .nextBytes(TemporaryBuffer.DEFAULT_IN_CORE_LIMIT * 2)); } finally { b.destroy(); } }
public void TemporaryBuffer_Discard() { using var buffer = new TemporaryBuffer <int>(1) { 100, 200, 300 }; buffer.Discard(); Assert.Equal(0, buffer.Count); Assert.Empty(buffer); }
private static byte[] ReadFully(Stream stream) { var b = new TemporaryBuffer(); try { b.copy(stream); b.close(); return(b.ToArray()); } finally { b.destroy(); } }
public void testEmpty() { TemporaryBuffer b = new TemporaryBuffer(); try { b.close(); Assert.AreEqual(0, b.Length); byte[] r = b.ToArray(); Assert.IsNotNull(r); Assert.AreEqual(0, r.Length); } finally { b.destroy(); } }
public void TemporaryBuffer_Apply() { using var buffer = new TemporaryBuffer <int>(1) { 100, 200, 300 }; Func <int[], int, int> sumf = (data, pos) => data.AsSpan().Slice(0, pos).ToArray().Sum(); int sum = buffer.Apply(sumf); Assert.Equal(600, sum); sum = 0; buffer.Apply((data, pos) => sum = sumf(data, pos)); Assert.Equal(600, sum); }
public void TemporaryBuffer_CommitAfterDicard() { using var buffer = new TemporaryBuffer <int>(1) { 100, 200, 300 }; buffer.DiscardLast(); buffer.Add(700); buffer.Add(900); buffer.Discard(); var data = new List <int>(); buffer.Commit(data); Assert.Empty(data); }
public void TemporaryBuffer_Commit() { using var buffer = new TemporaryBuffer <int>(1) { 100, 200, 300 }; buffer.DiscardLast(); buffer.Add(700); buffer.Add(900); var data = new List <int>(); buffer.Commit(data); Assert.Equal(new List <int> { 100, 200, 700, 900 }, data); }
private string[] ExtractFileLines(Encoding[] csGuess) { var tmp = new TemporaryBuffer[ParentCount + 1]; try { for (int i = 0; i < tmp.Length; i++) { tmp[i] = new TemporaryBuffer(); } foreach (HunkHeader h in Hunks) { h.extractFileLines(tmp); } var r = new String[tmp.Length]; for (int i = 0; i < tmp.Length; i++) { Encoding cs = (csGuess != null ? csGuess[i] : null) ?? Constants.CHARSET; r[i] = RawParseUtils.decode(cs, tmp[i].ToArray()); } return(r); } catch (IOException ioe) { throw new Exception("Cannot convert script to text", ioe); } finally { foreach (TemporaryBuffer b in tmp) { if (b != null) { b.destroy(); } } } }
private string[] ExtractFileLines(Encoding[] csGuess) { TemporaryBuffer[] tmp = new TemporaryBuffer[GetParentCount() + 1]; try { for (int i = 0; i < tmp.Length; i++) { tmp[i] = new TemporaryBuffer.LocalFile(); } foreach (HunkHeader h in GetHunks()) { h.ExtractFileLines(tmp); } string[] r = new string[tmp.Length]; for (int i_1 = 0; i_1 < tmp.Length; i_1++) { Encoding cs = csGuess != null ? csGuess[i_1] : null; if (cs == null) { cs = Constants.CHARSET; } r[i_1] = RawParseUtils.Decode(cs, tmp[i_1].ToByteArray()); } return(r); } catch (IOException ioe) { throw new RuntimeException(JGitText.Get().cannotConvertScriptToText, ioe); } finally { foreach (TemporaryBuffer b in tmp) { if (b != null) { b.Destroy(); } } } }
public void write(byte[] tmp, TemporaryBuffer os) { int ptr = tmp.Length; tmp[--ptr] = (byte)'\n'; ptr = RawParseUtils.formatBase10(tmp, ptr, _childCount); tmp[--ptr] = (byte)' '; ptr = RawParseUtils.formatBase10(tmp, ptr, isValid() ? _entrySpan : -1); tmp[--ptr] = 0; os.write(_encodedName, 0, _encodedName.Length); os.write(tmp, ptr, tmp.Length - ptr); if (isValid()) { _id.copyRawTo(tmp, 0); os.write(tmp, 0, Constants.OBJECT_ID_LENGTH); } for (int i = 0; i < _childCount; i++) { _children[i].write(tmp, os); } }