Files
terraform-provider-unifi/internal/provider/acctest/resource_setting_rsyslogd_test.go
Mateusz Filipowicz 9f2573d72c feat: add support for Remote Syslog settings with unifi_setting_rsyslog resource (#47)
* feat: add support for Remote Syslog settings with `unifi_setting_rsyslog` resource

* set controller version constraint on 8.5 for rsyslogd

* require controller version 7.2 for teleport

* fix: use dedicated site for USG setting tests to not interfere with other resources
2025-03-12 00:59:03 +01:00

209 lines
7.2 KiB
Go

package acctest
import (
pt "github.com/filipowm/terraform-provider-unifi/internal/provider/testing"
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
"github.com/hashicorp/terraform-plugin-testing/plancheck"
"regexp"
"sync"
"testing"
)
var settingRsyslogdLock = &sync.Mutex{}
// TestAccSettingRsyslogdBasic tests the basic creation and import of the rsyslogd settings
func TestAccSettingRsyslogdBasic(t *testing.T) {
AcceptanceTest(t, AcceptanceTestCase{
VersionConstraint: ">= 8.5",
Lock: settingRsyslogdLock,
Steps: []resource.TestStep{
{
Config: testAccSettingRsyslogdConfigBasic(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("unifi_setting_rsyslogd.test", "id"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "site", "default"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "enabled", "true"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "ip", "192.168.1.100"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "port", "514"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "contents.#", "2"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "contents.0", "device"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "contents.1", "client"),
),
ConfigPlanChecks: pt.CheckResourceActions("unifi_setting_rsyslogd.test", plancheck.ResourceActionCreate),
},
pt.ImportStepWithSite("unifi_setting_rsyslogd.test"),
},
})
}
// TestAccSettingRsyslogdUpdate tests updating the rsyslogd settings with different values
func TestAccSettingRsyslogdUpdate(t *testing.T) {
AcceptanceTest(t, AcceptanceTestCase{
VersionConstraint: ">= 8.5",
Lock: settingRsyslogdLock,
Steps: []resource.TestStep{
{
Config: testAccSettingRsyslogdConfigBasic(),
},
{
Config: testAccSettingRsyslogdConfigUpdate(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("unifi_setting_rsyslogd.test", "id"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "site", "default"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "enabled", "true"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "ip", "192.168.1.200"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "port", "1514"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "contents.#", "3"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "contents.0", "device"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "contents.1", "client"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "contents.2", "admin_activity"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "debug", "true"),
),
ConfigPlanChecks: pt.CheckResourceActions("unifi_setting_rsyslogd.test", plancheck.ResourceActionUpdate),
},
},
})
}
// TestAccSettingRsyslogdDisable tests disabling the rsyslogd settings
func TestAccSettingRsyslogdDisable(t *testing.T) {
AcceptanceTest(t, AcceptanceTestCase{
VersionConstraint: ">= 8.5",
Lock: settingRsyslogdLock,
Steps: []resource.TestStep{
{
Config: testAccSettingRsyslogdConfigBasic(),
},
{
Config: testAccSettingRsyslogdConfigDisabled(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("unifi_setting_rsyslogd.test", "id"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "site", "default"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "enabled", "false"),
resource.TestCheckNoResourceAttr("unifi_setting_rsyslogd.test", "ip"),
resource.TestCheckNoResourceAttr("unifi_setting_rsyslogd.test", "port"),
resource.TestCheckNoResourceAttr("unifi_setting_rsyslogd.test", "contents.#"),
resource.TestCheckNoResourceAttr("unifi_setting_rsyslogd.test", "debug"),
),
ConfigPlanChecks: pt.CheckResourceActions("unifi_setting_rsyslogd.test", plancheck.ResourceActionUpdate),
},
},
})
}
// TestAccSettingRsyslogdReEnable tests re-enabling the rsyslogd settings with different values
func TestAccSettingRsyslogdReEnable(t *testing.T) {
AcceptanceTest(t, AcceptanceTestCase{
VersionConstraint: ">= 8.5",
Lock: settingRsyslogdLock,
Steps: []resource.TestStep{
{
Config: testAccSettingRsyslogdConfigDisabled(),
},
{
Config: testAccSettingRsyslogdConfigReEnabled(),
Check: resource.ComposeTestCheckFunc(
resource.TestCheckResourceAttrSet("unifi_setting_rsyslogd.test", "id"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "site", "default"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "enabled", "true"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "netconsole_enabled", "true"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "netconsole_host", "192.168.1.150"),
resource.TestCheckResourceAttr("unifi_setting_rsyslogd.test", "netconsole_port", "1514"),
),
ConfigPlanChecks: pt.CheckResourceActions("unifi_setting_rsyslogd.test", plancheck.ResourceActionUpdate),
},
},
})
}
// TestAccSettingRsyslogdValidation tests validation errors when trying to set fields with rsyslogd disabled
func TestAccSettingRsyslogdValidation(t *testing.T) {
AcceptanceTest(t, AcceptanceTestCase{
VersionConstraint: ">= 8.5",
Lock: settingRsyslogdLock,
Steps: []resource.TestStep{
{
Config: testAccSettingRsyslogdConfigInvalid(),
ExpectError: regexp.MustCompile(`any of those attributes must not be configured`),
},
},
})
}
// TestAccSettingRsyslogdPortValidation tests validation errors for invalid port numbers
func TestAccSettingRsyslogdPortValidation(t *testing.T) {
AcceptanceTest(t, AcceptanceTestCase{
VersionConstraint: ">= 8.5",
Lock: settingRsyslogdLock,
Steps: []resource.TestStep{
{
Config: testAccSettingRsyslogdConfigInvalidPort(),
ExpectError: regexp.MustCompile(`value must be between`),
},
},
})
}
func testAccSettingRsyslogdConfigBasic() string {
return `
resource "unifi_setting_rsyslogd" "test" {
enabled = true
ip = "192.168.1.100"
port = 514
contents = ["device", "client"]
}
`
}
func testAccSettingRsyslogdConfigUpdate() string {
return `
resource "unifi_setting_rsyslogd" "test" {
enabled = true
ip = "192.168.1.200"
port = 1514
contents = ["device", "client", "admin_activity"]
debug = true
}
`
}
func testAccSettingRsyslogdConfigDisabled() string {
return `
resource "unifi_setting_rsyslogd" "test" {
enabled = false
}
`
}
func testAccSettingRsyslogdConfigReEnabled() string {
return `
resource "unifi_setting_rsyslogd" "test" {
enabled = true
contents = ["device", "client"]
ip = "192.168.1.200"
netconsole_enabled = true
netconsole_host = "192.168.1.150"
netconsole_port = 1514
}
`
}
func testAccSettingRsyslogdConfigInvalid() string {
return `
resource "unifi_setting_rsyslogd" "test" {
enabled = false
ip = "192.168.1.100"
}
`
}
func testAccSettingRsyslogdConfigInvalidPort() string {
return `
resource "unifi_setting_rsyslogd" "test" {
enabled = true
ip = "192.168.1.100"
port = 70000
}
`
}