200 lines
6.3 KiB
Gherkin
200 lines
6.3 KiB
Gherkin
@phase2 @acms @analyzer @docker_compose_analyzer
|
|
Feature: DockerComposeAnalyzer
|
|
As a CleverAgents developer
|
|
I want a Docker Compose analyzer that produces UKO triples from YAML files
|
|
So that the ACMS can index infrastructure definitions into the UKO knowledge graph
|
|
|
|
Scenario: Analyze services
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
web:
|
|
image: nginx
|
|
api:
|
|
image: node:18
|
|
"""
|
|
Then the triples should include predicate "rdf:type" with object_uri "uko-infra:DeploymentUnit"
|
|
And the triples should include predicate "rdf:type" with object_uri "uko-infra:Service"
|
|
And the triples should include predicate "uko:contains" linking subject "deployment" to object "web"
|
|
|
|
Scenario: Analyze ports
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
web:
|
|
image: nginx
|
|
ports:
|
|
- "8080:80"
|
|
"""
|
|
Then the triples should include predicate "rdf:type" with object_uri "uko-infra:Port"
|
|
And the triples should include predicate "uko-infra:exposes"
|
|
|
|
Scenario: Analyze environment variables
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
api:
|
|
image: node:18
|
|
environment:
|
|
DATABASE_URL: postgres://localhost/db
|
|
NODE_ENV: production
|
|
"""
|
|
Then the triples should include predicate "rdf:type" with object_uri "uko-infra:EnvironmentVariable"
|
|
And the triples should include predicate "rdfs:label" with object_value "DATABASE_URL"
|
|
And the triples should include predicate "rdfs:label" with object_value "NODE_ENV"
|
|
|
|
Scenario: Analyze depends_on
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
web:
|
|
image: nginx
|
|
depends_on:
|
|
- api
|
|
- redis
|
|
api:
|
|
image: node:18
|
|
redis:
|
|
image: redis:7
|
|
"""
|
|
Then the triples should include predicate "uko-infra:connectsTo"
|
|
|
|
Scenario: Analyze depends_on as single string
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
web:
|
|
image: nginx
|
|
depends_on: db
|
|
db:
|
|
image: postgres
|
|
"""
|
|
Then the triples should include predicate "uko-infra:connectsTo"
|
|
|
|
Scenario: Analyze depends_on as dict form
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
web:
|
|
image: nginx
|
|
depends_on:
|
|
db:
|
|
condition: service_healthy
|
|
db:
|
|
image: postgres
|
|
"""
|
|
Then the triples should include predicate "uko-infra:connectsTo"
|
|
|
|
Scenario: Analyze volumes
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
web:
|
|
image: nginx
|
|
volumes:
|
|
- ./data:/app/data
|
|
"""
|
|
Then the triples should include predicate "uko:contains" linking subject "web" to object "volume"
|
|
|
|
Scenario: Analyze environment as list form
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
api:
|
|
image: node:18
|
|
environment:
|
|
- DATABASE_URL=postgres://localhost/db
|
|
- NODE_ENV=production
|
|
"""
|
|
Then the triples should include predicate "rdf:type" with object_uri "uko-infra:EnvironmentVariable"
|
|
And the triples should include predicate "rdfs:label" with object_value "DATABASE_URL"
|
|
|
|
Scenario: Analyze service with null body
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
placeholder:
|
|
"""
|
|
Then the triples should include predicate "rdf:type" with object_uri "uko-infra:Service"
|
|
And the triples should include predicate "rdfs:label" with object_value "placeholder"
|
|
|
|
Scenario: Analyze dict-form port mapping
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
web:
|
|
image: nginx
|
|
ports:
|
|
- target: 80
|
|
published: 8080
|
|
"""
|
|
Then the triples should include predicate "rdf:type" with object_uri "uko-infra:Port"
|
|
And the triples should include predicate "rdfs:label" with object_value "8080:80"
|
|
|
|
Scenario: Analyze dict-form volume mapping
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
web:
|
|
image: nginx
|
|
volumes:
|
|
- type: bind
|
|
source: ./data
|
|
target: /data
|
|
"""
|
|
Then the triples should include predicate "rdf:type" with object_uri "uko-infra:ConfigKey"
|
|
And the triples should include predicate "rdfs:label" with object_value "./data:/data"
|
|
|
|
Scenario: Analyze empty Docker Compose content raises ValueError
|
|
Given a DockerComposeAnalyzer analyzer
|
|
Then analyzing empty content with this analyzer should raise ValueError
|
|
|
|
Scenario: Analyze whitespace-only Docker Compose content raises ValueError
|
|
Given a DockerComposeAnalyzer analyzer
|
|
Then analyzing whitespace-only content with this analyzer should raise ValueError
|
|
|
|
Scenario: Analyze Docker Compose with empty resource_uri raises ValueError
|
|
Given a DockerComposeAnalyzer analyzer
|
|
Then analyzing content with empty resource_uri should raise ValueError
|
|
|
|
Scenario: Analyze version-only YAML returns empty list
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
version: "3.8"
|
|
"""
|
|
Then no triples should be returned
|
|
|
|
Scenario: Analyze non-compose YAML returns empty list
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
name: my-application
|
|
settings:
|
|
debug: true
|
|
log_level: info
|
|
"""
|
|
Then no triples should be returned
|
|
|
|
Scenario: Analyze invalid YAML returns empty list
|
|
Given a DockerComposeAnalyzer analyzer
|
|
When I analyze the Docker Compose content:
|
|
"""
|
|
services:
|
|
web:
|
|
ports:
|
|
- this: is: broken: yaml: [
|
|
"""
|
|
Then no triples should be returned
|