200 lines
5.3 KiB
Go
200 lines
5.3 KiB
Go
package compose
|
|
|
|
import (
|
|
"katenary/logger"
|
|
"testing"
|
|
)
|
|
|
|
const DOCKER_COMPOSE_YML1 = `
|
|
version: "3"
|
|
|
|
services:
|
|
# first service, very basic
|
|
web:
|
|
image: nginx
|
|
ports:
|
|
- "80:80"
|
|
environment:
|
|
FOO: bar
|
|
BAZ: qux
|
|
networks:
|
|
- frontend
|
|
|
|
|
|
database:
|
|
image: postgres
|
|
networks:
|
|
- frontend
|
|
environment:
|
|
POSTGRES_USER: postgres
|
|
POSTGRES_PASSWORD: mysecretpassword
|
|
POSTGRES_DB: mydb
|
|
labels:
|
|
katenary.io/ports: "5432"
|
|
|
|
commander1:
|
|
image: foo
|
|
command: ["/bin/sh", "-c", "echo 'hello world'"]
|
|
|
|
commander2:
|
|
image: foo
|
|
command: echo "hello world"
|
|
|
|
hc1:
|
|
image: foo
|
|
healthcheck:
|
|
test: ["CMD-SHELL", "echo 'hello world1'"]
|
|
|
|
hc2:
|
|
image: foo
|
|
healthcheck:
|
|
test: echo "hello world2"
|
|
|
|
hc3:
|
|
image: foo
|
|
healthcheck:
|
|
test: ["CMD", "echo 'hello world3'"]
|
|
|
|
|
|
`
|
|
|
|
func init() {
|
|
logger.NOLOG = true
|
|
}
|
|
|
|
func TestParser(t *testing.T) {
|
|
p := NewParser("", DOCKER_COMPOSE_YML1)
|
|
p.Parse("test")
|
|
|
|
// check if the "web" and "database" service is parsed correctly
|
|
// by checking if the "ports" and "environment"
|
|
for name, service := range p.Data.Services {
|
|
if name == "web" {
|
|
if len(service.Ports) != 1 {
|
|
t.Errorf("Expected 1 port, got %d", len(service.Ports))
|
|
}
|
|
if service.Ports[0] != "80:80" {
|
|
t.Errorf("Expected port 80:80, got %s", service.Ports[0])
|
|
}
|
|
if len(service.Environment) != 2 {
|
|
t.Errorf("Expected 2 environment variables, got %d", len(service.Environment))
|
|
}
|
|
if service.Environment["FOO"] != "bar" {
|
|
t.Errorf("Expected FOO=bar, got %s", service.Environment["FOO"])
|
|
}
|
|
if service.Environment["BAZ"] != "qux" {
|
|
t.Errorf("Expected BAZ=qux, got %s", service.Environment["BAZ"])
|
|
}
|
|
}
|
|
// same for the "database" service
|
|
if name == "database" {
|
|
if len(service.Ports) != 1 {
|
|
t.Errorf("Expected 1 port, got %d", len(service.Ports))
|
|
}
|
|
if service.Ports[0] != "5432" {
|
|
t.Errorf("Expected port 5432, got %s", service.Ports[0])
|
|
}
|
|
if len(service.Environment) != 3 {
|
|
t.Errorf("Expected 3 environment variables, got %d", len(service.Environment))
|
|
}
|
|
if service.Environment["POSTGRES_USER"] != "postgres" {
|
|
t.Errorf("Expected POSTGRES_USER=postgres, got %s", service.Environment["POSTGRES_USER"])
|
|
}
|
|
if service.Environment["POSTGRES_PASSWORD"] != "mysecretpassword" {
|
|
t.Errorf("Expected POSTGRES_PASSWORD=mysecretpassword, got %s", service.Environment["POSTGRES_PASSWORD"])
|
|
}
|
|
if service.Environment["POSTGRES_DB"] != "mydb" {
|
|
t.Errorf("Expected POSTGRES_DB=mydb, got %s", service.Environment["POSTGRES_DB"])
|
|
}
|
|
// check labels
|
|
if len(service.Labels) != 1 {
|
|
t.Errorf("Expected 1 label, got %d", len(service.Labels))
|
|
}
|
|
// is label katenary.io/ports correct?
|
|
if service.Labels["katenary.io/ports"] != "5432" {
|
|
t.Errorf("Expected katenary.io/ports=5432, got %s", service.Labels["katenary.io/ports"])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestParseCommand(t *testing.T) {
|
|
p := NewParser("", DOCKER_COMPOSE_YML1)
|
|
p.Parse("test")
|
|
|
|
for name, s := range p.Data.Services {
|
|
if name == "commander1" {
|
|
t.Log(s.Command)
|
|
if len(s.Command) != 3 {
|
|
t.Errorf("Expected 3 command, got %d", len(s.Command))
|
|
}
|
|
if s.Command[0] != "/bin/sh" {
|
|
t.Errorf("Expected /bin/sh, got %s", s.Command[0])
|
|
}
|
|
if s.Command[1] != "-c" {
|
|
t.Errorf("Expected -c, got %s", s.Command[1])
|
|
}
|
|
if s.Command[2] != "echo 'hello world'" {
|
|
t.Errorf("Expected echo 'hello world', got %s", s.Command[2])
|
|
}
|
|
}
|
|
if name == "commander2" {
|
|
t.Log(s.Command)
|
|
if len(s.Command) != 2 {
|
|
t.Errorf("Expected 1 command, got %d", len(s.Command))
|
|
}
|
|
if s.Command[0] != "echo" {
|
|
t.Errorf("Expected echo, got %s", s.Command[0])
|
|
}
|
|
if s.Command[1] != "hello world" {
|
|
t.Errorf("Expected hello world, got %s", s.Command[1])
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
func TestHealthChecks(t *testing.T) {
|
|
p := NewParser("", DOCKER_COMPOSE_YML1)
|
|
p.Parse("test")
|
|
|
|
for name, s := range p.Data.Services {
|
|
if name != "hc1" && name != "hc2" && name != "hc3" {
|
|
continue
|
|
}
|
|
|
|
if name == "hc1" {
|
|
if len(s.HealthCheck.Test) != 2 {
|
|
t.Errorf("Expected 2 healthcheck tests, got %d", len(s.HealthCheck.Test))
|
|
}
|
|
if s.HealthCheck.Test[0] != "CMD-SHELL" {
|
|
t.Errorf("Expected CMD-SHELL, got %s", s.HealthCheck.Test[0])
|
|
}
|
|
if s.HealthCheck.Test[1] != "echo 'hello world1'" {
|
|
t.Errorf("Expected echo 'hello world1', got %s", s.HealthCheck.Test[1])
|
|
}
|
|
}
|
|
if name == "hc2" {
|
|
if len(s.HealthCheck.Test) != 2 {
|
|
t.Errorf("Expected 2 healthcheck tests, got %d", len(s.HealthCheck.Test))
|
|
}
|
|
if s.HealthCheck.Test[0] != "echo" {
|
|
t.Errorf("Expected echo, got %s", s.HealthCheck.Test[1])
|
|
}
|
|
if s.HealthCheck.Test[1] != "hello world2" {
|
|
t.Errorf("Expected echo 'hello world2', got %s", s.HealthCheck.Test[1])
|
|
}
|
|
}
|
|
if name == "hc3" {
|
|
if len(s.HealthCheck.Test) != 2 {
|
|
t.Errorf("Expected 2 healthcheck tests, got %d", len(s.HealthCheck.Test))
|
|
}
|
|
if s.HealthCheck.Test[0] != "CMD" {
|
|
t.Errorf("Expected CMD, got %s", s.HealthCheck.Test[0])
|
|
}
|
|
if s.HealthCheck.Test[1] != "echo 'hello world3'" {
|
|
t.Errorf("Expected echo 'hello world3', got %s", s.HealthCheck.Test[1])
|
|
}
|
|
}
|
|
}
|
|
}
|