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 }