summaryrefslogtreecommitdiff
path: root/tests.as-root
diff options
context:
space:
mode:
authorJannis Pohlmann <jannis.pohlmann@codethink.co.uk>2012-09-04 17:42:32 +0000
committerSam Thursfield <sam.thursfield@codethink.co.uk>2012-09-07 18:14:44 +0100
commitf55a1228d09f2661ef83ba5d0d12b0363a48412b (patch)
tree0287aa1c06b7373d3aeea7ccfa35463347035f13 /tests.as-root
parent204f272d5a2c3471a1e796132bc16dec72a8f926 (diff)
downloadmorph-f55a1228d09f2661ef83ba5d0d12b0363a48412b.tar.gz
Add a new 'morph build' for building from a system branch
This new command does a lot. First of all, its command line interface has now changed to 'morph build SYSTEM' and it needs to be run from a system branch. When called, the new 'build' command will identify the repositories and morphologies involved in building the system from the system branch, create a build ref behind the scenes based on the system branch and add a commit with all uncommitted changes to this build branch for every repo involved. It will then push those build branches to the repository server and kick off a build of BRANCH_ROOT BUILD_BRANCH SYSTEM.morph. After building has finished, the remote build branches will be deleted again.
Diffstat (limited to 'tests.as-root')
-rwxr-xr-xtests.as-root/building-a-system-branch-works-anywhere.script75
-rw-r--r--tests.as-root/building-a-system-branch-works-anywhere.stdout10
-rwxr-xr-xtests.as-root/setup37
3 files changed, 122 insertions, 0 deletions
diff --git a/tests.as-root/building-a-system-branch-works-anywhere.script b/tests.as-root/building-a-system-branch-works-anywhere.script
new file mode 100755
index 00000000..3bb32f17
--- /dev/null
+++ b/tests.as-root/building-a-system-branch-works-anywhere.script
@@ -0,0 +1,75 @@
+#!/bin/bash
+# Copyright (C) 2012 Codethink Limited
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; version 2 of the License.
+#
+# This program 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 General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License along
+# with this program; if not, write to the Free Software Foundation, Inc.,
+# 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+# Make sure "morph build" works anywhere in a workspace or system branch
+# and produces the same results every time.
+
+set -eu
+
+# Initialise the workspace.
+cd "$DATADIR/workspace"
+"$SRCDIR/scripts/test-morph" init
+
+# Create a new local system branch.
+"$SRCDIR/scripts/test-morph" branch test:morphs-repo branch1
+
+# Edit linux.
+"$SRCDIR/scripts/test-morph" edit linux-system linux-stratum linux
+
+# Fix the UUIDs being used for the temporary refs. This is needed
+# because the system and stratum morphologies will have references
+# to the temporary build refs and that will affect the artifact
+# cache keys. If we fix the UUIDs, the artifact cache keys will
+# always be the same.
+git config -f "$DATADIR/workspace/branch1/.morph-system-branch/config" \
+ branch.uuid 123456789
+git config -f "$DATADIR/workspace/branch1/test:morphs-repo/.git/config" \
+ morph.uuid 987654321
+git config -f "$DATADIR/workspace/branch1/test:kernel-repo/.git/config" \
+ morph.uuid AABBCCDDE
+
+# Build from the workspace root.
+cd "$DATADIR/workspace"
+"$SRCDIR/scripts/test-morph" build linux-system
+"$SRCDIR/scripts/list-tree" "$DATADIR/cache/artifacts" > "$DATADIR/output1"
+rm -rf "$DATADIR/cache"/*
+
+# Build from the branch.
+cd "$DATADIR/workspace/branch1"
+"$SRCDIR/scripts/test-morph" build linux-system
+"$SRCDIR/scripts/list-tree" "$DATADIR/cache/artifacts" > "$DATADIR/output2"
+rm -rf "$DATADIR/cache/artifacts"/*
+
+# Build form the branch root repository.
+cd "$DATADIR/workspace/branch1/test:morphs-repo"
+"$SRCDIR/scripts/test-morph" build linux-system
+"$SRCDIR/scripts/list-tree" "$DATADIR/cache/artifacts" > "$DATADIR/output3"
+rm -rf "$DATADIR/cache/artifacts"/*
+
+# Build from the linux directory.
+cd "$DATADIR/workspace/branch1/test:kernel-repo"
+"$SRCDIR/scripts/test-morph" build linux-system
+"$SRCDIR/scripts/list-tree" "$DATADIR/cache/artifacts" > "$DATADIR/output4"
+rm -rf "$DATADIR/cache/artifacts"/*
+
+# Verify that we're always building the same and that we're building
+# the right things after all.
+cat "$DATADIR/output1"
+
+# Print diffs of the build results, all of which should be empty.
+diff "$DATADIR/output1" "$DATADIR/output2"
+diff "$DATADIR/output2" "$DATADIR/output3"
+diff "$DATADIR/output3" "$DATADIR/output4"
diff --git a/tests.as-root/building-a-system-branch-works-anywhere.stdout b/tests.as-root/building-a-system-branch-works-anywhere.stdout
new file mode 100644
index 00000000..68c29eae
--- /dev/null
+++ b/tests.as-root/building-a-system-branch-works-anywhere.stdout
@@ -0,0 +1,10 @@
+d .
+f ./4854734df8ff06a9fbaab8536be43a46b54c1e6bcb9545ccb8fc345b5fb17ebd.meta
+f ./4854734df8ff06a9fbaab8536be43a46b54c1e6bcb9545ccb8fc345b5fb17ebd.stratum.linux-stratum
+f ./4854734df8ff06a9fbaab8536be43a46b54c1e6bcb9545ccb8fc345b5fb17ebd.stratum.linux-stratum.meta
+f ./cda58b36cef0fe28c5ffaf080fed5ee85128f109f806c4c599c46b1f064ce028.meta
+f ./cda58b36cef0fe28c5ffaf080fed5ee85128f109f806c4c599c46b1f064ce028.system.linux-system-kernel
+f ./cda58b36cef0fe28c5ffaf080fed5ee85128f109f806c4c599c46b1f064ce028.system.linux-system-rootfs
+f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.build-log
+f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.chunk.linux
+f ./e8d3ecb31babcb58516f1298ccc5f63b167186e6527d831af5a788309a648cd6.meta
diff --git a/tests.as-root/setup b/tests.as-root/setup
index 2ba0adf9..d4cb6d8a 100755
--- a/tests.as-root/setup
+++ b/tests.as-root/setup
@@ -31,6 +31,9 @@ set -eu
# The $DATADIR should be empty at the beginnig of each test.
find "$DATADIR" -mindepth 1 -delete
+# Create an empty directory to be used as a morph workspace
+mkdir "$DATADIR/workspace"
+
# Create chunk repository.
chunkrepo="$DATADIR/chunk-repo"
@@ -120,6 +123,40 @@ cat <<EOF > hello-system.morph
EOF
git add hello-system.morph
+cat <<EOF > linux-system.morph
+{
+ "name": "linux-system",
+ "kind": "system",
+ "system-kind": "syslinux-disk",
+ "arch": "$(uname -m)",
+ "disk-size": "1G",
+ "strata": [
+ {
+ "morph": "linux-stratum",
+ "repo": "test:morphs-repo",
+ "ref": "master"
+ }
+ ]
+}
+EOF
+git add linux-system.morph
+
+cat <<EOF > linux-stratum.morph
+{
+ "name": "linux-stratum",
+ "kind": "stratum",
+ "chunks": [
+ {
+ "name": "linux",
+ "repo": "test:kernel-repo",
+ "ref": "master",
+ "build-depends": []
+ }
+ ]
+}
+EOF
+git add linux-stratum.morph
+
git commit --quiet -m "add morphs"
# Make a dummy kernel chunk.