2019-01-02 09:54:46 +01:00
{ pkgs , . . . }:
let
# To make some prebuilt derivations available in the vm
2019-03-05 19:41:54 +01:00
preEval = modules : import ../../src/nix/eval-composition.nix {
inherit modules ;
2019-01-02 09:54:46 +01:00
inherit pkgs ;
} ;
in
{
name = " a r i o n - t e s t " ;
machine = { pkgs , lib , . . . }: {
environment . systemPackages = [
pkgs . arion
] ;
virtualisation . docker . enable = true ;
# no caches, because no internet
nix . binaryCaches = lib . mkForce [ ] ;
2019-01-27 01:08:51 +01:00
# FIXME: Sandbox seems broken with current version of NixOS test
# w/ writable store. Error:
# machine# error: linking '/nix/store/7r8z2zvhwda85pgpdn5hzzz6hs1njklc-stdenv-linux.drv.chroot/nix/store/6v3y7s4q4wd16hsw393gjpxvcf9159bv-patch-shebangs.sh' to '/nix/store/6v3y7s4q4wd16hsw393gjpxvcf9159bv-patch-shebangs.sh': Operation not permitted
#
# There should be no reason why arion can't run without
# sandboxing, so please re-enable.
nix . useSandbox = false ;
2019-01-02 09:54:46 +01:00
virtualisation . writableStore = true ;
virtualisation . pathsInNixDB = [
# Pre-build the image because we don't want to build the world
# in the vm.
2019-10-03 21:30:14 +02:00
( preEval [ ../../examples/minimal/arion-compose.nix ] ) . config . out . dockerComposeYaml
( preEval [ ../../examples/full-nixos/arion-compose.nix ] ) . config . out . dockerComposeYaml
( preEval [ ../../examples/nixos-unit/arion-compose.nix ] ) . config . out . dockerComposeYaml
2021-01-21 23:53:37 +01:00
( preEval [ ../../examples/traefik/arion-compose.nix ] ) . config . out . dockerComposeYaml
2019-01-27 01:08:51 +01:00
pkgs . stdenv
2019-01-02 09:54:46 +01:00
] ;
2020-03-02 11:13:47 +01:00
2020-09-05 23:02:21 +02:00
virtualisation . memorySize = 1024 ;
2019-01-02 09:54:46 +01:00
} ;
testScript = ''
2021-01-21 23:54:53 +01:00
machine . fail ( " c u r l - - f a i l l o c a l h o s t : 8 0 0 0 " )
2020-03-02 11:13:47 +01:00
machine . succeed ( " d o c k e r - - v e r s i o n " )
# Tests
# - arion up
# - arion down
# - examples/minimal
with subtest ( " m i n i m a l " ) :
machine . succeed (
" r m - r f w o r k & & c p - f r T ${ ../../examples/minimal } w o r k & & c d w o r k & & N I X _ P A T H = n i x p k g s = ' ${ pkgs . path } ' a r i o n u p - d "
)
2021-01-21 23:54:53 +01:00
machine . wait_until_succeeds ( " c u r l - - f a i l l o c a l h o s t : 8 0 0 0 " )
2020-03-02 11:13:47 +01:00
machine . succeed (
" c d w o r k & & N I X _ P A T H = n i x p k g s = ' ${ pkgs . path } ' a r i o n d o w n "
)
2021-01-21 23:54:53 +01:00
machine . wait_until_fails ( " c u r l - - f a i l l o c a l h o s t : 8 0 0 0 " )
2020-03-02 11:13:47 +01:00
2021-04-20 10:31:09 +02:00
# Tests
# - examples/flake
# This _test_ doesn't work because flake-compat fetches the github
# tarballs without sha256 and/or Nix doesn't consult the store before
# downloading.
# See https://github.com/edolstra/flake-compat/pull/12
# with subtest("flake"):
# machine.succeed(
# "rm -rf work && cp -frT ''${../../examples/flake} work && cd work && NIX_PATH= arion up -d"
# )
# machine.wait_until_succeeds("curl --fail localhost:8000")
# machine.succeed("cd work && NIX_PATH= arion down")
# machine.wait_until_fails("curl --fail localhost:8000")
2020-03-02 11:13:47 +01:00
# Tests
# - arion exec
# - examples/full-nixos
with subtest ( " f u l l - n i x o s " ) :
machine . succeed (
" r m - r f w o r k & & c p - f r T ${ ../../examples/full-nixos } w o r k & & c d w o r k & & N I X _ P A T H = n i x p k g s = ' ${ pkgs . path } ' a r i o n u p - d "
)
2021-01-21 23:54:53 +01:00
machine . wait_until_succeeds ( " c u r l - - f a i l l o c a l h o s t : 8 0 0 0 " )
2020-03-02 11:13:47 +01:00
machine . succeed (
" " "
set - eux - o pipefail
cd work
export NIX_PATH = nixpkgs = ' $ { pkgs . path } '
echo ' target = world ; echo Hello $ target ; exit' \
| script ' arion exec webserver' \
| grep ' Hello world'
" " "
) ,
machine . succeed (
" c d w o r k & & N I X _ P A T H = n i x p k g s = ' ${ pkgs . path } ' a r i o n d o w n "
)
2021-01-21 23:54:53 +01:00
machine . wait_until_fails ( " c u r l - - f a i l l o c a l h o s t : 8 0 0 0 " )
2020-03-02 11:13:47 +01:00
# Tests
# - examples/nixos-unit
with subtest ( " n i x o s - u n i t " ) :
machine . succeed (
" r m - r f w o r k & & c p - f r T ${ ../../examples/nixos-unit } w o r k & & c d w o r k & & N I X _ P A T H = n i x p k g s = ' ${ pkgs . path } ' a r i o n u p - d "
)
2021-01-21 23:54:53 +01:00
machine . wait_until_succeeds ( " c u r l - - f a i l l o c a l h o s t : 8 0 0 0 " )
2020-03-02 11:13:47 +01:00
machine . succeed (
" c d w o r k & & N I X _ P A T H = n i x p k g s = ' ${ pkgs . path } ' a r i o n d o w n "
)
2021-01-21 23:54:53 +01:00
machine . wait_until_fails ( " c u r l - - f a i l l o c a l h o s t : 8 0 0 0 " )
2021-01-21 23:53:37 +01:00
# Tests
# - examples/traefik
# - labels
with subtest ( " t r a e f i k " ) :
machine . succeed (
" r m - r f w o r k & & c p - f r T ${ ../../examples/traefik } w o r k & & c d w o r k & & N I X _ P A T H = n i x p k g s = ' ${ pkgs . path } ' a r i o n u p - d "
)
2021-01-21 23:54:53 +01:00
machine . wait_until_succeeds ( " c u r l - - f a i l n i x - d o c s . l o c a l h o s t " )
2021-01-21 23:53:37 +01:00
machine . succeed (
" c d w o r k & & N I X _ P A T H = n i x p k g s = ' ${ pkgs . path } ' a r i o n d o w n "
)
2021-01-21 23:54:53 +01:00
machine . wait_until_fails ( " c u r l - - f a i l n i x - d o c s . l o c a l h o s t " )
2019-01-02 09:54:46 +01:00
'' ;
}