From 6d3a86bb246275d1873bc8957c7b56bd9a3a8c7a Mon Sep 17 00:00:00 2001 From: Anton Averchenkov Date: Wed, 18 Oct 2023 14:43:31 -0400 Subject: [PATCH] Fix SetRequestCallbacks/SetResponseCallbacks --- client.go | 6 +++--- client_test.go | 7 +++++++ generate/templates/client.handlebars | 6 +++--- replication_consistency.go | 2 +- request_modifiers.go | 2 ++ 5 files changed, 16 insertions(+), 7 deletions(-) diff --git a/client.go b/client.go index c443d8ef..53cbdbb0 100644 --- a/client.go +++ b/client.go @@ -204,8 +204,8 @@ func (c *Client) cloneClientRequestModifiers() requestModifiers { var clone requestModifiers - copy(clone.requestCallbacks, c.clientRequestModifiers.requestCallbacks) - copy(clone.responseCallbacks, c.clientRequestModifiers.responseCallbacks) + clone.requestCallbacks = append(clone.requestCallbacks, c.clientRequestModifiers.requestCallbacks...) + clone.responseCallbacks = append(clone.responseCallbacks, c.clientRequestModifiers.responseCallbacks...) clone.headers = requestHeaders{ userAgent: c.clientRequestModifiers.headers.userAgent, @@ -216,7 +216,7 @@ func (c *Client) cloneClientRequestModifiers() requestModifiers { customHeaders: c.clientRequestModifiers.headers.customHeaders.Clone(), } - copy(clone.headers.mfaCredentials, c.clientRequestModifiers.headers.mfaCredentials) + clone.headers.mfaCredentials = append(clone.headers.mfaCredentials, c.clientRequestModifiers.headers.mfaCredentials...) return clone } diff --git a/client_test.go b/client_test.go index 0c2acc84..e486ed14 100644 --- a/client_test.go +++ b/client_test.go @@ -5,6 +5,7 @@ package vault import ( "fmt" + "net/http" "testing" "time" @@ -27,6 +28,12 @@ func Test_Client_Clone(t *testing.T) { require.NoError(t, client.SetToken("test-token")) require.NoError(t, client.SetNamespace("test-namespace")) + require.NoError(t, client.SetRequestCallbacks(func(req *http.Request) { + t.Log(req) + })) + require.NoError(t, client.SetResponseCallbacks(func(req *http.Request, resp *http.Response) { + t.Log(req, resp) + })) clone := client.Clone() diff --git a/generate/templates/client.handlebars b/generate/templates/client.handlebars index eba1c343..d0818f76 100644 --- a/generate/templates/client.handlebars +++ b/generate/templates/client.handlebars @@ -180,8 +180,8 @@ func (c *Client) cloneClientRequestModifiers() requestModifiers { var clone requestModifiers - copy(clone.requestCallbacks, c.clientRequestModifiers.requestCallbacks) - copy(clone.responseCallbacks, c.clientRequestModifiers.responseCallbacks) + clone.requestCallbacks = append(clone.requestCallbacks, c.clientRequestModifiers.requestCallbacks...) + clone.responseCallbacks = append(clone.responseCallbacks, c.clientRequestModifiers.responseCallbacks...) clone.headers = requestHeaders{ userAgent: c.clientRequestModifiers.headers.userAgent, @@ -192,7 +192,7 @@ func (c *Client) cloneClientRequestModifiers() requestModifiers { customHeaders: c.clientRequestModifiers.headers.customHeaders.Clone(), } - copy(clone.headers.mfaCredentials, c.clientRequestModifiers.headers.mfaCredentials) + clone.headers.mfaCredentials = append(clone.headers.mfaCredentials, c.clientRequestModifiers.headers.mfaCredentials...) return clone } diff --git a/replication_consistency.go b/replication_consistency.go index 40a4b36c..da891997 100644 --- a/replication_consistency.go +++ b/replication_consistency.go @@ -228,7 +228,7 @@ func (c *replicationStateCache) clone() replicationStateCache { /* */ c.statesLock.RLock() defer c.statesLock.RUnlock() - var cloned []string + cloned := make([]string, len(c.states)) copy(cloned, c.states) return replicationStateCache{ diff --git a/request_modifiers.go b/request_modifiers.go index 4278ebf7..5b5464cb 100644 --- a/request_modifiers.go +++ b/request_modifiers.go @@ -172,6 +172,7 @@ func (c *Client) ClearCustomHeaders() { // SetRequestCallbacks sets callbacks which will be invoked before each request. func (c *Client) SetRequestCallbacks(callbacks ...RequestCallback) error { c.clientRequestModifiersLock.Lock() + c.clientRequestModifiers.requestCallbacks = make([]RequestCallback, len(callbacks)) copy(c.clientRequestModifiers.requestCallbacks, callbacks) c.clientRequestModifiersLock.Unlock() @@ -189,6 +190,7 @@ func (c *Client) ClearRequestCallbacks() { // successful response. func (c *Client) SetResponseCallbacks(callbacks ...ResponseCallback) error { c.clientRequestModifiersLock.Lock() + c.clientRequestModifiers.responseCallbacks = make([]ResponseCallback, len(callbacks)) copy(c.clientRequestModifiers.responseCallbacks, callbacks) c.clientRequestModifiersLock.Unlock()