Skip to content

Commit 568cc93

Browse files
committed
Test for treebuilder insert memory management
1 parent f140847 commit 568cc93

2 files changed

Lines changed: 32 additions & 0 deletions

File tree

test/tests/tree_entry.js

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@ var assert = require("assert");
22
var path = require("path");
33
var local = path.join.bind(path, __dirname);
44

5+
var leakTest = require("../utils/leak_test");
6+
57
describe("TreeEntry", function() {
68
var NodeGit = require("../../");
79
var Repository = NodeGit.Repository;
@@ -175,4 +177,15 @@ describe("TreeEntry", function() {
175177
assert.equal(object.isTree(), true);
176178
});
177179
});
180+
181+
it("does not leak", function() {
182+
var test = this;
183+
184+
return leakTest(NodeGit.TreeEntry, function() {
185+
return test.commit.getTree()
186+
.then(function(tree) {
187+
return tree.entryByPath("example");
188+
});
189+
});
190+
});
178191
});

test/tests/treebuilder.js

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,14 @@ var promisify = require("promisify-node");
55
var readDir = promisify(fs.readdir);
66
var local = path.join.bind(path, __dirname);
77

8+
var leakTest = require("../utils/leak_test");
9+
810
describe("TreeBuilder", function(){
911

1012
var Git = require("../../");
1113
var reposPath = local("../repos/workdir");
14+
var oid = "111dd657329797f6165f52f5085f61ac976dcf04";
15+
1216
//setup test repo each test
1317
beforeEach(function() {
1418
var test = this;
@@ -76,4 +80,19 @@ describe("TreeBuilder", function(){
7680
return Git.Tree.lookup(test.repo, newTreeEntry.oid());
7781
});
7882
});
83+
84+
it("does not leak inserts", function() {
85+
var test = this;
86+
87+
// The underlying C++ git_tree_entry is owned by the treebuilder that
88+
// creates it. But since git_tree_entry is duplicable the generator will
89+
// duplicate it and mark it as self freeing.
90+
// Validate this with the leakTest.
91+
return leakTest(Git.TreeEntry, function() {
92+
return Git.Treebuilder.create(test.repo, null)
93+
.then(function(builder) {
94+
return builder.insert("test", oid, Git.TreeEntry.FILEMODE.BLOB);
95+
});
96+
});
97+
});
7998
});

0 commit comments

Comments
 (0)