@@ -20,11 +20,12 @@ package admin
2020import (
2121 "testing"
2222
23+ "github.com/stretchr/testify/assert"
24+ "github.com/stretchr/testify/require"
25+
2326 "github.com/apache/pulsar-client-go/pulsaradmin/pkg/admin/config"
2427 "github.com/apache/pulsar-client-go/pulsaradmin/pkg/rest"
2528 "github.com/apache/pulsar-client-go/pulsaradmin/pkg/utils"
26- "github.com/stretchr/testify/assert"
27- "github.com/stretchr/testify/require"
2829)
2930
3031func ptr (n int ) * int {
@@ -341,3 +342,82 @@ func TestNamespaces_GetOffloadThresholdInSeconds(t *testing.T) {
341342 expected := int64 (60 )
342343 assert .Equal (t , expected , offloadThresholdInSeconds )
343344}
345+
346+ func TestNamespaces_SetOffloadPolicy (t * testing.T ) {
347+ config := & config.Config {}
348+ admin , err := New (config )
349+ require .NoError (t , err )
350+ require .NotNil (t , admin )
351+
352+ namespace , _ := utils .GetNamespaceName ("public/default" )
353+
354+ tests := []struct {
355+ name string
356+ errReason string
357+ policy * utils.OffloadPolicies
358+ }{
359+ {
360+ name : "Set invalid empty offload policy" ,
361+ errReason : "The driver is not supported, support value: S3,aws-s3," +
362+ "google-cloud-storage,filesystem,azureblob,aliyun-oss" ,
363+ policy : & utils.OffloadPolicies {},
364+ },
365+ {
366+ name : "Set invalid S3 offload policy" ,
367+ errReason : "The bucket must be specified for namespace offload." ,
368+ policy : & utils.OffloadPolicies {
369+ ManagedLedgerOffloadDriver : "S3" ,
370+ },
371+ },
372+ {
373+ name : "Set valid filesystem offload policy" ,
374+ errReason : "" ,
375+ policy : & utils.OffloadPolicies {
376+ ManagedLedgerOffloadDriver : "filesystem" ,
377+ OffloadersDirectory : "/tmp" ,
378+ ManagedLedgerOffloadedReadPriority : "BOOKKEEPER_FIRST" ,
379+ },
380+ },
381+ }
382+ for _ , tt := range tests {
383+ t .Run (tt .name , func (t * testing.T ) {
384+ err := admin .Namespaces ().SetOffload (* namespace , tt .policy )
385+ if tt .errReason == "" {
386+ assert .Equal (t , nil , err )
387+ }
388+ if err != nil {
389+ restError := err .(rest.Error )
390+ assert .Equal (t , tt .errReason , restError .Reason )
391+ }
392+ })
393+ }
394+ }
395+
396+ func TestNamespaces_GetAndDeleteOffloadPolicy (t * testing.T ) {
397+ config := & config.Config {}
398+ admin , err := New (config )
399+ require .NoError (t , err )
400+ require .NotNil (t , admin )
401+
402+ namespace , _ := utils .GetNamespaceName ("public/default" )
403+
404+ // set simple filesystem offload policy and get it
405+ err = admin .Namespaces ().SetOffload (* namespace , & utils.OffloadPolicies {
406+ ManagedLedgerOffloadDriver : "filesystem" ,
407+ OffloadersDirectory : "/var/tmp" ,
408+ ManagedLedgerOffloadedReadPriority : "TIERED_STORAGE_FIRST" ,
409+ })
410+ assert .Equal (t , nil , err )
411+ offload , err := admin .Namespaces ().GetOffload (* namespace )
412+ assert .Equal (t , nil , err )
413+ assert .Equal (t , "filesystem" , offload .ManagedLedgerOffloadDriver )
414+ assert .Equal (t , "/var/tmp" , offload .OffloadersDirectory )
415+ assert .Equal (t , "TIERED_STORAGE_FIRST" , offload .ManagedLedgerOffloadedReadPriority )
416+
417+ // delete previously set filesystem offload policy
418+ err = admin .Namespaces ().DeleteOffload (* namespace )
419+ assert .Equal (t , nil , err )
420+ offload , err = admin .Namespaces ().GetOffload (* namespace )
421+ assert .Equal (t , nil , err )
422+ assert .Equal (t , "" , offload .ManagedLedgerOffloadDriver )
423+ }
0 commit comments