Skip to content

Commit 527a551

Browse files
robot-test-coverage-registry-overwrite
Summary: - Changed existing mocked registry entries for point of difference, in otder to support meaningful testing. - Force drop registry cache entry for a given provider on `registry pull`. - Added robot test `Registry Pull Overwrite Works in Both Directions`.
1 parent 6dfe0a4 commit 527a551

File tree

7 files changed

+96
-1
lines changed

7 files changed

+96
-1
lines changed

.vscode/launch.json

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -175,6 +175,9 @@
175175
"select BackupId, BackupState from aws.cloudhsm.backups where region = 'rubbish-region' order by BackupId;",
176176
"select rings.projectsId as project, rings.locationsId as locale, split_part(rings.name, '/', -1) as key_ring_name, split_part(keys.name, '/', -1) as key_name, json_extract(keys.\"versionTemplate\", '$.algorithm') as key_algorithm, json_extract(keys.\"versionTemplate\", '$.protectionLevel') as key_protection_level from google.cloudkms.key_rings rings inner join google.cloudkms.crypto_keys keys on keys.keyRingsId = split_part(rings.name, '/', -1) and keys.projectsId = rings.projectsId and keys.locationsId = rings.locationsId where rings.projectsId in ('testing-project', 'testing-project-two', 'testing-project-three') and rings.locationsId in ('global', 'australia-southeast1', 'australia-southeast2') order by project, locale, key_name ;",
177177
"delete from aws.cloud_control.resources where region = 'ap-southeast-1' and data__TypeName = 'AWS::Logs::LogGroup' and data__Identifier = 'LogGroupResourceExampleThird' ;",
178+
"insert into google.storage.buckets( project, data__name) select 'testing-project', 'silly-bucket' returning projectNumber;",
179+
"insert /*+ AWAIT */ into google.compute.networks(project, data__name, data__autoCreateSubnetworks) select 'mutable-project', 'auto-test-01', false returning creationTimestamp, name;",
180+
"registry pull google 'v0.1.2'; show resources in google.storage; registry pull google 'v0.1.1-alpha01'; show resources in google.storage; registry pull google 'v0.1.0'; show resources in google.storage;",
178181
],
179182
"default": "show providers;"
180183
},
@@ -193,7 +196,8 @@
193196
"{ \"url\": \"https://cdn.statically.io/gh/stackql/stackql-provider-registry/main/providers\", \"localDocRoot\": \"${workspaceFolder}/test/registry\" }",
194197
"{ \"url\": \"https://cdn.statically.io/gh/stackql/stackql-provider-registry/dev/providers\" }",
195198
"{ \"url\": \"https://registry-dev.stackql.app/providers\" }",
196-
"{ \"url\": \"https://registry.stackql.app/providers\" }"
199+
"{ \"url\": \"https://registry.stackql.app/providers\" }",
200+
"{\"url\": \"http://localhost:1094/gh/stackql/stackql-provider-registry/main/providers\", \"verifyConfig\": {\"nopVerify\": true}}",
197201
],
198202
"default": "{ \"url\": \"file://${workspaceFolder}/test/registry\", \"localDocRoot\": \"${workspaceFolder}/test/registry\", \"verifyConfig\": { \"nopVerify\": true } }"
199203
},

