| #cloud-config |
| # |
| # Copyright 2020 Google LLC |
| # |
| # Licensed under the Apache License, Version 2.0 (the "License"); |
| # you may not use this file except in compliance with the License. |
| # You may obtain a copy of the License at |
| # |
| # http://www.apache.org/licenses/LICENSE-2.0 |
| # |
| # Unless required by applicable law or agreed to in writing, software |
| # distributed under the License is distributed on an "AS IS" BASIS, |
| # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| # See the License for the specific language governing permissions and |
| # limitations under the License. |
| |
| write_files: |
| - path: /tmp/preloader-test/test.sh |
| permissions: 0644 |
| owner: root |
| content: | |
| set -o errexit |
| set -o pipefail |
| |
| # Templated by cloudbuild config that runs this test. |
| OEM_SIZE_TH=%s |
| |
| trap 'fail exiting due to errors' EXIT |
| |
| fail() { |
| echo "TestFail: $@" |
| } |
| |
| testHello() { |
| if [[ ! -f /mnt/stateful_partition/hello ]]; then |
| echo "/mnt/stateful_partition/hello is not a valid file (does it exist?)" |
| echo "testHello fail" |
| RESULT="fail" |
| return |
| fi |
| expected="hello" |
| actual=$(cat /mnt/stateful_partition/hello) |
| if [[ "${expected}" != "${actual}" ]]; then |
| echo "/mnt/stateful_partition/hello contains ${actual} instead of ${expected}" |
| echo "testHello fail" |
| RESULT="fail" |
| return |
| fi |
| echo "testHello pass" |
| } |
| |
| testOEMHello(){ |
| if [[ ! -f /usr/share/oem/hello ]]; then |
| echo "/usr/share/oem/hello is not a valid file (does it exist?)" |
| echo "testOEMHello fail" |
| RESULT="fail" |
| return |
| fi |
| expected="hello" |
| actual=$(cat /usr/share/oem/hello) |
| if [[ "${expected}" != "${actual}" ]]; then |
| echo "/usr/share/oem/hello contains ${actual} instead of ${expected}" |
| echo "testOEMHello fail" |
| RESULT="fail" |
| return |
| fi |
| echo "testOEMHello pass" |
| } |
| |
| testUbuntuImage() { |
| expected="ubuntu" |
| actual=$(docker images --format {{.Repository}}) |
| if [[ "${expected}" != "${actual}" ]]; then |
| echo "expected docker images: ${expected}" |
| echo "actual docker images: ${actual}" |
| echo "testUbuntuImage fail" |
| RESULT="fail" |
| return |
| fi |
| echo "testUbuntuImage pass" |
| } |
| |
| testHomeDir() { |
| expected="chronos" |
| actual=$(ls /home) |
| if [[ "${expected}" != "${actual}" ]]; then |
| echo "expected home contents: ${expected}" |
| echo "actual home contents: ${actual}" |
| echo "testHomeDir fail" |
| RESULT="fail" |
| return |
| fi |
| echo "testHomeDir pass" |
| } |
| |
| testWorkdirClean() { |
| if [[ -d "/var/lib/.cos-customizer" ]]; then |
| echo "/var/lib/.cos-customizer exists" |
| echo "testWorkdirClean fail" |
| RESULT="fail" |
| return |
| fi |
| echo "testWorkdirClean pass" |
| } |
| |
| testOEMSize(){ |
| actual=$(df --output=size /usr/share/oem --block-size=$((1<<20)) | tail -n 1) |
| if [[ "${actual}" -le "${OEM_SIZE_TH}" ]]; then |
| echo "OEM size 80% threshold: ${OEM_SIZE_TH} MB" |
| echo "actual OEM size: ${actual} MB" |
| echo "testOEMSize fail" |
| RESULT="fail" |
| return |
| fi |
| echo "testOEMSize pass" |
| } |
| |
| testStatefulSize(){ |
| local -r stateful_size_th=7168 |
| actual=$(df --output=size /mnt/stateful_partition --block-size=$((1<<20)) | tail -n 1) |
| if [[ "${actual}" -le "${stateful_size_th}" ]]; then |
| echo "STATEFUL size 80% threshold: ${stateful_size_th} MB" |
| echo "actual STATEFUL size: ${actual} MB" |
| echo "testStatefulSize fail" |
| RESULT="fail" |
| return |
| fi |
| echo "testStatefulSize pass" |
| } |
| |
| mountOEM(){ |
| if [[ ! -e /dev/dm-1 ]]; then |
| echo "/dev/dm-1 doesn't exist" |
| echo "mountOEM fail" |
| RESULT="fail" |
| return |
| fi |
| sudo mount -o ro /dev/dm-1 /usr/share/oem/ |
| echo "mountOEM pass" |
| } |
| |
| testOEMMountService(){ |
| if (! sudo systemctl show -p LoadState usr-share-oem.mount | grep "masked" > /dev/null ); then |
| echo "usr-share-oem.mount not masked" |
| echo "testOEMMountService fail" |
| RESULT="fail" |
| return |
| fi |
| echo "testOEMMountService pass" |
| } |
| |
| main() { |
| RESULT="pass" |
| mountOEM |
| testHello |
| testUbuntuImage |
| testHomeDir |
| testWorkdirClean |
| testOEMSize |
| testOEMHello |
| testOEMMountService |
| testStatefulSize |
| if [[ "${RESULT}" == "fail" ]]; then |
| exit 1 |
| fi |
| } |
| |
| main 2>&1 | sed "s/^/TestStatus: /" |
| trap - EXIT |
| echo "TestPass: all tests passed" |
| |
| - path: /etc/systemd/system/preloader-test.service |
| permissions: 0644 |
| owner: root |
| content: | |
| [Unit] |
| Description=Preloader test |
| Wants=network-online.target gcr-online.target docker.service |
| After=network-online.target gcr-online.target docker.service |
| |
| [Service] |
| Type=oneshot |
| RemainAfterExit=yes |
| User=root |
| ExecStart=/bin/bash /tmp/preloader-test/test.sh |
| StandardOutput=tty |
| StandardError=tty |
| TTYPath=/dev/ttyS1 |
| |
| runcmd: |
| - systemctl daemon-reload |
| - systemctl --no-block start preloader-test.service |