github.com/argoproj-labs/argocd-operator@v0.10.0/controllers/argocd/keycloak_client_test.go (about) 1 package argocd 2 3 import ( 4 "net/http" 5 "net/http/httptest" 6 "testing" 7 8 "encoding/pem" 9 10 jsoniter "github.com/json-iterator/go" 11 "github.com/stretchr/testify/assert" 12 ) 13 14 func TestKeycloak_testRealmCreation(t *testing.T) { 15 handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { 16 assert.Equal(t, realmURL, req.URL.Path) 17 w.WriteHeader(201) 18 }) 19 server := httptest.NewServer(handler) 20 defer server.Close() 21 22 h := &httpclient{ 23 requester: server.Client(), 24 URL: server.URL, 25 token: "dummy", 26 } 27 28 data := &keycloakConfig{} 29 realm, _ := createRealmConfig(data) 30 31 _, err := h.post(realm) 32 assert.NoError(t, err) 33 } 34 35 func TestKeycloak_testLogin(t *testing.T) { 36 handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { 37 assert.Equal(t, authURL, req.URL.Path) 38 assert.Equal(t, req.Method, http.MethodPost) 39 40 response := TokenResponse{ 41 AccessToken: "dummy", 42 } 43 44 json, err := jsoniter.Marshal(response) 45 assert.NoError(t, err) 46 47 size, err := w.Write(json) 48 assert.NoError(t, err) 49 assert.Equal(t, size, len(json)) 50 51 w.WriteHeader(204) 52 }) 53 server := httptest.NewServer(handler) 54 defer server.Close() 55 56 h := &httpclient{ 57 requester: server.Client(), 58 URL: server.URL, 59 token: "not set", 60 } 61 62 err := h.login("dummy", "dummy") 63 64 assert.NoError(t, err) 65 assert.Equal(t, h.token, "dummy") 66 } 67 68 func TestClient_useKeycloakServerCertificate(t *testing.T) { 69 var insecure bool 70 handler := http.HandlerFunc(func(w http.ResponseWriter, req *http.Request) { 71 _, err := w.Write([]byte("dummy")) 72 if err != nil { 73 t.Errorf("dummy write failed with error %v", err) 74 } 75 }) 76 ts := httptest.NewTLSServer(handler) 77 defer ts.Close() 78 79 pemCert := pem.EncodeToMemory(&pem.Block{Type: "CERTIFICATE", Bytes: ts.Certificate().Raw}) 80 81 requester, err := defaultRequester(pemCert, true) 82 assert.NoError(t, err) 83 httpClient, ok := requester.(*http.Client) 84 assert.Equal(t, true, ok) 85 assert.Equal(t, httpClient.Transport.(*http.Transport).TLSClientConfig.InsecureSkipVerify, insecure) 86 87 request, err := http.NewRequest("GET", ts.URL, nil) 88 assert.NoError(t, err) 89 resp, err := requester.Do(request) 90 assert.NoError(t, err) 91 defer resp.Body.Close() 92 assert.Equal(t, resp.StatusCode, 200) 93 94 // Set verifyTLS=false, verify an insecure TLS connection is returned even the serverCertificate is available. 95 requester, err = defaultRequester(pemCert, false) 96 assert.NoError(t, err) 97 httpClient, ok = requester.(*http.Client) 98 assert.Equal(t, true, ok) 99 assert.Equal(t, httpClient.Transport.(*http.Transport).TLSClientConfig.InsecureSkipVerify, !insecure) 100 101 request, err = http.NewRequest("GET", ts.URL, nil) 102 assert.NoError(t, err) 103 resp, err = requester.Do(request) 104 assert.NoError(t, err) 105 defer resp.Body.Close() 106 assert.Equal(t, resp.StatusCode, 200) 107 108 }