summaryrefslogtreecommitdiff
path: root/tests/test-sizes.js
diff options
context:
space:
mode:
authorJeremy Whiting <jeremy.whiting@collabora.com>2013-10-08 20:44:39 -0600
committerColin Walters <walters@verbum.org>2013-10-19 11:56:51 -0400
commitf583c4ab0b42b96caf47e4c068394ca1771115c0 (patch)
tree0d4f19ec3b58f05fcff762ca124e242c924be35f /tests/test-sizes.js
parentb35d1499b844f4d7b09ec7458d27912f14a030e1 (diff)
downloadostree-f583c4ab0b42b96caf47e4c068394ca1771115c0.tar.gz
core: Add size information to commit metadata
Add a --generate-sizes option to commit to add size information to the commit metadata. This will be used by higher level code which wants to determine the total size necessary for downloading.
Diffstat (limited to 'tests/test-sizes.js')
-rw-r--r--tests/test-sizes.js82
1 files changed, 82 insertions, 0 deletions
diff --git a/tests/test-sizes.js b/tests/test-sizes.js
new file mode 100644
index 00000000..5cf765fc
--- /dev/null
+++ b/tests/test-sizes.js
@@ -0,0 +1,82 @@
+#!/usr/bin/env gjs
+//
+// Copyright (C) 2013 Colin Walters <walters@verbum.org>
+//
+// This library is free software; you can redistribute it and/or
+// modify it under the terms of the GNU Lesser General Public
+// License as published by the Free Software Foundation; either
+// version 2 of the License, or (at your option) any later version.
+//
+// This library is distributed in the hope that it will be useful,
+// but WITHOUT ANY WARRANTY; without even the implied warranty of
+// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+// Lesser General Public License for more details.
+//
+// You should have received a copy of the GNU Lesser General Public
+// License along with this library; if not, write to the
+// Free Software Foundation, Inc., 59 Temple Place - Suite 330,
+// Boston, MA 02111-1307, USA.
+
+const GLib = imports.gi.GLib;
+const Gio = imports.gi.Gio;
+const OSTree = imports.gi.OSTree;
+
+function assertEquals(a, b) {
+ if (a != b)
+ throw new Error("assertion failed " + JSON.stringify(a) + " == " + JSON.stringify(b));
+}
+
+let testDataDir = Gio.File.new_for_path('test-data');
+testDataDir.make_directory(null);
+testDataDir.get_child('some-file').replace_contents("hello world!", null, false, 0, null);
+testDataDir.get_child('another-file').replace_contents("hello world again!", null, false, 0, null);
+
+let repoPath = Gio.File.new_for_path('repo');
+let repo = OSTree.Repo.new(repoPath);
+repo.create(OSTree.RepoMode.ARCHIVE_Z2, null);
+
+repo.open(null);
+
+let commitModifier = OSTree.RepoCommitModifier.new(OSTree.RepoCommitModifierFlags.GENERATE_SIZES, null);
+
+assertEquals(repo.get_mode(), OSTree.RepoMode.ARCHIVE_Z2);
+
+repo.prepare_transaction(null);
+
+let mtree = OSTree.MutableTree.new();
+repo.write_directory_to_mtree(testDataDir, mtree, commitModifier, null);
+let [,dirTree] = repo.write_mtree(mtree, null);
+let [,commit] = repo.write_commit(null, 'Some subject', 'Some body', null, dirTree, null);
+print("commit => " + commit);
+
+repo.commit_transaction(null, null);
+
+// Test the sizes metadata
+let [,commitVariant] = repo.load_variant(OSTree.ObjectType.COMMIT, commit);
+let metadata = commitVariant.get_child_value(0);
+let sizes = metadata.lookup_value('ostree.sizes', GLib.VariantType.new('aay'));
+let nSizes = sizes.n_children();
+assertEquals(nSizes, 2);
+let expectedUncompressedSizes = [12, 18];
+let foundExpectedUncompressedSizes = 0;
+for (let i = 0; i < nSizes; i++) {
+ let sizeEntry = sizes.get_child_value(i).deep_unpack();
+ assertEquals(sizeEntry.length, 34);
+ let compressedSize = sizeEntry[32];
+ let uncompressedSize = sizeEntry[33];
+ print("compressed = " + compressedSize);
+ print("uncompressed = " + uncompressedSize);
+ for (let j = 0; j < expectedUncompressedSizes.length; j++) {
+ let expected = expectedUncompressedSizes[j];
+ if (expected == uncompressedSize) {
+ print("Matched expected uncompressed size " + expected);
+ expectedUncompressedSizes.splice(j, 1);
+ break;
+ }
+ }
+}
+if (expectedUncompressedSizes.length > 0) {
+ throw new Error("Failed to match expectedUncompressedSizes: " + JSON.stringify(expectedUncompressedSizes));
+}
+
+print("test-sizes complete");