Skip to content

Commit f41e8d5

Browse files
committed
Test proxy data source against Kernel
1 parent fb0ef06 commit f41e8d5

2 files changed

Lines changed: 129 additions & 0 deletions

File tree

.github/workflows/acceptance.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -30,6 +30,9 @@ jobs:
3030
- name: Profile data source
3131
package: ./internal/datasources/profile
3232
project_id_required: true
33+
- name: Proxy data source
34+
package: ./internal/datasources/proxy
35+
project_id_required: true
3336
# Keep the job timeout above the go test timeout so Go can report the test
3437
# timeout before the runner stops the job. Either hard timeout can bypass
3538
# t.Cleanup, so release operators still inspect for leaked test resources.
Lines changed: 126 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,126 @@
1+
package proxy_test
2+
3+
import (
4+
"context"
5+
"fmt"
6+
"os"
7+
"testing"
8+
"time"
9+
10+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
11+
kernel "github.com/kernel/kernel-go-sdk"
12+
"github.com/kernel/terraform-provider-kernel/internal/acctest"
13+
"github.com/kernel/terraform-provider-kernel/internal/kernelclient"
14+
"github.com/kernel/terraform-provider-kernel/internal/projectscope"
15+
)
16+
17+
func TestAccProxyDataSourceByIDAndName(t *testing.T) {
18+
if os.Getenv("TF_ACC") != "1" {
19+
t.Skip("set TF_ACC=1 to run Terraform acceptance tests")
20+
}
21+
acctest.PreCheck(t)
22+
23+
projectID := os.Getenv(acctest.EnvProjectID)
24+
if projectID == "" {
25+
t.Fatalf("%s must be set for the proxy data source acceptance test", acctest.EnvProjectID)
26+
}
27+
28+
name := acctest.UniqueName(t, "proxy-data")
29+
id := testAccCreateProxyFixture(t, projectID, name)
30+
config := testAccProxyDataSourceConfig(id, name, projectID)
31+
32+
resource.Test(t, resource.TestCase{
33+
PreCheck: func() { acctest.PreCheck(t) },
34+
ProtoV6ProviderFactories: acctest.ProtoV6ProviderFactories(),
35+
Steps: []resource.TestStep{
36+
{
37+
Config: config,
38+
Check: resource.ComposeAggregateTestCheckFunc(
39+
resource.TestCheckResourceAttr("data.kernel_proxy.by_id", "id", id),
40+
resource.TestCheckResourceAttr("data.kernel_proxy.by_id", "name", name),
41+
resource.TestCheckResourceAttr("data.kernel_proxy.by_id", "project_id", projectID),
42+
resource.TestCheckResourceAttr("data.kernel_proxy.by_id", "type", "datacenter"),
43+
resource.TestCheckResourceAttr("data.kernel_proxy.by_id", "protocol", "https"),
44+
resource.TestCheckNoResourceAttr("data.kernel_proxy.by_id", "username"),
45+
resource.TestCheckNoResourceAttr("data.kernel_proxy.by_id", "password"),
46+
resource.TestCheckNoResourceAttr("data.kernel_proxy.by_id", "status"),
47+
resource.TestCheckNoResourceAttr("data.kernel_proxy.by_id", "ip_address"),
48+
resource.TestCheckResourceAttr("data.kernel_proxy.by_name", "id", id),
49+
resource.TestCheckResourceAttr("data.kernel_proxy.by_name", "name", name),
50+
resource.TestCheckNoResourceAttr("data.kernel_proxy.by_name", "project_id"),
51+
resource.TestCheckResourceAttr("data.kernel_proxy.by_name", "type", "datacenter"),
52+
resource.TestCheckResourceAttr("data.kernel_proxy.by_name", "protocol", "https"),
53+
resource.TestCheckNoResourceAttr("data.kernel_proxy.by_name", "username"),
54+
resource.TestCheckNoResourceAttr("data.kernel_proxy.by_name", "password"),
55+
resource.TestCheckNoResourceAttr("data.kernel_proxy.by_name", "status"),
56+
resource.TestCheckNoResourceAttr("data.kernel_proxy.by_name", "ip_address"),
57+
),
58+
},
59+
{
60+
Config: config,
61+
PlanOnly: true,
62+
},
63+
},
64+
})
65+
}
66+
67+
func testAccCreateProxyFixture(t *testing.T, projectID, name string) string {
68+
t.Helper()
69+
70+
ctx, cancel := context.WithTimeout(context.Background(), kernelclient.DefaultRequestTimeout)
71+
defer cancel()
72+
73+
proxy, err := acctest.ClientFromEnv().CreateProxy(ctx, projectID, kernel.ProxyNewParams{
74+
Name: kernel.String(name),
75+
Type: kernel.ProxyNewParamsTypeDatacenter,
76+
})
77+
if err != nil {
78+
t.Fatalf("create Kernel proxy fixture: %v", err)
79+
}
80+
if proxy == nil || proxy.ID == "" {
81+
t.Fatal("Kernel returned an empty proxy fixture response")
82+
}
83+
84+
testAccRequireProxyDeleted(t, projectID, proxy.ID)
85+
acctest.CleanupProxy(t, projectID, proxy.ID)
86+
87+
if proxy.Name != name {
88+
t.Fatalf("created Kernel proxy name = %q, want %q", proxy.Name, name)
89+
}
90+
if proxy.Type != kernel.ProxyNewResponseTypeDatacenter {
91+
t.Fatalf("created Kernel proxy type = %q, want datacenter", proxy.Type)
92+
}
93+
return proxy.ID
94+
}
95+
96+
func testAccRequireProxyDeleted(t *testing.T, projectID, id string) {
97+
t.Helper()
98+
99+
t.Cleanup(func() {
100+
ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second)
101+
defer cancel()
102+
103+
_, err := acctest.ClientFromEnv().GetProxy(ctx, projectID, id)
104+
if projectscope.IsNotFound(err) {
105+
return
106+
}
107+
if err != nil {
108+
t.Errorf("read Kernel proxy %s after cleanup: %v", id, err)
109+
return
110+
}
111+
t.Errorf("Kernel proxy %s still exists after cleanup", id)
112+
})
113+
}
114+
115+
func testAccProxyDataSourceConfig(id, name, projectID string) string {
116+
return acctest.ProviderConfig() + fmt.Sprintf(`
117+
data "kernel_proxy" "by_id" {
118+
id = %q
119+
project_id = %q
120+
}
121+
122+
data "kernel_proxy" "by_name" {
123+
name = %q
124+
}
125+
`, id, projectID, name)
126+
}

0 commit comments

Comments
 (0)