Allow plugins to be resided in subdirectories

- clean output after running tests
- add formatting to make chain
This commit is contained in:
Peter 2020-04-01 15:05:44 +02:00
parent 02d8b444e3
commit 0ed90708d8
Signed by: prskr
GPG key ID: C1DB5D2E8DB512F9
5 changed files with 31 additions and 10 deletions

View file

@ -11,7 +11,7 @@ BINARY_NAME = inetmock
PLUGINS = $(wildcard $(DIR)pkg/plugins/*/.) PLUGINS = $(wildcard $(DIR)pkg/plugins/*/.)
DEBUG_PORT = 2345 DEBUG_PORT = 2345
DEBUG_ARGS?= --development-logs=true DEBUG_ARGS?= --development-logs=true
INETMOCK_PLUGINS_DIRECTORY = $(DIR)plugins INETMOCK_PLUGINS_DIRECTORY = $(DIR)
.PHONY: clean all format deps compile debug test cli-cover-report html-cover-report plugins $(PLUGINS) .PHONY: clean all format deps compile debug test cli-cover-report html-cover-report plugins $(PLUGINS)

View file

@ -3,13 +3,17 @@ package plugins
import ( import (
"fmt" "fmt"
"github.com/baez90/inetmock/pkg/api" "github.com/baez90/inetmock/pkg/api"
"github.com/baez90/inetmock/pkg/path"
"github.com/spf13/cobra" "github.com/spf13/cobra"
"os"
"path/filepath" "path/filepath"
"plugin" "plugin"
"regexp"
) )
var ( var (
registry HandlerRegistry registry HandlerRegistry
pluginFileNamePattern = regexp.MustCompile(`[\w\-]+\.so$`)
) )
type HandlerRegistry interface { type HandlerRegistry interface {
@ -52,15 +56,22 @@ func (h *handlerRegistry) RegisterHandler(handlerName string, handlerProvider ap
} }
func (h *handlerRegistry) LoadPlugins(pluginsPath string) (err error) { func (h *handlerRegistry) LoadPlugins(pluginsPath string) (err error) {
var plugins []string
if plugins, err = filepath.Glob(fmt.Sprintf("%s%c*.so", pluginsPath, filepath.Separator)); err != nil { if !path.DirExists(pluginsPath) {
err = fmt.Errorf("plugins path %s does not exist or is not accessible", pluginsPath)
return return
} }
err = filepath.Walk(pluginsPath, func(path string, info os.FileInfo, err error) error {
for _, pluginSo := range plugins { if !info.IsDir() && pluginFileNamePattern.MatchString(info.Name()) {
if _, err = plugin.Open(pluginSo); err != nil { if _, err := plugin.Open(path); err != nil {
return return err
}
} }
return nil
})
if err != nil {
return
} }
err = nil err = nil

View file

@ -17,3 +17,11 @@ func FileExists(filename string) bool {
} }
return !info.IsDir() return !info.IsDir()
} }
func DirExists(dirPath string) bool {
info, err := os.Stat(dirPath)
if os.IsNotExist(err) {
return false
}
return info.IsDir()
}

View file

@ -12,7 +12,7 @@ DEBUG_PORT = 2345
.PHONY: deps format compile test cli-cover-report html-cover-report .PHONY: deps format compile test cli-cover-report html-cover-report
all: compile test all: format compile test
deps: deps:
@go mod tidy @go mod tidy
@ -35,6 +35,7 @@ endif
test: test:
@go test -coverprofile=./cov-raw.out -v $(TEST_PKGS) @go test -coverprofile=./cov-raw.out -v $(TEST_PKGS)
@cat ./cov-raw.out | grep -v "generated" > ./cov.out @cat ./cov-raw.out | grep -v "generated" > ./cov.out
@rm -f $(DIR)$(PLUGIN_NAME)
cli-cover-report: cli-cover-report:
@go tool cover -func=cov.out @go tool cover -func=cov.out

View file

@ -12,7 +12,7 @@ DEBUG_PORT = 2345
.PHONY: deps format compile test cli-cover-report html-cover-report .PHONY: deps format compile test cli-cover-report html-cover-report
all: compile test all: format compile test
deps: deps:
@go mod tidy @go mod tidy
@ -35,6 +35,7 @@ endif
test: test:
@go test -coverprofile=./cov-raw.out -v $(TEST_PKGS) @go test -coverprofile=./cov-raw.out -v $(TEST_PKGS)
@cat ./cov-raw.out | grep -v "generated" > ./cov.out @cat ./cov-raw.out | grep -v "generated" > ./cov.out
@rm -f $(DIR)$(PLUGIN_NAME)
cli-cover-report: cli-cover-report:
@go tool cover -func=cov.out @go tool cover -func=cov.out