-
-
Notifications
You must be signed in to change notification settings - Fork 579
/
pantheon_test.go
178 lines (146 loc) · 5.76 KB
/
pantheon_test.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
package ddevapp_test
import (
"bufio"
"fmt"
"os"
"path/filepath"
"strings"
"testing"
. "github.com/drud/ddev/pkg/ddevapp"
"github.com/drud/ddev/pkg/testcommon"
"github.com/drud/ddev/pkg/util"
asrt "github.com/stretchr/testify/assert"
)
/**
* These tests rely on an external test account managed by DRUD. To run them, you'll
* need to set an environment variable called "DDEV_PANTHEON_API_TOKEN" with credentials for
* this account. If no such environment variable is present, these tests will be skipped.
*
* A valid site (with backups) must be present which matches the test site and environment name
* defined in the constants below.
*/
const pantheonTestSiteName = "ddev-test-site-do-not-delete"
const pantheonTestEnvName = "bbowman"
// TestConfigCommand tests the interactive config options.
func TestPantheonConfigCommand(t *testing.T) {
if os.Getenv("DDEV_PANTHEON_API_TOKEN") == "" {
t.Skip("No DDEV_PANTHEON_API_TOKEN env var has been set. Skipping Pantheon specific test.")
}
// Set up tests and give ourselves a working directory.
assert := asrt.New(t)
testDir := testcommon.CreateTmpDir("TestPantheonConfigCommand")
// testcommon.Chdir()() and CleanupDir() checks their own errors (and exit)
defer testcommon.CleanupDir(testDir)
defer testcommon.Chdir(testDir)()
// Create a docroot folder.
err := os.Mkdir(filepath.Join(testDir, "docroot"), 0644)
if err != nil {
t.Errorf("Could not create docroot directory under %s", testDir)
}
// Create the ddevapp we'll use for testing.
app, err := NewApp(testDir, "pantheon")
assert.NoError(err)
// Randomize some values to use for Stdin during testing.
invalidName := strings.ToLower(util.RandString(16))
docroot := "docroot"
invalidEnvironment := strings.ToLower(util.RandString(8))
/**
* Do a full interactive configuration for a pantheon environment.
*
* 1. Provide an invalid site name, ensure there is an error.
* 2. Provide a valid site name. Ensure there is no error.
* 3. Provide a valid docroot (already tested elsewhere)
* 4. Provide a valid app type (drupal8)
* 5. Provide an invalid pantheon environment name, ensure an error is triggered.
* 6. Provide a valid environment name.
**/
input := fmt.Sprintf("%s\n%s\n%s\ndocroot\ndrupal8\n%s\n%s", invalidName, pantheonTestSiteName, docroot, invalidEnvironment, pantheonTestEnvName)
scanner := bufio.NewScanner(strings.NewReader(input))
util.SetInputScanner(scanner)
restoreOutput := testcommon.CaptureUserOut()
err = app.PromptForConfig()
assert.NoError(err, t)
out := restoreOutput()
// Get the provider interface and ensure it validates.
provider, err := app.GetProvider()
assert.NoError(err)
err = provider.Validate()
assert.NoError(err)
// Ensure we have expected string values in output.
assert.Contains(out, testDir)
assert.Contains(out, fmt.Sprintf("could not find a pantheon site named %s", invalidName))
assert.Contains(out, fmt.Sprintf("could not find an environment named '%s'", invalidEnvironment))
// Ensure values were properly set on the app struct.
assert.Equal(pantheonTestSiteName, app.Name)
assert.Equal("drupal8", app.Type)
assert.Equal("docroot", app.Docroot)
err = PrepDdevDirectory(testDir)
assert.NoError(err)
}
// TestPantheonBackupLinks ensures we can get backups from pantheon for a configured environment.
func TestPantheonBackupLinks(t *testing.T) {
if os.Getenv("DDEV_PANTHEON_API_TOKEN") == "" {
t.Skip("No DDEV_PANTHEON_API_TOKEN env var has been set. Skipping Pantheon specific test.")
}
// Set up tests and give ourselves a working directory.
assert := asrt.New(t)
testDir := testcommon.CreateTmpDir("TestPantheonBackupLinks")
// testcommon.Chdir()() and CleanupDir() checks their own errors (and exit)
defer testcommon.CleanupDir(testDir)
defer testcommon.Chdir(testDir)()
app, err := NewApp(testDir, "pantheon")
assert.NoError(err)
app.Name = pantheonTestSiteName
provider := PantheonProvider{}
err = provider.Init(app)
assert.NoError(err)
provider.Sitename = pantheonTestSiteName
provider.EnvironmentName = pantheonTestEnvName
// Ensure GetBackup triggers an error for unknown backup types.
_, _, err = provider.GetBackup(util.RandString(8), "")
assert.Error(err)
// Ensure we can get a
backupLink, importPath, err := provider.GetBackup("database", "")
assert.Equal(importPath, "")
assert.Contains(backupLink, "database.sql.gz")
assert.NoError(err)
}
// TestPantheonPull ensures we can pull backups from pantheon for a configured environment.
func TestPantheonPull(t *testing.T) {
if os.Getenv("DDEV_PANTHEON_API_TOKEN") == "" {
t.Skip("No DDEV_PANTHEON_API_TOKEN env var has been set. Skipping Pantheon specific test.")
}
// Set up tests and give ourselves a working directory.
assert := asrt.New(t)
testDir := testcommon.CreateTmpDir("TestPantheonPull")
// testcommon.Chdir()() and CleanupDir() checks their own errors (and exit)
defer testcommon.CleanupDir(testDir)
defer testcommon.Chdir(testDir)()
// Move into the properly named pantheon site (must match pantheon sitename)
siteDir := testDir + "/" + pantheonTestSiteName
err := os.MkdirAll(siteDir+"/sites/default", 0777)
assert.NoError(err)
err = os.Chdir(siteDir)
assert.NoError(err)
app, err := NewApp(siteDir, "pantheon")
assert.NoError(err)
app.Name = pantheonTestSiteName
app.Type = "drupal8"
err = app.WriteConfig()
assert.NoError(err)
testcommon.ClearDockerEnv()
provider := PantheonProvider{}
err = provider.Init(app)
assert.NoError(err)
provider.Sitename = pantheonTestSiteName
provider.EnvironmentName = pantheonTestEnvName
err = provider.Write(app.GetConfigPath("import.yaml"))
assert.NoError(err)
// Ensure we can do a pull on the configured site.
app, err = GetActiveApp("")
assert.NoError(err)
err = app.Pull(&provider, &PullOptions{})
assert.NoError(err)
err = app.Down(true, false)
assert.NoError(err)
}