0
0
mirror of https://github.com/bpg/terraform-provider-proxmox.git synced 2025-06-30 10:33:46 +00:00
terraform-provider-proxmox/fwprovider/tests/resource_download_file_test.go
hrmny afcbb415a3
feat(access): add ACL resource (#1166)
* feat: add ACL resource

Signed-off-by: hrmny <8845940+ForsakenHarmony@users.noreply.github.com>

* chore: move code under /access, cleanup acc tests

Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>

---------

Signed-off-by: hrmny <8845940+ForsakenHarmony@users.noreply.github.com>
Signed-off-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
Co-authored-by: Pavel Boldyrev <627562+bpg@users.noreply.github.com>
2024-05-08 20:22:15 -04:00

187 lines
6.3 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"
"testing"
"time"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/stretchr/testify/require"
"github.com/bpg/terraform-provider-proxmox/proxmox/helpers/ptr"
"github.com/bpg/terraform-provider-proxmox/proxmox/nodes/storage"
)
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)
te.addTemplateVars(map[string]interface{}{
"FakeFileISO": fakeFileISO,
"FakeFileQCOW2": fakeFileQCOW2,
})
tests := []struct {
name string
steps []resource.TestStep
}{
{"download qcow2 file", []resource.TestStep{{
Config: te.renderConfig(`
resource "proxmox_virtual_environment_download_file" "qcow2_image" {
content_type = "iso"
node_name = "{{.NodeName}}"
datastore_id = "{{.DatastoreID}}"
file_name = "fake_qcow2_file.img"
url = "{{.FakeFileQCOW2}}"
checksum = "688787d8ff144c502c7f5cffaafe2cc588d86079f9de88304c26b0cb99ce91c6"
checksum_algorithm = "sha256"
overwrite_unmanaged = true
}`),
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": te.datastoreID,
"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",
}),
),
}}},
{"download & update iso file", []resource.TestStep{
{
Config: te.renderConfig(`
resource "proxmox_virtual_environment_download_file" "iso_image" {
content_type = "iso"
node_name = "{{.NodeName}}"
datastore_id = "{{.DatastoreID}}"
url = "{{.FakeFileISO}}"
overwrite_unmanaged = true
}`),
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": te.datastoreID,
"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",
}),
),
},
{
Config: te.renderConfig(`
resource "proxmox_virtual_environment_download_file" "iso_image" {
content_type = "iso"
node_name = "{{.NodeName}}"
datastore_id = "{{.DatastoreID}}"
file_name = "fake_iso_file.img"
url = "{{.FakeFileISO}}"
upload_timeout = 10000
overwrite_unmanaged = true
}`),
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": te.datastoreID,
"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() {
ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second)
defer cancel()
_ = te.nodeStorageClient().DeleteDatastoreFile(ctx, "iso/fake_file.iso") //nolint: errcheck
err := te.nodeStorageClient().DownloadFileByURL(ctx, &storage.DownloadURLPostRequestBody{
Content: ptr.Ptr("iso"),
FileName: ptr.Ptr("fake_file.iso"),
Node: ptr.Ptr(te.nodeName),
Storage: ptr.Ptr(te.datastoreID),
URL: ptr.Ptr(fakeFileISO),
})
require.NoError(t, err)
t.Cleanup(func() {
e := te.nodeStorageClient().DeleteDatastoreFile(context.Background(), "iso/fake_file.iso")
require.NoError(t, e)
})
},
Config: te.renderConfig(`
resource "proxmox_virtual_environment_download_file" "iso_image3" {
content_type = "iso"
node_name = "{{.NodeName}}"
datastore_id = "{{.DatastoreID}}"
url = "{{.FakeFileISO}}"
file_name = "fake_iso_file3.iso"
overwrite_unmanaged = true
}`),
Check: resource.ComposeTestCheckFunc(
testResourceAttributes("proxmox_virtual_environment_download_file.iso_image3", map[string]string{
"id": "local:iso/fake_iso_file3.iso",
"content_type": "iso",
"node_name": te.nodeName,
"datastore_id": te.datastoreID,
"url": fakeFileISO,
"file_name": "fake_iso_file3.iso",
"size": "3",
"verify": "true",
}),
testNoResourceAttributesSet("proxmox_virtual_environment_download_file.iso_image3", []string{
"checksum",
"checksum_algorithm",
"decompression_algorithm",
}),
),
}}},
}
for _, tt := range tests {
t.Run(tt.name, func(t *testing.T) {
resource.ParallelTest(t, resource.TestCase{
ProtoV6ProviderFactories: te.accProviders,
Steps: tt.steps,
})
})
}
}