Skip to content

Commit 269fe20

Browse files
committed
Test app data source against Kernel
1 parent aef4842 commit 269fe20

3 files changed

Lines changed: 103 additions & 5 deletions

File tree

.github/workflows/acceptance.yml

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ jobs:
4242
- name: Proxy data source
4343
package: ./internal/datasources/proxy
4444
project_id_required: true
45+
- name: App data source
46+
package: ./internal/datasources/app
47+
project_id_required: true
48+
app_fixture_required: true
4549
# Keep the job timeout above the go test timeout so Go can report the test
4650
# timeout before the runner stops the job. Either hard timeout can bypass
4751
# t.Cleanup, so release operators still inspect for leaked test resources.
@@ -64,6 +68,15 @@ jobs:
6468
run: |
6569
: "${KERNEL_PROJECT_ID:?Set the KERNEL_PROJECT_ID repository secret before running project-scoped acceptance tests.}"
6670
71+
- name: Check app fixture variables
72+
if: matrix.app_fixture_required
73+
env:
74+
KERNEL_ACC_APP_NAME: ${{ vars.KERNEL_ACC_APP_NAME }}
75+
KERNEL_ACC_APP_VERSION: ${{ vars.KERNEL_ACC_APP_VERSION }}
76+
run: |
77+
: "${KERNEL_ACC_APP_NAME:?Set the KERNEL_ACC_APP_NAME repository variable to the release-owned running app fixture.}"
78+
: "${KERNEL_ACC_APP_VERSION:?Set the KERNEL_ACC_APP_VERSION repository variable to the release-owned running app fixture.}"
79+
6780
- name: Checkout
6881
uses: actions/checkout@v6
6982

@@ -85,4 +98,6 @@ jobs:
8598
KERNEL_BASE_URL: ${{ secrets.KERNEL_BASE_URL }}
8699
KERNEL_PROJECT_ID: ${{ matrix.project_id_required && secrets.KERNEL_PROJECT_ID || '' }}
87100
KERNEL_ALT_PROJECT_ID: ${{ matrix.project_id_required && secrets.KERNEL_ALT_PROJECT_ID || '' }}
101+
KERNEL_ACC_APP_NAME: ${{ matrix.app_fixture_required && vars.KERNEL_ACC_APP_NAME || '' }}
102+
KERNEL_ACC_APP_VERSION: ${{ matrix.app_fixture_required && vars.KERNEL_ACC_APP_VERSION || '' }}
88103
run: go test -count=1 -timeout=30m -v ${{ matrix.package }} -run TestAcc

