Morph Building Tests ====================== SCENARIO attempting to build a system morphology which has never been committed GIVEN a workspace AND a git server WHEN the user checks out the system branch called master AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in system branch master AND the user attempts to build the system systems/base-system.morph in branch master THEN morph succeeded FINALLY the git server is shut down SCENARIO build system with relative path GIVEN a workspace AND a git server WHEN the user checks out the system branch called master AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in system branch master AND from the directory workspace/master/test/morphs/systems the user attempts to morph build the system base-system.morph THEN morph succeeded FINALLY the git server is shut down SCENARIO build system with relative path (second variant) GIVEN a workspace AND a git server WHEN the user checks out the system branch called master AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in system branch master AND from the directory workspace/master/test/morphs/systems the user attempts to morph build the system ../systems/base-system.morph THEN morph succeeded FINALLY the git server is shut down SCENARIO build system with absolute path GIVEN a workspace AND a git server WHEN the user checks out the system branch called master AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in system branch master AND from the directory workspace/master/test/morphs/systems the user attempts to morph build the system using the absolute path to base-system.morph THEN morph succeeded FINALLY the git server is shut down System integrations ------------------- `system-integration` is a field in chunk morphologies that allows you to have some scripts run at system artifact construction time, because some things need to be done after every chunk is built, such as `ldconfig`, so every library path in `/etc/ld.so.conf` can be found, and it can look up libraries more quickly. SCENARIO using system integrations GIVEN a workspace AND a git server WHEN the user checks out the system branch called master AND the user attempts to build the system systems/test-system.morph in branch master THEN morph succeeded In our example, we have a system integration that creates /etc/passwd, so when we deploy the system, we can check whether it exists. GIVEN a cluster called test-cluster.morph in system branch master AND a system in cluster test-cluster.morph in branch master called test-system AND system test-system in cluster test-cluster.morph in branch master builds systems/test-system.morph AND system test-system in cluster test-cluster.morph in branch master has deployment type: tar WHEN the user attempts to deploy the cluster test-cluster.morph in branch master with options test-system.location="$DATADIR/test.tar" THEN morph succeeded AND tarball test.tar contains etc/passwd FINALLY the git server is shut down Distbuilding ------------ SCENARIO distbuilding ASSUMING the morph-cache-server can be run GIVEN a workspace AND a git server AND a communal cache server AND a distbuild worker AND a distbuild controller Distbuilding works much the same way as regular building. WHEN the user checks out the system branch called master AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in system branch master THEN morph distbuild the system systems/base-system.morph of the branch master Distbuilt systems can be deployed locally, since the building process lets you download the artifacts for local use. Note: Currently broken. It's currently complaining about not having repos cached locally. > GIVEN a cluster called test-cluster.morph in system branch master > AND a system in cluster test-cluster.morph in branch master called test-system > AND system test-system in cluster test-cluster.morph in branch master builds systems/base-system.morph > AND system test-system in cluster test-cluster.morph in branch master has deployment type: sysroot > AND system test-system in cluster test-cluster.morph in branch master has deployment location: test-system > WHEN the user attempts to deploy the cluster test-cluster.morph in branch master > THEN morph succeeded > AND file workspace/master/test/morphs/test-system exists FINALLY the distbuild controller is terminated AND the distbuild worker is terminated AND the communal cache server is terminated AND the git server is shut down Empty strata don't build ------------------------ SCENARIO empty-strata GIVEN a workspace AND a git server WHEN the user checks out the system branch called empty-stratum AND the user attempts to build the system systems/empty-stratum-system.morph in branch empty-stratum THEN morph failed FINALLY the git server is shut down Partial building ---------------- SCENARIO partial building GIVEN a workspace AND a git server WHEN the user checks out the system branch called master AND the user attempts to build build-essential from the system systems/test-system.morph in branch master THEN morph succeeded FINALLY the git server is shut down