# file      : bbot/machine-manifest.test.testscript
# license   : MIT; see accompanying LICENSE file

: machine-manifest
:
{{
  test.options += -m

  : valid
  :
  {{
    : all-values
    :
    $* <<EOF >>EOF
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: kvm
    mac: de:ad:be:ef:de:ad
    options: -device "virtio-scsi-pci,id=scsi" -device "scsi-hd,drive=disk0"
    changes:
    \
    0.7.0
      - mac is changed to de:ad:be:ef:de:ad
      - increased disk size to 30GB
    \
    EOF

    : multi-line-options
    :
    $* <<EOI >>EOO
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: kvm
    options:
    \
    -device "virtio-scsi-pci,id=scsi"
    -device "scsi-hd,drive=disk0"
    \
    EOI
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: kvm
    options: -device "virtio-scsi-pci,id=scsi" -device "scsi-hd,drive=disk0"
    EOO

    : no-mac
    :
    $* <<EOF >>EOF
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: nspawn
    options: -device "virtio-scsi-pci,id=scsi" -device "scsi-hd,drive=disk0"
    EOF

    : no-options
    :
    $* <<EOF >>EOF
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: nspawn
    mac: de:ad:be:ef:de:ad
    EOF
  }}

  : redefinition
  :
  {{
    : type
    :
    $* <<EOI 2>'stdin:6:1: error: machine type redefinition' == 1
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: nspawn
    type: kvm
    EOI

    : mac
    :
    $* <<EOI 2>'stdin:6:1: error: machine mac redefinition' == 1
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    mac: de:ad:be:ef:de:ad
    mac: de:ad:be:ef:de:ad
    EOI

    : options
    :
    $* <<EOI 2>'stdin:6:1: error: machine options redefinition' == 1
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    options: -device "virtio-scsi-pci,id=scsi" -device "scsi-hd,drive=disk0"
    options:
    EOI
  }}

  : invalid
  :
  {{
    : type
    :
    $* <<EOI 2>'stdin:5:7: error: invalid machine type' == 1
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: vmware
    EOI

    : options
    :
    {{
      : empty
      :
      $* <<EOI 2>'stdin:5:9: error: empty machine options' == 1
      : 1
      id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
      name: windows_10-msvc_14
      summary: Windows 10 build 1607 with VC 14 update 3
      options:
      EOI

      : unquoted
      :
      $* <<EOI 2>'stdin:5:42: error: invalid machine options: unterminated quoted string' == 1
      : 1
      id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
      name: windows_10-msvc_14
      summary: Windows 10 build 1607 with VC 14 update 3
      options: -device "virtio-scsi-pci,id=scsi
      EOI

      : unquoted-multi-line
      :
      $* <<EOI 2>'stdin:7:29: error: invalid machine options: unterminated quoted string' == 1
      : 1
      id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
      name: windows_10-msvc_14
      summary: Windows 10 build 1607 with VC 14 update 3
      options:\
      -device "virtio-scsi-pci,id=scsi"
      -device "scsi-hd,drive=disk0
      \
      EOI
    }}

    : changes
    :
    $* <<EOI 2>'stdin:5:9: error: empty machine changes' == 1
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    changes:
    EOI
  }}

  : missed
  :
  {{
    : type
    :
    $* <<EOI 2>'stdin:5:1: error: no machine type specified' == 1
    : 1
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    EOI
  }}

  : unknown-name
  :
  $* <<EOI 2>"stdin:5:1: error: unknown name 'x' in machine manifest" == 1
  : 1
  id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  name: windows_10-msvc_14
  summary: Windows 10 build 1607 with VC 14 update 3
  x:
  EOI
}}

: toolchain-manifest
:
{{
  test.options += -t

  : valid
  :
  $* <<EOF >>EOF
  : 1
  id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  EOF

  : no-id
  :
  $* <<EOI 2>'stdin:2:1: error: no toolchain id specified' == 1
  : 1
  EOI

  : dup-id
  :
  $* <<EOI 2>'stdin:3:1: error: toolchain id redefinition' == 1
  : 1
  id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
  EOI

  : empty-id
  :
  $* <<EOI 2>'stdin:2:4: error: empty toolchain id' == 1
  : 1
  id:
  EOI

  : unknown
  :
  $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in toolchain manifest" == 1
  : 1
  x: y
  EOI
}}

: bootstrapped-machine-manifest
:
{{
  test.options += -bm

  : unknown
  :
  $* <<EOI 2>"stdin:2:1: error: unknown name 'x' in bootstrapped machine manifest" == 1
  : 1
  x: y
  EOI

  : no-machine
  :
  $* <<EOI 2>'stdin:2:1: error: machine manifest expected' == 1
  : 1
  EOI

  : build-role
  :
  {{
    : valid
    :
    {{
      : all-values
      :
      $* <<EOF >>EOF
      : 1
      :
      id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
      name: windows_10-msvc_14
      summary: Windows 10 build 1607 with VC 14 update 3
      type: kvm
      mac: de:ad:be:ef:de:ad
      :
      id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
      :
      bbot-version: 1.1.2
      libbbot-version: 1.1.1
      EOF
    }}

    : no-machine-mac
    :
    $* <<EOI 2>'stdin:2:1: error: mac address must be present in machine manifest' == 1
    : 1
    :
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: kvm
    EOI

    : no-toolchain
    :
    $* <<EOI 2>'stdin:8:1: error: toolchain manifest expected' == 1
    : 1
    :
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: kvm
    mac: de:ad:be:ef:de:ad
    EOI

    : no-bootstrap
    :
    $* <<EOI 2>'stdin:10:1: error: bootstrap manifest expected' == 1
    : 1
    :
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    name: windows_10-msvc_14
    summary: Windows 10 build 1607 with VC 14 update 3
    type: kvm
    mac: de:ad:be:ef:de:ad
    :
    id: a2b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855
    EOI
  }}

  : auxiliary-role
  :
  {{
    : valid
    :
    {{
      : all-values
      :
      $* <<EOF >>EOF
      : 1
      :
      id: x86_64-linux_debian_12-postgresql_15-1.0
      name: x86_64-linux_debian_12-postgresql_15
      summary: Debian 12 "bookworm" with PostgreSQL 15.6.0 (auxiliary machine)
      role: auxiliary
      ram-minimum: 1048576
      type: kvm
      mac: e6:38:72:53:61:ae
      changes:
      \
      1.0
        - clone off linux_debian_12-small-1.0
        - postgresql-15 15.6.0+deb12u1
      \
      EOF
    }}

    : unexpected-manifest
    :
    $* <<EOI 2>'stdin:10:1: error: single machine manifest expected' == 1
    : 1
    :
    id: x86_64-linux_debian_12-postgresql_15-1.0
    name: x86_64-linux_debian_12-postgresql_15
    summary: Debian 12 "bookworm" with PostgreSQL 15.6.0 (auxiliary machine)
    role: auxiliary
    ram-minimum: 1048576
    type: kvm
    mac: e6:38:72:53:61:ae
    :
    EOI
  }}
}}
