This is an automated email from the ASF dual-hosted git repository.

alexstocks pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/dubbo-go.git


The following commit(s) were added to refs/heads/develop by this push:
     new 06837fd98 migrate the ValidateRegistryIDs to internal (#3258)
06837fd98 is described below

commit 06837fd9858704702c955bc0013ec7d459dda1cb
Author: nanjiek <[email protected]>
AuthorDate: Mon Mar 16 21:02:36 2026 +0800

    migrate the ValidateRegistryIDs to internal (#3258)
    
    * remove the config package from package client
    
    * fix(client): fail fast on invalid registry and method config
    
    * restore WithMethod in Server
    
    * fix lint of action_test
    
    * refactor: split processURL to reduce cognitive complexity
    
    * migrate the ValidateRegistryIDs to internal
    
    * fix the cmt
    
    * remove the validateRegistryIDs
---
 client/options.go       | 14 ++------------
 client/options_test.go  | 29 +++++++++++++++++++++++++++++
 internal/config.go      |  9 +++++++++
 internal/config_test.go | 22 ++++++++++++++++++++++
 server/options.go       | 14 ++------------
 server/options_test.go  | 41 +++++++++++++++++++++++++++++++++++++++++
 6 files changed, 105 insertions(+), 24 deletions(-)

diff --git a/client/options.go b/client/options.go
index e2d6f9b3f..273deeb69 100644
--- a/client/options.go
+++ b/client/options.go
@@ -18,7 +18,6 @@
 package client
 
 import (
-       "fmt"
        "strconv"
        "time"
 )
@@ -120,7 +119,7 @@ func (refOpts *ReferenceOptions) init(opts 
...ReferenceOption) error {
                        }
                }
                refConf.RegistryIDs = 
commonCfg.TranslateIds(refConf.RegistryIDs)
-               if err := validateRegistryIDs(refConf.RegistryIDs, regs); err 
!= nil {
+               if err := internal.ValidateRegistryIDs(refConf.RegistryIDs, 
regs); err != nil {
                        return err
                }
        }
@@ -560,7 +559,7 @@ func (cliOpts *ClientOptions) init(opts ...ClientOption) 
error {
                        }
                }
                consumerConf.RegistryIDs = 
commonCfg.TranslateIds(consumerConf.RegistryIDs)
-               if err := validateRegistryIDs(consumerConf.RegistryIDs, regs); 
err != nil {
+               if err := 
internal.ValidateRegistryIDs(consumerConf.RegistryIDs, regs); err != nil {
                        return err
                }
        }
@@ -966,15 +965,6 @@ func newDefaultCallOptions() *CallOptions {
        return &CallOptions{}
 }
 
-func validateRegistryIDs(ids []string, regs map[string]*global.RegistryConfig) 
error {
-       for _, id := range ids {
-               if _, ok := regs[id]; !ok {
-                       return fmt.Errorf("registry id %q not found", id)
-               }
-       }
-       return nil
-}
-
 // WithCallRequestTimeout the maximum waiting time for one specific call, only 
