diff --git a/internal/provider/acctest/data_user_test.go b/internal/provider/acctest/data_user_test.go index eddaf07..0b8e543 100644 --- a/internal/provider/acctest/data_user_test.go +++ b/internal/provider/acctest/data_user_test.go @@ -3,7 +3,9 @@ package acctest import ( "context" "fmt" + "github.com/apparentlymart/go-cidr/cidr" "github.com/hashicorp/terraform-plugin-testing/helper/acctest" + "net" "testing" "github.com/filipowm/go-unifi/unifi" @@ -30,7 +32,63 @@ func TestAccDataUser_default(t *testing.T) { Steps: []resource.TestStep{ { Config: testAccDataUserConfig_default(mac), - Check: resource.ComposeTestCheckFunc(), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.unifi_user.test", "id"), + resource.TestCheckResourceAttr("data.unifi_user.test", "mac", mac), + resource.TestCheckResourceAttr("data.unifi_user.test", "name", name), + ), + }, + }, + }) +} + +func TestAccDataUser_localDnsRecord(t *testing.T) { + mac, unallocateTestMac := pt.AllocateTestMac(t) + defer unallocateTestMac() + name := acctest.RandomWithPrefix("tfacc") + ctx := context.Background() + n, err := testClient.ListNetwork(ctx, "default") + if err != nil { + t.Fatal(err) + } + if len(n) == 0 { + t.Fatal("no networks found, but default should exist") + } + _, subnet, err := net.ParseCIDR(n[0].IPSubnet) + if err != nil { + t.Fatal(err) + } + ip, err := cidr.Host(subnet, 1) + if err != nil { + t.Fatal(err) + } + AcceptanceTest(t, AcceptanceTestCase{ + VersionConstraint: ">= 7.3", + PreCheck: func() { + _, err = testClient.CreateUser(ctx, "default", &unifi.User{ + MAC: mac, + Name: name, + UseFixedIP: true, + NetworkID: n[0].ID, + FixedIP: ip.String(), + LocalDNSRecord: "myuser.example.com", + LocalDNSRecordEnabled: true, + Note: name, + }) + if err != nil { + t.Fatal(err) + } + }, + Steps: []resource.TestStep{ + { + Config: testAccDataUserConfig_default(mac), + Check: resource.ComposeTestCheckFunc( + resource.TestCheckResourceAttrSet("data.unifi_user.test", "id"), + resource.TestCheckResourceAttr("data.unifi_user.test", "mac", mac), + resource.TestCheckResourceAttr("data.unifi_user.test", "name", name), + resource.TestCheckResourceAttr("data.unifi_user.test", "local_dns_record", "myuser.example.com"), + resource.TestCheckResourceAttr("data.unifi_user.test", "fixed_ip", ip.String()), + ), }, }, }) diff --git a/internal/provider/acctest/datasource_dns_record_test.go b/internal/provider/acctest/datasource_dns_record_test.go index 28d230a..4344b24 100644 --- a/internal/provider/acctest/datasource_dns_record_test.go +++ b/internal/provider/acctest/datasource_dns_record_test.go @@ -66,7 +66,7 @@ var ( dnsDataSourceFilterErrorRegex = regexp.MustCompile(`[filter.name,filter.record]`) ) -func TestDNSRecordDataSource_failWithoutFilter(t *testing.T) { +func TestDNSRecordDataSource_errorWithoutFilter(t *testing.T) { AcceptanceTest(t, AcceptanceTestCase{ MinVersion: base.ControllerVersionDnsRecords, diff --git a/internal/provider/user/data_user.go b/internal/provider/user/data_user.go index a90edbd..d1d25eb 100644 --- a/internal/provider/user/data_user.go +++ b/internal/provider/user/data_user.go @@ -54,7 +54,7 @@ func DataUser() *schema.Resource { Computed: true, }, "fixed_ip": { - Description: "fixed IPv4 address set for this user.", + Description: "Fixed IPv4 address set for this user.", Type: schema.TypeString, Computed: true, }, @@ -123,18 +123,18 @@ func dataUserRead(ctx context.Context, d *schema.ResourceData, meta interface{}) localDnsRecord = resp.LocalDNSRecord } d.SetId(resp.ID) - d.Set("site", site) - d.Set("mac", resp.MAC) - d.Set("name", resp.Name) - d.Set("user_group_id", resp.UserGroupID) - d.Set("note", resp.Note) - d.Set("fixed_ip", fixedIP) - d.Set("network_id", resp.NetworkID) d.Set("blocked", resp.Blocked) d.Set("dev_id_override", resp.DevIdOverride) + d.Set("fixed_ip", fixedIP) d.Set("hostname", resp.Hostname) d.Set("ip", resp.IP) - d.Set("ip", localDnsRecord) + d.Set("local_dns_record", localDnsRecord) + d.Set("mac", resp.MAC) + d.Set("name", resp.Name) + d.Set("network_id", resp.NetworkID) + d.Set("note", resp.Note) + d.Set("site", site) + d.Set("user_group_id", resp.UserGroupID) return nil } diff --git a/internal/provider/user/resource_user.go b/internal/provider/user/resource_user.go index 729a7fd..0da5d7e 100644 --- a/internal/provider/user/resource_user.go +++ b/internal/provider/user/resource_user.go @@ -12,6 +12,8 @@ import ( "github.com/hashicorp/terraform-plugin-sdk/v2/helper/validation" ) +// TODO add validation: api.err.LocalDnsRecordRequiresFixedIp +// TODO require v7.3+ for local dns record func ResourceUser() *schema.Resource { return &schema.Resource{ Description: "The `unifi_user` resource manages network clients in the UniFi controller, which are identified by their unique MAC addresses.\n\n" +