1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43 package org.eclipse.jgit.diff;
44
45 import org.eclipse.jgit.errors.BinaryBlobException;
46 import org.eclipse.jgit.internal.storage.file.FileRepository;
47 import org.eclipse.jgit.junit.RepositoryTestCase;
48 import org.eclipse.jgit.lib.Constants;
49 import org.eclipse.jgit.lib.ObjectId;
50 import org.eclipse.jgit.lib.ObjectInserter;
51 import org.eclipse.jgit.lib.ObjectLoader;
52 import org.junit.Assert;
53 import org.junit.Test;
54
55 import java.io.IOException;
56
57 public class RawTextLoadTest extends RepositoryTestCase {
58 private static byte[] generate(int size, int nullAt) {
59 byte[] data = new byte[size];
60 for (int i = 0; i < data.length; i++) {
61 data[i] = (byte) ((i % 72 == 0) ? '\n' : (i%10) + '0');
62 }
63 if (nullAt >= 0) {
64 data[nullAt] = '\0';
65 }
66 return data;
67 }
68
69 private RawText textFor(byte[] data, int limit) throws IOException, BinaryBlobException {
70 FileRepository repo = createBareRepository();
71 ObjectId id;
72 try (ObjectInserter ins = repo.getObjectDatabase().newInserter()) {
73 id = ins.insert(Constants.OBJ_BLOB, data);
74 }
75 ObjectLoader ldr = repo.open(id);
76 return RawText.load(ldr, limit);
77 }
78
79 @Test
80 public void testSmallOK() throws Exception {
81 byte[] data = generate(1000, -1);
82 RawText result = textFor(data, 1 << 20);
83 Assert.assertArrayEquals(result.content, data);
84 }
85
86 @Test(expected = BinaryBlobException.class)
87 public void testSmallNull() throws Exception {
88 byte[] data = generate(1000, 22);
89 textFor(data, 1 << 20);
90 }
91
92 @Test
93 public void testBigOK() throws Exception {
94 byte[] data = generate(10000, -1);
95 RawText result = textFor(data, 1 << 20);
96 Assert.assertArrayEquals(result.content, data);
97 }
98
99 @Test(expected = BinaryBlobException.class)
100 public void testBigWithNullAtStart() throws Exception {
101 byte[] data = generate(10000, 22);
102 textFor(data, 1 << 20);
103 }
104
105 @Test(expected = BinaryBlobException.class)
106 public void testBinaryThreshold() throws Exception {
107 byte[] data = generate(2 << 20, -1);
108 textFor(data, 1 << 20);
109 }
110 }