Skip to content

Commit

Permalink
rpm: reinforce test with systemd
Browse files Browse the repository at this point in the history
Signed-off-by: Daijiro Fukuda <fukuda@clear-code.com>
  • Loading branch information
daipom committed Jul 19, 2023
1 parent 670ce2d commit d5f5b84
Show file tree
Hide file tree
Showing 7 changed files with 234 additions and 54 deletions.
8 changes: 1 addition & 7 deletions .github/workflows/yum.yml
Original file line number Diff line number Diff line change
Expand Up @@ -105,11 +105,5 @@ jobs:
- uses: actions/download-artifact@master
with:
name: packages-${{ matrix.distribution }}
- name: Run VM
run: vagrant up ${{ matrix.distribution }}
- name: Run Test
run: |
vagrant \
ssh ${{ matrix.distribution }} \
-- \
/vagrant/fluent-package/yum/install-with-systemd-test.sh
run: fluent-package/yum/systemd-test/test.sh ${{ matrix.distribution }}
47 changes: 0 additions & 47 deletions fluent-package/yum/install-with-systemd-test.sh

This file was deleted.

31 changes: 31 additions & 0 deletions fluent-package/yum/systemd-test/commonvar.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
#!/bin/bash

distribution=$(cat /etc/system-release-cpe | awk '{print substr($0, index($1, "o"))}' | cut -d: -f2)
version=$(cat /etc/system-release-cpe | awk '{print substr($0, index($1, "o"))}' | cut -d: -f4)

case $distribution in
amazon)
case $version in
2)
DNF=yum
DISTRIBUTION_VERSION=$version
;;
2023)
DNF=dnf
DISTRIBUTION_VERSION=$version
;;
esac
;;
centos)
case $version in
7)
DNF=yum
DISTRIBUTION_VERSION=$version
;;
esac
;;
rocky|almalinux)
DNF=dnf
DISTRIBUTION_VERSION=$(echo $version | cut -d. -f1)
;;
esac
25 changes: 25 additions & 0 deletions fluent-package/yum/systemd-test/install-newly.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
#!/bin/bash

set -exu

. $(dirname $0)/commonvar.sh

sudo $DNF install -y \
/vagrant/${distribution}/${DISTRIBUTION_VERSION}/x86_64/Packages/fluent-package-[0-9]*.rpm

! systemctl status --no-pager fluentd
sudo systemctl enable --now fluentd
systemctl status --no-pager fluentd

sleep 3
! grep -q -e '\[warn\]' -e '\[error\]' -e '\[fatal\]' /var/log/fluent/fluentd.log

sudo $DNF remove -y fluent-package
sudo systemctl daemon-reload

# `sudo systemctl daemon-reload` clears the service completely.
# (The result of `systemctl status` will be `unfound`)
# Note: RPM does not leave links like `@/etc/systemd/system/fluentd.service`.
# (Different from deb)

! systemctl status --no-pager fluentd
38 changes: 38 additions & 0 deletions fluent-package/yum/systemd-test/test.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
#!/bin/bash

if [ -z $1 ]; then
echo "Error: Need to specify VM name in the Vagrantfile."
echo "Ex.) $ ./test.sh almalinux-9"
exit 1
fi

vm=$1
dir="/vagrant/fluent-package/yum/systemd-test"

vagrant status $vm | grep -E "^${vm}\s+not created (.*)$"
if [ $? -ne 0 ]; then
echo "Error: The VM already exists. Need to destroy it in advance with the following command."
echo "$ vagrant destroy $vm"
exit 1
fi

set -eu

test_filenames=(
install-newly.sh
update-from-v4.sh
)

for test_filename in ${test_filenames[@]}; do
echo -e "\nRun test: $test_filename\n"
vagrant up $vm
vagrant ssh $vm -- $dir/$test_filename
vagrant destroy -f $vm
# I want to use snapshot instead of destroying it for every test,
# but somehow, it will be often an error on GitHub Actions...
# $ vagrant snapshot save -f $vm after-setup
# (execute a test)
# $ vagrant snapshot restore $vm after-setup
done

echo -e "\nAll Success!\n"
79 changes: 79 additions & 0 deletions fluent-package/yum/systemd-test/update-from-v4.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
#!/bin/bash

set -exu

. $(dirname $0)/commonvar.sh

# Install v4
sudo rpm --import https://packages.treasuredata.com/GPG-KEY-td-agent
case ${distribution} in
amazon)
cat > td.repo <<'EOF';
[treasuredata]
name=TreasureData
baseurl=https://packages.treasuredata.com/4/amazon/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
EOF
sudo mv td.repo /etc/yum.repos.d/
;;
*)
cat > td.repo <<'EOF';
[treasuredata]
name=TreasureData
baseurl=https://packages.treasuredata.com/4/redhat/$releasever/$basearch
gpgcheck=1
gpgkey=https://packages.treasuredata.com/GPG-KEY-td-agent
EOF
sudo mv td.repo /etc/yum.repos.d/
;;
esac
sudo $DNF update -y
sudo $DNF install -y td-agent-4.5.0-1.*.x86_64

