1
1
package openshift
2
2
3
3
import (
4
- "k8s.io/apiserver/pkg/authentication/user"
5
- "k8s.io/apiserver/pkg/authorization/authorizer"
4
+ "io/ioutil"
6
5
"net/http"
6
+ "os"
7
7
"reflect"
8
8
"testing"
9
+
10
+ "k8s.io/apiserver/pkg/authentication/user"
11
+ "k8s.io/apiserver/pkg/authorization/authorizer"
9
12
)
10
13
11
14
type mockAuthRequestHandler struct {
@@ -14,6 +17,42 @@ type mockAuthRequestHandler struct {
14
17
type mockAuthorizer struct {
15
18
}
16
19
20
+ // if you're seeing cert expiration errors on 'Nov 3 11:57:34 2119 GMT', I am sorry
21
+ const longLivedCACert = `
22
+ -----BEGIN CERTIFICATE-----
23
+ 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
53
+ -----END CERTIFICATE-----
54
+ `
55
+
17
56
func TestParseSubjectAccessReviews (t * testing.T ) {
18
57
19
58
tests := []struct {
@@ -93,3 +132,49 @@ func TestDontPassBasicAuthentication(t *testing.T) {
93
132
t .Errorf ("access token should be empty string for basic authentication: %v" , session )
94
133
}
95
134
}
135
+
136
+ func TestNewOpenShiftClient (t * testing.T ) {
137
+ tmpfile , err := ioutil .TempFile ("" , "osclienttest-" )
138
+ if err != nil {
139
+ t .Fatalf ("failed to create tempfile: %v" , err )
140
+ }
141
+ defer os .Remove (tmpfile .Name ())
142
+
143
+ _ , err = tmpfile .WriteString (longLivedCACert )
144
+ if err != nil {
145
+ t .Fatalf ("failed to write CA cert to tmpfile: %v" , err )
146
+ }
147
+
148
+ p := & OpenShiftProvider {}
149
+ p .paths = recordsByPath {pathRecord {"/someurl" , authorizer.AttributesRecord {}}}
150
+ p .authenticator = & mockAuthRequestHandler {}
151
+ p .authorizer = & mockAuthorizer {}
152
+ p .SetReviewCAs ([]string {tmpfile .Name ()})
153
+
154
+ client , err := p .newOpenShiftClient ()
155
+ if err != nil {
156
+ t .Fatalf ("failed to create an OpenShift Client" )
157
+ }
158
+
159
+ newClient , err := p .newOpenShiftClient ()
160
+ if err != nil {
161
+ t .Fatalf ("failed to create a new OpenShift Client" )
162
+ }
163
+
164
+ // caching should make sure the clients are the same
165
+ if client != newClient {
166
+ t .Errorf ("repeated call of newOpenShiftClient() returned different client pointers" )
167
+ }
168
+
169
+ // useless change but should change the metadata enough to get us a new client
170
+ tmpfile .WriteString ("\n " )
171
+
172
+ newClient , err = p .newOpenShiftClient ()
173
+ if err != nil {
174
+ t .Fatalf ("failed to create a new OpenShift Client" )
175
+ }
176
+
177
+ if client == newClient {
178
+ t .Errorf ("repeated call of newOpenShiftClient() after one of the CA changed returned the same client pointer" )
179
+ }
180
+ }
0 commit comments