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)) }