Skip to content

Commit a49662f

Browse files
Refactor the CyberArk dataupload client to take an HTTP client
Signed-off-by: Richard Wall <[email protected]>
1 parent 76649af commit a49662f

File tree

4 files changed

+32
-45
lines changed

4 files changed

+32
-45
lines changed

pkg/client/client_cyberark.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,4 +6,4 @@ import (
66

77
type CyberArkClient = dataupload.CyberArkClient
88

9-
var NewCyberArkClient = dataupload.NewCyberArkClient
9+
var NewCyberArkClient = dataupload.New

pkg/internal/cyberark/dataupload/dataupload.go

Lines changed: 6 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import (
44
"bytes"
55
"context"
66
"crypto/sha256"
7-
"crypto/x509"
87
"encoding/base64"
98
"encoding/hex"
109
"encoding/json"
@@ -13,8 +12,6 @@ import (
1312
"net/http"
1413
"net/url"
1514

16-
"k8s.io/client-go/transport"
17-
1815
"github.com/jetstack/preflight/api"
1916
"github.com/jetstack/preflight/pkg/version"
2017
)
@@ -31,8 +28,8 @@ const (
3128
)
3229

3330
type CyberArkClient struct {
34-
baseURL string
35-
client *http.Client
31+
baseURL string
32+
httpClient *http.Client
3633

3734
authenticateRequest func(req *http.Request) error
3835
}
@@ -41,17 +38,10 @@ type Options struct {
4138
ClusterName string
4239
}
4340

44-
func NewCyberArkClient(trustedCAs *x509.CertPool, baseURL string, authenticateRequest func(req *http.Request) error) (*CyberArkClient, error) {
45-
cyberClient := &http.Client{}
46-
tr := http.DefaultTransport.(*http.Transport).Clone()
47-
if trustedCAs != nil {
48-
tr.TLSClientConfig.RootCAs = trustedCAs
49-
}
50-
cyberClient.Transport = transport.NewDebuggingRoundTripper(tr, transport.DebugByContext)
51-
41+
func New(httpClient *http.Client, baseURL string, authenticateRequest func(req *http.Request) error) (*CyberArkClient, error) {
5242
return &CyberArkClient{
5343
baseURL: baseURL,
54-
client: cyberClient,
44+
httpClient: httpClient,
5545
authenticateRequest: authenticateRequest,
5646
}, nil
5747
}
@@ -96,7 +86,7 @@ func (c *CyberArkClient) PostDataReadingsWithOptions(ctx context.Context, payloa
9686
req.Header.Set("X-Amz-Checksum-Sha256", checksumBase64)
9787
version.SetUserAgent(req)
9888

99-
res, err := c.client.Do(req)
89+
res, err := c.httpClient.Do(req)
10090
if err != nil {
10191
return err
10292
}
@@ -145,7 +135,7 @@ func (c *CyberArkClient) retrievePresignedUploadURL(ctx context.Context, checksu
145135
}
146136
version.SetUserAgent(req)
147137

148-
res, err := c.client.Do(req)
138+
res, err := c.httpClient.Do(req)
149139
if err != nil {
150140
return "", err
151141
}

pkg/internal/cyberark/dataupload/dataupload_test.go

Lines changed: 8 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@ package dataupload_test
22

33
import (
44
"crypto/x509"
5-
"encoding/pem"
65
"fmt"
76
"net/http"
87
"os"
@@ -109,19 +108,15 @@ func TestCyberArkClient_PostDataReadingsWithOptions(t *testing.T) {
109108

110109
for _, tc := range tests {
111110
t.Run(tc.name, func(t *testing.T) {
112-
server := dataupload.MockDataUploadServer()
113-
defer server.Close()
111+
logger := ktesting.NewLogger(t, ktesting.DefaultConfig)
112+
ctx := klog.NewContext(t.Context(), logger)
114113

115-
certPool := x509.NewCertPool()
116-
require.True(t, certPool.AppendCertsFromPEM(pem.EncodeToMemory(&pem.Block{
117-
Type: "CERTIFICATE",
118-
Bytes: server.Server.TLS.Certificates[0].Certificate[0],
119-
})))
114+
datauploadAPIBaseURL, httpClient := dataupload.MockDataUploadServer(t)
120115

121-
cyberArkClient, err := dataupload.NewCyberArkClient(certPool, server.Server.URL, tc.authenticate)
116+
cyberArkClient, err := dataupload.New(httpClient, datauploadAPIBaseURL, tc.authenticate)
122117
require.NoError(t, err)
123118

124-
err = cyberArkClient.PostDataReadingsWithOptions(t.Context(), tc.payload, tc.opts)
119+
err = cyberArkClient.PostDataReadingsWithOptions(ctx, tc.payload, tc.opts)
125120
tc.requireFn(t, err)
126121
})
127122
}
@@ -153,12 +148,8 @@ func TestPostDataReadingsWithOptionsWithRealAPI(t *testing.T) {
153148
logger := ktesting.NewLogger(t, ktesting.DefaultConfig)
154149
ctx := klog.NewContext(t.Context(), logger)
155150

156-
const (
157-
discoveryContextServiceName = "inventory"
158-
separator = "."
159-
)
160-
161-
serviceURL := fmt.Sprintf("https://%s%s%s.%s", subdomain, separator, discoveryContextServiceName, platformDomain)
151+
// TODO(wallrj): get this from the servicediscovery API instead.
152+
inventoryAPI := fmt.Sprintf("https://%s.inventory.%s", subdomain, platformDomain)
162153

163154
var rootCAs *x509.CertPool
164155
httpClient := http_client.NewDefaultClient(version.UserAgent(), rootCAs)
@@ -173,7 +164,7 @@ func TestPostDataReadingsWithOptionsWithRealAPI(t *testing.T) {
173164
err = identityClient.LoginUsernamePassword(ctx, username, []byte(secret))
174165
require.NoError(t, err)
175166

176-
cyberArkClient, err := dataupload.NewCyberArkClient(nil, serviceURL, identityClient.AuthenticateRequest)
167+
cyberArkClient, err := dataupload.New(httpClient, inventoryAPI, identityClient.AuthenticateRequest)
177168
require.NoError(t, err)
178169

179170
err = cyberArkClient.PostDataReadingsWithOptions(ctx, api.DataReadingsPost{}, dataupload.Options{

pkg/internal/cyberark/dataupload/mock.go

Lines changed: 17 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,10 +8,11 @@ import (
88
"io"
99
"net/http"
1010
"net/http/httptest"
11+
"testing"
1112

12-
"github.com/jetstack/preflight/pkg/version"
13+
"k8s.io/client-go/transport"
1314

14-
_ "embed"
15+
"github.com/jetstack/preflight/pkg/version"
1516
)
1617

1718
const (
@@ -21,18 +22,23 @@ const (
2122
)
2223

2324
type mockDataUploadServer struct {
24-
Server *httptest.Server
25+
serverURL string
2526
}
2627

2728
// MockDataUploadServer returns a mocked data upload server with default values.
28-
func MockDataUploadServer() *mockDataUploadServer {
29-
mds := &mockDataUploadServer{}
30-
mds.Server = httptest.NewTLSServer(mds)
31-
return mds
32-
}
29+
func MockDataUploadServer(t *testing.T) (string, *http.Client) {
30+
mux := http.NewServeMux()
31+
32+
server := httptest.NewTLSServer(mux)
33+
t.Cleanup(server.Close)
34+
mds := &mockDataUploadServer{
35+
serverURL: server.URL,
36+
}
37+
mux.Handle("/", mds)
3338

34-
func (mds *mockDataUploadServer) Close() {
35-
mds.Server.Close()
39+
httpClient := server.Client()
40+
httpClient.Transport = transport.NewDebuggingRoundTripper(httpClient.Transport, transport.DebugByContext)
41+
return server.URL, httpClient
3642
}
3743

3844
func (mds *mockDataUploadServer) ServeHTTP(w http.ResponseWriter, r *http.Request) {
@@ -109,7 +115,7 @@ func (mds *mockDataUploadServer) handleSnapshotLinks(w http.ResponseWriter, r *h
109115
// Write response body
110116
w.WriteHeader(http.StatusOK)
111117
w.Header().Set("Content-Type", "application/json")
112-
presignedURL := mds.Server.URL + "/presigned-upload"
118+
presignedURL := mds.serverURL + "/presigned-upload"
113119
_ = json.NewEncoder(w).Encode(struct {
114120
URL string `json:"url"`
115121
}{presignedURL})

0 commit comments

Comments
 (0)