github.com/Axway/agent-sdk@v1.1.101/pkg/config/usagereportingconfig_test.go (about)

     1  package config
     2  
     3  import (
     4  	"os"
     5  	"strconv"
     6  	"testing"
     7  
     8  	"github.com/Axway/agent-sdk/pkg/cmd/properties"
     9  	"github.com/Axway/agent-sdk/pkg/util/exception"
    10  	"github.com/spf13/cobra"
    11  	"github.com/stretchr/testify/assert"
    12  )
    13  
    14  func validateUsageReporting(cfg UsageReportingConfig) (err error) {
    15  	exception.Block{
    16  		Try: func() {
    17  			cfg.Validate()
    18  		},
    19  		Catch: func(e error) {
    20  			err = e
    21  		},
    22  	}.Do()
    23  	return
    24  }
    25  
    26  type expected struct {
    27  	url                string
    28  	publish            bool
    29  	subscriptionMetric bool
    30  	schedule           string
    31  	offline            bool
    32  	offlineSchedule    string
    33  	reportSchedule     string
    34  	granularity        int
    35  	qaVars             bool
    36  }
    37  
    38  var defaultExpected = expected{
    39  	publish:            true,
    40  	subscriptionMetric: false,
    41  	schedule:           "@daily",
    42  	offline:            false,
    43  	offlineSchedule:    "@hourly",
    44  	reportSchedule:     "@monthly",
    45  	granularity:        0,
    46  	qaVars:             false,
    47  }
    48  
    49  func validateconfig(t *testing.T, expVals expected, cfg UsageReportingConfig) {
    50  	assert.Equal(t, expVals.url, cfg.GetURL())
    51  	assert.Equal(t, expVals.publish, cfg.CanPublish())
    52  	assert.Equal(t, expVals.schedule, cfg.GetSchedule())
    53  	assert.Equal(t, expVals.offline, cfg.IsOfflineMode())
    54  	assert.Equal(t, expVals.offlineSchedule, cfg.GetOfflineSchedule())
    55  	assert.Equal(t, expVals.reportSchedule, cfg.GetReportSchedule())
    56  	assert.Equal(t, expVals.granularity, cfg.GetReportGranularity())
    57  	assert.Equal(t, expVals.qaVars, cfg.UsingQAVars())
    58  }
    59  
    60  func TestUsageReportingConfigEnvVarMigration(t *testing.T) {
    61  	rootCmd := &cobra.Command{
    62  		Use: "test",
    63  	}
    64  
    65  	props := properties.NewProperties(rootCmd)
    66  	AddUsageReportingProperties(props)
    67  
    68  	expected := defaultExpected
    69  
    70  	cfg := ParseUsageReportingConfig(props)
    71  	assert.NotNil(t, cfg)
    72  	err := validateUsageReporting(cfg)
    73  	assert.Nil(t, err)
    74  	validateconfig(t, expected, cfg)
    75  
    76  	expected = defaultExpected
    77  	cfg = ParseUsageReportingConfig(props)
    78  	assert.NotNil(t, cfg)
    79  	err = validateUsageReporting(cfg)
    80  	assert.Nil(t, err)
    81  	validateconfig(t, expected, cfg)
    82  
    83  	// Test Publish old env vars
    84  	os.Setenv(oldUsageReportingPublishEnvVar, "false")
    85  	expected = defaultExpected
    86  	expected.publish = false
    87  
    88  	cfg = ParseUsageReportingConfig(props)
    89  	assert.NotNil(t, cfg)
    90  	err = validateUsageReporting(cfg)
    91  	assert.Nil(t, err)
    92  	validateconfig(t, expected, cfg)
    93  
    94  	// Test Publish new env vars
    95  	os.Setenv(newUsageReportingPublishEnvVar, strconv.FormatBool(defaultExpected.publish))
    96  
    97  	expected = defaultExpected
    98  	cfg = ParseUsageReportingConfig(props)
    99  	assert.NotNil(t, cfg)
   100  	err = validateUsageReporting(cfg)
   101  	assert.Nil(t, err)
   102  	validateconfig(t, expected, cfg)
   103  
   104  	// Test PublishMetric old env vars
   105  	os.Setenv(oldUsageReportingPublishMetricEnvVar, "true")
   106  	expected = defaultExpected
   107  
   108  	cfg = ParseUsageReportingConfig(props)
   109  	assert.NotNil(t, cfg)
   110  	err = validateUsageReporting(cfg)
   111  	assert.Nil(t, err)
   112  	validateconfig(t, expected, cfg)
   113  
   114  	expected = defaultExpected
   115  	cfg = ParseUsageReportingConfig(props)
   116  	assert.NotNil(t, cfg)
   117  	err = validateUsageReporting(cfg)
   118  	assert.Nil(t, err)
   119  	validateconfig(t, expected, cfg)
   120  }
   121  
   122  func TestUsageReportingConfigProperties(t *testing.T) {
   123  	rootCmd := &cobra.Command{
   124  		Use: "test",
   125  	}
   126  
   127  	props := properties.NewProperties(rootCmd)
   128  
   129  	// Test default config
   130  	AddUsageReportingProperties(props)
   131  
   132  	cfg := ParseUsageReportingConfig(props)
   133  	assert.NotNil(t, cfg)
   134  
   135  	err := validateUsageReporting(cfg)
   136  	assert.Nil(t, err)
   137  
   138  	validateconfig(t, defaultExpected, cfg)
   139  
   140  	// invalid UsageSchedule
   141  	currentUsageSchedule := cfg.GetSchedule()
   142  	cfg.(*UsageReportingConfiguration).Schedule = "*/1511 * * * *"
   143  	err = validateUsageReporting(cfg)
   144  	assert.NotNil(t, err)
   145  	cfg.(*UsageReportingConfiguration).Schedule = "0,15,30,45,55 * * * *"
   146  	err = validateUsageReporting(cfg)
   147  	assert.NotNil(t, err)
   148  	cfg.(*UsageReportingConfiguration).Schedule = currentUsageSchedule
   149  
   150  	// invalid old UsageSchedule override
   151  	os.Setenv(oldUsageReportingScheduleEnvVar, "*/1 * * *")
   152  	err = validateUsageReporting(cfg)
   153  	assert.NotNil(t, err)
   154  
   155  	// invalid old UsageSchedule override
   156  	os.Setenv(oldUsageReportingScheduleEnvVar, "*/1 * * * *")
   157  	err = validateUsageReporting(cfg)
   158  	assert.NotNil(t, err)
   159  
   160  	// old UsageSchedule override
   161  	expected := defaultExpected
   162  	expected.schedule = "0 */5 * * *"
   163  	os.Setenv(oldUsageReportingScheduleEnvVar, "0 */5 * * *")
   164  	err = validateUsageReporting(cfg)
   165  	assert.Nil(t, err)
   166  	validateconfig(t, expected, cfg)
   167  
   168  	// QA UsageSchedule override
   169  	os.Setenv(qaUsageReportingUsageScheduleEnvVar, "*/1 * * * *")
   170  	cfg.(*UsageReportingConfiguration).Schedule = "*/1 * * * *"
   171  	err = validateUsageReporting(cfg)
   172  	assert.Nil(t, err)
   173  
   174  	// offline settings, valid
   175  	cfg.(*UsageReportingConfiguration).Offline = true
   176  	err = validateUsageReporting(cfg)
   177  	assert.Nil(t, err)
   178  
   179  	// invalid Schedule
   180  	currentSchedule := cfg.GetOfflineSchedule()
   181  	cfg.(*UsageReportingConfiguration).OfflineSchedule = "*/1511 * * * *"
   182  	err = validateUsageReporting(cfg)
   183  	assert.NotNil(t, err)
   184  	cfg.(*UsageReportingConfiguration).OfflineSchedule = currentSchedule
   185  
   186  	// QA Schedule override
   187  	os.Setenv(qaUsageReportingScheduleEnvVar, "*/1 * * * *")
   188  	cfg.(*UsageReportingConfiguration).OfflineSchedule = "*/1 * * * *"
   189  	err = validateUsageReporting(cfg)
   190  	assert.Nil(t, err)
   191  
   192  	// QA Report Schedule override
   193  	os.Setenv(qaUsageReportingOfflineScheduleEnvVar, "*/5 * * * *")
   194  	cfg.(*UsageReportingConfiguration).reportSchedule = "*/5 * * * *"
   195  	err = validateUsageReporting(cfg)
   196  	assert.Nil(t, err)
   197  }
   198  
   199  func TestNewUsageReporting(t *testing.T) {
   200  	cfg := NewUsageReporting("https://platform.axway.com")
   201  	expected := defaultExpected
   202  	expected.url = "https://platform.axway.com"
   203  	assert.NotNil(t, cfg)
   204  	validateconfig(t, expected, cfg)
   205  }