github.com/Financial-Times/publish-availability-monitor@v1.12.0/envs/file_environments_test.go (about) 1 package envs 2 3 import ( 4 "bufio" 5 "context" 6 "fmt" 7 "os" 8 "testing" 9 "time" 10 11 "github.com/Financial-Times/go-logger/v2" 12 "github.com/Financial-Times/publish-availability-monitor/config" 13 "github.com/Financial-Times/publish-availability-monitor/feeds" 14 "github.com/stretchr/testify/assert" 15 ) 16 17 const ( 18 validEnvConfig = ` 19 [ 20 { 21 "name":"test-env", 22 "read-url": "https://test-env.ft.com" 23 } 24 ]` 25 //nolint:gosec 26 validEnvCredentialsConfig = ` 27 [ 28 { 29 "env-name": "test-env", 30 "username": "test-user", 31 "password": "test-pwd" 32 } 33 ]` 34 //nolint:gosec 35 validValidationCredentialsConfig = ` 36 { 37 "username": "test-user", 38 "password": "test-pwd" 39 }` 40 invalidJSONConfig = `invalid-config` 41 ) 42 43 func TestParseEnvsIntoMap(t *testing.T) { 44 envsToBeParsed := getValidEnvs() 45 credentials := getValidCredentials() 46 environments := NewEnvironments() 47 log := logger.NewUPPLogger("test", "PANIC") 48 49 removedEnvs := parseEnvsIntoMap(envsToBeParsed, credentials, environments, log) 50 51 assert.Equal(t, 0, len(removedEnvs)) 52 assert.Equal(t, len(envsToBeParsed), environments.Len()) 53 envName := envsToBeParsed[1].Name 54 assert.Equal(t, envName, environments.Environment(envName).Name) 55 assert.Equal(t, credentials[1].Username, environments.Environment(envName).Username) 56 } 57 58 func TestParseEnvsIntoMapWithRemovedEnv(t *testing.T) { 59 envsToBeParsed := getValidEnvs() 60 credentials := getValidCredentials() 61 environments := NewEnvironments() 62 environments.SetEnvironment("removed-env", Environment{}) 63 log := logger.NewUPPLogger("test", "PANIC") 64 65 removedEnvs := parseEnvsIntoMap(envsToBeParsed, credentials, environments, log) 66 67 assert.Equal(t, 1, len(removedEnvs)) 68 assert.Equal(t, len(envsToBeParsed), environments.Len()) 69 envName := envsToBeParsed[1].Name 70 assert.Equal(t, envName, environments.Environment(envName).Name) 71 assert.Equal(t, credentials[1].Username, environments.Environment(envName).Username) 72 } 73 74 func TestParseEnvsIntoMapWithExistingEnv(t *testing.T) { 75 envsToBeParsed := getValidEnvs() 76 credentials := getValidCredentials() 77 environments := NewEnvironments() 78 existingEnv := envsToBeParsed[0] 79 environments.SetEnvironment(existingEnv.Name, existingEnv) 80 log := logger.NewUPPLogger("test", "PANIC") 81 82 removedEnvs := parseEnvsIntoMap(envsToBeParsed, credentials, environments, log) 83 84 assert.Equal(t, 0, len(removedEnvs)) 85 assert.Equal(t, len(envsToBeParsed), environments.Len()) 86 envName := envsToBeParsed[1].Name 87 assert.Equal(t, envName, environments.Environment(envName).Name) 88 assert.Equal(t, credentials[1].Username, environments.Environment(envName).Username) 89 } 90 91 func TestParseEnvsIntoMapWithNoCredentials(t *testing.T) { 92 envsToBeParsed := getValidEnvs() 93 credentials := []Credentials{} 94 environments := NewEnvironments() 95 log := logger.NewUPPLogger("test", "PANIC") 96 97 removedEnvs := parseEnvsIntoMap(envsToBeParsed, credentials, environments, log) 98 99 assert.Equal(t, 0, len(removedEnvs)) 100 assert.Equal(t, len(envsToBeParsed), environments.Len()) 101 envName := envsToBeParsed[1].Name 102 assert.Equal(t, envName, environments.Environment(envName).Name) 103 } 104 105 func TestFilterInvalidEnvs(t *testing.T) { 106 envsToBeFiltered := getValidEnvs() 107 log := logger.NewUPPLogger("test", "PANIC") 108 109 filteredEnvs := filterInvalidEnvs(envsToBeFiltered, log) 110 111 assert.Equal(t, len(envsToBeFiltered), len(filteredEnvs)) 112 } 113 114 func TestFilterInvalidEnvsWithEmptyName(t *testing.T) { 115 envsToBeFiltered := []Environment{ 116 { 117 Name: "", 118 ReadURL: "test", 119 Username: "dummy", 120 Password: "dummy", 121 }, 122 } 123 log := logger.NewUPPLogger("test", "PANIC") 124 125 filteredEnvs := filterInvalidEnvs(envsToBeFiltered, log) 126 127 assert.Equal(t, 0, len(filteredEnvs)) 128 } 129 130 func TestFilterInvalidEnvsWithEmptyReadUrl(t *testing.T) { 131 envsToBeFiltered := []Environment{ 132 { 133 Name: "test", 134 ReadURL: "", 135 Username: "dummy", 136 Password: "dummy", 137 }, 138 } 139 log := logger.NewUPPLogger("test", "PANIC") 140 141 filteredEnvs := filterInvalidEnvs(envsToBeFiltered, log) 142 143 assert.Equal(t, 0, len(filteredEnvs)) 144 } 145 146 func TestFilterInvalidEnvsWithEmptyUsernameUrl(t *testing.T) { 147 envsToBeFiltered := []Environment{ 148 { 149 Name: "test", 150 ReadURL: "test", 151 Username: "", 152 Password: "dummy", 153 }, 154 } 155 log := logger.NewUPPLogger("test", "PANIC") 156 157 filteredEnvs := filterInvalidEnvs(envsToBeFiltered, log) 158 159 assert.Equal(t, 1, len(filteredEnvs)) 160 } 161 162 func TestFilterInvalidEnvsWithEmptyPwd(t *testing.T) { 163 envsToBeFiltered := []Environment{ 164 { 165 Name: "test", 166 ReadURL: "test", 167 Username: "test", 168 Password: "", 169 }, 170 } 171 log := logger.NewUPPLogger("test", "PANIC") 172 173 filteredEnvs := filterInvalidEnvs(envsToBeFiltered, log) 174 175 assert.Equal(t, 1, len(filteredEnvs)) 176 } 177 178 func TestUpdateValidationCredentialsHappyFlow(t *testing.T) { 179 log := logger.NewUPPLogger("test", "PANIC") 180 181 fileName := prepareFile(validValidationCredentialsConfig) 182 fileContents, _ := os.ReadFile(fileName) 183 err := updateValidationCredentials(fileContents, log) 184 185 assert.Nil(t, err) 186 assert.Equal(t, "test-user:test-pwd", validatorCredentials) 187 os.Remove(fileName) 188 } 189 190 func TestUpdateValidationCredentialNilFile(t *testing.T) { 191 validatorCredentials := Credentials{ 192 Username: "test-username", 193 Password: "test-password", 194 } 195 log := logger.NewUPPLogger("test", "PANIC") 196 197 err := updateValidationCredentials(nil, log) 198 199 assert.NotNil(t, err) 200 //make sure validationCredentials didn't change after failing call to updateValidationCredentials(). 201 assert.Equal(t, "test-username", validatorCredentials.Username) 202 assert.Equal(t, "test-password", validatorCredentials.Password) 203 } 204 205 func TestUpdateValidationCredentialsInvalidConfig(t *testing.T) { 206 fileName := prepareFile(invalidJSONConfig) 207 validatorCredentials := Credentials{ 208 Username: "test-username", 209 Password: "test-password", 210 } 211 fileContents, _ := os.ReadFile(fileName) 212 log := logger.NewUPPLogger("test", "PANIC") 213 214 err := updateValidationCredentials(fileContents, log) 215 assert.NotNil(t, err) 216 //make sure validationCredentials didn't change after failing call to updateValidationCredentials(). 217 assert.Equal(t, "test-username", validatorCredentials.Username) 218 assert.Equal(t, "test-password", validatorCredentials.Password) 219 os.Remove(fileName) 220 } 221 222 func TestConfigureFeedsWithEmptyListOfMetrics(t *testing.T) { 223 subscribedFeeds := map[string][]feeds.Feed{} 224 subscribedFeeds["test-feed"] = []feeds.Feed{ 225 MockFeed{}, 226 } 227 appConfig := &config.AppConfig{} 228 log := logger.NewUPPLogger("test", "PANIC") 229 230 configureFileFeeds(make([]Environment, 0), []string{"test-feed"}, subscribedFeeds, appConfig, log) 231 232 assert.Equal(t, 0, len(subscribedFeeds)) 233 } 234 235 func TestUpdateEnvsHappyFlow(t *testing.T) { 236 subscribedFeeds := map[string][]feeds.Feed{} 237 subscribedFeeds["test-feed"] = []feeds.Feed{ 238 MockFeed{}, 239 } 240 appConfig := &config.AppConfig{} 241 envsFileName := prepareFile(validEnvConfig) 242 envsFileContents, _ := os.ReadFile(envsFileName) 243 244 envCredsFileName := prepareFile(validEnvCredentialsConfig) 245 credsFileContents, _ := os.ReadFile(envCredsFileName) 246 log := logger.NewUPPLogger("test", "PANIC") 247 248 err := updateEnvs(envsFileContents, credsFileContents, NewEnvironments(), subscribedFeeds, appConfig, log) 249 250 assert.Nil(t, err) 251 os.Remove(envsFileName) 252 os.Remove(envCredsFileName) 253 } 254 255 func TestUpdateEnvsHappyNilEnvsFile(t *testing.T) { 256 envCredsFileName := prepareFile(validEnvCredentialsConfig) 257 credsFileContents, _ := os.ReadFile(envCredsFileName) 258 subscribedFeeds := map[string][]feeds.Feed{} 259 appConfig := &config.AppConfig{} 260 log := logger.NewUPPLogger("test", "PANIC") 261 262 err := updateEnvs(nil, credsFileContents, NewEnvironments(), subscribedFeeds, appConfig, log) 263 264 assert.NotNil(t, err) 265 os.Remove(envCredsFileName) 266 } 267 268 func TestUpdateEnvsNilEnvCredentialsFile(t *testing.T) { 269 envsFileName := prepareFile(validEnvConfig) 270 envsFileContents, _ := os.ReadFile(envsFileName) 271 subscribedFeeds := map[string][]feeds.Feed{} 272 appConfig := &config.AppConfig{} 273 log := logger.NewUPPLogger("test", "PANIC") 274 275 err := updateEnvs(envsFileContents, nil, NewEnvironments(), subscribedFeeds, appConfig, log) 276 277 assert.NotNil(t, err) 278 os.Remove(envsFileName) 279 } 280 281 func TestComputeMD5Hash(t *testing.T) { 282 var testCases = []struct { 283 caseDescription string 284 toHash []byte 285 expectedHash string 286 }{ 287 { 288 caseDescription: "one-line valid input", 289 toHash: []byte("foobar"), 290 expectedHash: "3858f62230ac3c915f300c664312c63f", 291 }, 292 { 293 caseDescription: "multi-line valid input", 294 toHash: []byte(`foo 295 bar`), 296 expectedHash: "1be7783a9859a16a010d466d39342543", 297 }, 298 { 299 caseDescription: "empty input", 300 toHash: []byte(""), 301 expectedHash: "d41d8cd98f00b204e9800998ecf8427e", 302 }, 303 { 304 caseDescription: "nil input", 305 toHash: nil, 306 expectedHash: "d41d8cd98f00b204e9800998ecf8427e", 307 }, 308 } 309 310 for _, tc := range testCases { 311 actualHash, err := computeMD5Hash(tc.toHash) 312 assert.Nil(t, err) 313 assert.Equal(t, tc.expectedHash, actualHash, 314 fmt.Sprintf("%s: Computed has doesn't match expected hash", tc.caseDescription)) 315 } 316 } 317 318 func TestIsFileChanged(t *testing.T) { 319 var testCases = []struct { 320 caseDescription string 321 fileContents []byte 322 fileName string 323 configFilesHashValues map[string]string 324 expectedResult bool 325 expectedHash string 326 }{ 327 { 328 caseDescription: "file not changed", 329 fileContents: []byte("foobar"), 330 fileName: "file1", 331 configFilesHashValues: map[string]string{ 332 "file1": "3858f62230ac3c915f300c664312c63f", 333 "file2": "1be7783a9859a16a010d466d39342543", 334 }, 335 expectedResult: false, 336 expectedHash: "3858f62230ac3c915f300c664312c63f", 337 }, 338 { 339 caseDescription: "new file", 340 fileContents: []byte("foobar"), 341 fileName: "file1", 342 configFilesHashValues: map[string]string{ 343 "file2": "1be7783a9859a16a010d466d39342543", 344 }, 345 expectedResult: true, 346 expectedHash: "3858f62230ac3c915f300c664312c63f", 347 }, 348 { 349 caseDescription: "file contents changed", 350 fileContents: []byte("foobarNew"), 351 fileName: "file1", 352 configFilesHashValues: map[string]string{ 353 "file1": "3858f62230ac3c915f300c664312c63f", 354 "file2": "1be7783a9859a16a010d466d39342543", 355 }, 356 expectedResult: true, 357 expectedHash: "bdcf75c01270b40ebb33c1d24457ed81", 358 }, 359 } 360 361 for _, tc := range testCases { 362 configFilesHashValues := tc.configFilesHashValues 363 actualResult, actualHash, _ := isFileChanged(tc.fileContents, tc.fileName, configFilesHashValues) 364 assert.Equal(t, tc.expectedResult, actualResult, 365 fmt.Sprintf("%s: File change was not detected correctly.", tc.caseDescription)) 366 assert.Equal(t, tc.expectedHash, actualHash, 367 fmt.Sprintf("%s: The expected file hash was not returned.", tc.caseDescription)) 368 } 369 } 370 371 func TestUpdateEnvsIfChangedEnvFileDoesntExist(t *testing.T) { 372 credsFile := prepareFile(validEnvCredentialsConfig) 373 defer os.Remove(credsFile) 374 375 environments := NewEnvironments() 376 configFilesHashValues := make(map[string]string) 377 subscribedFeeds := map[string][]feeds.Feed{} 378 appConfig := &config.AppConfig{} 379 log := logger.NewUPPLogger("test", "PANIC") 380 381 err := updateEnvsIfChanged("thisFileDoesntexist", credsFile, configFilesHashValues, environments, subscribedFeeds, appConfig, log) 382 383 assert.NotNil(t, err, "Didn't get an error after supplying file which doesn't exist") 384 assert.Equal(t, 0, environments.Len(), "No new environments should've been added") 385 assert.Equal(t, 0, len(configFilesHashValues), "No hashes should've been updated") 386 } 387 388 func TestUpdateEnvsIfChangedCredsFileDoesntExist(t *testing.T) { 389 envsFile := prepareFile(validEnvConfig) 390 defer os.Remove(envsFile) 391 392 environments := NewEnvironments() 393 configFilesHashValues := make(map[string]string) 394 subscribedFeeds := map[string][]feeds.Feed{} 395 appConfig := &config.AppConfig{} 396 log := logger.NewUPPLogger("test", "PANIC") 397 398 err := updateEnvsIfChanged(envsFile, "thisFileDoesntexist", configFilesHashValues, environments, subscribedFeeds, appConfig, log) 399 400 assert.NotNil(t, err, "Didn't get an error after supplying file which doesn't exist") 401 assert.Equal(t, 0, environments.Len(), "No new environments should've been added") 402 assert.Equal(t, 0, len(configFilesHashValues), "No hashes should've been updated") 403 } 404 405 func TestUpdateEnvsIfChangedFilesDontExist(t *testing.T) { 406 environments := NewEnvironments() 407 configFilesHashValues := make(map[string]string) 408 subscribedFeeds := map[string][]feeds.Feed{} 409 appConfig := &config.AppConfig{} 410 log := logger.NewUPPLogger("test", "PANIC") 411 412 err := updateEnvsIfChanged("thisFileDoesntExist", "thisDoesntExistEither", configFilesHashValues, environments, subscribedFeeds, appConfig, log) 413 414 assert.NotNil(t, err, "Didn't get an error after supplying files which don't exist") 415 assert.Equal(t, 0, environments.Len(), "No new environments should've been added") 416 assert.Equal(t, 0, len(configFilesHashValues), "No hashes should've been updated") 417 } 418 419 func TestUpdateEnvsIfChangedValidFiles(t *testing.T) { 420 envsFile := prepareFile(validEnvConfig) 421 defer os.Remove(envsFile) 422 credsFile := prepareFile(validEnvCredentialsConfig) 423 defer os.Remove(credsFile) 424 425 environments := NewEnvironments() 426 configFilesHashValues := make(map[string]string) 427 subscribedFeeds := map[string][]feeds.Feed{} 428 429 //appConfig has to be non-nil for the actual update to work 430 appConfig := &config.AppConfig{} 431 log := logger.NewUPPLogger("test", "PANIC") 432 433 err := updateEnvsIfChanged(envsFile, credsFile, configFilesHashValues, environments, subscribedFeeds, appConfig, log) 434 435 assert.Nil(t, err, "Got an error after supplying valid files") 436 assert.Equal(t, 1, environments.Len(), "New environment should've been added") 437 assert.Equal(t, 2, len(configFilesHashValues), "New hashes should've been added") 438 } 439 440 func TestUpdateEnvsIfChangedNoChanges(t *testing.T) { 441 envsFile := prepareFile(validEnvConfig) 442 defer os.Remove(envsFile) 443 credsFile := prepareFile(validEnvCredentialsConfig) 444 defer os.Remove(credsFile) 445 446 subscribedFeeds := map[string][]feeds.Feed{} 447 environments := NewEnvironments() 448 environments.SetEnvironment("test-env", Environment{ 449 Name: "test-env", 450 Password: "test-pwd", 451 ReadURL: "https://test-env.ft.com", 452 Username: "test-user", 453 }) 454 455 configFilesHashValues := map[string]string{ 456 envsFile: "aeb7d7ba7e2169de3552165c4c2d5571", 457 credsFile: "dfd8aecc21b7017c5e4f171e3279fc68", 458 } 459 460 //if the update works (which it shouldn't) we will have a failure 461 var appConfig *config.AppConfig 462 log := logger.NewUPPLogger("test", "PANIC") 463 464 err := updateEnvsIfChanged(envsFile, credsFile, configFilesHashValues, environments, subscribedFeeds, appConfig, log) 465 466 assert.Nil(t, err, "Got an error after supplying valid files") 467 assert.Equal(t, 1, environments.Len(), "Environments shouldn't have changed") 468 assert.Equal(t, 2, len(configFilesHashValues), "Hashes shouldn't have changed") 469 } 470 471 func TestUpdateEnvsIfChangedInvalidEnvsFile(t *testing.T) { 472 envsFile := prepareFile(invalidJSONConfig) 473 defer os.Remove(envsFile) 474 credsFile := prepareFile(validEnvCredentialsConfig) 475 defer os.Remove(credsFile) 476 477 environments := NewEnvironments() 478 configFilesHashValues := make(map[string]string) 479 subscribedFeeds := map[string][]feeds.Feed{} 480 appConfig := &config.AppConfig{} 481 log := logger.NewUPPLogger("test", "PANIC") 482 483 err := updateEnvsIfChanged(envsFile, credsFile, configFilesHashValues, environments, subscribedFeeds, appConfig, log) 484 485 assert.NotNil(t, err, "Didn't get an error after supplying invalid file") 486 assert.Equal(t, 0, environments.Len(), "No new environment should've been added") 487 assert.Equal(t, 0, len(configFilesHashValues), "No new hashes should've been added") 488 } 489 490 func TestUpdateEnvsIfChangedInvalidCredsFile(t *testing.T) { 491 envsFile := prepareFile(validEnvConfig) 492 defer os.Remove(envsFile) 493 credsFile := prepareFile(invalidJSONConfig) 494 defer os.Remove(credsFile) 495 496 environments := NewEnvironments() 497 configFilesHashValues := make(map[string]string) 498 subscribedFeeds := map[string][]feeds.Feed{} 499 appConfig := &config.AppConfig{} 500 log := logger.NewUPPLogger("test", "PANIC") 501 502 err := updateEnvsIfChanged(envsFile, credsFile, configFilesHashValues, environments, subscribedFeeds, appConfig, log) 503 504 assert.NotNil(t, err, "Didn't get an error after supplying invalid file") 505 assert.Equal(t, 0, environments.Len(), "No new environment should've been added") 506 assert.Equal(t, 0, len(configFilesHashValues), "No new hashes should've been added") 507 } 508 509 func TestUpdateEnvsIfChangedInvalidFiles(t *testing.T) { 510 envsFile := prepareFile(invalidJSONConfig) 511 defer os.Remove(envsFile) 512 credsFile := prepareFile(invalidJSONConfig) 513 defer os.Remove(credsFile) 514 515 environments := NewEnvironments() 516 configFilesHashValues := make(map[string]string) 517 subscribedFeeds := map[string][]feeds.Feed{} 518 appConfig := &config.AppConfig{} 519 log := logger.NewUPPLogger("test", "PANIC") 520 521 err := updateEnvsIfChanged(envsFile, credsFile, configFilesHashValues, environments, subscribedFeeds, appConfig, log) 522 523 assert.NotNil(t, err, "Didn't get an error after supplying invalid file") 524 assert.Equal(t, 0, environments.Len(), "No new environment should've been added") 525 assert.Equal(t, 0, len(configFilesHashValues), "No new hashes should've been added") 526 } 527 528 func TestUpdateValidationCredentialsIfChangedFileDoesntExist(t *testing.T) { 529 validatorCredentials = "" 530 configFilesHashValues := make(map[string]string) 531 log := logger.NewUPPLogger("test", "PANIC") 532 533 err := updateValidationCredentialsIfChanged("thisFileDoesntExist", configFilesHashValues, log) 534 535 assert.NotNil(t, err, "Didn't get an error after supplying file which doesn't exist") 536 assert.Equal(t, 0, len(validatorCredentials), "No validator credentials should've been added") 537 assert.Equal(t, 0, len(configFilesHashValues), "No hashes should've been updated") 538 } 539 540 func TestUpdateValidationCredentialsIfChangedInvalidFile(t *testing.T) { 541 validationCredsFile := prepareFile(invalidJSONConfig) 542 defer os.Remove(validationCredsFile) 543 544 validatorCredentials = "" 545 configFilesHashValues := make(map[string]string) 546 log := logger.NewUPPLogger("test", "PANIC") 547 548 err := updateValidationCredentialsIfChanged(validationCredsFile, configFilesHashValues, log) 549 550 assert.NotNil(t, err, "Didn't get an error after supplying file which doesn't exist") 551 assert.Equal(t, 0, len(validatorCredentials), "No validator credentials should've been added") 552 assert.Equal(t, 0, len(configFilesHashValues), "No hashes should've been updated") 553 } 554 555 func TestUpdateValidationCredentialsIfChangedNewFile(t *testing.T) { 556 validationCredsFile := prepareFile(validValidationCredentialsConfig) 557 defer os.Remove(validationCredsFile) 558 559 validatorCredentials = "" 560 configFilesHashValues := make(map[string]string) 561 log := logger.NewUPPLogger("test", "PANIC") 562 563 err := updateValidationCredentialsIfChanged(validationCredsFile, configFilesHashValues, log) 564 565 assert.Nil(t, err, "Shouldn't get an error for valid file") 566 assert.Equal(t, "test-user:test-pwd", validatorCredentials, "New validator credentials should've been added") 567 assert.Equal(t, 1, len(configFilesHashValues), "New hashes should've been added") 568 } 569 570 func TestUpdateValidationCredentialsIfChangedFileUnchanged(t *testing.T) { 571 validationCredsFile := prepareFile(validValidationCredentialsConfig) 572 defer os.Remove(validationCredsFile) 573 574 validatorCredentials = "test-user:test-pwd" 575 configFilesHashValues := map[string]string{ 576 validationCredsFile: "cc4d51dfe137ec8cbba8fd3ff24474be", 577 } 578 log := logger.NewUPPLogger("test", "PANIC") 579 580 err := updateValidationCredentialsIfChanged(validationCredsFile, configFilesHashValues, log) 581 assert.Nil(t, err, "Shouldn't get an error for valid file") 582 assert.Equal(t, "test-user:test-pwd", validatorCredentials, "Validator credentials shouldn't have changed") 583 assert.Equal(t, "cc4d51dfe137ec8cbba8fd3ff24474be", configFilesHashValues[validationCredsFile], "Hashes shouldn't have changed") 584 } 585 586 func TestTickerWithInitialDelay(t *testing.T) { 587 ctx, cancel := context.WithCancel(context.Background()) 588 defer cancel() 589 590 delay := 2 591 ticker := newTicker(time.Duration(delay)*time.Second, time.Minute) 592 defer ticker.Stop() 593 594 before := time.Now() 595 go func() { 596 <-ticker.C 597 cancel() 598 }() 599 600 select { 601 case <-ctx.Done(): 602 assert.WithinDuration(t, before.Add(time.Duration(delay)*time.Second), time.Now(), time.Second, "initial tick") 603 case <-time.After(time.Duration(delay+1) * time.Second): 604 assert.Fail(t, "timed out waiting for initial tick") 605 } 606 } 607 608 func prepareFile(fileContent string) string { 609 file, err := os.CreateTemp(os.TempDir(), "") 610 if err != nil { 611 panic("Cannot create temp file.") 612 } 613 614 writer := bufio.NewWriter(file) 615 defer file.Close() 616 fmt.Fprintln(writer, fileContent) 617 writer.Flush() 618 return file.Name() 619 } 620 621 func getValidEnvs() []Environment { 622 return []Environment{ 623 { 624 Name: "test", 625 ReadURL: "test-url", 626 }, 627 { 628 Name: "test2", 629 ReadURL: "test-url2", 630 }, 631 } 632 } 633 634 func getValidCredentials() []Credentials { 635 return []Credentials{ 636 { 637 EnvName: "test", 638 Username: "dummy-user", 639 Password: "dummy-pwd", 640 }, 641 { 642 EnvName: "test2", 643 Username: "dummy-user2", 644 Password: "dummy-pwd2", 645 }, 646 } 647 } 648 649 type MockFeed struct{} 650 651 func (f MockFeed) Start() {} 652 func (f MockFeed) Stop() {} 653 func (f MockFeed) FeedName() string { 654 return "" 655 } 656 func (f MockFeed) FeedURL() string { 657 return "" 658 } 659 func (f MockFeed) FeedType() string { 660 return "" 661 } 662 func (f MockFeed) SetCredentials(username string, password string) {} 663 func (f MockFeed) NotificationsFor(uuid string) []*feeds.Notification { 664 return nil 665 }