#cloud-config
#
# Copyright 2018 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
      trap 'fail exiting due to errors' EXIT
      fail() {
        echo "TestFail: $@"
      }
      testDiskType() {
        if [[ ! -f /var/lib/disktype ]]; then
          echo "/var/lib/disktype is not a valid file (does it exist?)"
          echo "testDiskType fail"
          RESULT="fail"
          return
        fi
        expected="HYPERDISK-BALANCED"
        actual=$(cat /var/lib/disktype)
        if [[ "${expected}" != "${actual}" ]]; then
          echo "/var/lib/disktype contains ${actual} instead of ${expected}"
          echo "testDiskType fail"
          RESULT="fail"
          return
        fi
        echo "testDiskType pass"
      }
      main() {
        RESULT="pass"
        testDiskType
        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