sudo systemctl enable --now td-agent
systemctl status --no-pager td-agent

# Install the current
sudo $DNF install -y \
/vagrant/${distribution}/${DISTRIBUTION_VERSION}/x86_64/Packages/fluent-package-[0-9]*.rpm

# Test: service status
sudo systemctl enable --now fluentd
systemctl status --no-pager fluentd
systemctl status --no-pager td-agent

# Test: config migration
test -L /etc/td-agent
test -e /etc/td-agent/td-agent.conf

# Test: log file migration
test -L /var/log/td-agent
test -e /var/log/td-agent/td-agent.log

# Test: environmental variables
pid=$(eval $(systemctl show fluentd --property=MainPID) && echo $MainPID)
env_vars=$(sudo sed -e 's/\x0/\n/g' /proc/$pid/environ)
test $(eval $env_vars && echo $HOME) = "/var/lib/fluent"
test $(eval $env_vars && echo $LOGNAME) = "fluentd"
test $(eval $env_vars && echo $USER) = "fluentd"
test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/fluent/td-agent.conf"
test $(eval $env_vars && echo $FLUENT_PACKAGE_LOG_FILE) = "/var/log/fluent/td-agent.log"
test $(eval $env_vars && echo $FLUENT_PLUGIN) = "/etc/fluent/plugin"
test $(eval $env_vars && echo $FLUENT_SOCKET) = "/var/run/fluent/fluentd.sock"

# Test: logs
sleep 3
! grep -q -e '\[warn\]' -e '\[error\]' -e '\[fatal\]' /var/log/fluent/td-agent.log

# Uninstall
sudo $DNF remove -y fluent-package
sudo systemctl daemon-reload

# `sudo systemctl daemon-reload` clears the service completely.
# (The result of `systemctl status` will be `unfound`)
# Note: RPM does not leave links like `@/etc/systemd/system/fluentd.service`.
# (Different from deb)

! systemctl status --no-pager td-agent
! systemctl status --no-pager fluentd
60 changes: 60 additions & 0 deletions fluent-package/yum/systemd-test/update-to-next-version.sh
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
#!/bin/bash

set -exu

. $(dirname $0)/commonvar.sh

# Install the current
package="/vagrant/${distribution}/${DISTRIBUTION_VERSION}/x86_64/Packages/fluent-package-[0-9]*.rpm"
sudo $DNF install -y $package
sudo systemctl enable --now fluentd
systemctl status --no-pager fluentd

# Make a dummy pacakge for the next version
sudo $DNF install -y epel-release
sudo $DNF install -y rpmrebuild
# Example: "Release : 1.el9"
release_line=$(rpm -qip $package | grep "Release*:*")
# Example: "1"
release_ver=$(echo $release_line | sed -E "s/.*([0-9]+)\.(.+)/\1/g")
# Example: "2.el9"
next_release=$(echo $release_line | sed -E "s/.*([0-9]+)\.(.+)/$(($release_ver+1)).\2/g")
rpmrebuild --release=$next_release --package $package
next_package=$(find rpmbuild -name "*.rpm")

# Install the dummy package of the next version
sudo $DNF install -y ./$next_package
sudo systemctl enable --now fluentd
systemctl status --no-pager fluentd

# Test: migration process from v4 must not be done
! test -e /etc/td-agent
! test -e /etc/fluent/td-agent.conf
! test -e /var/log/td-agent
! test -e /var/log/fluent/td-agent.log

# Test: environmental variables
pid=$(eval $(systemctl show fluentd --property=MainPID) && echo $MainPID)
env_vars=$(sudo sed -e 's/\x0/\n/g' /proc/$pid/environ)
test $(eval $env_vars && echo $HOME) = "/var/lib/fluent"
test $(eval $env_vars && echo $LOGNAME) = "fluentd"
test $(eval $env_vars && echo $USER) = "fluentd"
test $(eval $env_vars && echo $FLUENT_CONF) = "/etc/fluent/fluentd.conf"
test $(eval $env_vars && echo $FLUENT_PACKAGE_LOG_FILE) = "/var/log/fluent/fluentd.log"
test $(eval $env_vars && echo $FLUENT_PLUGIN) = "/etc/fluent/plugin"
test $(eval $env_vars && echo $FLUENT_SOCKET) = "/var/run/fluent/fluentd.sock"

# Test: logs
sleep 3
! grep -q -e '\[warn\]' -e '\[error\]' -e '\[fatal\]' /var/log/fluent/fluentd.log

# Uninstall
sudo apt remove -y fluent-package
sudo systemctl daemon-reload

# `sudo systemctl daemon-reload` clears the service completely.
# (The result of `systemctl status` will be `unfound`)
# Note: RPM does not leave links like `@/etc/systemd/system/fluentd.service`.
# (Different from deb)

! systemctl status --no-pager fluentd

0 comments on commit d5f5b84

Please sign in to comment.