#!/usr/bin/env atf-sh # vim:set filetype=sh: # shellcheck shell=sh . $(atf_get_srcdir)/test_env.sh export PREFIX="$srcdir" PROVIDERS="alpine aws azure gcp nocloud scaleway" init_tests \ imds_help \ imds_space \ \ imds_hostname_alpine \ imds_hostname_aws \ imds_hostname_azure \ imds_hostname_gcp \ imds_hostname_nocloud \ imds_hostname_oci \ imds_hostname_scaleway \ imds_hostname_hetzner \ \ imds_local_hostname_alpine \ imds_local_hostname_aws \ imds_local_hostname_azure \ imds_local_hostname_gcp \ imds_local_hostname_nocloud \ imds_local_hostname_oci \ imds_local_hostname_scaleway \ imds_local_hostname_hetzner \ \ imds_ssh_keys_alpine \ imds_ssh_keys_aws \ imds_ssh_keys_azure \ imds_ssh_keys_gcp \ imds_ssh_keys_nocloud \ imds_ssh_keys_oci \ imds_ssh_keys_scaleway \ imds_ssh_keys_hetzner \ \ imds_nocloud_cmdline_local_hostname \ imds_nocloud_smbios_local_hostname \ \ imds_userdata_scaleway imds_help_body() { atf_check -o match:"Usage: imds" imds -h } imds_space_body() { for provider in $PROVIDERS; do CLOUD="$provider" atf_check -o match:'^ $' imds +s CLOUD="$provider" atf_check -o match:'^\t$' imds +t CLOUD="$provider" atf_check -o match:'^$' imds +n done } check_hostname() { fake_metadata "$1" <<-EOF # nocloud, alpine, aws, hetzner hostname: myhostname # azure compute: name: myhostname # gcp, oci instance: hostname: myhostname EOF CLOUD="$1" atf_check -o match:"myhostname" imds @hostname } imds_hostname_alpine_body() { check_hostname alpine; } imds_hostname_aws_body() { check_hostname aws; } imds_hostname_azure_body() { check_hostname azure; } imds_hostname_gcp_body() { check_hostname gcp; } imds_hostname_nocloud_body() { check_hostname nocloud; } imds_hostname_oci_body() { check_hostname oci; } imds_hostname_scaleway_body() { fake_metadata scaleway <<-EOF HOSTNAME=myhostname EOF CLOUD="scaleway" atf_check -o match:"myhostname" imds @hostname } imds_hostname_hetzner_body() { check_hostname hetzner; } check_local_hostname() { fake_metadata "$1" <<-EOF # nocloud, alpine, aws local-hostname: myhostname # hetzner hostname: myhostname # azure compute: name: myhostname # gcp, oci instance: hostname: myhostname EOF CLOUD="$1" atf_check -o match:"myhostname" imds @local-hostname } imds_local_hostname_alpine_body() { check_local_hostname alpine; } imds_local_hostname_aws_body() { check_local_hostname aws; } imds_local_hostname_azure_body() { check_local_hostname azure; } imds_local_hostname_gcp_body() { check_local_hostname gcp; } imds_local_hostname_nocloud_body() { check_local_hostname nocloud; } imds_local_hostname_oci_body() { check_local_hostname oci; } imds_local_hostname_scaleway_body() { fake_metadata scaleway <<-EOF HOSTNAME=myhostname EOF CLOUD="scaleway" atf_check -o match:"myhostname" imds @local-hostname } imds_local_hostname_hetzner_body() { check_local_hostname hetzner; } check_ssh_keys() { local key="ssh-ed25519 keydata" fake_metadata "$1" <<-EOF # aws, alpine, nocloud public-keys: 0=testuser: 0: openssh-key: $key # azure compute: publicKeys: - keyData: $key # gcp instance: attributes: ssh-keys: user1:$key # oci metadata: ssh_authorized_keys: $key EOF CLOUD="$1" atf_check -o match:"$key" imds @ssh-keys } imds_ssh_keys_alpine_body() { check_ssh_keys alpine; } imds_ssh_keys_aws_body() { check_ssh_keys aws; } imds_ssh_keys_azure_body() { check_ssh_keys azure; } imds_ssh_keys_gcp_body() { check_ssh_keys gcp; } imds_ssh_keys_nocloud_body() { check_ssh_keys nocloud; } imds_ssh_keys_oci_body() { check_ssh_keys oci; } imds_ssh_keys_scaleway_body() { local key="ssh-ed25519 keydata" fake_metadata scaleway <<-EOF SSH_PUBLIC_KEYS=1 SSH_PUBLIC_KEYS_0='ID KEY FINGERPRINT CREATION_DATE MODIFICATION_DATE DESCRIPTION IP' SSH_PUBLIC_KEYS_0_ID=00000000-0000-0000-0000-000000000000 SSH_PUBLIC_KEYS_0_KEY='$key' SSH_PUBLIC_KEYS_0_FINGERPRINT='256 MD5:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00:00 ssh_test_key (ssh-ed25519)' SSH_PUBLIC_KEYS_0_CREATION_DATE=2024-01-25T19:51:28.263483+00:00 SSH_PUBLIC_KEYS_0_MODIFICATION_DATE=2024-01-25T19:51:28.263483+00:00 SSH_PUBLIC_KEYS_0_DESCRIPTION=ssh_test_key SSH_PUBLIC_KEYS_0_IP= EOF CLOUD="scaleway" atf_check -o match:"$key" imds @ssh-keys } imds_ssh_keys_hetzner_body() { local key="ssh-ed25519 keydata" fake_metadata "hetzner" <<-EOF # hetzner public-keys: '["$key"]' EOF CLOUD="hetzner" atf_check -o match:"$key" imds @ssh-keys } imds_nocloud_cmdline_local_hostname_body() { atf_require_prog yx mkdir proc for key in h local-hostname; do echo "BOOT_IMAGE=/boot/vmlinuz-lts ro ds=nocloud;$key=myhostname" > proc/cmdline CLOUD=nocloud atf_check \ -o match:'^myhostname$' \ imds @local-hostname done } imds_nocloud_smbios_local_hostname_body() { atf_require_prog yx mkdir -p sys/class/dmi/id for key in h local-hostname; do echo "ds=nocloud;$key=myhostname" > sys/class/dmi/id/product_serial CLOUD=nocloud atf_check \ -o match:'^myhostname$' \ imds @local-hostname done } imds_userdata_scaleway_body() { local cmd="sh ./cmd" fake_userdata_scaleway <<-EOF $cmd EOF CLOUD="scaleway" atf_check -o match:"$cmd" imds @userdata }