Fix container name handling for hyphenated service names
Extract ContainerNameFor and SplitContainerName into names.go. ContainerNameFor handles single-component services where service name equals component name (e.g., mc-proxy → "mc-proxy" not "mc-proxy-mc-proxy"). SplitContainerName checks known services from the registry before falling back to naive split on "-", fixing mc-proxy being misidentified as service "mc" component "proxy". Also fixes podman ps JSON parsing (Command field is []string not string) found during deployment. Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -253,22 +253,47 @@ func TestGetServiceStatus_IgnoreSkipsDrift(t *testing.T) {
|
||||
}
|
||||
|
||||
func TestSplitContainerName(t *testing.T) {
|
||||
known := map[string]bool{
|
||||
"metacrypt": true,
|
||||
"mc-proxy": true,
|
||||
"mcr": true,
|
||||
}
|
||||
tests := []struct {
|
||||
name string
|
||||
service string
|
||||
comp string
|
||||
}{
|
||||
{"metacrypt-api", "metacrypt", "api"},
|
||||
{"metacrypt-web-ui", "metacrypt", "web-ui"},
|
||||
{"metacrypt-web", "metacrypt", "web"},
|
||||
{"mc-proxy", "mc-proxy", "mc-proxy"},
|
||||
{"mcr-api", "mcr", "api"},
|
||||
{"standalone", "standalone", "standalone"},
|
||||
{"unknown-thing", "unknown", "thing"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
t.Run(tt.name, func(t *testing.T) {
|
||||
svc, comp := splitContainerName(tt.name)
|
||||
svc, comp := SplitContainerName(tt.name, known)
|
||||
if svc != tt.service || comp != tt.comp {
|
||||
t.Fatalf("splitContainerName(%q) = (%q, %q), want (%q, %q)",
|
||||
t.Fatalf("SplitContainerName(%q) = (%q, %q), want (%q, %q)",
|
||||
tt.name, svc, comp, tt.service, tt.comp)
|
||||
}
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
func TestContainerNameFor(t *testing.T) {
|
||||
tests := []struct {
|
||||
service, component, want string
|
||||
}{
|
||||
{"metacrypt", "api", "metacrypt-api"},
|
||||
{"mc-proxy", "mc-proxy", "mc-proxy"},
|
||||
{"mcr", "web", "mcr-web"},
|
||||
}
|
||||
for _, tt := range tests {
|
||||
got := ContainerNameFor(tt.service, tt.component)
|
||||
if got != tt.want {
|
||||
t.Fatalf("ContainerNameFor(%q, %q) = %q, want %q",
|
||||
tt.service, tt.component, got, tt.want)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user