#cloud-config
#
# Copyright 2022 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: $@"
      }

      testNetworkSubnet() {
        if [[ ! -f "/var/lib/instance_info.json" ]]; then
          echo "/var/lib/instance_info.json is missing"
          echo "testNetworkSubnet failed"
          RESULT="fail"
          return
        fi
        textPatternFound=$(grep -R regions/us-central1/subnetworks/cos-customizer-test "/var/lib/instance_info.json")
        if [[ -z ${textPatternFound} ]]; then
          echo "/var/lib/instance_info.json: got $(cat "/var/lib/instance_info.json")"
          echo "testNetworkSubnet fail"
          RESULT="fail"
          return
        fi
        echo "testNetworkSubnet pass"
      }

      main() {
        RESULT="pass"
        testNetworkSubnet
        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
