112 lines
3.3 KiB
Go
112 lines
3.3 KiB
Go
// ABOUTME: Integration test with the actual EdgeConnectConfig.yaml example file
|
|
// ABOUTME: Validates that our parser correctly handles the real example configuration
|
|
package config
|
|
|
|
import (
|
|
"path/filepath"
|
|
"testing"
|
|
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
)
|
|
|
|
func TestParseExampleConfig(t *testing.T) {
|
|
parser := NewParser()
|
|
|
|
// Parse the actual example file (now that we've created the manifest file)
|
|
examplePath := filepath.Join("../../sdk/examples/comprehensive/EdgeConnectConfig.yaml")
|
|
config, parsedManifest, err := parser.ParseFile(examplePath)
|
|
|
|
// This should now succeed with full validation
|
|
require.NoError(t, err)
|
|
require.NotNil(t, config)
|
|
require.NotEmpty(t, parsedManifest)
|
|
|
|
// Validate the parsed structure
|
|
assert.Equal(t, "edgeconnect-deployment", config.Kind)
|
|
assert.Equal(t, "edge-app-demo", config.Metadata.Name)
|
|
|
|
// Check k8s app configuration
|
|
require.NotNil(t, config.Spec.K8sApp)
|
|
assert.Equal(t, "1.0.0", config.Metadata.AppVersion)
|
|
// Note: ManifestFile path should be resolved to absolute path
|
|
assert.Contains(t, config.Spec.K8sApp.ManifestFile, "k8s-deployment.yaml")
|
|
|
|
// Check infrastructure template
|
|
require.Len(t, config.Spec.InfraTemplate, 1)
|
|
infra := config.Spec.InfraTemplate[0]
|
|
assert.Equal(t, "edp2", infra.Organization)
|
|
assert.Equal(t, "EU", infra.Region)
|
|
assert.Equal(t, "TelekomOP", infra.CloudletOrg)
|
|
assert.Equal(t, "Munich", infra.CloudletName)
|
|
assert.Equal(t, "EU.small", infra.FlavorName)
|
|
|
|
// Check network configuration
|
|
require.NotNil(t, config.Spec.Network)
|
|
require.Len(t, config.Spec.Network.OutboundConnections, 2)
|
|
|
|
conn1 := config.Spec.Network.OutboundConnections[0]
|
|
assert.Equal(t, "tcp", conn1.Protocol)
|
|
assert.Equal(t, 80, conn1.PortRangeMin)
|
|
assert.Equal(t, 80, conn1.PortRangeMax)
|
|
assert.Equal(t, "0.0.0.0/0", conn1.RemoteCIDR)
|
|
|
|
conn2 := config.Spec.Network.OutboundConnections[1]
|
|
assert.Equal(t, "tcp", conn2.Protocol)
|
|
assert.Equal(t, 443, conn2.PortRangeMin)
|
|
assert.Equal(t, 443, conn2.PortRangeMax)
|
|
assert.Equal(t, "0.0.0.0/0", conn2.RemoteCIDR)
|
|
|
|
// Test utility methods
|
|
assert.Equal(t, "edge-app-demo", config.Metadata.Name)
|
|
assert.Contains(t, config.Spec.GetManifestFile(), "k8s-deployment.yaml")
|
|
assert.True(t, config.Spec.IsK8sApp())
|
|
assert.False(t, config.Spec.IsDockerApp())
|
|
}
|
|
|
|
func TestValidateExampleStructure(t *testing.T) {
|
|
parser := &ConfigParser{}
|
|
|
|
// Create a config that matches the example but with valid paths
|
|
config := &EdgeConnectConfig{
|
|
Kind: "edgeconnect-deployment",
|
|
Metadata: Metadata{
|
|
Name: "edge-app-demo",
|
|
AppVersion: "1.0.0",
|
|
},
|
|
Spec: Spec{
|
|
DockerApp: &DockerApp{ // Use DockerApp to avoid manifest file validation
|
|
Image: "nginx:latest",
|
|
},
|
|
InfraTemplate: []InfraTemplate{
|
|
{
|
|
Organization: "edp2",
|
|
Region: "EU",
|
|
CloudletOrg: "TelekomOP",
|
|
CloudletName: "Munich",
|
|
FlavorName: "EU.small",
|
|
},
|
|
},
|
|
Network: &NetworkConfig{
|
|
OutboundConnections: []OutboundConnection{
|
|
{
|
|
Protocol: "tcp",
|
|
PortRangeMin: 80,
|
|
PortRangeMax: 80,
|
|
RemoteCIDR: "0.0.0.0/0",
|
|
},
|
|
{
|
|
Protocol: "tcp",
|
|
PortRangeMin: 443,
|
|
PortRangeMax: 443,
|
|
RemoteCIDR: "0.0.0.0/0",
|
|
},
|
|
},
|
|
},
|
|
},
|
|
}
|
|
|
|
// This should validate successfully
|
|
err := parser.Validate(config)
|
|
assert.NoError(t, err)
|
|
}
|