@@ -381,6 +381,71 @@ func TestGetResourceGroup(t *testing.T) {
381381 re .Nil (gc02 )
382382}
383383
384+ func TestReloadResourceGroupMetaWatch (t * testing.T ) {
385+ re := require .New (t )
386+ ctx , cancel := context .WithCancel (context .Background ())
387+ defer cancel ()
388+
389+ mockProvider := & MockResourceGroupProvider {}
390+ mockProvider .On ("Get" , mock .Anything , mock .Anything , mock .Anything ).Return (& meta_storagepb.GetResponse {}, nil )
391+ controller , err := NewResourceGroupController (ctx , 1 , mockProvider , nil , constants .NullKeyspaceID )
392+ re .NoError (err )
393+
394+ defaultGroup := & rmpb.ResourceGroup {
395+ Name : defaultResourceGroupName ,
396+ Mode : rmpb .GroupMode_RUMode ,
397+ RUSettings : & rmpb.GroupRequestUnitSettings {RU : & rmpb.TokenBucket {Settings : & rmpb.TokenLimitSettings {FillRate : 1000000 }}},
398+ }
399+ staleGroup := & rmpb.ResourceGroup {
400+ Name : "stale-group" ,
401+ Mode : rmpb .GroupMode_RUMode ,
402+ RUSettings : & rmpb.GroupRequestUnitSettings {RU : & rmpb.TokenBucket {Settings : & rmpb.TokenLimitSettings {FillRate : 100 }}},
403+ }
404+ updatedDefaultGroup := & rmpb.ResourceGroup {
405+ Name : defaultResourceGroupName ,
406+ Mode : rmpb .GroupMode_RUMode ,
407+ RUSettings : & rmpb.GroupRequestUnitSettings {RU : & rmpb.TokenBucket {Settings : & rmpb.TokenLimitSettings {FillRate : 2000 }}},
408+ }
409+
410+ mockProvider .On ("GetResourceGroup" , mock .Anything , defaultResourceGroupName , mock .Anything ).Return (defaultGroup , nil )
411+ mockProvider .On ("GetResourceGroup" , mock .Anything , "stale-group" , mock .Anything ).Return (staleGroup , nil )
412+
413+ defaultGC , err := controller .tryGetResourceGroupController (ctx , defaultResourceGroupName , false )
414+ re .NoError (err )
415+ re .NotNil (defaultGC )
416+
417+ staleGC , err := controller .tryGetResourceGroupController (ctx , "stale-group" , false )
418+ re .NoError (err )
419+ re .NotNil (staleGC )
420+ re .False (staleGC .tombstone .Load ())
421+
422+ watchCh := make (chan []* meta_storagepb.Event )
423+ mockProvider .On ("LoadResourceGroups" , mock .Anything ).
424+ Return ([]* rmpb.ResourceGroup {updatedDefaultGroup }, int64 (88 ), nil ).
425+ Once ()
426+ mockProvider .On ("Watch" , mock .Anything , pd .GroupSettingsPathPrefixBytes (constants .NullKeyspaceID ), mock .Anything ).
427+ Run (func (args mock.Arguments ) {
428+ opts := args .Get (2 ).([]opt.MetaStorageOption )
429+ metaOp := & opt.MetaStorageOp {}
430+ for _ , apply := range opts {
431+ apply (metaOp )
432+ }
433+ re .Equal (int64 (89 ), metaOp .Revision )
434+ re .True (metaOp .IsOptsWithPrefix )
435+ re .True (metaOp .PrevKv )
436+ }).
437+ Return (watchCh , nil ).
438+ Once ()
439+
440+ reloadedWatchCh , err := controller .reloadResourceGroupMetaWatch (ctx )
441+ re .NoError (err )
442+ re .Equal (watchCh , reloadedWatchCh )
443+ re .Equal (updatedDefaultGroup , defaultGC .getMeta ())
444+ staleGC , err = controller .tryGetResourceGroupController (ctx , "stale-group" , true )
445+ re .NoError (err )
446+ re .True (staleGC .tombstone .Load ())
447+ }
448+
384449func TestTokenBucketsRequestWithKeyspaceID (t * testing.T ) {
385450 re := require .New (t )
386451 ctx , cancel := context .WithCancel (context .Background ())
0 commit comments