Skip to content

Commit

Permalink
Add system acceptance tests
Browse files Browse the repository at this point in the history
  • Loading branch information
stuart-mclaren-hpe committed Sep 12, 2024
1 parent 8107830 commit 52a37b5
Show file tree
Hide file tree
Showing 4 changed files with 144 additions and 0 deletions.
12 changes: 12 additions & 0 deletions internal/datasources/system/simulation.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
// (C) Copyright 2024 Hewlett Packard Enterprise Development LP
//go:build simulation

package system

import (
"github.com/HewlettPackard/hpegl-pcbe-terraform-resources/internal/simulator"
)

func init() {
simulator.System()

Check failure on line 11 in internal/datasources/system/simulation.go

View workflow job for this annotation

GitHub Actions / test (1.22.3)

undefined: simulator.System
}
1 change: 1 addition & 0 deletions internal/simulator/fixtures/systems/getByName.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"offset":0,"count":1,"items":[{"id":"126fd201-9e6e-5e31-9ffb-a766265b1fd3","generation":53033,"customerId":"bb20052ac81011ed895f7a6e2fba2c57","onPremAgentId":"AF-836032","name":"array-5305-grp","resourceUri":"/private-cloud-business/v1beta1/systems/126fd201-9e6e-5e31-9ffb-a766265b1fd3","type":"system","stackType":"DHCI","hypervisorClusters":[{"id":"acd4daea-e5e3-5f35-8be3-ce4a4b6d946c","name":"5305-CL","resourceUri":"/api/v1/hypervisor-clusters/acd4daea-e5e3-5f35-8be3-ce4a4b6d946c","hypervisorManagerId":"c47b89e9-3a66-4fb9-9a22-cdec3c51604d","hypervisorManagerName":"16.182.107.157","hypervisorManagerAddress":"16.182.107.157","hypervisorManagerAdminPasswordSecret":null},{"id":"87cb93a5-659b-5339-a91d-817459d482e3","name":"mclaren05","resourceUri":"/api/v1/hypervisor-clusters/87cb93a5-659b-5339-a91d-817459d482e3","hypervisorManagerId":"c47b89e9-3a66-4fb9-9a22-cdec3c51604d","hypervisorManagerName":"16.182.107.157","hypervisorManagerAddress":"16.182.107.157","hypervisorManagerAdminPasswordSecret":null},{"id":"298a299e-78f5-5acb-86ce-4e9fdc290ab7","name":"mclaren01","resourceUri":"/api/v1/hypervisor-clusters/298a299e-78f5-5acb-86ce-4e9fdc290ab7","hypervisorManagerId":"c47b89e9-3a66-4fb9-9a22-cdec3c51604d","hypervisorManagerName":"16.182.107.157","hypervisorManagerAddress":"16.182.107.157","hypervisorManagerAdminPasswordSecret":null},{"id":"7410577a-6503-5a2b-9cc7-523a7da4bcb9","name":"mclaren03","resourceUri":"/api/v1/hypervisor-clusters/7410577a-6503-5a2b-9cc7-523a7da4bcb9","hypervisorManagerId":"c47b89e9-3a66-4fb9-9a22-cdec3c51604d","hypervisorManagerName":"16.182.107.157","hypervisorManagerAddress":"16.182.107.157","hypervisorManagerAdminPasswordSecret":null},{"id":"71617591-2b06-5c9c-8393-dce7347ccb4a","name":"mclaren02","resourceUri":"/api/v1/hypervisor-clusters/71617591-2b06-5c9c-8393-dce7347ccb4a","hypervisorManagerId":"c47b89e9-3a66-4fb9-9a22-cdec3c51604d","hypervisorManagerName":"16.182.107.157","hypervisorManagerAddress":"16.182.107.157","hypervisorManagerAdminPasswordSecret":null},{"id":"ce08efe7-3ccf-56e7-95b0-7390d8f389a7","name":"mclaren04","resourceUri":"/api/v1/hypervisor-clusters/ce08efe7-3ccf-56e7-95b0-7390d8f389a7","hypervisorManagerId":"c47b89e9-3a66-4fb9-9a22-cdec3c51604d","hypervisorManagerName":"16.182.107.157","hypervisorManagerAddress":"16.182.107.157","hypervisorManagerAdminPasswordSecret":null},{"id":"fee25736-db8e-55a8-a2f3-06f5ae0e7923","name":"mclaren07","resourceUri":"/api/v1/hypervisor-clusters/fee25736-db8e-55a8-a2f3-06f5ae0e7923","hypervisorManagerId":"c47b89e9-3a66-4fb9-9a22-cdec3c51604d","hypervisorManagerName":"16.182.107.157","hypervisorManagerAddress":"16.182.107.157","hypervisorManagerAdminPasswordSecret":null}],"state":"ONLINE","health":{"servers":"WARNING","networks":"OK","storage":"CRITICAL","overallHealth":"CRITICAL"},"configAnalysisStatus":{"createdAt":"2024-07-30T08:08:13Z","nextScheduledRunTime":"2024-07-31T08:07:20.502Z","totalFailed":0,"totalPassed":66,"totalWarning":1,"createdBy":"ONPREM","ruleRunStartTime":"2024-07-30T08:07:20.484Z"},"softwareInfo":{"currentUpdateStatus":{"state":"NOT_READY"},"hypervisorClusters":[{"id":"acd4daea-e5e3-5f35-8be3-ce4a4b6d946c","name":"5305-CL","resourceUri":"/api/v1/hypervisor-clusters/acd4daea-e5e3-5f35-8be3-ce4a4b6d946c","type":"hypervisor-cluster","customerId":"bb20052ac81011ed895f7a6e2fba2c57","generation":1271,"currentUpdateStatus":{"state":"NOT_READY"},"currentSoftwareCatalog":{"version":"Unavailable","hypervisor":{"name":"ESXi","version":"8.0.1-21495797"},"hypervisorManager":{},"storageSoftware":{"name":"Nimble OS"},"serverFirmware":{},"storageConnectionManager":{"name":"HPE Storage Connection Manager","version":"7.0.2-700014"},"reasons":["Unable to fetch HPE Storage Software version. Cannot determine current catalog version"]},"unavailableSoftwareCatalogs":[{"version":"7.7.38.18.40","hypervisor":{"name":"ESXi 7U3 May 2024","releaseDate":"2024-05-29","version":"7.0.3-23794027","releaseNotesUrl":"https://support.hpe.com/hpesc/public/docDisplay?docId=sd00004409en_us\u0026docLocale=en_US"},"hypervisorManager":{},"storageSoftware":{"name":"Nimble OS","releaseDate":"2024-05-22","version":"6.1.2.500-1053701","releaseNotesUrl":"https://support.hpe.com/hpesc/public/docDisplay?docId=sd00004501en_us"},"serverFirmware":{"name":"Service Pack for ProLiant","releaseDate":"2024-05-27","version":"2024.04.00","releaseNotesUrl":"https://support.hpe.com/hpesc/public/docDisplay?docId=dp00004505en_us"},"storageConnectionManager":{"name":"Nimble Connection Manager","releaseDate":"2021-05-18","version":"7.0.2-700014","releaseNotesUrl":"https://infosight.hpe.com/InfoSight/media/cms/active/public/pubs_HPE_Storage_Connection_Manager_7_0_2_for_VMware_Release_Notes_7_0_2.pdf"},"releaseDate":"2024-06-06","reasons":["Current HPE Storage Software version has no direct update path to the version in the target catalog.","Current ESXi version has no direct update path to the version in the target catalog."]},{"version":"7.7.39.18.40","hypervisor":{"name":"ESXi 8U3 June 2024","releaseDate":"2024-06-24","version":"8.0.3-24022510","releaseNotesUrl":"https://support.hpe.com/hpesc/public/docDisplay?docId=sd00004661en_us\u0026docLocale=en_US"},"hypervisorManager":{},"storageSoftware":{"name":"Nimble OS","releaseDate":"2024-05-22","version":"6.1.2.500-1053701","releaseNotesUrl":"https://support.hpe.com/hpesc/public/docDisplay?docId=sd00004501en_us"},"serverFirmware":{"name":"Service Pack for ProLiant","releaseDate":"2024-05-27","version":"2024.04.00","releaseNotesUrl":"https://support.hpe.com/hpesc/public/docDisplay?docId=dp00004505en_us"},"storageConnectionManager":{"name":"Nimble Connection Manager","releaseDate":"2021-05-18","version":"7.0.2-700014","releaseNotesUrl":"https://infosight.hpe.com/InfoSight/media/cms/active/public/pubs_HPE_Storage_Connection_Manager_7_0_2_for_VMware_Release_Notes_7_0_2.pdf"},"releaseDate":"2024-06-25","reasons":["Current HPE Storage Software version has no direct update path to the version in the target catalog."]}]}],"precheckValidUntil":"0001-01-01T00:20:00Z"},"storageUsage":{"sizeInBytes":11522365489152,"usageInBytes":6855793},"storageSystem":{"id":"0072c65541fc2058ba000000000000000000000001","name":"array-5305-grp","resourceUri":"/api/v1/storage-systems/device-type2/0072c65541fc2058ba000000000000000000000001","groupName":"array-5305-grp","groupState":"initialized","groupLeaderName":"array-5305","groupLeaderSerialNumber":"AF-836032","dedupeRatio":3.9530692100524902,"compressionRatio":41.610069274902344,"serialNumber":"AF-836032","storageType":"Alletra","numberOfJbofs":0,"numberOfNodes":0,"numberOfCores":0},"associatedResourceCounts":{"hypervisorClusterCount":7,"datastoreCount":6,"vmCount":0,"serversCount":1,"switchesCount":0,"storageArrayCount":1},"computeUsage":{"cpuUsedMhz":178,"cpuCapacityMhz":63480,"memoryUsedBytes":6039797760,"memoryCapacityBytes":549481267200},"location":{"stateCode":"","zipCode":"","city":"","countryCode":"","latitude":"","longitude":""},"systemVms":null}],"total":1}
9 changes: 9 additions & 0 deletions test/system/simulation.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
// (C) Copyright 2024 Hewlett Packard Enterprise Development LP
//go:build simulation
// +build simulation

