mirror of
https://github.com/bpg/terraform-provider-proxmox.git
synced 2025-06-30 10:33:46 +00:00
177 lines
6.0 KiB
Go
177 lines
6.0 KiB
Go
/*
|
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
* file, You can obtain one at https://mozilla.org/MPL/2.0/.
|
|
*/
|
|
|
|
package tests
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"testing"
|
|
|
|
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"github.com/bpg/terraform-provider-proxmox/proxmox/nodes/storage"
|
|
"github.com/bpg/terraform-provider-proxmox/proxmox/types"
|
|
)
|
|
|
|
const (
|
|
fakeFileISO = "https://cdn.githubraw.com/rafsaf/a4b19ea5e3485f8da6ca4acf46d09650/raw/d340ec3ddcef9b907ede02f64b5d3f694da5d081/fake_file.iso"
|
|
fakeFileQCOW2 = "https://cdn.githubraw.com/rafsaf/036eece601975a3ad632a77fc2809046/raw/10500012fca9b4425b50de67a7258a12cba0c076/fake_file.qcow2"
|
|
)
|
|
|
|
func TestAccResourceDownloadFile(t *testing.T) {
|
|
te := initTestEnvironment(t)
|
|
|
|
tests := []struct {
|
|
name string
|
|
steps []resource.TestStep
|
|
}{
|
|
{"download iso file", []resource.TestStep{{
|
|
Config: fmt.Sprintf(`
|
|
resource "proxmox_virtual_environment_download_file" "iso_image" {
|
|
content_type = "iso"
|
|
node_name = "%s"
|
|
datastore_id = "%s"
|
|
url = "%s"
|
|
overwrite_unmanaged = true
|
|
}
|
|
`, te.nodeName, accTestStorageName, fakeFileISO),
|
|
Check: resource.ComposeTestCheckFunc(
|
|
testResourceAttributes("proxmox_virtual_environment_download_file.iso_image", map[string]string{
|
|
"id": "local:iso/fake_file.iso",
|
|
"node_name": te.nodeName,
|
|
"datastore_id": accTestStorageName,
|
|
"url": fakeFileISO,
|
|
"file_name": "fake_file.iso",
|
|
"upload_timeout": "600",
|
|
"size": "3",
|
|
"verify": "true",
|
|
}),
|
|
testNoResourceAttributesSet("proxmox_virtual_environment_download_file.iso_image", []string{
|
|
"checksum",
|
|
"checksum_algorithm",
|
|
"decompression_algorithm",
|
|
}),
|
|
),
|
|
}}},
|
|
{"download qcow2 file", []resource.TestStep{{
|
|
Config: fmt.Sprintf(`
|
|
resource "proxmox_virtual_environment_download_file" "qcow2_image" {
|
|
content_type = "iso"
|
|
node_name = "%s"
|
|
datastore_id = "%s"
|
|
file_name = "fake_qcow2_file.img"
|
|
url = "%s"
|
|
checksum = "688787d8ff144c502c7f5cffaafe2cc588d86079f9de88304c26b0cb99ce91c6"
|
|
checksum_algorithm = "sha256"
|
|
overwrite_unmanaged = true
|
|
}
|
|
`, te.nodeName, accTestStorageName, fakeFileQCOW2),
|
|
Check: resource.ComposeTestCheckFunc(
|
|
testResourceAttributes("proxmox_virtual_environment_download_file.qcow2_image", map[string]string{
|
|
"id": "local:iso/fake_qcow2_file.img",
|
|
"content_type": "iso",
|
|
"node_name": te.nodeName,
|
|
"datastore_id": accTestStorageName,
|
|
"url": fakeFileQCOW2,
|
|
"file_name": "fake_qcow2_file.img",
|
|
"upload_timeout": "600",
|
|
"size": "3",
|
|
"verify": "true",
|
|
"checksum": "688787d8ff144c502c7f5cffaafe2cc588d86079f9de88304c26b0cb99ce91c6",
|
|
"checksum_algorithm": "sha256",
|
|
}),
|
|
testNoResourceAttributesSet("proxmox_virtual_environment_download_file.qcow2_image", []string{
|
|
"decompression_algorithm",
|
|
}),
|
|
),
|
|
}}},
|
|
{"update file", []resource.TestStep{{
|
|
Config: fmt.Sprintf(`
|
|
resource "proxmox_virtual_environment_download_file" "iso_image" {
|
|
content_type = "iso"
|
|
node_name = "%s"
|
|
datastore_id = "%s"
|
|
file_name = "fake_iso_file.img"
|
|
url = "%s"
|
|
upload_timeout = 10000
|
|
overwrite_unmanaged = true
|
|
}
|
|
`, te.nodeName, accTestStorageName, fakeFileISO),
|
|
Check: resource.ComposeTestCheckFunc(
|
|
testResourceAttributes("proxmox_virtual_environment_download_file.iso_image", map[string]string{
|
|
"id": "local:iso/fake_iso_file.img",
|
|
"content_type": "iso",
|
|
"node_name": te.nodeName,
|
|
"datastore_id": accTestStorageName,
|
|
"url": fakeFileISO,
|
|
"file_name": "fake_iso_file.img",
|
|
"upload_timeout": "10000",
|
|
"size": "3",
|
|
"verify": "true",
|
|
}),
|
|
testNoResourceAttributesSet("proxmox_virtual_environment_download_file.iso_image", []string{
|
|
"checksum",
|
|
"checksum_algorithm",
|
|
"decompression_algorithm",
|
|
}),
|
|
),
|
|
}}},
|
|
{"override unmanaged file", []resource.TestStep{{
|
|
PreConfig: func() {
|
|
err := te.nodeStorageClient().DownloadFileByURL(context.Background(), &storage.DownloadURLPostRequestBody{
|
|
Content: types.StrPtr("iso"),
|
|
FileName: types.StrPtr("fake_file.iso"),
|
|
Node: types.StrPtr(te.nodeName),
|
|
Storage: types.StrPtr(accTestStorageName),
|
|
URL: types.StrPtr(fakeFileISO),
|
|
}, 600)
|
|
require.NoError(t, err)
|
|
t.Cleanup(func() {
|
|
err := te.nodeStorageClient().DeleteDatastoreFile(context.Background(), "iso/fake_file.iso")
|
|
require.NoError(t, err)
|
|
})
|
|
},
|
|
Config: fmt.Sprintf(`
|
|
resource "proxmox_virtual_environment_download_file" "iso_image" {
|
|
content_type = "iso"
|
|
node_name = "%s"
|
|
datastore_id = "%s"
|
|
url = "%s"
|
|
overwrite_unmanaged = true
|
|
}
|
|
`, te.nodeName, accTestStorageName, fakeFileISO),
|
|
Check: resource.ComposeTestCheckFunc(
|
|
testResourceAttributes("proxmox_virtual_environment_download_file.iso_image", map[string]string{
|
|
"id": "local:iso/fake_file.iso",
|
|
"content_type": "iso",
|
|
"node_name": te.nodeName,
|
|
"datastore_id": accTestStorageName,
|
|
"url": fakeFileISO,
|
|
"file_name": "fake_file.iso",
|
|
"size": "3",
|
|
"verify": "true",
|
|
}),
|
|
testNoResourceAttributesSet("proxmox_virtual_environment_download_file.iso_image", []string{
|
|
"checksum",
|
|
"checksum_algorithm",
|
|
"decompression_algorithm",
|
|
}),
|
|
),
|
|
}}},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
t.Run(tt.name, func(t *testing.T) {
|
|
resource.Test(t, resource.TestCase{
|
|
ProtoV6ProviderFactories: te.accProviders,
|
|
Steps: tt.steps,
|
|
})
|
|
})
|
|
}
|
|
}
|