mirror of
				https://github.com/optim-enterprises-bv/vault.git
				synced 2025-10-30 18:17:55 +00:00 
			
		
		
		
	 07927e036c
			
		
	
	07927e036c
	
	
	
		
			
			* enable registering backend muxed plugins in plugin catalog * set the sysview on the pluginconfig to allow enabling secrets/auth plugins * store backend instances in map * store single implementations in the instances map cleanup instance map and ensure we don't deadlock * fix system backend unit tests move GetMultiplexIDFromContext to pluginutil package fix pluginutil test fix dbplugin ut * return error(s) if we can't get the plugin client update comments * refactor/move GetMultiplexIDFromContext test * add changelog * remove unnecessary field on pluginClient * add unit tests to PluginCatalog for secrets/auth plugins * fix comment * return pluginClient from TestRunTestPlugin * add multiplexed backend test * honor metadatamode value in newbackend pluginconfig * check that connection exists on cleanup * add automtls to secrets/auth plugins * don't remove apiclientmeta parsing * use formatting directive for fmt.Errorf * fix ut: remove tls provider func * remove tlsproviderfunc from backend plugin tests * use env var to prevent test plugin from running as a unit test * WIP: remove lazy loading * move non lazy loaded backend to new package * use version wrapper for backend plugin factory * remove backendVersionWrapper type * implement getBackendPluginType for plugin catalog * handle backend plugin v4 registration * add plugin automtls env guard * modify plugin factory to determine the backend to use * remove old pluginsets from v5 and log pid in plugin catalog * add reload mechanism via context * readd v3 and v4 to pluginset * call cleanup from reload if non-muxed * move v5 backend code to new package * use context reload for for ErrPluginShutdown case * add wrapper on v5 backend * fix run config UTs * fix unit tests - use v4/v5 mapping for plugin versions - fix test build err - add reload method on fakePluginClient - add multiplexed cases for integration tests * remove comment and update AutoMTLS field in test * remove comment * remove errwrap and unused context * only support metadatamode false for v5 backend plugins * update plugin catalog errors * use const for env variables * rename locks and remove unused * remove unneeded nil check * improvements based on staticcheck recommendations * use const for single implementation string * use const for context key * use info default log level * move pid to pluginClient struct * remove v3 and v4 from multiplexed plugin set * return from reload when non-multiplexed * update automtls env string * combine getBackend and getBrokeredClient * update comments for plugin reload, Backend return val and log * revert Backend return type * allow non-muxed plugins to serve v5 * move v5 code to existing sdk plugin package * do next export sdk fields now that we have removed extra plugin pkg * set TLSProvider in ServeMultiplex for backwards compat * use bool to flag multiplexing support on grpc backend server * revert userpass main.go * refactor plugin sdk - update comments - make use of multiplexing boolean and single implementation ID const * update comment and use multierr * attempt v4 if dispense fails on getPluginTypeForUnknown * update comments on sdk plugin backend
		
			
				
	
	
		
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
			
		
		
	
	
			74 lines
		
	
	
		
			2.0 KiB
		
	
	
	
		
			Go
		
	
	
	
	
	
| package pluginutil
 | |
| 
 | |
| import (
 | |
| 	"context"
 | |
| 	"fmt"
 | |
| 	"reflect"
 | |
| 	"testing"
 | |
| 
 | |
| 	"google.golang.org/grpc/metadata"
 | |
| )
 | |
| 
 | |
| func TestGetMultiplexIDFromContext(t *testing.T) {
 | |
| 	type testCase struct {
 | |
| 		ctx          context.Context
 | |
| 		expectedResp string
 | |
| 		expectedErr  error
 | |
| 	}
 | |
| 
 | |
| 	tests := map[string]testCase{
 | |
| 		"missing plugin multiplexing metadata": {
 | |
| 			ctx:          context.Background(),
 | |
| 			expectedResp: "",
 | |
| 			expectedErr:  fmt.Errorf("missing plugin multiplexing metadata"),
 | |
| 		},
 | |
| 		"unexpected number of IDs in metadata": {
 | |
| 			ctx:          idCtx(t, "12345", "67891"),
 | |
| 			expectedResp: "",
 | |
| 			expectedErr:  fmt.Errorf("unexpected number of IDs in metadata: (2)"),
 | |
| 		},
 | |
| 		"empty multiplex ID in metadata": {
 | |
| 			ctx:          idCtx(t, ""),
 | |
| 			expectedResp: "",
 | |
| 			expectedErr:  fmt.Errorf("empty multiplex ID in metadata"),
 | |
| 		},
 | |
| 		"happy path, id is returned from metadata": {
 | |
| 			ctx:          idCtx(t, "12345"),
 | |
| 			expectedResp: "12345",
 | |
| 			expectedErr:  nil,
 | |
| 		},
 | |
| 	}
 | |
| 
 | |
| 	for name, test := range tests {
 | |
| 		t.Run(name, func(t *testing.T) {
 | |
| 			resp, err := GetMultiplexIDFromContext(test.ctx)
 | |
| 
 | |
| 			if test.expectedErr != nil && test.expectedErr.Error() != "" && err == nil {
 | |
| 				t.Fatalf("err expected, got nil")
 | |
| 			} else if !reflect.DeepEqual(err, test.expectedErr) {
 | |
| 				t.Fatalf("Actual error: %#v\nExpected error: %#v", err, test.expectedErr)
 | |
| 			}
 | |
| 
 | |
| 			if test.expectedErr != nil && test.expectedErr.Error() == "" && err != nil {
 | |
| 				t.Fatalf("no error expected, got: %s", err)
 | |
| 			}
 | |
| 
 | |
| 			if !reflect.DeepEqual(resp, test.expectedResp) {
 | |
| 				t.Fatalf("Actual response: %#v\nExpected response: %#v", resp, test.expectedResp)
 | |
| 			}
 | |
| 		})
 | |
| 	}
 | |
| }
 | |
| 
 | |
| // idCtx is a test helper that will return a context with the IDs set in its
 | |
| // metadata
 | |
| func idCtx(t *testing.T, ids ...string) context.Context {
 | |
| 	// Context doesn't need to timeout since this is just passed through
 | |
| 	ctx := context.Background()
 | |
| 	md := metadata.MD{}
 | |
| 	for _, id := range ids {
 | |
| 		md.Append(MultiplexingCtxKey, id)
 | |
| 	}
 | |
| 	return metadata.NewIncomingContext(ctx, md)
 | |
| }
 |