From a81d0bc3a33d34a42258939c0fe5f8cea5a8c03d Mon Sep 17 00:00:00 2001 From: Ettore Di Giacinto Date: Sat, 2 Jan 2021 21:28:54 +0100 Subject: [PATCH] Build assertions when swapping When we are swapping packages, we do not run the solver to gather things to install, but we trust the given list when calling computeInstall. In this case, the assertion returned by computeInstall is empty, as we force l.Options.NoDeps. This change generates the assertion list while calling computeSwap so it's available later when we call ExecuteFinalizer. --- pkg/installer/installer.go | 6 +- .../finalizers_upgrade/alpine old/build.yaml | 6 ++ .../alpine old/definition.yaml | 3 + .../finalizers_upgrade/alpine/build.yaml | 6 ++ .../finalizers_upgrade/alpine/definition.yaml | 3 + .../finalizers_upgrade/alpine/finalize.yaml | 2 + tests/integration/07_finalizer_upgrade.sh | 86 +++++++++++++++++++ 7 files changed, 111 insertions(+), 1 deletion(-) create mode 100644 tests/fixtures/finalizers_upgrade/alpine old/build.yaml create mode 100644 tests/fixtures/finalizers_upgrade/alpine old/definition.yaml create mode 100644 tests/fixtures/finalizers_upgrade/alpine/build.yaml create mode 100644 tests/fixtures/finalizers_upgrade/alpine/definition.yaml create mode 100644 tests/fixtures/finalizers_upgrade/alpine/finalize.yaml create mode 100755 tests/integration/07_finalizer_upgrade.sh diff --git a/pkg/installer/installer.go b/pkg/installer/installer.go index 61078971..95bbb119 100644 --- a/pkg/installer/installer.go +++ b/pkg/installer/installer.go @@ -255,7 +255,11 @@ func (l *LuetInstaller) computeSwap(syncedRepos Repositories, toRemove pkg.Packa } } - return l.computeInstall(syncedRepos, toInstall, systemAfterChanges) + match, packages, assertions, allRepos, err := l.computeInstall(syncedRepos, toInstall, systemAfterChanges) + for _, p := range toInstall { + assertions = append(assertions, solver.PackageAssert{Package: p.(*pkg.DefaultPackage), Value: true}) + } + return match, packages, assertions, allRepos, err } func (l *LuetInstaller) swap(syncedRepos Repositories, toRemove pkg.Packages, toInstall pkg.Packages, s *System, forceNodeps bool) error { diff --git a/tests/fixtures/finalizers_upgrade/alpine old/build.yaml b/tests/fixtures/finalizers_upgrade/alpine old/build.yaml new file mode 100644 index 00000000..54401d75 --- /dev/null +++ b/tests/fixtures/finalizers_upgrade/alpine old/build.yaml @@ -0,0 +1,6 @@ +image: "alpine" +unpack: true +excludes: + - /sys/.* + - /proc/.* + - /etc/.* \ No newline at end of file diff --git a/tests/fixtures/finalizers_upgrade/alpine old/definition.yaml b/tests/fixtures/finalizers_upgrade/alpine old/definition.yaml new file mode 100644 index 00000000..b73855a8 --- /dev/null +++ b/tests/fixtures/finalizers_upgrade/alpine old/definition.yaml @@ -0,0 +1,3 @@ +category: "seed" +name: "alpine" +version: "0.9" diff --git a/tests/fixtures/finalizers_upgrade/alpine/build.yaml b/tests/fixtures/finalizers_upgrade/alpine/build.yaml new file mode 100644 index 00000000..54401d75 --- /dev/null +++ b/tests/fixtures/finalizers_upgrade/alpine/build.yaml @@ -0,0 +1,6 @@ +image: "alpine" +unpack: true +excludes: + - /sys/.* + - /proc/.* + - /etc/.* \ No newline at end of file diff --git a/tests/fixtures/finalizers_upgrade/alpine/definition.yaml b/tests/fixtures/finalizers_upgrade/alpine/definition.yaml new file mode 100644 index 00000000..cf8247ba --- /dev/null +++ b/tests/fixtures/finalizers_upgrade/alpine/definition.yaml @@ -0,0 +1,3 @@ +category: "seed" +name: "alpine" +version: "1.0" diff --git a/tests/fixtures/finalizers_upgrade/alpine/finalize.yaml b/tests/fixtures/finalizers_upgrade/alpine/finalize.yaml new file mode 100644 index 00000000..2e46c23e --- /dev/null +++ b/tests/fixtures/finalizers_upgrade/alpine/finalize.yaml @@ -0,0 +1,2 @@ +install: +- echo "$0" > /tmp/foo \ No newline at end of file diff --git a/tests/integration/07_finalizer_upgrade.sh b/tests/integration/07_finalizer_upgrade.sh new file mode 100755 index 00000000..d35239be --- /dev/null +++ b/tests/integration/07_finalizer_upgrade.sh @@ -0,0 +1,86 @@ +#!/bin/bash + +export LUET_NOLOCK=true + +oneTimeSetUp() { +export tmpdir="$(mktemp -d)" +} + +oneTimeTearDown() { + rm -rf "$tmpdir" +} + +testBuild() { + mkdir $tmpdir/testbuild + luet build --tree "$ROOT_DIR/tests/fixtures/finalizers_upgrade" --destination $tmpdir/testbuild --compression gzip --all + buildst=$? + assertEquals 'builds successfully' "$buildst" "0" + assertTrue 'create package' "[ -e '$tmpdir/testbuild/alpine-seed-1.0.package.tar.gz' ]" + assertTrue 'create package' "[ -e '$tmpdir/testbuild/alpine-seed-0.9.package.tar.gz' ]" +} + +testRepo() { + assertTrue 'no repository' "[ ! -e '$tmpdir/testbuild/repository.yaml' ]" + luet create-repo --tree "$ROOT_DIR/tests/fixtures/finalizers_upgrade" \ + --output $tmpdir/testbuild \ + --packages $tmpdir/testbuild \ + --name "test" \ + --descr "Test Repo" \ + --urls $tmpdir/testrootfs \ + --type disk > /dev/null + + createst=$? + assertEquals 'create repo successfully' "$createst" "0" + assertTrue 'create repository' "[ -e '$tmpdir/testbuild/repository.yaml' ]" +} + +testConfig() { + mkdir $tmpdir/testrootfs + cat < $tmpdir/luet.yaml +general: + debug: true +system: + rootfs: $tmpdir/testrootfs + database_path: "/" + database_engine: "boltdb" +config_from_host: true +repositories: + - name: "main" + type: "disk" + enable: true + urls: + - "$tmpdir/testbuild" +EOF + luet config --config $tmpdir/luet.yaml + res=$? + assertEquals 'config test successfully' "$res" "0" +} + +testInstall() { + luet install -y --config $tmpdir/luet.yaml seed/alpine@0.9 + #luet install -y --config $tmpdir/luet.yaml test/c-1.0 > /dev/null + installst=$? + assertEquals 'install test successfully' "$installst" "0" + assertTrue 'package installed' "[ -e '$tmpdir/testrootfs/bin/busybox' ]" + assertTrue 'finalizer does not run' "[ ! -e '$tmpdir/testrootfs/tmp/foo' ]" +} + + +testUpgrade() { + luet upgrade -y --config $tmpdir/luet.yaml + installst=$? + assertEquals 'install test successfully' "$installst" "0" + assertTrue 'package installed' "[ -e '$tmpdir/testrootfs/bin/busybox' ]" + assertTrue 'finalizer runs' "[ -e '$tmpdir/testrootfs/tmp/foo' ]" + assertEquals 'finalizer printed used shell' "$(cat $tmpdir/testrootfs/tmp/foo)" 'sh' +} + +testCleanup() { + luet cleanup --config $tmpdir/luet.yaml + installst=$? + assertEquals 'install test successfully' "$installst" "0" +} + +# Load shUnit2. +. "$ROOT_DIR/tests/integration/shunit2"/shunit2 +