internal/stackql/handler/handler.go

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ type HandlerContext interface { //nolint:revive // don't mind stuttering this on
4848
GetAuthContext(providerName string) (*dto.AuthCtx, error)
4949
GetDBMSInternalRouter() dbmsinternal.Router
5050
GetProvider(providerName string) (provider.IProvider, error)
51+
DeleteProvider(providerName string) error
5152
GetSupportedProviders(extended bool) (map[string]map[string]interface{}, error)
5253
LogHTTPResponseMap(target interface{})
5354
//
@@ -286,6 +287,23 @@ func (hc *standardHandlerContext) GetASTFormatter() sqlparser.NodeFormatter {
286287
return hc.formatter
287288
}
288289

290+
func (hc *standardHandlerContext) DeleteProvider(providerName string) error {
291+
hc.providersMapMutex.Lock()
292+
defer hc.providersMapMutex.Unlock()
293+
if providerName == "googleapis.com" {
294+
providerName = "google"
295+
}
296+
if providerName == "" {
297+
return fmt.Errorf("provider name cannot be empty")
298+
}
299+
_, ok := hc.providers[providerName]
300+
if len(hc.providers) == 0 || !ok {
301+
return fmt.Errorf("provider '%s' not found", providerName)
302+
}
303+
delete(hc.providers, providerName)
304+
return nil
305+
}
306+
289307
func (hc *standardHandlerContext) GetProvider(providerName string) (provider.IProvider, error) {
290308
var err error
291309
if providerName == "" {

internal/stackql/planbuilder/plan_builder.go

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -750,6 +750,8 @@ func (pgb *standardPlanGraphBuilder) handleRegistryPull(
750750
if err = reg.ClearProviderCache(providerID); err != nil {
751751
return internaldto.NewErroneousExecutorOutput(err)
752752
}
753+
handlerCtx := pbi.GetHandlerCtx()
754+
_ = handlerCtx.DeleteProvider(providerID)
753755
// Pull and persist the requested version
754756
if err = reg.PullAndPersistProviderArchive(node.ProviderId, providerVersion); err != nil {
755757
return internaldto.NewErroneousExecutorOutput(err)

test/python/stackql_test_tooling/flask/registry/expectations.json

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -37,5 +37,18 @@
3737
"status": 200,
3838
"file": "google-v0.1.1-alpha01.tgz"
3939
}
40+
},
41+
{
42+
"httpRequest": {
43+
"method": "GET",
44+
"path": "/gh/stackql/stackql-provider-registry/main/providers/dist/googleapis.com/v0.1.0.tgz"
45+
},
46+
"httpResponse": {
47+
"headers": {
48+
"Content-Type": "application/gzip"
49+
},
50+
"status": 200,
51+
"file": "google-v0.1.0.tgz"
52+
}
4053
}
4154
]
Binary file not shown.
Binary file not shown.

test/robot/functional/stackql_mocked_from_cmd_line.robot

Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2687,6 +2687,64 @@ Registry Pull Google Provider Specific Version Prerelease
26872687
... registry pull google 'v0.1.1\-alpha01' ;
26882688
... successfully installed
26892689

2690+
Registry Pull Overwrite Works in Both Directions
2691+
${inputStr} = Catenate
2692+
... registry pull google 'v0.1.2';
2693+
... show resources in google.storage;
2694+
... registry pull google 'v0.1.1-alpha01';
2695+
... show resources in google.storage;
2696+
... registry pull google 'v0.1.0';
2697+
... show resources in google.storage;
2698+
... registry pull google 'v0.1.1-alpha01';
2699+
... show resources in google.storage;
2700+
... registry pull google 'v0.1.2';
2701+
... show resources in google.storage;
2702+
${stdOutStr} = Catenate SEPARATOR=\n
2703+
... |------|------------------------|
2704+
... |${SPACE}name${SPACE}|${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}id${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|
2705+
... |------|------------------------|
2706+
... |${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|${SPACE}google.storage.buckets${SPACE}|
2707+
... |------|------------------------|
2708+
... |------|-------------------------------|
2709+
... |${SPACE}name${SPACE}|${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}id${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|
2710+
... |------|-------------------------------|
2711+
... |${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|${SPACE}google.storage.bucket_objects${SPACE}|
2712+
... |------|-------------------------------|
2713+
... |------|--------------------------------|
2714+
... |${SPACE}name${SPACE}|${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}id${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|
2715+
... |------|--------------------------------|
2716+
... |${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|${SPACE}google.storage.storage_buckets${SPACE}|
2717+
... |------|--------------------------------|
2718+
... |------|-------------------------------|
2719+
... |${SPACE}name${SPACE}|${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}id${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|
2720+
... |------|-------------------------------|
2721+
... |${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|${SPACE}google.storage.bucket_objects${SPACE}|
2722+
... |------|-------------------------------|
2723+
... |------|------------------------|
2724+
... |${SPACE}name${SPACE}|${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}id${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|
2725+
... |------|------------------------|
2726+
... |${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}${SPACE}|${SPACE}google.storage.buckets${SPACE}|
2727+
... |------|------------------------|
2728+
${stdErrStr} = Catenate SEPARATOR=\n
2729+
... google provider, version 'v0.1.2' successfully installed
2730+
... google provider, version 'v0.1.1-alpha01' successfully installed
2731+
... google provider, version 'v0.1.0' successfully installed
2732+
... google provider, version 'v0.1.1-alpha01' successfully installed
2733+
... google provider, version 'v0.1.2' successfully installed
2734+
Should Stackql Exec Inline Equal Both Streams
2735+
... ${STACKQL_EXE}
2736+
... ${OKTA_SECRET_STR}
2737+
... ${GITHUB_SECRET_STR}
2738+
... ${K8S_SECRET_STR}
2739+
... ${REGISTRY_MOCKED_CFG_STR}
2740+
... ${AUTH_CFG_STR}
2741+
... ${SQL_BACKEND_CFG_STR_CANONICAL}
2742+
... ${inputStr}
2743+
... ${stdOutStr}
2744+
... ${stdErrStr}
2745+
... stdout=${CURDIR}/tmp/Registry-Pull-Override-Works-in-Both-Directions.tmp
2746+
... stderr=${CURDIR}/tmp/Registry-Pull-Override-Works-in-Both-Directions-stderr.tmp
2747+
26902748
Registry Pull Google Provider Implicit Latest Version
26912749
Should Stackql Exec Inline Contain Both Streams
26922750
... ${STACKQL_EXE}

0 commit comments

Comments
 (0)