mirror of
https://github.com/nix-community/nix-on-droid.git
synced 2025-11-08 19:46:07 +01:00
tests/on-device: add
This commit is contained in:
parent
b775b46a7c
commit
343ec2ccc2
13 changed files with 305 additions and 2 deletions
|
|
@ -1,6 +1,6 @@
|
||||||
#!@bash@/bin/bash
|
#!@bash@/bin/bash
|
||||||
|
|
||||||
# Copyright (c) 2019-2020, see AUTHORS. Licensed under MIT License, see LICENSE.
|
# Copyright (c) 2019-2021, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
|
||||||
PATH=@coreutils@/bin:@nix@/bin:${PATH:+:}$PATH
|
PATH=@coreutils@/bin:@nix@/bin:${PATH:+:}$PATH
|
||||||
|
|
||||||
|
|
@ -73,6 +73,13 @@ function doHelp() {
|
||||||
echo " Switch generation and activate configuration"
|
echo " Switch generation and activate configuration"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function doOnDeviceTest() {
|
||||||
|
# This is for maintainer convenience only, see tests/on-device/.run.sh
|
||||||
|
nix-channel --update nix-on-droid
|
||||||
|
exec "$(nix-instantiate --eval --expr \
|
||||||
|
"<nix-on-droid/tests/on-device/.run.sh>")"
|
||||||
|
}
|
||||||
|
|
||||||
function doSwitch() {
|
function doSwitch() {
|
||||||
echo "Building activation package..."
|
echo "Building activation package..."
|
||||||
nix build \
|
nix build \
|
||||||
|
|
@ -114,7 +121,7 @@ while [[ $# -gt 0 ]]; do
|
||||||
opt="$1"
|
opt="$1"
|
||||||
shift
|
shift
|
||||||
case $opt in
|
case $opt in
|
||||||
build|generations|help|rollback|switch|switch-generation)
|
build|generations|help|rollback|switch|switch-generation|on-device-test)
|
||||||
COMMAND="$opt"
|
COMMAND="$opt"
|
||||||
;;
|
;;
|
||||||
-f|--file)
|
-f|--file)
|
||||||
|
|
@ -178,6 +185,9 @@ case $COMMAND in
|
||||||
help)
|
help)
|
||||||
doHelp
|
doHelp
|
||||||
;;
|
;;
|
||||||
|
on-device-test)
|
||||||
|
doOnDeviceTest
|
||||||
|
;;
|
||||||
rollback)
|
rollback)
|
||||||
if [[ $(readlink $PROFILE_DIRECTORY) =~ ^nix-on-droid-([0-9]+)-link$ ]]; then
|
if [[ $(readlink $PROFILE_DIRECTORY) =~ ^nix-on-droid-([0-9]+)-link$ ]]; then
|
||||||
doSwitchGeneration $((${BASH_REMATCH[1]} - 1))
|
doSwitchGeneration $((${BASH_REMATCH[1]} - 1))
|
||||||
|
|
|
||||||
32
tests/on-device/.run.sh
Executable file
32
tests/on-device/.run.sh
Executable file
|
|
@ -0,0 +1,32 @@
|
||||||
|
#!/usr/bin/env nix-shell
|
||||||
|
#! nix-shell -i bash -p bats
|
||||||
|
|
||||||
|
# Copyright (c) 2019-2021, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
|
||||||
|
set -ueo pipefail
|
||||||
|
|
||||||
|
SCRIPT_DIR="$(dirname "$(readlink -f "$0")")"
|
||||||
|
SELF_TEST_DIR="$HOME/.cache/nix-on-droid-self-test"
|
||||||
|
CONFIRMATION_FILE="$SELF_TEST_DIR/confirmation-granted"
|
||||||
|
mkdir -p "$SELF_TEST_DIR"
|
||||||
|
|
||||||
|
if [[ ! -e "$CONFIRMATION_FILE" ]]; then
|
||||||
|
echo 'These semi-automated tests are destructive!'
|
||||||
|
echo 'They are meant to be executed by maintainers on a clean install.'
|
||||||
|
echo 'Proceeding will wreck your installation.'
|
||||||
|
echo 'Do you still wish to proceed?'
|
||||||
|
echo -n '(type "I do" to proceed, anything else to abort) > '
|
||||||
|
read -r CONFIRMATION
|
||||||
|
if [[ "$CONFIRMATION" != 'I do' ]]; then echo 'Cool, aborting.'; exit 7; fi
|
||||||
|
touch "$CONFIRMATION_FILE"
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [[ ! -d ~/.config.bak ]]; then
|
||||||
|
mv ~/.config ~/.config.bak
|
||||||
|
cp -r ~/.config.bak ~/.config
|
||||||
|
fi
|
||||||
|
|
||||||
|
bats "${SCRIPT_DIR}" --verbose-run --timing
|
||||||
|
|
||||||
|
rm -rf ~/.config
|
||||||
|
mv ~/.config.bak ~/.config
|
||||||
7
tests/on-device/config-default.bats
Normal file
7
tests/on-device/config-default.bats
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Copyright (c) 2019-2021, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
|
||||||
|
load lib
|
||||||
|
|
||||||
|
@test 'default config can be switched into' {
|
||||||
|
switch_to_default_config
|
||||||
|
}
|
||||||
39
tests/on-device/config-flake-h-m.bats
Normal file
39
tests/on-device/config-flake-h-m.bats
Normal file
|
|
@ -0,0 +1,39 @@
|
||||||
|
# Copyright (c) 2019-2021, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
|
||||||
|
load lib
|
||||||
|
|
||||||
|
@test 'flake + h-m + #134 overlays case work' {
|
||||||
|
# start from a known baseline
|
||||||
|
switch_to_default_config
|
||||||
|
assert_command vi
|
||||||
|
assert_no_command dash zsh
|
||||||
|
|
||||||
|
# set up / build / activate the configuration
|
||||||
|
cat "$ON_DEVICE_TESTS_DIR/config-flake-h-m.cfg.nix" \
|
||||||
|
> ~/.config/nixpkgs/nix-on-droid.nix
|
||||||
|
nix-shell -p gnused --run \
|
||||||
|
"sed 's|<<FLAKE_URL>>|$FLAKE_URL|g' \
|
||||||
|
< '$ON_DEVICE_TESTS_DIR/config-flake-h-m.flake.nix' \
|
||||||
|
> ~/.config/nixpkgs/flake.nix"
|
||||||
|
pushd ~/.config/nixpkgs
|
||||||
|
nix-shell -p nixFlakes --run \
|
||||||
|
'nix build \
|
||||||
|
--extra-experimental-features nix-command \
|
||||||
|
--extra-experimental-features flakes \
|
||||||
|
--impure .#nix-on-droid'
|
||||||
|
result/activate
|
||||||
|
popd
|
||||||
|
|
||||||
|
# test presence of several crucial commands
|
||||||
|
assert_command nix-on-droid nix-shell bash
|
||||||
|
|
||||||
|
# test that both zsh (system) and dash (user) have appeared in $PATH
|
||||||
|
assert_command dash zsh
|
||||||
|
assert_no_command vi
|
||||||
|
|
||||||
|
# check that reverting works too
|
||||||
|
rm -f ~/.config/nix/nix.conf ~/.config/nixpkgs/flake.nix
|
||||||
|
switch_to_default_config
|
||||||
|
assert_command vi
|
||||||
|
assert_no_command dash zsh
|
||||||
|
}
|
||||||
18
tests/on-device/config-flake-h-m.cfg.nix
Normal file
18
tests/on-device/config-flake-h-m.cfg.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
system.stateVersion = "21.11";
|
||||||
|
|
||||||
|
# no nixpkgs.overlays defined
|
||||||
|
environment.packages = with pkgs; [ zsh ];
|
||||||
|
|
||||||
|
home-manager.config =
|
||||||
|
{ pkgs, ... }:
|
||||||
|
{
|
||||||
|
home.stateVersion = "21.11";
|
||||||
|
|
||||||
|
nixpkgs.overlays = config.nixpkgs.overlays;
|
||||||
|
home.packages = with pkgs; [ dash ];
|
||||||
|
};
|
||||||
|
nixpkgs.overlays = [];
|
||||||
|
}
|
||||||
19
tests/on-device/config-flake-h-m.flake.nix
Normal file
19
tests/on-device/config-flake-h-m.flake.nix
Normal file
|
|
@ -0,0 +1,19 @@
|
||||||
|
{
|
||||||
|
description = "nix-on-droid configuration";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/release-21.11";
|
||||||
|
home-manager.url = "github:nix-community/home-manager/release-21.11";
|
||||||
|
nix-on-droid.url = "<<FLAKE_URL>>";
|
||||||
|
|
||||||
|
home-manager.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
nix-on-droid.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
nix-on-droid.inputs.home-manager.follows = "home-manager";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { nix-on-droid, ... }: {
|
||||||
|
nix-on-droid = (nix-on-droid.lib.aarch64-linux.nix-on-droid {
|
||||||
|
config = /data/data/com.termux.nix/files/home/.config/nixpkgs/nix-on-droid.nix;
|
||||||
|
}).activationPackage;
|
||||||
|
};
|
||||||
|
}
|
||||||
43
tests/on-device/config-flake.bats
Normal file
43
tests/on-device/config-flake.bats
Normal file
|
|
@ -0,0 +1,43 @@
|
||||||
|
# Copyright (c) 2019-2021, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
|
||||||
|
load lib
|
||||||
|
|
||||||
|
@test 'flake example works' {
|
||||||
|
# start from a known baseline
|
||||||
|
switch_to_default_config
|
||||||
|
assert_command vi
|
||||||
|
assert_no_command dash unzip
|
||||||
|
|
||||||
|
nix-shell -p gnused --run \
|
||||||
|
"sed \
|
||||||
|
-e s/vim/nano/ \
|
||||||
|
-e s/#unzip/unzip/ \
|
||||||
|
< '$CHANNEL_DIR/modules/environment/login/nix-on-droid.nix.default' \
|
||||||
|
> ~/.config/nixpkgs/nix-on-droid.nix"
|
||||||
|
|
||||||
|
nix-shell -p gnused --run \
|
||||||
|
"sed 's|<<FLAKE_URL>>|$FLAKE_URL|g' \
|
||||||
|
< '$ON_DEVICE_TESTS_DIR/config-flake.nix' \
|
||||||
|
> ~/.config/nixpkgs/flake.nix"
|
||||||
|
|
||||||
|
# this is more cumbersome than options,
|
||||||
|
# but this is what we recommend to users, so taking the hard way
|
||||||
|
echo "experimental-features = nix-command flakes" >> ~/.config/nix/nix.conf
|
||||||
|
pushd ~/.config/nixpkgs
|
||||||
|
nix-shell -p nixFlakes --run 'nix build .#nix-on-droid --impure'
|
||||||
|
result/activate
|
||||||
|
popd
|
||||||
|
|
||||||
|
# test presence of several crucial commands
|
||||||
|
assert_command nix-on-droid nix-shell bash
|
||||||
|
|
||||||
|
# test that nano has replaced vi and unzip has appeared in $PATH
|
||||||
|
assert_command nano unzip
|
||||||
|
assert_no_command vi
|
||||||
|
|
||||||
|
# check that reverting works too
|
||||||
|
rm -f ~/.config/nix/nix.conf ~/.config/nixpkgs/flake.nix
|
||||||
|
switch_to_default_config
|
||||||
|
assert_command vi
|
||||||
|
assert_no_command dash unzip
|
||||||
|
}
|
||||||
15
tests/on-device/config-flake.nix
Normal file
15
tests/on-device/config-flake.nix
Normal file
|
|
@ -0,0 +1,15 @@
|
||||||
|
{
|
||||||
|
description = "nix-on-droid configuration";
|
||||||
|
|
||||||
|
inputs = {
|
||||||
|
nixpkgs.url = "github:NixOS/nixpkgs/release-21.11";
|
||||||
|
nix-on-droid.url = "<<FLAKE_URL>>";
|
||||||
|
nix-on-droid.inputs.nixpkgs.follows = "nixpkgs";
|
||||||
|
};
|
||||||
|
|
||||||
|
outputs = { nix-on-droid, ... }: {
|
||||||
|
nix-on-droid = (nix-on-droid.lib.aarch64-linux.nix-on-droid {
|
||||||
|
config = /data/data/com.termux.nix/files/home/.config/nixpkgs/nix-on-droid.nix;
|
||||||
|
}).activationPackage;
|
||||||
|
};
|
||||||
|
}
|
||||||
34
tests/on-device/config-h-m.bats
Normal file
34
tests/on-device/config-h-m.bats
Normal file
|
|
@ -0,0 +1,34 @@
|
||||||
|
# Copyright (c) 2019-2021, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
|
||||||
|
load lib
|
||||||
|
|
||||||
|
@test 'using home-manager works' {
|
||||||
|
# start from a known baseline
|
||||||
|
switch_to_default_config
|
||||||
|
assert_command vi
|
||||||
|
assert_no_command dash
|
||||||
|
! [[ -e ~/.config/example ]]
|
||||||
|
|
||||||
|
nix-channel --add https://github.com/rycee/home-manager/archive/release-21.11.tar.gz home-manager
|
||||||
|
nix-channel --update
|
||||||
|
cp "$ON_DEVICE_TESTS_DIR/config-h-m.nix" ~/.config/nixpkgs/nix-on-droid.nix
|
||||||
|
nix-on-droid switch
|
||||||
|
|
||||||
|
# test config file
|
||||||
|
[[ -e ~/.config/example ]]
|
||||||
|
[[ "$(cat ~/.config/example)" == 'example config' ]]
|
||||||
|
|
||||||
|
# test common commands presence
|
||||||
|
assert_command nix-on-droid nix-shell bash
|
||||||
|
|
||||||
|
# test that vi has disappeared
|
||||||
|
assert_no_command vi
|
||||||
|
|
||||||
|
# test dash has appeared and works
|
||||||
|
assert_command dash
|
||||||
|
run dash -c 'echo success; exit 42'
|
||||||
|
[[ "$output" == success ]]
|
||||||
|
[[ "$status" == 42 ]]
|
||||||
|
|
||||||
|
switch_to_default_config
|
||||||
|
}
|
||||||
18
tests/on-device/config-h-m.nix
Normal file
18
tests/on-device/config-h-m.nix
Normal file
|
|
@ -0,0 +1,18 @@
|
||||||
|
{ pkgs, config, ... }:
|
||||||
|
|
||||||
|
{
|
||||||
|
system.stateVersion = "21.11";
|
||||||
|
|
||||||
|
home-manager.config =
|
||||||
|
{ pkgs, lib, ... }:
|
||||||
|
{
|
||||||
|
home.stateVersion = "21.11";
|
||||||
|
nixpkgs = { inherit (config.nixpkgs) overlays; };
|
||||||
|
|
||||||
|
# example config
|
||||||
|
xdg.configFile.example.text = "example config";
|
||||||
|
|
||||||
|
# example package
|
||||||
|
home.packages = [ pkgs.dash ];
|
||||||
|
};
|
||||||
|
}
|
||||||
14
tests/on-device/gnumake.bats
Normal file
14
tests/on-device/gnumake.bats
Normal file
|
|
@ -0,0 +1,14 @@
|
||||||
|
# Copyright (c) 2019-2021, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
|
||||||
|
@test 'GNU Make is functional' {
|
||||||
|
TEMPDIR=/tmp/.tmp-gnumake.$$
|
||||||
|
mkdir -p "$TEMPDIR"
|
||||||
|
echo -e 'x:\n\techo desired output > x' > "$TEMPDIR/Makefile"
|
||||||
|
nix-shell -p gnumake --run "make -C $TEMPDIR x"
|
||||||
|
[[ -e "$TEMPDIR/x" ]]
|
||||||
|
[[ "$(cat "$TEMPDIR/x")" == 'desired output' ]]
|
||||||
|
}
|
||||||
|
|
||||||
|
teardown() {
|
||||||
|
rm -r "$TEMPDIR"
|
||||||
|
}
|
||||||
7
tests/on-device/hello.bats
Normal file
7
tests/on-device/hello.bats
Normal file
|
|
@ -0,0 +1,7 @@
|
||||||
|
# Copyright (c) 2019-2021, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
|
||||||
|
@test 'GNU Hello is functional' {
|
||||||
|
out=$(nix-shell -p hello --run hello)
|
||||||
|
[[ "$out" == 'Hello, world!' ]]
|
||||||
|
[[ "$status" -eq 0 ]]
|
||||||
|
}
|
||||||
47
tests/on-device/lib.bash
Normal file
47
tests/on-device/lib.bash
Normal file
|
|
@ -0,0 +1,47 @@
|
||||||
|
# Copyright (c) 2019-2021, see AUTHORS. Licensed under MIT License, see LICENSE.
|
||||||
|
|
||||||
|
setup() {
|
||||||
|
if [[ -z "$ON_DEVICE_TESTS_SETUP" ]]; then
|
||||||
|
CHANNEL_DIR="$(nix-instantiate --eval --expr '<nix-on-droid>')"
|
||||||
|
ON_DEVICE_TESTS_DIR="$CHANNEL_DIR/tests/on-device"
|
||||||
|
|
||||||
|
while read -r channel_line; do
|
||||||
|
if [[ "$channel_line" =~ nix-on-droid[[:space:]]+(.*) ]]; then
|
||||||
|
CHANNEL_URL=${BASH_REMATCH[1]}
|
||||||
|
fi
|
||||||
|
done < <(nix-channel --list)
|
||||||
|
echo "parsing detected channel url: $CHANNEL_URL"
|
||||||
|
[[ "$CHANNEL_URL" =~ https://github.com/(.+)/(.+)/archive/(.+)\.tar\.gz ]]
|
||||||
|
REPO_USER=${BASH_REMATCH[1]}
|
||||||
|
REPO_NAME=${BASH_REMATCH[2]}
|
||||||
|
REPO_BRANCH=${BASH_REMATCH[3]}
|
||||||
|
FLAKE_URL=github:$REPO_USER/$REPO_NAME/$REPO_BRANCH
|
||||||
|
echo "autodetected flake url: $FLAKE_URL"
|
||||||
|
|
||||||
|
ON_DEVICE_TESTS_SETUP=1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_command() {
|
||||||
|
for cmd_name; do
|
||||||
|
command -v "$cmd_name"
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
assert_no_command() {
|
||||||
|
for cmd_name; do
|
||||||
|
run command -v "$cmd_name"
|
||||||
|
[[ "$status" == 1 ]]
|
||||||
|
done
|
||||||
|
}
|
||||||
|
|
||||||
|
switch_to_default_config() {
|
||||||
|
rm -rf ~/.config/nix ~/.config/nixpkgs
|
||||||
|
mkdir -p ~/.config/nix ~/.config/nixpkgs
|
||||||
|
cat "$CHANNEL_DIR/modules/environment/login/nix-on-droid.nix.default" \
|
||||||
|
> ~/.config/nixpkgs/nix-on-droid.nix
|
||||||
|
nix-on-droid switch
|
||||||
|
|
||||||
|
assert_command nix-on-droid nix-shell bash vi find
|
||||||
|
assert_no_command dash xonsh zsh
|
||||||
|
}
|
||||||
Loading…
Add table
Add a link
Reference in a new issue