diff options
author | Colin Walters <walters@verbum.org> | 2014-02-14 18:16:10 -0500 |
---|---|---|
committer | Colin Walters <walters@verbum.org> | 2014-02-14 18:16:37 -0500 |
commit | 53bd648dac89082e1e3de274b3a033b5e184bbc8 (patch) | |
tree | 8f52c5b3351cba60ad9faffb0ea0dff55f3834f4 | |
parent | 8ccd603cba3ad14561a1942b872f977308c36e92 (diff) | |
download | ostree-53bd648dac89082e1e3de274b3a033b5e184bbc8.tar.gz |
manual-tests: New directory with custom test scripts
This is just a demo script.
-rw-r--r-- | manual-tests/upgrade-loop.js | 85 |
1 files changed, 85 insertions, 0 deletions
diff --git a/manual-tests/upgrade-loop.js b/manual-tests/upgrade-loop.js new file mode 100644 index 00000000..04a19fff --- /dev/null +++ b/manual-tests/upgrade-loop.js @@ -0,0 +1,85 @@ +#!/usr/bin/env gjs +// +// Copyright (C) 2013,2014 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. + +// PURPOSE: This script runs in an infinite loop; it alternates +// upgrading and downgrading. The idea is that a parent test process +// could watch the output, and assert that the system is in a +// consistent state if this script is killed and restarted. randomly. + +const GLib = imports.gi.GLib; +const Gio = imports.gi.Gio; + +const OSTree = imports.gi.OSTree; + +let sysroot = OSTree.Sysroot.new_default(); +sysroot.load(null); +let [,repo] = sysroot.get_repo(null); +let deployments = sysroot.get_deployments(); +if (deployments.length == 0) + throw new Error("No deployments"); + +let firstDeployment = deployments[0]; +let startingRevision = firstDeployment.get_csum(); +print("Using OS= " + firstDeployment.get_osname() + " revision=" + startingRevision); + +let origin = firstDeployment.get_origin(); +let refspec = origin.get_string('origin', 'refspec'); + +let [,remote,ref] = OSTree.parse_refspec(refspec); +print("Using origin remote=" + remote + " ref=" + ref); + +repo.pull(remote, [ref], 0, null, null); + +let [,newRev] = repo.resolve_rev(refspec, false); + +let targetRev = null; + +while (true) { + sysroot.cleanup(null); + + if (startingRevision == newRev) { + print("Starting revision is current"); + let [,commitObject] = repo.load_variant(OSTree.ObjectType.COMMIT, startingRevision); + targetRev = OSTree.commit_get_parent(commitObject); + print("Using parent target revision " + targetRev); + repo.pull(remote, [targetRev], 0, null, null); + } else { + print("Starting revision is older, using target revision " + newRev); + targetRev = newRev; + } + + let origin = sysroot.origin_new_from_refspec(refspec); + print("DEPLOY BEGIN revision=" + targetRev); + let [,newDeployment] = sysroot.deploy_tree(firstDeployment.get_osname(), targetRev, origin, + firstDeployment, null, + null); + print("DEPLOY END revision=" + targetRev); + + let newDeployments = [newDeployment, firstDeployment]; + sysroot.write_deployments(newDeployments, null); + + sysroot.load(null); + sysroot.cleanup(null); + + let deployments = sysroot.get_deployments(); + if (deployments.length == 0) + throw new Error("No deployments"); + + firstDeployment = deployments[0]; +} |