package acceptance

func init() {
simulation = true
}
122 changes: 122 additions & 0 deletions test/system/system_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,122 @@
// (C) Copyright 2024 Hewlett Packard Enterprise Development LP

package acceptance

import (
"fmt"
"regexp"
"testing"

"github.com/HewlettPackard/hpegl-pcbe-terraform-resources/internal/provider"
"github.com/google/uuid"
"github.com/hashicorp/terraform-plugin-framework/providerserver"
"github.com/hashicorp/terraform-plugin-go/tfprotov6"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/terraform"
)

const (
providerConfig = `
terraform {
required_providers {
hpegl = {
source = "github.com/HewlettPackard/hpegl-pcbe-terraform-resources"
}
}
}
provider "hpegl" {
pc {
host = "http://localhost:8080"
token = "abcdefghijklmnopqrstuvwxyz-0123456789"
http_dump = true
poll_interval = 0.001
max_polls = 10
}
}
`
)

var simulation = false

var testAccProtoV6ProviderFactories = map[string]func() (
tfprotov6.ProviderServer, error,
){
"scaffolding": providerserver.NewProtocol6WithError(
provider.New("test")(),
),
}

func checkUUIDAttr(resource string, attr string) func(*terraform.State) error {
return func(s *terraform.State) error {
rs, ok := s.RootModule().Resources[resource]
if !ok {
return fmt.Errorf("resource not found: %s", resource)
}

attrValue := rs.Primary.Attributes[attr]
_, err := uuid.Parse(attrValue)

return err
}
}

