-
-
Notifications
You must be signed in to change notification settings - Fork 188
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix: 如果获取不到config,尝试远端同步获取一次,获取到的内容需要更新缓存 #301
Changes from 3 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
@@ -22,10 +22,14 @@ import ( | |||||||||||||||||||||||||||||||||||||||||||||||
"fmt" | ||||||||||||||||||||||||||||||||||||||||||||||||
"net/http" | ||||||||||||||||||||||||||||||||||||||||||||||||
"net/http/httptest" | ||||||||||||||||||||||||||||||||||||||||||||||||
"reflect" | ||||||||||||||||||||||||||||||||||||||||||||||||
"testing" | ||||||||||||||||||||||||||||||||||||||||||||||||
"time" | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
"github.com/agiledragon/gomonkey/v2" | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
"github.com/apolloconfig/agollo/v4/agcache/memory" | ||||||||||||||||||||||||||||||||||||||||||||||||
"github.com/apolloconfig/agollo/v4/component/remote" | ||||||||||||||||||||||||||||||||||||||||||||||||
"github.com/apolloconfig/agollo/v4/env/config" | ||||||||||||||||||||||||||||||||||||||||||||||||
"github.com/apolloconfig/agollo/v4/env/server" | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -37,7 +41,7 @@ import ( | |||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
const testDefaultNamespace = "application" | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
//init param | ||||||||||||||||||||||||||||||||||||||||||||||||
// init param | ||||||||||||||||||||||||||||||||||||||||||||||||
func init() { | ||||||||||||||||||||||||||||||||||||||||||||||||
extension.SetCacheFactory(&memory.DefaultCacheFactory{}) | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
|
@@ -352,3 +356,35 @@ func TestUseEventDispatch(t *testing.T) { | |||||||||||||||||||||||||||||||||||||||||||||||
l := cache.GetChangeListeners() | ||||||||||||||||||||||||||||||||||||||||||||||||
Assert(t, l.Len(), Equal(1)) | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
func TestGetConfigAndInitValNotNil(t *testing.T) { | ||||||||||||||||||||||||||||||||||||||||||||||||
var apc *remote.AbsApolloConfig | ||||||||||||||||||||||||||||||||||||||||||||||||
patch := gomonkey.ApplyMethod(reflect.TypeOf(apc), "SyncWithNamespace", func(_ *remote.AbsApolloConfig, namespace string, appConfigFunc func() config.AppConfig) *config.ApolloConfig { | ||||||||||||||||||||||||||||||||||||||||||||||||
return &config.ApolloConfig{ | ||||||||||||||||||||||||||||||||||||||||||||||||
ApolloConnConfig: config.ApolloConnConfig{ | ||||||||||||||||||||||||||||||||||||||||||||||||
AppID: "testID", | ||||||||||||||||||||||||||||||||||||||||||||||||
NamespaceName: "testNotFound", | ||||||||||||||||||||||||||||||||||||||||||||||||
}, | ||||||||||||||||||||||||||||||||||||||||||||||||
Configurations: map[string]interface{}{"testKey": "testValue"}, | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||
defer patch.Reset() | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
client := createMockApolloConfig(120) | ||||||||||||||||||||||||||||||||||||||||||||||||
cf := client.GetConfig("testNotFound") | ||||||||||||||||||||||||||||||||||||||||||||||||
Assert(t, cf, NotNilVal()) | ||||||||||||||||||||||||||||||||||||||||||||||||
// cache should be updated | ||||||||||||||||||||||||||||||||||||||||||||||||
Assert(t, client.cache.GetConfig("testNotFound"), NotNilVal()) | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
func TestGetConfigAndInitValNil(t *testing.T) { | ||||||||||||||||||||||||||||||||||||||||||||||||
var apc *remote.AbsApolloConfig | ||||||||||||||||||||||||||||||||||||||||||||||||
patch := gomonkey.ApplyMethod(reflect.TypeOf(apc), "SyncWithNamespace", func(_ *remote.AbsApolloConfig, namespace string, appConfigFunc func() config.AppConfig) *config.ApolloConfig { | ||||||||||||||||||||||||||||||||||||||||||||||||
return nil | ||||||||||||||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||||||||||||||
defer patch.Reset() | ||||||||||||||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||||||||||||||
client := createMockApolloConfig(120) | ||||||||||||||||||||||||||||||||||||||||||||||||
cf := client.GetConfig("testNotFound") | ||||||||||||||||||||||||||||||||||||||||||||||||
Assert(t, cf, NilVal()) | ||||||||||||||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. The test This test is important for ensuring that the system behaves predictably in scenarios where the remote configuration source is unavailable or returns an invalid response. However, it would be beneficial to also verify that the cache is not updated in this scenario, which is not currently covered by the test. Add an assertion to verify that the cache is not updated when + Assert(t, client.cache.GetConfig("testNotFound"), NilVal()) Committable suggestion
Suggested change
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
The test
TestGetConfigAndInitValNotNil
uses thegomonkey
package to mock theSyncWithNamespace
method ofAbsApolloConfig
. This test aims to verify that when a valid configuration is returned by the mocked method, the cache is updated accordingly. This directly addresses the PR's objective to ensure the cache is updated with remotely fetched content when local retrieval fails.However, it's crucial to ensure that the test accurately reflects the conditions under which the cache should be updated. The test should also verify that the cache contains the expected configuration values, not just that it is non-nil.
Consider enhancing the test to assert that the cache contains the expected configuration values after the
SyncWithNamespace
method is called. This will provide a more thorough validation of the cache update mechanism.+ Assert(t, client.cache.GetConfig("testNotFound").Configurations["testKey"], Equal("testValue"))
Committable suggestion