@@ -97,34 +97,49 @@ func TestTriggerMethodOIDCWithLoginServer(t *testing.T) {
97
97
98
98
func TestTriggerMethodOIDCWithoutLoginServer (t * testing.T ) {
99
99
100
- // We're simulating a container environment where the browser can't be opened.
101
- // See https://jira.mesosphere.com/browse/DCOS_OSS-5591
102
- opener := open .OpenerFunc (func (_ string ) error {
103
- return errors .New ("couldn't open browser, I'm just a container" )
104
- })
100
+ testCases := []struct {
101
+ provider * Provider
102
+ }{
103
+ {
104
+ // We're simulating a container environment where the browser can't be opened.
105
+ // See https://jira.mesosphere.com/browse/DCOS_OSS-5591
106
+ defaultOIDCImplicitFlowProvider (),
107
+ },
108
+ {
109
+ // Non-regression test for a panic on browser login flows other than auth0.
110
+ // https://jira.mesosphere.com/browse/DCOS-60349
111
+ shibbolethLoginProvider (),
112
+ },
113
+ }
105
114
106
- expectedLoginToken := "dummy_login_token"
107
- expectedACSToken := "dummy_acs_token"
115
+ for _ , tc := range testCases {
116
+ expectedLoginToken := "dummy_login_token"
117
+ expectedACSToken := "dummy_acs_token"
108
118
109
- ts := httptest .NewServer (mockLoginEndpoint (t , expectedLoginToken , expectedACSToken ))
110
- defer ts .Close ()
119
+ ts := httptest .NewServer (mockLoginEndpoint (t , expectedLoginToken , expectedACSToken ))
120
+ defer ts .Close ()
111
121
112
- logger := & logrus.Logger {Out : ioutil .Discard }
122
+ logger := & logrus.Logger {Out : ioutil .Discard }
113
123
114
- var in bytes.Buffer
115
- in .WriteString (expectedLoginToken )
124
+ var in bytes.Buffer
125
+ in .WriteString (expectedLoginToken )
116
126
117
- flow := NewFlow (FlowOpts {
118
- Prompt : prompt .New (& in , ioutil .Discard ),
119
- Logger : logger ,
120
- Opener : opener ,
121
- })
127
+ opener := open .OpenerFunc (func (_ string ) error {
128
+ return errors .New ("couldn't open browser, I'm just a container" )
129
+ })
122
130
123
- flow .client = NewClient (httpclient .New (ts .URL ), logger )
131
+ flow := NewFlow (FlowOpts {
132
+ Prompt : prompt .New (& in , ioutil .Discard ),
133
+ Logger : logger ,
134
+ Opener : opener ,
135
+ })
124
136
125
- acsToken , err := flow .triggerMethod (defaultOIDCImplicitFlowProvider ())
126
- require .NoError (t , err )
127
- require .Equal (t , expectedACSToken , acsToken )
137
+ flow .client = NewClient (httpclient .New (ts .URL ), logger )
138
+
139
+ acsToken , err := flow .triggerMethod (tc .provider )
140
+ require .NoError (t , err )
141
+ require .Equal (t , expectedACSToken , acsToken )
142
+ }
128
143
}
129
144
130
145
func mockLoginEndpoint (t * testing.T , expectedLoginToken , acsToken string ) http.Handler {
@@ -148,3 +163,14 @@ func mockLoginEndpoint(t *testing.T, expectedLoginToken, acsToken string) http.H
148
163
})
149
164
return mux
150
165
}
166
+
167
+ func shibbolethLoginProvider () * Provider {
168
+ return & Provider {
169
+ ID : "shib-integration-test" ,
170
+ Type : OIDCImplicitFlow ,
171
+ ClientMethod : methodBrowserOIDCToken ,
172
+ Config : ProviderConfig {
173
+ StartFlowURL : "/login?redirect_uri=urn:ietf:wg:oauth:2.0:oob" ,
174
+ },
175
+ }
176
+ }
0 commit comments