Check / check (pull_request) Skipped
App names may now contain dots, such as sneak.berlin: runs of lowercase letters and numbers joined by single dots or by hyphens, 2 to 63 characters. This is Docker's rule for an image name, and the app's image is upaas-<name>; it also keeps a dot off either end, so the name is safe as a directory and log file name. The new and edit app forms use the same pattern. Their old one was not a valid regular expression under the flag browsers compile it with, so browsers ignored it. A test deploys an app named sneak.berlin against the fake Docker API and checks the image and container names with Docker's own rules. Model: opus-5-5
58 lines
1.5 KiB
Go
58 lines
1.5 KiB
Go
package deploy_test
|
|
|
|
import (
|
|
"context"
|
|
"slices"
|
|
"testing"
|
|
|
|
"github.com/distribution/reference"
|
|
"github.com/docker/docker/daemon/names"
|
|
"github.com/stretchr/testify/assert"
|
|
"github.com/stretchr/testify/require"
|
|
|
|
"sneak.berlin/go/upaas/internal/models"
|
|
)
|
|
|
|
// TestDeployAppWithDotInName deploys an app named sneak.berlin against a
|
|
// fake Docker API and checks that Docker accepts the names of the image it
|
|
// builds and of the container it runs, using Docker's own rules for each.
|
|
func TestDeployAppWithDotInName(t *testing.T) {
|
|
t.Parallel()
|
|
|
|
api := &fakeImageAPI{
|
|
images: map[string][]string{},
|
|
shortSHA: "abc1234",
|
|
nextID: "sha256:built",
|
|
}
|
|
svc, db := newImageTestService(t, api)
|
|
ctx := context.Background()
|
|
|
|
app := saveApp(t, db, "sneak.berlin", "", "")
|
|
|
|
deployment := models.NewDeployment(db)
|
|
deployment.AppID = app.ID
|
|
require.NoError(t, deployment.Save(ctx))
|
|
|
|
imageID, err := svc.BuildImage(ctx, app, deployment)
|
|
require.NoError(t, err)
|
|
require.NoError(t, svc.DeployContainer(ctx, app, deployment, imageID))
|
|
|
|
images, _ := api.state()
|
|
|
|
api.mu.Lock()
|
|
containers := slices.Clone(api.containers)
|
|
api.mu.Unlock()
|
|
|
|
require.Equal(t, map[string][]string{
|
|
"sha256:built": {"upaas-sneak.berlin:abc1234"},
|
|
}, images)
|
|
|
|
_, err = reference.ParseNormalizedNamed("upaas-sneak.berlin:abc1234")
|
|
require.NoError(t, err)
|
|
|
|
require.Equal(t, []string{"upaas-sneak.berlin"}, containers)
|
|
assert.Regexp(t, names.RestrictedNamePattern, containers[0])
|
|
|
|
assert.DirExists(t, svc.GetBuildDirExported(app.Name))
|
|
}
|