🥒 CCC.SvlsComp Test: finos-ccc-integration-fn-main

Test Parameters

ServiceTypeserverless-computing
ProviderServiceTypecloudfunctions.googleapis.com/Function
CatalogTypesCCC.SvlsComp
TagFilter@Behavioural, @serverless-computing, @Behavioural
UIDfinos-ccc-integration-fn-main
ResourceNamefinos-ccc-integration-fn-main
Config
{}
burst-overrun15
catalog-versions
{
  "CCC.Core": "v2025.10",
  "CCC.SvlsComp": "DEV"
}
function-namefinos-ccc-integration-fn-main
gcp-project-idnodal-time-474015-p5
permitted-regions
[
  "us-central1"
]
private-endpoint-urlinternal-only
providergcp
rate-limit-threshold10
regionus-central1
resourcefinos-ccc-integration-fn-main
serviceserverless-computing
service-typeserverless-computing
tags@Behavioural @serverless-computing

Summary

Generated: 2026-06-22 17:50:55

Total Run Time: 46s

Features: 12

Scenarios: 14 (✅ 6 | ❌ 8)

Steps: 105 (✅ 83 | ❌ 8 | ⏭️ 13 | ❓ 1)

Feature: CCC.Core.CN02.AR01 - Encrypt Data For Storage
Scenario: Function encryption status reports enabled controls @CCC.Core @CCC.Core.CN02 @PerService @tlp-amber @tlp-green @tlp-red @Behavioural @serverless-computing
Given a cloud api for "{config}" in "api"166µs
Given I call "{api}" with "GetServiceAPI" using argument "serverless-computing"102µs
And I refer to "{result}" as "svc"19µs
When I call "{svc}" with "GetFunctionEncryptionStatus" using argument "{uid}"742ms
Then "{result}" is not an error34µs
And I refer to "{result}" as "encryption"25µs
And I attach "{encryption}" to the test output as "Function Encryption Status"54µs
Then "{encryption.EnvEncrypted}" is "true"76µs
expected {encryption.EnvEncrypted} to equal 'true', got 'false'
📎 Attachments:
Function Encryption Status
View JSON (62 bytes)
{"EnvEncrypted":false,"KMSKeyArn":"","SecretsEncrypted":false}
Feature: CCC.SvlsComp.CN01.AR01 - Deny Public Internet Access
Scenario: Private invoke path succeeds @CCC.SvlsComp @CCC.SvlsComp.CN01 @PerService @tlp-amber @tlp-red @Behavioural @serverless-computing @SANITY @OPT_IN
Given a cloud api for "{config}" in "api"51µs
And I call "{api}" with "GetServiceAPI" using argument "serverless-computing"47µs
And I refer to "{result}" as "svc"28µs
When I call "{svc}" with "AttemptPrivateInvoke" using argument "{uid}"50µs
Then "{result}" is not an error20µs
And I refer to "{result}" as "privateInvoke"14µs
Then "{privateInvoke.Invoked}" is "true"21µs
Scenario: No public invoke surface is configured @CCC.SvlsComp @CCC.SvlsComp.CN01 @PerService @tlp-amber @tlp-red @Behavioural @serverless-computing @MAIN
Given a cloud api for "{config}" in "api"62µs
And I call "{api}" with "GetServiceAPI" using argument "serverless-computing"55µs
And I refer to "{result}" as "svc"38µs
When I call "{svc}" with "GetInvokeEndpointExposure" using argument "{uid}"238ms
Then "{result}" is not an error63µs
And I refer to "{result}" as "exposure"16µs
And I attach "{exposure}" to the test output as "Invoke Endpoint Exposure"59µs
Then "{exposure.PublicEndpointConfigured}" is "false"44µs
📎 Attachments:
Invoke Endpoint Exposure
View JSON (127 bytes)
{"PublicEndpointConfigured":false,"PublicEndpointURL":"","PrivateEndpointConfigured":true,"PrivateEndpointURL":"internal-only"}
Scenario: Public internet invoke attempt is denied @CCC.SvlsComp @CCC.SvlsComp.CN01 @PerService @tlp-amber @tlp-red @Behavioural @serverless-computing @MAIN @OPT_IN
Given a cloud api for "{config}" in "api"34µs
And I call "{api}" with "GetServiceAPI" using argument "serverless-computing"43µs
And I refer to "{result}" as "svc"25µs
When I call "{svc}" with "AttemptPublicInternetInvoke" using argument "{uid}"210ms
Then "{result}" is not an error36µs
expected {result} to not be an error, but got: no public invoke URL available (set public-invoke-url or expose function with ALLOW_ALL ingress)
And I refer to "{result}" as "publicInvoke"17µs
And I attach "{publicInvoke}" to the test output as "Public Invoke Attempt"21µs
Then "{publicInvoke.AccessDenied}" is "true"24µs
Feature: CCC.SvlsComp.CN02.AR01 - Function Invocation Rate Limits
Scenario: Invocations beyond threshold are throttled @CCC.SvlsComp @CCC.SvlsComp.CN02 @PerService @tlp-amber @tlp-red @Behavioural @Destructive @serverless-computing
Given a cloud api for "{config}" in "api"50µs
And I call "{api}" with "GetServiceAPI" using argument "serverless-computing"36µs
And I refer to "{result}" as "svc"20µs
When I call "{svc}" with "InvokeFunctionBurst" using arguments "{uid}" and "{rate-limit-threshold}"152ms
Then "{result}" is not an error35µs
expected {result} to not be an error, but got: no invoke URL available for function
And I refer to "{result}" as "withinThreshold"12µs
Then "{withinThreshold.AllSucceeded}" is "true"18µs
When I call "{svc}" with "InvokeFunctionBurst" using arguments "{uid}" and "{burst-overrun}"20µs
Then "{result}" is not an error15µs
And I refer to "{result}" as "overrun"18µs
And I attach "{overrun}" to the test output as "Invocation Burst Overrun"15µs
Then "{overrun.ThrottledCount}" is greater than "{0}"35µs
Feature: CCC.Core.CN03.AR01 - Multi-Factor Authentication for Destructive Operations
Scenario: MFA requirement for destructive operations cannot be tested automatically @CCC.Core @CCC.Core.CN03 @PerService @tlp-amber @tlp-green @tlp-red @Behavioural @object-storage @load-balancer @virtual-machines @serverless-computing @NotTestable
Given a cloud api for "{config}" in "api"44µs
Then no-op required21µs
Feature: CCC.Core.CN04.AR01 - Log Administrative Access Attempts
Scenario: Verify admin actions are logged with identity and timestamp @CCC.Core @CCC.Core.CN04 @PerService @tlp-amber @tlp-clear @tlp-green @tlp-red @Behavioural @object-storage @virtual-machines @serverless-computing
Given a cloud api for "{config}" in "api"54µs
And I call "{api}" with "GetServiceAPI" using argument "{service-type}"56µs
And I refer to "{result}" as "theService"24µs
Given I call "{api}" with "GetServiceAPI" using argument "logging"864µs
And I refer to "{result}" as "loggingService"32µs
When I call "{theService}" with "UpdateResourcePolicy"9s
Then "{result}" is not an error40µs
And I attach "{result}" to the test output as "Policy Update Result"44µs
And we wait for a period of "10000" ms10s
When I call "{loggingService}" with "QueryLogs" using arguments "{resource-name}", "admin", and "{20}"2s
Then "{result}" is not an error27µs
And I refer to "{result}" as "adminLogs"17µs
And I attach "{adminLogs}" to the test output as "Admin Activity Logs"101µs
Then "{adminLogs}" is an array of objects with at least the following contents206µs
result
Succeeded
expected row not found: map[result:Succeeded]
📎 Attachments:
Policy Update Result
View JSON (4 bytes)
null
Admin Activity Logs
View JSON (2692 bytes)
[{"resource":"cloud_run_revision","timestamp":"2026-06-22T17:49:51.329096Z","result":"Notice","fields":{"resource.configuration_name":"","resource.location":"us-central1","resource.project_id":"nodal-time-474015-p5","resource.revision_name":"","resource.service_name":"finos-ccc-integration-fn-main"}},{"resource":"cloud_function","timestamp":"2026-06-22T17:49:51.999214662Z","result":"Notice","fields":{"resource.function_name":"finos-ccc-integration-fn-main","resource.project_id":"nodal-time-474015-p5","resource.region":"us-central1"}},{"resource":"cloud_run_revision","timestamp":"2026-06-22T17:50:31.636878Z","result":"Notice","fields":{"resource.configuration_name":"","resource.location":"us-central1","resource.project_id":"nodal-time-474015-p5","resource.revision_name":"","resource.service_name":"finos-ccc-integration-fn-main"}},{"resource":"cloud_run_revision","timestamp":"2026-06-22T17:50:57.342672Z","result":"Notice","fields":{"resource.configuration_name":"","resource.location":"us-central1","resource.project_id":"nodal-time-474015-p5","resource.revision_name":"","resource.service_name":"finos-ccc-integration-fn-main"}},{"resource":"cloud_function","timestamp":"2026-06-22T17:50:57.823647307Z","result":"Error","fields":{"resource.function_name":"finos-ccc-integration-fn-main","resource.project_id":"nodal-time-474015-p5","resource.region":"us-central1"}},{"resource":"cloud_run_revision","timestamp":"2026-06-22T17:51:00.198411Z","result":"Notice","fields":{"resource.configuration_name":"","resource.location":"us-central1","resource.project_id":"nodal-time-474015-p5","resource.revision_name":"","resource.service_name":"finos-ccc-integration-fn-main"}},{"resource":"cloud_function","timestamp":"2026-06-22T17:51:00.64120706Z","result":"Error","fields":{"resource.function_name":"finos-ccc-integration-fn-main","resource.project_id":"nodal-time-474015-p5","resource.region":"us-central1"}},{"resource":"cloud_function","timestamp":"2026-06-22T17:51:00.829283118Z","result":"Notice","fields":{"resource.function_name":"finos-ccc-integration-fn-main","resource.project_id":"nodal-time-474015-p5","resource.region":"us-central1"}},{"resource":"cloud_run_revision","timestamp":"2026-06-22T17:51:05.01997Z","result":"Notice","fields":{"resource.configuration_name":"","resource.location":"us-central1","resource.project_id":"nodal-time-474015-p5","resource.revision_name":"","resource.service_name":"finos-ccc-integration-fn-main"}},{"resource":"cloud_function","timestamp":"2026-06-22T17:51:05.671577831Z","result":"Notice","fields":{"resource.function_name":"finos-ccc-integration-fn-main","resource.project_id":"nodal-time-474015-p5","resource.region":"us-central1"}}]
Feature: CCC.Core.CN04.AR02 - Log Data Modification Attempts
Scenario: Verify data modifications are logged with identity and timestamp @CCC.Core @CCC.Core.CN04 @PerService @tlp-amber @tlp-red @Behavioural @object-storage @virtual-machines @serverless-computing
Given a cloud api for "{config}" in "api"58µs
Given I call "{api}" with "GetServiceAPI" using argument "{service-type}"47µs
And I refer to "{result}" as "theService"28µs
And I call "{api}" with "GetServiceAPI" using argument "logging"46µs
And I refer to "{result}" as "loggingService"36µs
When I call "{theService}" with "TriggerDataWrite" using argument "{resource-name}"201ms
And I attach "{result}" to the test output as "Data Write Trigger Result"41µs
And we wait for a period of "10000" ms10s
Then I call "{loggingService}" with "QueryLogs" using arguments "{resource-name}", "data-write", and "{20}"2s
And I refer to "{result}" as "dataLogs"23µs
And I attach "{dataLogs}" to the test output as "Data Write Logs"48µs
Then "{dataLogs}" is an array of objects with at least the following contents42µs
result
Succeeded
expected row not found: map[result:Succeeded]
📎 Attachments:
Data Write Trigger Result
View JSON (4 bytes)
null
Data Write Logs
View JSON (2 bytes)
[]
Feature: CCC.Core.CN04.AR03 - Log Data Read Attempts
Scenario: Verify data read operations are logged with identity and timestamp @CCC.Core @CCC.Core.CN04 @PerService @tlp-red @Behavioural @object-storage @virtual-machines @serverless-computing
Given a cloud api for "{config}" in "api"39µs
Given I call "{api}" with "GetServiceAPI" using argument "{service-type}"54µs
And I refer to "{result}" as "theService"23µs
And I call "{api}" with "GetServiceAPI" using argument "logging"31µs
And I refer to "{result}" as "loggingService"15µs
When I call "{theService}" with "TriggerDataRead" using argument "{resource-name}"232ms
And I attach "{result}" to the test output as "Data Read Trigger Result"46µs
And we wait for a period of "10000" ms10s
When I call "{loggingService}" with "QueryLogs" using arguments "{resource-name}", "data-read", and "{20}"1s
Then "{result}" is not an error24µs
And I refer to "{result}" as "readLogs"18µs
And I attach "{readLogs}" to the test output as "Data Read Logs"30µs
Then "{readLogs}" is an array of objects with at least the following contents35µs
result
Succeeded
expected row not found: map[result:Succeeded]
📎 Attachments:
Data Read Trigger Result
View JSON (4 bytes)
null
Data Read Logs
View JSON (2 bytes)
[]
Feature: CCC.Core.CN05.AR06 - Block All Unauthorized Requests
Scenario: Service prevents data read by user with no access @CCC.Core @CCC.Core.CN05 @PerService @tlp-amber @tlp-green @tlp-red @Destructive @Behavioural @object-storage @virtual-machines @serverless-computing
Given a cloud api for "{config}" in "api"36µs
And I call "{api}" with "GetServiceAPIWithIdentity" using arguments "{service-type}" and "test-user-no-access"101µs
And "{result}" is not an error20µs
expected {result} to not be an error, but got: failed to create GCP service 'serverless-computing' with identity "test-user-no-access": failed to parse GCP service account key for "cfi-20260526t102301z-no-access@nodal-time-474015-p5.iam.gserviceaccount.com": invalid character '\'' looking for beginning of value
And I refer to "{result}" as "userReadableService"14µs
When I call "{userReadableService}" with "TriggerDataRead" using argument "{resource-name}"17µs
Then "{result}" is an error13µs
And I attach "{result}" to the test output as "no-access-trigger-data-read-error.txt"15µs
Feature: CCC.Core.CN07.AR01 - Publish Enumeration Activity Events
Scenario: Enumeration event publishing cannot be tested automatically @CCC.Core @CCC.Core.CN07 @PerService @tlp-amber @tlp-red @Behavioural @NotTestable @object-storage @virtual-machines @serverless-computing
Given a cloud api for "{config}" in "api"29µs
Then no-op required20µs
Feature: CCC.Core.CN07.AR02 - Log Enumeration Activities
Scenario: Enumeration logging cannot be verified automatically @CCC.Core @CCC.Core.CN07 @PerService @tlp-amber @tlp-clear @tlp-green @tlp-red @Behavioural @NotTestable @object-storage @virtual-machines @serverless-computing
Given a cloud api for "{config}" in "api"33µs
Then no-op required23µs
Feature: CCC.Core.CN10.AR01 - Replication Destination Trust
Scenario: Replication destination trust cannot be verified automatically @CCC.Core @CCC.Core.CN10 @PerService @tlp-amber @tlp-green @tlp-red @Behavioural @NotTestable @object-storage @virtual-machines @serverless-computing
Given a cloud api for "{config}" in "api"86µs
Then no-op required43µs
Feature: CCC.Core.CN06.AR01 - Resource Location Compliance
Scenario: Resource region can be retrieved for compliance verification @CCC.Core @CCC.Core.CN06 @PerService @tlp-amber @tlp-green @tlp-red @Behavioural @object-storage @vpc @virtual-machines @serverless-computing
Given a cloud api for "{config}" in "api"32µs
Given I call "{api}" with "GetServiceAPI" using argument "{service-type}"34µs
And I refer to "{result}" as "theService"23µs
When I call "{theService}" with "GetResourceRegion" using argument "{resource-name}"42µs
Then "{result}" is not an error30µs
And I refer to "{result}" as "region"14µs
And I attach "{region}" to the test output as "Resource Region"21µs
Then "{permitted-regions}" is an array of objects with at least the following contents53µs
value
{region}
expected row not found: map[value:{region}]
📎 Attachments:
Resource Region
View Content (11 bytes)
us-central1