#!/usr/bin/env bash
# Run this from the root directory

cd ./test || exit
source approvals.bash
source test-data.sh

cli=../dcuc

echo "Setting up test data..."
if [[ ! -v CI ]]; then
  download_test_data
fi

refresh_test_data

export ESCAPED_PWD="${PWD//\//\\/}"

describe "help message"
  approve "$cli --help"

describe "Try to replace logo in binary supporting that"
  allow_diff $ESCAPED_PWD
  approve "$cli logo ${DATA_WORK_DIR}/protectli_vault_cml_v1.2.0-rc1_vp46xx.rom  -l ${DATA_WORK_DIR}/bootsplash.bmp"

describe "Try to replace logo in binary NOT supporting that"
  allow_diff $ESCAPED_PWD
  approve "$cli logo ${DATA_WORK_DIR}/protectli_vault_kbl_v1.0.14.rom -l ${DATA_WORK_DIR}/bootsplash.bmp"

describe "Try to replace serial in binary supporting that"
  allow_diff $ESCAPED_PWD
  approve "$cli smbios ${DATA_WORK_DIR}/protectli_vault_cml_v1.2.0-rc1_vp46xx.rom  -s D07229051"

describe "Try to replace serial in binary NOT supporting that"
  allow_diff $ESCAPED_PWD
  approve "$cli smbios ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom -s D07229051"

describe "Try to replace UUID in binary supporting that"
  allow_diff $ESCAPED_PWD
  approve "$cli smbios ${DATA_WORK_DIR}/protectli_vault_cml_v1.2.0-rc1_vp46xx.rom  -u 96bcfa1a-42b4-6717-a44c-d8bbc18cbea4"

describe "Try to replace UUID in binary NOT supporting that"
  allow_diff $ESCAPED_PWD
  approve "$cli smbios ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom -u 96bcfa1a-42b4-6717-a44c-d8bbc18cbea4"

describe "Try to replace both serial and UUID in binary supporting that"
  allow_diff $ESCAPED_PWD
  approve "$cli smbios ${DATA_WORK_DIR}/protectli_vault_cml_v1.2.0-rc1_vp46xx.rom  -s D07229051 -u 96bcfa1a-42b4-6717-a44c-d8bbc18cbea4"

describe "Try to replace both serial and UUID in binary NOT supporting that"
  allow_diff $ESCAPED_PWD
  approve "$cli smbios ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom -s D07229051 -u 96bcfa1a-42b4-6717-a44c-d8bbc18cbea4"

describe "Try to replace logo using unsupported format (PDF)"
  approve "$cli logo ${DATA_WORK_DIR}/protectli_vault_cml_v1.2.0-rc1_vp46xx.rom  -l ${DATA_WORK_DIR}/dummy.pdf"

describe "Try to replace UUID using incorrect format"
  allow_diff $ESCAPED_PWD
  approve "$cli smbios ${DATA_WORK_DIR}/protectli_vault_cml_v1.2.0-rc1_vp46xx.rom  -u dead-beef"

refresh_test_data

describe "Get variable from uninitialized store"
  allow_diff $ESCAPED_PWD
  approve "$cli variable ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom --get SerialRedirection"

describe "Initialize variable store in a release binary"
  allow_diff $ESCAPED_PWD
  approve "$cli variable ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom --set SerialRedirection --value Enabled"

cp ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom ${DATA_WORK_DIR}/SerialRedirectionDisabled_novacustom_nv4x_adl_v1.6.0.rom
describe "Set supported bool variable to Disabled"
  approve "$cli variable ${DATA_WORK_DIR}/SerialRedirectionDisabled_novacustom_nv4x_adl_v1.6.0.rom --set SerialRedirection --value Disabled"

describe "Get supported bool variable (expecting Disabled)"
  approve "$cli variable ${DATA_WORK_DIR}/SerialRedirectionDisabled_novacustom_nv4x_adl_v1.6.0.rom --get SerialRedirection"

cp ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom ${DATA_WORK_DIR}/SerialRedirectionEnabled_novacustom_nv4x_adl_v1.6.0.rom
describe "Set supported bool variable to Enabled"
  approve "$cli variable ${DATA_WORK_DIR}/SerialRedirectionEnabled_novacustom_nv4x_adl_v1.6.0.rom --set SerialRedirection --value Enabled"

describe "Get supported bool variable (expecting Enabled)"
  approve "$cli variable ${DATA_WORK_DIR}/SerialRedirectionEnabled_novacustom_nv4x_adl_v1.6.0.rom --get SerialRedirection"

describe "Set supported bool variable to invalid value"
  approve "$cli variable ${DATA_WORK_DIR}/SerialRedirectionEnabled_novacustom_nv4x_adl_v1.6.0.rom --set SerialRedirection --value EnabledInvalid"

