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 8759c79
Show file tree
Hide file tree
Showing 5 changed files with 172 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()
}
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}
29 changes: 29 additions & 0 deletions internal/simulator/system.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
// (C) Copyright 2024 Hewlett Packard Enterprise Development LP

package simulator

import (
_ "embed"

"github.com/h2non/gock"
)

// TODO: (API) Replace fake data with real data when possible
//
//go:embed fixtures/systems/getByName.json
var systemsByName string

func simulateSystemGetByName() {
systemName := "array-5305-grp"

gock.New("http://localhost").
Get("/private-cloud-business/v1beta1/systems").
MatchParam("filter", "name eq "+systemName).
Reply(200).
SetHeader("Content-Type", "application/json").
BodyString(systemsByName)
}

func System() {
simulateSystemGetByName()
}
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
}
121 changes: 121 additions & 0 deletions test/system/system_test.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
// (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 8759c79

Please sign in to comment.