From b44f5ee81d12435f7f7eead99ec6318079b7c698 Mon Sep 17 00:00:00 2001 From: Rene Cannao Date: Tue, 24 Mar 2026 01:01:11 +0000 Subject: [PATCH 1/2] feat: add MySQLProvider implementing Provider interface --- providers/mysql/mysql.go | 37 +++++++++++++++++++++++++++ providers/mysql/mysql_test.go | 47 +++++++++++++++++++++++++++++++++++ 2 files changed, 84 insertions(+) create mode 100644 providers/mysql/mysql.go create mode 100644 providers/mysql/mysql_test.go diff --git a/providers/mysql/mysql.go b/providers/mysql/mysql.go new file mode 100644 index 0000000..f0f6af9 --- /dev/null +++ b/providers/mysql/mysql.go @@ -0,0 +1,37 @@ +package mysql + +import ( + "fmt" + "strings" + + "github.com/ProxySQL/dbdeployer/providers" +) + +const ProviderName = "mysql" + +type MySQLProvider struct{} + +func NewMySQLProvider() *MySQLProvider { + return &MySQLProvider{} +} + +func (p *MySQLProvider) Name() string { return ProviderName } + +func (p *MySQLProvider) ValidateVersion(version string) error { + parts := strings.Split(version, ".") + if len(parts) < 2 { + return fmt.Errorf("invalid MySQL version format: %q (expected X.Y or X.Y.Z)", version) + } + return nil +} + +func (p *MySQLProvider) DefaultPorts() providers.PortRange { + return providers.PortRange{ + BasePort: 3306, + PortsPerInstance: 3, // main + mysqlx + admin + } +} + +func Register(reg *providers.Registry) error { + return reg.Register(NewMySQLProvider()) +} diff --git a/providers/mysql/mysql_test.go b/providers/mysql/mysql_test.go new file mode 100644 index 0000000..1d40677 --- /dev/null +++ b/providers/mysql/mysql_test.go @@ -0,0 +1,47 @@ +package mysql + +import ( + "testing" + + "github.com/ProxySQL/dbdeployer/providers" +) + +func TestMySQLProviderName(t *testing.T) { + p := NewMySQLProvider() + if p.Name() != "mysql" { + t.Errorf("expected 'mysql', got %q", p.Name()) + } +} + +func TestMySQLProviderValidateVersion(t *testing.T) { + p := NewMySQLProvider() + tests := []struct { + version string + wantErr bool + }{ + {"8.4.4", false}, + {"9.1.0", false}, + {"5.7", false}, + {"invalid", true}, + } + for _, tt := range tests { + err := p.ValidateVersion(tt.version) + if (err != nil) != tt.wantErr { + t.Errorf("ValidateVersion(%q) error = %v, wantErr %v", tt.version, err, tt.wantErr) + } + } +} + +func TestMySQLProviderRegister(t *testing.T) { + reg := providers.NewRegistry() + if err := Register(reg); err != nil { + t.Fatalf("Register failed: %v", err) + } + p, err := reg.Get("mysql") + if err != nil { + t.Fatalf("Get failed: %v", err) + } + if p.Name() != "mysql" { + t.Errorf("expected 'mysql', got %q", p.Name()) + } +} From 6d928997fc8083bbd956a35af468fe04dd55a7aa Mon Sep 17 00:00:00 2001 From: Rene Cannao Date: Tue, 24 Mar 2026 01:01:48 +0000 Subject: [PATCH 2/2] feat: register MySQLProvider at startup via DefaultRegistry --- cmd/root.go | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/cmd/root.go b/cmd/root.go index ad6ec97..cd87fb4 100644 --- a/cmd/root.go +++ b/cmd/root.go @@ -27,6 +27,8 @@ import ( "github.com/ProxySQL/dbdeployer/defaults" "github.com/ProxySQL/dbdeployer/downloads" "github.com/ProxySQL/dbdeployer/globals" + "github.com/ProxySQL/dbdeployer/providers" + mysqlprovider "github.com/ProxySQL/dbdeployer/providers/mysql" "github.com/ProxySQL/dbdeployer/sandbox" ) @@ -143,6 +145,9 @@ func customizeFlags(cmd *cobra.Command, cmdName string) { } func init() { + if err := mysqlprovider.Register(providers.DefaultRegistry); err != nil { + panic(fmt.Sprintf("failed to register MySQL provider: %v", err)) + } cobra.OnInitialize(checkDefaultsFile) rootCmd.CompletionOptions.DisableDefaultCmd = true rootCmd.PersistentFlags().StringVar(&defaults.CustomConfigurationFile, globals.ConfigLabel, defaults.ConfigurationFile, "configuration file")