package common import ( "os" "strings" "testing" . "github.com/onsi/gomega" ) var ( testAppName = "test-app-1" testAppDir = strings.Join([]string{"/home/dokku/", testAppName}, "") testEnvFile = strings.Join([]string{testAppDir, "/ENV"}, "") testEnvLine = "export testKey=TESTING" testAppName2 = "01-test-app-1" testAppDir2 = strings.Join([]string{"/home/dokku/", testAppName2}, "") testEnvFile2 = strings.Join([]string{testAppDir2, "/ENV"}, "") testEnvLine2 = "export testKey=TESTING" ) func setupTests() (err error) { if err := os.Setenv("PLUGIN_PATH", "/var/lib/dokku/plugins"); err != nil { return err } return os.Setenv("PLUGIN_ENABLED_PATH", "/var/lib/dokku/plugins/enabled") } func setupTestApp() (err error) { Expect(os.MkdirAll(testAppDir, 0766)).To(Succeed()) b := []byte(testEnvLine + "\n") if err = os.WriteFile(testEnvFile, b, 0644); err != nil { return } return } func setupTestApp2() (err error) { Expect(os.MkdirAll(testAppDir2, 0766)).To(Succeed()) b := []byte(testEnvLine2 + "\n") if err = os.WriteFile(testEnvFile2, b, 0644); err != nil { return } return } func teardownTestApp() { os.RemoveAll(testAppDir) } func teardownTestApp2() { os.RemoveAll(testAppDir2) } func TestCommonGetEnv(t *testing.T) { RegisterTestingT(t) Expect(setupTests()).To(Succeed()) Expect(MustGetEnv("DOKKU_ROOT")).To(Equal("/home/dokku")) } func TestCommonGetAppImageRepo(t *testing.T) { RegisterTestingT(t) Expect(setupTests()).To(Succeed()) Expect(GetAppImageRepo("testapp")).To(Equal("dokku/testapp")) } func TestCommonVerifyImageInvalid(t *testing.T) { RegisterTestingT(t) Expect(setupTests()).To(Succeed()) Expect(VerifyImage("testapp")).To(Equal(false)) } func TestCommonVerifyAppNameInvalid(t *testing.T) { RegisterTestingT(t) Expect(setupTests()).To(Succeed()) Expect(VerifyAppName("1994testApp")).To(HaveOccurred()) } func TestCommonIsValidAppName(t *testing.T) { RegisterTestingT(t) validNames := []string{ "myapp", "my-app", "my.app", "app123", "123app", "my-app.prod", "a", "0", } for _, name := range validNames { Expect(IsValidAppName(name)).To(Succeed(), "expected %q to be a valid app name", name) } } func TestCommonIsValidAppNameOld(t *testing.T) { RegisterTestingT(t) validNames := []string{ "myapp", "my-app", "my.app", "my_app", "legacy_app_name", "app_v2", } for _, name := range validNames { Expect(IsValidAppNameOld(name)).To(Succeed(), "expected %q to be a valid app name", name) } invalidNames := []string{ "app;id", "app$cmd", "app|cat", "app/cmd", "app:cmd", "App", "-app", "_app", "", } for _, name := range invalidNames { Expect(IsValidAppNameOld(name)).To(HaveOccurred(), "expected %q to be rejected", name) } } func TestCommonIsValidAppNameRejectsShellMetacharacters(t *testing.T) { RegisterTestingT(t) invalidNames := []string{ "app;id", "app$cmd", "app`whoami`", "app|cat", "app&background", "app>file", "app