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  }