Skip to content

Commit

Permalink
tests: add new spread based snapd integration test
Browse files Browse the repository at this point in the history
These tests integrate into the GH workflow and run snapd and dbus
based integration tests.
  • Loading branch information
mvo5 committed Feb 28, 2023
1 parent 6f02aea commit ef2fe25
Show file tree
Hide file tree
Showing 5 changed files with 143 additions and 1 deletion.
21 changes: 21 additions & 0 deletions .github/workflows/spread.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
name: Run spread

on:
push:
branches: [ main ]
pull_request:
branches: [ main ]

jobs:
spread:
runs-on: ubuntu-latest
steps:
- uses: canonical/setup-lxd@ea57509243d3cf39f8ab926e021bb353947b01b5
- uses: actions/checkout@v2
- name: Install spread
run: |
go install github.com/snapcore/spread/cmd/spread@latest
- name: Run the spread test inside LXD
run: |
~/go/bin/spread -v lxd:
45 changes: 45 additions & 0 deletions spread.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
project: netplan

backends:
lxd:
systems: [ubuntu-22.04]
qemu:
systems:
- ubuntu-22.04-64:
username: ubuntu
password: ubuntu

suites:
tests/spread/:
summary: integration tests

path: /home/tests

prepare: |
# FIXME: remove after legacy symlink in 107 gets dropped (see meson.build)
# This is needed as the git netplan puts a symlink to /lib/netplan/generate
# but the package has the real generate there
rm -f /lib/netplan/generate
# FIXME: having the debian packging available would allow "apt
# build-dep -y ./" would make this easier :)
apt update -qq
apt install -y build-essential meson pkg-config libyaml-dev \
libglib2.0-dev uuid-dev python3 libsystemd-dev pandoc python3-pytest \
python3-coverage libcmocka-dev python3-rich
# install, a bit ugly but this is a container (did I mention the packaging?)
meson setup build --prefix=/usr
meson compile -C build
# FIXME: enable, this crashes right now with:
# https://paste.ubuntu.com/p/qRnJvjyddN/
#meson test -C build --verbose
meson install -C build --destdir=/
# set some defaults for the tests
cat > /etc/netplan/0-snapd-defaults.yaml <<'EOF'
network:
version: 2
bridges:
br54:
dhcp4: true
EOF
echo "Precondition check, the basics work"
netplan get bridges.br54.dhcp4 | MATCH true
2 changes: 1 addition & 1 deletion src/meson.build
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,6 @@ meson.add_install_script(meson_make_symlink,
# It's only around for legacy reasons, see netplan/cli/utils.py: get_generator_path()
install_symlink(
'generate',
pointing_to: join_paths('..', '..') + join_paths(get_option('prefix'), libexec_netplan, 'generate'),
pointing_to: join_paths('..', '..', '..') + join_paths(get_option('prefix'), libexec_netplan, 'generate'),
install_dir: join_paths('/', 'lib', 'netplan'))

28 changes: 28 additions & 0 deletions tests/spread/dbus/task.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
summary: Check that the dbus integration works

execute: |
# see the basics work
netplan get bridges.br54.dhcp4 | MATCH true
# TODO: actually use busctl
obj_path=$(dbus-send --system --print-reply --type=method_call \
--dest=io.netplan.Netplan /io/netplan/Netplan \
io.netplan.Netplan.Config|tail -1 | sed 's/.*"\(.*\)".*/\1/' )
dbus-send --print-reply --system --type=method_call \
--dest=io.netplan.Netplan "$obj_path" \
io.netplan.Netplan.Config.Get | MATCH "version: 2"
# and updating via dbus netplan works
dbus-send --print-reply --system --type=method_call \
--dest=io.netplan.Netplan "$obj_path" \
io.netplan.Netplan.Config.Set \
string:bridges.br54.dhcp4=false string:90-test
# not applied yet
test ! -e /etc/netplan/90-test.yaml
netplan get bridges.br54.dhcp4 | MATCH true
# apply
dbus-send --print-reply --system --type=method_call \
--dest=io.netplan.Netplan "$obj_path" \
io.netplan.Netplan.Config.Apply
# and now it's active
test -e /etc/netplan/90-test.yaml
netplan get bridges.br54.dhcp4 | MATCH false
48 changes: 48 additions & 0 deletions tests/spread/snapd-integration/task.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
summary: Check that the snapd/netplan integration works

prepare: |
# put snapd in debug mode for good logs
mkdir -p /etc/systemd/system/snapd.service.d
cat <<EOF > /etc/systemd/system/snapd.service.d/local.conf
[Service]
Environment=SNAPD_DEBUG=1
EOF
systemctl daemon-reload
# install snapd if needed (should be installed on most lxd images)
if ! dpkg -l snapd >/dev/null; then
apt install -y snapd
echo "apt autoremove -y snapd" >> defered.cleanup
fi
# fake running on core (netplan only enabled on ubuntu core)
# FIXME: find a more offical way, this if fugly
cp /etc/os-release /etc/os-release.save
sed -i s/ID=ubuntu/ID=ubuntu-core/ /etc/os-release
M=/var/lib/snapd/assertions/asserts-v0/model/16/generic/generic-classic/active
cp "$M" model.save
snap known --remote model series=16 brand-id=canonical model=ubuntu-core-18-amd64 > model.fake
mv model.fake "$M"
# restart snapd
systemctl restart snapd
restore: |
mv /etc/os-release.save /etc/os-release
mv model.save /var/lib/snapd/assertions/asserts-v0/model/16/generic/generic-classic/active
sudo systemctl restart snapd
if [ -e defered.cleanup ]; then
sh -ex defered.cleanup
fi
rm -f model.*
debug: |
journalctl -u snapd
snap get system -d
snap version
execute: |
# see the basics work
netplan get bridges.br54.dhcp4 | MATCH true
snap get system system.network.netplan.network.bridges.br54.dhcp4 | MATCH true
# and updating netplan works
snap set system system.network.netplan.network.bridges.br54.dhcp4=false
netplan get bridges.br54.dhcp4 | MATCH false
snap get system system.network.netplan.network.bridges.br54.dhcp4 | MATCH false

0 comments on commit ef2fe25

Please sign in to comment.