Morph Building Tests ====================== SCENARIO building a system morphology GIVEN a git server WHEN the user clones definitions AND the user attempts to build the system systems/test-system.morph in branch master THEN morph succeeded AND the system artifact for test-system is in the cache FINALLY the git server is shut down SCENARIO attempting to build a system morphology which has never been committed GIVEN a git server WHEN the user clones definitions AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in 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 git server WHEN the user clones definitions AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in branch master AND from the directory definitions/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 git server WHEN the user clones definitions AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in branch master AND from the directory definitions/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 git server WHEN the user clones definitions AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in branch master AND from the directory definitions/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 SCENARIO build a chunk with build commands that will fail GIVEN a git server WHEN the user clones definitions AND the user defines build commands for chunk test-chunk that will fail, in branch master AND the user attempts to build the system systems/test-system.morph in branch master THEN morph failed AND the build error message includes the string "build failed (exit_code=1)" FINALLY the git server is shut down SCENARIO build log is saved when a chunk is built GIVEN a git server WHEN the user clones definitions AND the user attempts to build the system systems/test-system.morph in branch master THEN morph succeeded AND the build logs for the chunks were saved to the artifact cache FINALLY the git server is shut down SCENARIO building a chunk containing submodules GIVEN a git server AND a chunk with submodules WHEN the user clones definitions AND the user adds the chunk with submodules to an existing stratum in branch master AND the user attempts to build the system systems/test-system.morph in branch master THEN morph succeeded FINALLY the git server is shut down SCENARIO building a chunk using a custom prefix GIVEN a git server WHEN the user clones definitions AND the user adds the chunk with custom prefixes to an existing stratum in branch master AND the user attempts to build the system systems/test-system.morph in branch master THEN morph succeeded THEN the build log for chunk xyzzy contains /plover THEN the build log for chunk plugh contains /usr THEN the build log for chunk plugh contains /plover/bin FINALLY the git server is shut down SCENARIO modifying chunk causes its stratum to be rebuilt GIVEN a git server WHEN the user clones definitions AND the user attempts to build the system systems/test-system.morph in branch master THEN morph succeeded WHEN the user changes the build commands for chunk test-chunk in branch master AND the user attempts to build the system systems/test-system.morph in branch master THEN morph succeeded AND there are 2 artifacts named core-runtime in the cache FINALLY the git server is shut down SCENARIO test recursive submodules overriding urls GIVEN a git server GIVEN a chunk with recursive submodules WHEN the user clones definitions WHEN the user attempts to build the system systems/test-system.morph in branch master 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 git server WHEN the user clones definitions 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 clusters/test-cluster.morph in branch master AND a system in cluster clusters/test-cluster.morph in branch master called test-system AND system test-system in cluster clusters/test-cluster.morph in branch master builds systems/test-system.morph AND system test-system in cluster clusters/test-cluster.morph in branch master has deployment type: tar WHEN the user attempts to deploy the cluster clusters/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 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 clones definitions AND the user creates an uncommitted system morphology called systems/base-system.morph for our architecture in 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 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 definitions/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 git server WHEN the user clones definitions 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 git server WHEN the user clones definitions 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