docs/acceptance.md

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,13 @@ export KERNEL_API_KEY=...
2828
export KERNEL_PROJECT_ID=...
2929
export KERNEL_ALT_PROJECT_ID=... # optional second project
3030
export KERNEL_BASE_URL=... # optional non-production API
31+
export KERNEL_ACC_APP_NAME=... # release-owned running app fixture
32+
export KERNEL_ACC_APP_VERSION=... # exact fixture version
3133
```
3234

33-
Future fixture-backed data-source tests may add narrowly named variables only
34-
when the provider cannot create and clean up the fixture through a durable SDK
35-
operation. Secrets must remain GitHub Actions secrets and must not be printed.
35+
The app selectors are non-secret repository variables and must identify exactly
36+
one running app version in `KERNEL_PROJECT_ID`. Secrets must remain GitHub
37+
Actions secrets and must not be printed.
3638

3739
## Current Matrix
3840

@@ -46,7 +48,7 @@ operation. Secrets must remain GitHub Actions secrets and must not be printed.
4648
| `kernel_extension` data source | Test present | A uniquely uploaded extension is read by canonical ID and exact name through explicit and provider-default project scope; metadata, no-drift planning, and post-destroy coded `not_found` are verified. | None. |
4749
| `kernel_profile` data source | Test present | A uniquely created durable profile is read by canonical ID and exact name through explicit and provider-default project scope; metadata, no-drift planning, and post-cleanup coded `not_found` are verified. | None. |
4850
| `kernel_proxy` data source | Test present | A uniquely created managed datacenter proxy is read by canonical ID and exact name through explicit and provider-default project scope; durable type/protocol metadata, no-drift planning, and post-cleanup coded `not_found` are verified without fixture credentials. | None. |
49-
| `kernel_app` data source | Fixture blocked; tag blocker | Unit, SDK transport, pagination, ambiguity, project-scope, and Framework state tests only. | Provide a release-owned running deployment fixture or a deterministic durable deployment setup. Verify exact app/version lookup without invocation and without exposing env values. |
51+
| `kernel_app` data source | Test present | A release-owned running app version is read by exact name/version through explicit and provider-default project scope; canonical deployment metadata and no-drift planning are verified without invocation. Unit coverage verifies action-name and environment-key flattening without environment values. | Keep `KERNEL_ACC_APP_NAME` and `KERNEL_ACC_APP_VERSION` pointed at exactly one running app version in the acceptance project. |
5052
| `kernel_api_key` data source | Deferred; unregistered | No provider surface yet. | Wait for a tagged SDK with exact-name filtering, then add masked ID/name lookup acceptance. |
5153
| Profile, proxy, deployment, and API-key resources | Deferred; unregistered | No provider surfaces yet. | Enter the matrix only after their documented API/SDK/state blockers are resolved and implementation lands. |
5254

@@ -55,7 +57,7 @@ against the release commit. The release record below supplies that evidence.
5557

5658
## Current Commands
5759

58-
Run the eight existing packages independently for fast failure isolation:
60+
Run the nine existing packages independently for fast failure isolation:
5961

6062
```sh
6163
go test -count=1 -timeout=30m -v ./internal/resources/project -run TestAcc
@@ -65,6 +67,7 @@ go test -count=1 -timeout=30m -v ./internal/resources/extension -run TestAcc
6567
go test -count=1 -timeout=30m -v ./internal/datasources/extension -run TestAcc
6668
go test -count=1 -timeout=30m -v ./internal/datasources/profile -run TestAcc
6769
go test -count=1 -timeout=30m -v ./internal/datasources/proxy -run TestAcc
70+
go test -count=1 -timeout=30m -v ./internal/datasources/app -run TestAcc
6871
go test -count=1 -timeout=30m -v ./internal/datasources/browserpool -run TestAcc
6972
```
7073

Lines changed: 80 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,80 @@
1+
package app_test
2+
3+
import (
4+
"fmt"
5+
"os"
6+
"testing"
7+
8+
"github.com/hashicorp/terraform-plugin-testing/helper/resource"
9+
"github.com/kernel/terraform-provider-kernel/internal/acctest"
10+
)
11+
12+
const (
13+
envAppName = "KERNEL_ACC_APP_NAME"
14+
envAppVersion = "KERNEL_ACC_APP_VERSION"
15+
)
16+
17+
func TestAccAppDataSourceExplicitAndProviderDefaultScope(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 := requireAppFixtureEnv(t, acctest.EnvProjectID)
24+
appName := requireAppFixtureEnv(t, envAppName)
25+
version := requireAppFixtureEnv(t, envAppVersion)
26+
config := testAccAppDataSourceConfig(projectID, appName, version)
27+
28+
resource.Test(t, resource.TestCase{
29+
PreCheck: func() { acctest.PreCheck(t) },
30+
ProtoV6ProviderFactories: acctest.ProtoV6ProviderFactories(),
31+
Steps: []resource.TestStep{
32+
{
33+
Config: config,
34+
Check: resource.ComposeAggregateTestCheckFunc(
35+
resource.TestCheckResourceAttrPair("data.kernel_app.explicit", "id", "data.kernel_app.provider_default", "id"),
36+
resource.TestCheckResourceAttrPair("data.kernel_app.explicit", "deployment_id", "data.kernel_app.provider_default", "deployment_id"),
37+
resource.TestCheckResourceAttrPair("data.kernel_app.explicit", "region", "data.kernel_app.provider_default", "region"),
38+
resource.TestCheckResourceAttr("data.kernel_app.explicit", "app_name", appName),
39+
resource.TestCheckResourceAttr("data.kernel_app.explicit", "version", version),
40+
resource.TestCheckResourceAttr("data.kernel_app.explicit", "project_id", projectID),
41+
resource.TestCheckResourceAttrSet("data.kernel_app.explicit", "id"),
42+
resource.TestCheckResourceAttrSet("data.kernel_app.explicit", "deployment_id"),
43+
resource.TestCheckResourceAttrSet("data.kernel_app.explicit", "region"),
44+
resource.TestCheckResourceAttr("data.kernel_app.provider_default", "app_name", appName),
45+
resource.TestCheckResourceAttr("data.kernel_app.provider_default", "version", version),
46+
resource.TestCheckNoResourceAttr("data.kernel_app.provider_default", "project_id"),
47+
),
48+
},
49+
{
50+
Config: config,
51+
PlanOnly: true,
52+
},
53+
},
54+
})
55+
}
56+
57+
func requireAppFixtureEnv(t *testing.T, name string) string {
58+
t.Helper()
59+
60+
value := os.Getenv(name)
61+
if value == "" {
62+
t.Fatalf("%s must identify the release-owned app fixture", name)
63+
}
64+
return value
65+
}
66+
67+
func testAccAppDataSourceConfig(projectID, appName, version string) string {
68+
return acctest.ProviderConfig() + fmt.Sprintf(`
69+
data "kernel_app" "explicit" {
70+
app_name = %[1]q
71+
version = %[2]q
72+
project_id = %[3]q
73+
}
74+
75+
data "kernel_app" "provider_default" {
76+
app_name = %[1]q
77+
version = %[2]q
78+
}
79+
`, appName, version, projectID)
80+
}

0 commit comments

Comments
 (0)