cp ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom ${DATA_WORK_DIR}/MeModeEnabled_novacustom_nv4x_adl_v1.6.0.rom
describe "Set MeMode to Enabled"
  approve "$cli variable ${DATA_WORK_DIR}/MeModeEnabled_novacustom_nv4x_adl_v1.6.0.rom --set MeMode --value Enabled"

describe "Get MeMode (expecting Enabled)"
  approve "$cli variable ${DATA_WORK_DIR}/MeModeEnabled_novacustom_nv4x_adl_v1.6.0.rom --get MeMode"

cp ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom ${DATA_WORK_DIR}/MeModeDisabledSoft_novacustom_nv4x_adl_v1.6.0.rom
describe "Set MeMode to Disabled (Soft)"
approve "$cli variable ${DATA_WORK_DIR}/MeModeDisabledSoft_novacustom_nv4x_adl_v1.6.0.rom --set MeMode --value \"Disabled (Soft)\""

describe "Get MeMode (expecting Disabled (Soft))"
  approve "$cli variable ${DATA_WORK_DIR}/MeModeDisabledSoft_novacustom_nv4x_adl_v1.6.0.rom --get MeMode"

cp ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom ${DATA_WORK_DIR}/MeModeDisabledHAP_novacustom_nv4x_adl_v1.6.0.rom
describe "Set MeMode to Disabled (HAP)"
approve "$cli variable ${DATA_WORK_DIR}/MeModeDisabledHAP_novacustom_nv4x_adl_v1.6.0.rom --set MeMode --value \"Disabled (HAP)\""

describe "Get MeMode (expecting Disabled (HAP))"
  approve "$cli variable ${DATA_WORK_DIR}/MeModeDisabledHAP_novacustom_nv4x_adl_v1.6.0.rom --get MeMode"

describe "Set MeMode to InvalidMode"
  approve "$cli variable ${DATA_WORK_DIR}/MeModeDisabledHAP_novacustom_nv4x_adl_v1.6.0.rom --set MeMode --value InvalidMode"

cp ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom ${DATA_WORK_DIR}/FanCurveSilent_novacustom_nv4x_adl_v1.6.0.rom
describe "Set FanCurveOption to Silent"
  approve "$cli variable ${DATA_WORK_DIR}/FanCurveSilent_novacustom_nv4x_adl_v1.6.0.rom --set FanCurveOption --value Silent"

describe "Get FanCurveMode (expecting Silent)"
  approve "$cli variable ${DATA_WORK_DIR}/FanCurveSilent_novacustom_nv4x_adl_v1.6.0.rom --get FanCurveOption"

cp ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom ${DATA_WORK_DIR}/FanCurvePerformance_novacustom_nv4x_adl_v1.6.0.rom
describe "Set FanCurveOption to Performance"
  approve "$cli variable ${DATA_WORK_DIR}/FanCurvePerformance_novacustom_nv4x_adl_v1.6.0.rom --set FanCurveOption --value Performance"

describe "Get FanCurveMode (expecting Performance)"
  approve "$cli variable ${DATA_WORK_DIR}/FanCurvePerformance_novacustom_nv4x_adl_v1.6.0.rom --get FanCurveOption"

describe "Set FanCurveMode to InvalidMode"
  approve "$cli variable ${DATA_WORK_DIR}/FanCurvePerormance_novacustom_nv4x_adl_v1.6.0.rom --set FanCurveOption --value InvalidMode"

describe "Set unsupported variable"
  approve "$cli variable ${DATA_WORK_DIR}/novacustom_nv4x_adl_v1.6.0.rom --set SerialRedirectionInvalid --value Enabled"

describe "Set valid MAC"
  allow_diff $ESCAPED_PWD
  approve "$cli mac ${DATA_WORK_DIR}/novacustom_v540tu_mtl_v0.9.0_gbe.rom --set 12:34:56:78:9A:BC"

describe "Set invalid MAC"
  allow_diff $ESCAPED_PWD
  approve "$cli mac ${DATA_WORK_DIR}/novacustom_v540tu_mtl_v0.9.0_gbe.rom --set 00:00:00:00:00:00"

describe "Get MAC (should be set by 'Set valid MAC' and not set by 'Set invalid MAC')"
  allow_diff $ESCAPED_PWD
  approve "$cli mac ${DATA_WORK_DIR}/novacustom_v540tu_mtl_v0.9.0_gbe.rom"

describe "Get MAC Bad checksums"
  allow_diff $ESCAPED_PWD
  approve "$cli mac ${DATA_WORK_DIR}/novacustom_v540tu_mtl_v0.9.0.rom"

describe "Set MAC Bad checksums"
  allow_diff $ESCAPED_PWD
  approve "$cli mac ${DATA_WORK_DIR}/novacustom_v540tu_mtl_v0.9.0.rom --set 12:34:56:78:9A:BC"

describe "MAC Unsupported binary"
  allow_diff $ESCAPED_PWD
  approve "$cli mac ${DATA_WORK_DIR}/protectli_vault_cml_v1.2.0-rc1_vp46xx.rom"
