Skip to content

Commit e245f76

Browse files
committed
Test project-qualified extension import
1 parent 59c5c08 commit e245f76

2 files changed

Lines changed: 60 additions & 1 deletion

File tree

docs/acceptance.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ operation. Secrets must remain GitHub Actions secrets and must not be printed.
4040
| --- | --- | --- | --- |
4141
| `kernel_project` resource | Test present | Create, rename, no-drift plan, import, delete, and 404 verification. | None. |
4242
| `kernel_browser_pool` resource | Test present | Create, durable update with stable ID, no-drift plan, bare and project-qualified import paths, explicit project scope, non-force delete, and 404 verification. | Keep leased-browser conflict behavior in unit tests; acceptance must not create runtime leases. |
43-
| `kernel_extension` resource | Test present | Upload, checksum state, no-drift plan, metadata-only import, content replacement with new ID, old-ID disappearance, delete, and 404 verification. | Add project-qualified import to live coverage before the v1 tag. |
43+
| `kernel_extension` resource | Test present | Upload, checksum state, no-drift plan, bare and project-qualified metadata-only import paths, content replacement with new ID, old-ID disappearance, delete, and 404 verification. | None. |
4444
| `kernel_browser_pool` data source | Test present | A uniquely created pool is read by canonical ID and byte-exact name, including normalized durable configuration, a no-drift plan, and post-destroy coded `not_found` verification. | None. |
4545
| `kernel_project` data source | Test present | A uniquely created project is read by canonical ID and exact name; the provider default resolves the configured project; metadata, no-drift planning, and post-destroy coded `not_found` are verified. | None. |
4646
| `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. |

internal/resources/extension/resource_acc_test.go

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,54 @@ func TestAccExtensionLifecycle(t *testing.T) {
7474
})
7575
}
7676

77+
func TestAccExtensionProjectScopedImport(t *testing.T) {
78+
projectID := os.Getenv(acctest.EnvAltProjectID)
79+
if projectID == "" {
80+
projectID = os.Getenv(acctest.EnvProjectID)
81+
}
82+
if projectID == "" {
83+
t.Skipf("%s or %s must be set for the project-scoped extension test", acctest.EnvAltProjectID, acctest.EnvProjectID)
84+
}
85+
86+
name := acctest.UniqueName(t, "extension-scoped")
87+
sourcePath, checksum := acctest.ExtensionArchive(t, "project-scoped")
88+
config := testAccExtensionProjectConfig(name, sourcePath, projectID)
89+
var extensionID string
90+
91+
resource.Test(t, resource.TestCase{
92+
PreCheck: func() { acctest.PreCheck(t) },
93+
ProtoV6ProviderFactories: acctest.ProtoV6ProviderFactories(),
94+
CheckDestroy: testAccCheckExtensionDestroyed(),
95+
Steps: []resource.TestStep{
96+
{
97+
Config: config,
98+
Check: resource.ComposeAggregateTestCheckFunc(
99+
testAccCaptureExtensionID(t, extensionResourceName, &extensionID),
100+
resource.TestCheckResourceAttr(extensionResourceName, "project_id", projectID),
101+
resource.TestCheckResourceAttr(extensionResourceName, "source_sha256", checksum),
102+
),
103+
},
104+
{
105+
ResourceName: extensionResourceName,
106+
ImportState: true,
107+
ImportStateVerify: true,
108+
ImportStatePersist: true,
109+
ImportStateIdFunc: func(state *terraform.State) (string, error) {
110+
id, stateProjectID, err := extensionStateValues(state, extensionResourceName)
111+
if err != nil {
112+
return "", err
113+
}
114+
return stateProjectID + "/" + id, nil
115+
},
116+
},
117+
{
118+
Config: config,
119+
PlanOnly: true,
120+
},
121+
},
122+
})
123+
}
124+
77125
func testAccExtensionConfig(name, sourcePath string) string {
78126
return acctest.ProviderConfig() + fmt.Sprintf(`
79127
resource "kernel_extension" "test" {
@@ -84,6 +132,17 @@ resource "kernel_extension" "test" {
84132
`, name, sourcePath, sourcePath)
85133
}
86134

135+
func testAccExtensionProjectConfig(name, sourcePath, projectID string) string {
136+
return acctest.ProviderConfig() + fmt.Sprintf(`
137+
resource "kernel_extension" "test" {
138+
name = %[1]q
139+
source_path = %[2]q
140+
source_sha256 = filesha256(%[2]q)
141+
project_id = %[3]q
142+
}
143+
`, name, sourcePath, projectID)
144+
}
145+
87146
func testAccCaptureExtensionID(t *testing.T, resourceName string, extensionID *string) resource.TestCheckFunc {
88147
t.Helper()
89148

0 commit comments

Comments
 (0)