func TestAccSystemDataSource(t *testing.T) {
config := providerConfig + `
data "hpegl_pc_system" "test" {
name = "array-5305-grp"
}
`

checks := []resource.TestCheckFunc{
resource.TestCheckResourceAttr(
"data.hpegl_pc_system.test",
"name",
"array-5305-grp",
),
checkUUIDAttr("data.hpegl_pc_system.test", "id"),
}

if simulation {
// In simulation mode the ID value is known in advance
checks = append(checks,
resource.TestCheckResourceAttr(
"data.hpegl_pc_system.test",
"id",
"126fd201-9e6e-5e31-9ffb-a766265b1fd3",
),
)
}

checkFn := resource.ComposeAggregateTestCheckFunc(checks...)

resource.Test(t, resource.TestCase{
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
Steps: []resource.TestStep{
{
Config: config,
Check: checkFn,
},
},
})
}

func TestAccSystemDataSourceMissingName(t *testing.T) {
config := providerConfig + `
data "hpegl_pc_system" "test" {
}
`
expected := `The argument "name" is required, but no definition was found.`
resource.Test(t, resource.TestCase{
ProtoV6ProviderFactories: testAccProtoV6ProviderFactories,
Steps: []resource.TestStep{
{
Config: config,
ExpectError: regexp.MustCompile(expected),
PlanOnly: true,
},
},
})

}

0 comments on commit 52a37b5

Please sign in to comment.