@@ -19,7 +19,6 @@ import (
19
19
var (
20
20
chromeDriverPath = testutil .MustRunfile ("chromedriver.bin" )
21
21
chromePath = testutil .MustRunfile ("chromium.bin" )
22
- extensionPath = testutil .MustRunfile ("chrome-ssh-agent.zip" )
23
22
)
24
23
25
24
func getElementText (wd selenium.WebDriver , id string ) (string , error ) {
@@ -97,92 +96,113 @@ func dumpLog(t *testing.T, name string, r io.Reader) {
97
96
}
98
97
99
98
func TestWebApp (t * testing.T ) {
100
- port , err := unusedPort ()
101
- if err != nil {
102
- t .Fatalf ("failed to identify unused port: %v" , err )
103
- }
104
-
105
- var selOut bytes.Buffer
106
- opts := []selenium.ServiceOption {
107
- selenium .Output (& selOut ),
108
- }
109
- service , err := selenium .NewChromeDriverService (chromeDriverPath , port , opts ... )
110
- if err != nil {
111
- defer dumpLog (t , "SeleniumOutput" , & selOut ) // Selenium failed to initialize; show debug info.
112
- t .Fatalf ("failed to start Selenium service: %v" , err )
113
- }
114
- defer service .Stop ()
115
-
116
- caps := selenium.Capabilities {}
117
- caps .AddLogging (logLevels )
118
-
119
- t .Log ("Preparing extension" )
120
- extPath , extCleanup , err := testutil .UnzipTemp (extensionPath )
121
- if err != nil {
122
- t .Fatalf ("Failed to unzip extension: %v" , err )
123
- }
124
- defer extCleanup ()
125
-
126
- t .Log ("Configuring extension in Chrome" )
127
- chromeCaps := chrome.Capabilities {
128
- Path : chromePath ,
129
- Args : []string {
130
- "--no-sandbox" ,
131
- // Specific headless mode that supports extensions. See:
132
- // https://bugs.chromium.org/p/chromium/issues/detail?id=706008#c36
133
- "--headless=chrome" ,
99
+ testcases := []struct {
100
+ name string
101
+ extensionPath string
102
+ extensionId string
103
+ }{
104
+ {
105
+ name : "Prod Release" ,
106
+ extensionPath : testutil .MustRunfile ("chrome-ssh-agent.zip" ),
107
+ extensionId : "eechpbnaifiimgajnomdipfaamobdfha" ,
108
+ },
109
+ {
110
+ name : "Beta Release" ,
111
+ extensionPath : testutil .MustRunfile ("chrome-ssh-agent-beta.zip" ),
112
+ extensionId : "onabphcdiffmanfdhkihllckikaljmhh" ,
134
113
},
135
- }
136
- if err = chromeCaps .AddUnpackedExtension (extPath ); err != nil {
137
- t .Fatalf ("failed to add extension: %v" , err )
138
- }
139
- caps .AddChrome (chromeCaps )
140
-
141
- t .Log ("Starting WebDriver" )
142
- wd , err := selenium .NewRemote (caps , fmt .Sprintf ("http://localhost:%d/wd/hub" , port ))
143
- if err != nil {
144
- defer dumpLog (t , "SeleniumOutput" , & selOut ) // Selenium failed to initialize; show debug info.
145
- t .Fatalf ("Failed to start webdriver: %v" , err )
146
- }
147
- defer wd .Quit ()
148
- defer dumpSeleniumLogs (t , wd )
149
-
150
- t .Log ("Navigating to test page" )
151
- path := makeExtensionUrl ("html/options.html" , "test" )
152
- if err = wd .Get (path .String ()); err != nil {
153
- t .Fatalf ("Failed to navigate to %s: %v" , path , err )
154
- }
155
-
156
- t .Log ("Waiting for navigation" )
157
- if err = wd .WaitWithTimeout (currentURLIs (path .String ()), 10 * time .Second ); err != nil {
158
- t .Fatalf ("Failed to complete navigation to page: %v" , err )
159
- }
160
-
161
- t .Log ("Waiting for results" )
162
- if err = wd .WaitWithTimeout (elementExists ("failureCount" ), 30 * time .Second ); err != nil {
163
- t .Fatalf ("failed to wait for failure count: %v" , err )
164
- }
165
- if err = wd .WaitWithTimeout (elementExists ("failures" ), 30 * time .Second ); err != nil {
166
- t .Fatalf ("failed to wait for failures: %v" , err )
167
- }
168
-
169
- t .Log ("Extracting test results" )
170
- countTxt , err := getElementText (wd , "failureCount" )
171
- if err != nil {
172
- t .Fatalf ("Failed to find failure count: %v" , err )
173
- }
174
-
175
- count , err := strconv .Atoi (countTxt )
176
- if err != nil {
177
- t .Fatalf ("Failed to parse failure count '%s' as integer: %v" , countTxt , err )
178
- }
179
-
180
- failures , err := getElementText (wd , "failures" )
181
- if err != nil {
182
- t .Fatalf ("Failed to find failure details: %v" , err )
183
114
}
184
115
185
- if count != 0 {
186
- t .Errorf ("Reported Failures:\n %s" , failures )
116
+ for _ , tc := range testcases {
117
+ t .Run (tc .name , func (t * testing.T ) {
118
+ port , err := unusedPort ()
119
+ if err != nil {
120
+ t .Fatalf ("failed to identify unused port: %v" , err )
121
+ }
122
+
123
+ var selOut bytes.Buffer
124
+ opts := []selenium.ServiceOption {
125
+ selenium .Output (& selOut ),
126
+ }
127
+ service , err := selenium .NewChromeDriverService (chromeDriverPath , port , opts ... )
128
+ if err != nil {
129
+ defer dumpLog (t , "SeleniumOutput" , & selOut ) // Selenium failed to initialize; show debug info.
130
+ t .Fatalf ("failed to start Selenium service: %v" , err )
131
+ }
132
+ defer service .Stop ()
133
+
134
+ caps := selenium.Capabilities {}
135
+ caps .AddLogging (logLevels )
136
+
137
+ t .Log ("Preparing extension" )
138
+ extPath , extCleanup , err := testutil .UnzipTemp (tc .extensionPath )
139
+ if err != nil {
140
+ t .Fatalf ("Failed to unzip extension: %v" , err )
141
+ }
142
+ defer extCleanup ()
143
+
144
+ t .Log ("Configuring extension in Chrome" )
145
+ chromeCaps := chrome.Capabilities {
146
+ Path : chromePath ,
147
+ Args : []string {
148
+ "--no-sandbox" ,
149
+ // Specific headless mode that supports extensions. See:
150
+ // https://bugs.chromium.org/p/chromium/issues/detail?id=706008#c36
151
+ "--headless=chrome" ,
152
+ },
153
+ }
154
+ if err = chromeCaps .AddUnpackedExtension (extPath ); err != nil {
155
+ t .Fatalf ("failed to add extension: %v" , err )
156
+ }
157
+ caps .AddChrome (chromeCaps )
158
+
159
+ t .Log ("Starting WebDriver" )
160
+ wd , err := selenium .NewRemote (caps , fmt .Sprintf ("http://localhost:%d/wd/hub" , port ))
161
+ if err != nil {
162
+ defer dumpLog (t , "SeleniumOutput" , & selOut ) // Selenium failed to initialize; show debug info.
163
+ t .Fatalf ("Failed to start webdriver: %v" , err )
164
+ }
165
+ defer wd .Quit ()
166
+ defer dumpSeleniumLogs (t , wd )
167
+
168
+ t .Log ("Navigating to test page" )
169
+ path := makeExtensionUrl (tc .extensionId , "html/options.html" , "test" )
170
+ if err = wd .Get (path .String ()); err != nil {
171
+ t .Fatalf ("Failed to navigate to %s: %v" , path , err )
172
+ }
173
+
174
+ t .Log ("Waiting for navigation" )
175
+ if err = wd .WaitWithTimeout (currentURLIs (path .String ()), 10 * time .Second ); err != nil {
176
+ t .Fatalf ("Failed to complete navigation to page: %v" , err )
177
+ }
178
+
179
+ t .Log ("Waiting for results" )
180
+ if err = wd .WaitWithTimeout (elementExists ("failureCount" ), 30 * time .Second ); err != nil {
181
+ t .Fatalf ("failed to wait for failure count: %v" , err )
182
+ }
183
+ if err = wd .WaitWithTimeout (elementExists ("failures" ), 30 * time .Second ); err != nil {
184
+ t .Fatalf ("failed to wait for failures: %v" , err )
185
+ }
186
+
187
+ t .Log ("Extracting test results" )
188
+ countTxt , err := getElementText (wd , "failureCount" )
189
+ if err != nil {
190
+ t .Fatalf ("Failed to find failure count: %v" , err )
191
+ }
192
+
193
+ count , err := strconv .Atoi (countTxt )
194
+ if err != nil {
195
+ t .Fatalf ("Failed to parse failure count '%s' as integer: %v" , countTxt , err )
196
+ }
197
+
198
+ failures , err := getElementText (wd , "failures" )
199
+ if err != nil {
200
+ t .Fatalf ("Failed to find failure details: %v" , err )
201
+ }
202
+
203
+ if count != 0 {
204
+ t .Errorf ("Reported Failures:\n %s" , failures )
205
+ }
206
+ })
187
207
}
188
208
}
0 commit comments