works for 'tri' and 'dubbo' protocol
 func WithCallRequestTimeout(timeout time.Duration) CallOption {
        return func(opts *CallOptions) {
diff --git a/client/options_test.go b/client/options_test.go
index 963d3696e..7d7141023 100644
--- a/client/options_test.go
+++ b/client/options_test.go
@@ -1273,6 +1273,23 @@ func TestClientOptionsInitFailsOnMissingRegistryID(t 
*testing.T) {
        assert.Contains(t, err.Error(), `registry id "missing" not found`)
 }
 
+func TestClientOptionsInitTranslatesRegistryIDs(t *testing.T) {
+       cliOpts := &ClientOptions{
+               Consumer: &global.ConsumerConfig{
+                       RegistryIDs: []string{"r1,r2", "r2"},
+               },
+               Registries: map[string]*global.RegistryConfig{
+                       "r1": {Protocol: "mock", Address: "127.0.0.1:2181"},
+                       "r2": {Protocol: "mock", Address: "127.0.0.2:2181"},
+               },
+               overallReference: &global.ReferenceConfig{},
+       }
+
+       err := cliOpts.init()
+       require.NoError(t, err)
+       assert.Equal(t, []string{"r1", "r2"}, cliOpts.Consumer.RegistryIDs)
+}
+
 func TestReferenceOptionsInitFailsOnMissingRegistryID(t *testing.T) {
        refOpts := defaultReferenceOptions()
        refOpts.Registries = map[string]*global.RegistryConfig{
@@ -1284,6 +1301,18 @@ func TestReferenceOptionsInitFailsOnMissingRegistryID(t 
*testing.T) {
        assert.Contains(t, err.Error(), `registry id "missing" not found`)
 }
 
+func TestReferenceOptionsInitTranslatesRegistryIDs(t *testing.T) {
+       refOpts := defaultReferenceOptions()
+       refOpts.Registries = map[string]*global.RegistryConfig{
+               "r1": {Protocol: "mock", Address: "127.0.0.1:2181"},
+               "r2": {Protocol: "mock", Address: "127.0.0.2:2181"},
+       }
+
+       err := refOpts.init(WithRegistryIDs("r1,r2", "r2"))
+       require.NoError(t, err)
+       assert.Equal(t, []string{"r1", "r2"}, refOpts.Reference.RegistryIDs)
+}
+
 func TestReferenceOptionsInitFailsOnInvalidMethodConfig(t *testing.T) {
        refOpts := defaultReferenceOptions()
        err := refOpts.init(WithMethod(&global.MethodConfig{
diff --git a/internal/config.go b/internal/config.go
index 0f3d286dc..0db82681a 100644
--- a/internal/config.go
+++ b/internal/config.go
@@ -206,3 +206,12 @@ func ValidateMethodConfig(method *global.MethodConfig) 
error {
 
        return nil
 }
+
+func ValidateRegistryIDs(ids []string, regs map[string]*global.RegistryConfig) 
error {
+       for _, id := range ids {
+               if _, ok := regs[id]; !ok {
+                       return fmt.Errorf("registry id %q not found", id)
+               }
+       }
+       return nil
+}
diff --git a/internal/config_test.go b/internal/config_test.go
index 15fdcf7e8..8e631ed34 100644
--- a/internal/config_test.go
+++ b/internal/config_test.go
@@ -132,6 +132,28 @@ func TestLoadRegistries_MissingRegistryID(t *testing.T) {
        assert.Contains(t, err.Error(), `registry id "missing" not found`)
 }
 
+func TestValidateRegistryIDs(t *testing.T) {
+       t.Run("valid ids", func(t *testing.T) {
+               regs := map[string]*global.RegistryConfig{
+                       "r1": {Protocol: "mock", Address: "127.0.0.1:2181"},
+                       "r2": {Protocol: "mock", Address: "127.0.0.2:2181"},
+               }
+
+               err := ValidateRegistryIDs([]string{"r1", "r2"}, regs)
+               require.NoError(t, err)
+       })
+
+       t.Run("missing id", func(t *testing.T) {
+               regs := map[string]*global.RegistryConfig{
+                       "r1": {Protocol: "mock", Address: "127.0.0.1:2181"},
+               }
+
+               err := ValidateRegistryIDs([]string{"r1", "missing"}, regs)
+               require.Error(t, err)
+               assert.Contains(t, err.Error(), `registry id "missing" not 
found`)
+       })
+}
+
 func TestToURLs_EmptyOrNA(t *testing.T) {
        tests := []struct {
                name    string
diff --git a/server/options.go b/server/options.go
index 62013bf8f..e04e1af65 100644
--- a/server/options.go
+++ b/server/options.go
@@ -18,7 +18,6 @@
 package server
 
 import (
-       "fmt"
        "reflect"
        "strconv"
        "sync"
@@ -89,7 +88,7 @@ func (srvOpts *ServerOptions) init(opts ...ServerOption) 
error {
        if len(providerConf.RegistryIDs) <= 0 {
                providerConf.RegistryIDs = getRegistryIds(srvOpts.Registries)
        }
-       if err := validateRegistryIDs(providerConf.RegistryIDs, 
srvOpts.Registries); err != nil {
+       if err := internal.ValidateRegistryIDs(providerConf.RegistryIDs, 
srvOpts.Registries); err != nil {
                return err
        }
 
@@ -563,7 +562,7 @@ func (svcOpts *ServiceOptions) init(srv *Server, opts 
...ServiceOption) error {
        }
        if len(svc.RegistryIDs) <= 0 {
                svc.NotRegister = true
-       } else if err := validateRegistryIDs(svc.RegistryIDs, 
svc.RCRegistriesMap); err != nil {
+       } else if err := internal.ValidateRegistryIDs(svc.RegistryIDs, 
svc.RCRegistriesMap); err != nil {
                return err
        }
 
@@ -635,15 +634,6 @@ func WithFilter(filter string) ServiceOption {
        }
 }
 
-func validateRegistryIDs(ids []string, regs map[string]*global.RegistryConfig) 
error {
-       for _, id := range ids {
-               if _, ok := regs[id]; !ok {
-                       return fmt.Errorf("registry id %q not found", id)
-               }
-       }
-       return nil
-}
-
 // todo(DMwangnima): think about a more ideal configuration style
 func WithProtocolIDs(protocolIDs []string) ServiceOption {
        return func(cfg *ServiceOptions) {
diff --git a/server/options_test.go b/server/options_test.go
index 97408d39f..85560cbb5 100644
--- a/server/options_test.go
+++ b/server/options_test.go
@@ -75,6 +75,19 @@ func TestServerOptionsInitFailsOnMissingRegistryID(t 
*testing.T) {
        assert.Contains(t, err.Error(), `registry id "missing" not found`)
 }
 
+func TestServerOptionsInitTranslatesRegistryIDs(t *testing.T) {
+       opts := defaultServerOptions()
+       opts.Provider.RegistryIDs = []string{"r1,r2", "r2"}
+       opts.Registries = map[string]*global.RegistryConfig{
+               "r1": {Protocol: "mock", Address: "127.0.0.1:2181"},
+               "r2": {Protocol: "mock", Address: "127.0.0.2:2181"},
+       }
+
+       err := opts.init()
+       require.NoError(t, err)
+       assert.Equal(t, []string{"r1", "r2"}, opts.Provider.RegistryIDs)
+}
+
 func TestServiceOptionsInitFailsOnMissingRegistryID(t *testing.T) {
        srv := &Server{
                cfg: &ServerOptions{
@@ -102,6 +115,34 @@ func TestServiceOptionsInitFailsOnMissingRegistryID(t 
*testing.T) {
        assert.Contains(t, err.Error(), `registry id "missing" not found`)
 }
 
+func TestServiceOptionsInitTranslatesRegistryIDs(t *testing.T) {
+       srv := &Server{
+               cfg: &ServerOptions{
+                       Provider: &global.ProviderConfig{
+                               ProtocolIDs: []string{"triple"},
+                       },
+                       Registries: map[string]*global.RegistryConfig{
+                               "r1": {Protocol: "mock", Address: 
"127.0.0.1:2181"},
+                               "r2": {Protocol: "mock", Address: 
"127.0.0.2:2181"},
+                       },
+                       Protocols: map[string]*global.ProtocolConfig{
+                               "triple": {Name: "triple"},
+                       },
+                       Application: global.DefaultApplicationConfig(),
+               },
+       }
+       svcOpts := defaultServiceOptions()
+       svcOpts.Registries = srv.cfg.Registries
+       svcOpts.Protocols = srv.cfg.Protocols
+       svcOpts.Provider = srv.cfg.Provider
+
+       err := svcOpts.init(srv, func(opts *ServiceOptions) {
+               opts.Service.RegistryIDs = []string{"r1,r2", "r2"}
+       })
+       require.NoError(t, err)
+       assert.Equal(t, []string{"r1", "r2"}, svcOpts.Service.RegistryIDs)
+}
+
 func TestServiceOptionsInitFailsOnInvalidMethodConfig(t *testing.T) {
        srv := &Server{
                cfg: &ServerOptions{

Reply via email to