Skip to content

Commit

Permalink
[updown-support-in-imc] resolved the tests parallel execution issue
Browse files Browse the repository at this point in the history
  • Loading branch information
aliartiza75 committed Apr 11, 2019
1 parent 36779d8 commit 6c80c74
Show file tree
Hide file tree
Showing 4 changed files with 111 additions and 51 deletions.
27 changes: 23 additions & 4 deletions pkg/monitors/updown/updown-monitor.go
Original file line number Diff line number Diff line change
Expand Up @@ -32,21 +32,25 @@ type UpdownMonitorService struct {

// Setup function will create a updown's go client object by using the configuration parameters
func (updownService *UpdownMonitorService) Setup(confProvider config.Provider) {
log.Println("Updown monitor initializing")
// configuration parameters for creating a updown client
updownService.apiKey = confProvider.ApiKey
// creating updown go client
updownService.client = updown.NewClient(updownService.apiKey, http.DefaultClient)
log.Println("Updown monitor has been initialized")
}

// GetAll function will return all monitors (updown checks) object in an array
func (updownService *UpdownMonitorService) GetAll() []models.Monitor {

log.Println("Updown monitor's GetAll method has been called")
var monitors []models.Monitor

// getting all monitors(check) list
updownChecks, httpResponse, err := updownService.client.Check.List()
log.Println("Checks list has been pulled")

if (httpResponse.StatusCode == constants.StatusCodes["OK"]) && (err == nil) {
log.Println("Populating monitors slice using the updownChecks objects given in updownChecks slice")
// populating a monitors slice using the updownChecks objects given in updownChecks slice
for _, updownCheck := range updownChecks {
newMonitor := models.Monitor{
Expand All @@ -68,22 +72,29 @@ func (updownService *UpdownMonitorService) GetAll() []models.Monitor {
// GetByName function will return a monitor(updown check) object based on the name provided
func (updownService *UpdownMonitorService) GetByName(monitorName string) (*models.Monitor, error) {

log.Println("Updown monitor's GetByName method has been called")

updownMonitors := updownService.GetAll()
log.Println("Monitor object slice has been pulled")

log.Println("Searching the monitor from monitors object array using its name")
for _, updownMonitor := range updownMonitors {
if updownMonitor.Name == monitorName {
// Test the code below
return &updownMonitor, nil
}
}

return nil, fmt.Errorf("Unable to locate updown provider monitor with name %v", monitorName)
return nil, fmt.Errorf("Unable to locate updown monitor with name %v", monitorName)
}

func (service *UpdownMonitorService) Add(updownMonitor models.Monitor) {

log.Println("Updown's Add method has been called")
updownCheckItemObj := service.createHttpCheck(updownMonitor)

_, httpResponse, err := service.client.Check.Add(updownCheckItemObj)
log.Println("Monitor addition request has been completed")

if (httpResponse.StatusCode == constants.StatusCodes["CREATED"]) && (err == nil) {
log.Printf("Monitor %s has been added.", updownMonitor.Name)
Expand All @@ -100,8 +111,11 @@ func (service *UpdownMonitorService) Add(updownMonitor models.Monitor) {
// createHttpCheck it will create a httpCheck
func (updownService *UpdownMonitorService) createHttpCheck(updownMonitor models.Monitor) updown.CheckItem {

log.Println("Updown's createHttpCheck method has been called")
// populating updownCheckItemObj object attributes using updownMonitor object
log.Println("populating updownCheckItemObj object attributes using updownMonitor object")
updownCheckItemObj := updown.CheckItem{}
log.Println("Parsing URL")
_, err := url.Parse(updownMonitor.URL)
if err != nil {
log.Println("Unable to parse the URL : ", updownMonitor.URL)
Expand All @@ -111,6 +125,7 @@ func (updownService *UpdownMonitorService) createHttpCheck(updownMonitor models.
updownCheckItemObj.URL = updownMonitor.URL
updownCheckItemObj.Alias = updownMonitor.Name
// populating updownCheckItemObj object attributes using
log.Println("populating updownCheckItemObj object attributes using")
updownService.addAnnotationConfigToHttpCheck(&updownCheckItemObj, updownMonitor.Annotations)

return updownCheckItemObj
Expand All @@ -120,7 +135,7 @@ func (updownService *UpdownMonitorService) createHttpCheck(updownMonitor models.
func (service *UpdownMonitorService) addAnnotationConfigToHttpCheck(updownCheckItemObj *updown.CheckItem, annotations map[string]string) {
// Read known annotations, try to map them to updown check configs
// set some default values if we can't find them

log.Println("Updown's addAnnotationConfigToHttpCheck has been called")
if value, ok := annotations[UpdownEnableCheckAnnotation]; ok {
boolValue, err := strconv.ParseBool(value)
if err == nil {
Expand Down Expand Up @@ -152,16 +167,18 @@ func (service *UpdownMonitorService) addAnnotationConfigToHttpCheck(updownCheckI

// Update function will update a check
func (service *UpdownMonitorService) Update(updownMonitor models.Monitor) {

log.Println("Updown's Update method has been called")
httpCheckItemObj := service.createHttpCheck(updownMonitor)

_, httpResponse, err := service.client.Check.Update(updownMonitor.ID, httpCheckItemObj)
log.Println("Updown's check Update request has been completed")

if (httpResponse.StatusCode == constants.StatusCodes["OK"]) && (err == nil) {
marshaledConfig, _ := json.Marshal(httpCheckItemObj)
log.Printf("Monitor %s has been updated with following parameters: %s ", updownMonitor.Name, marshaledConfig)

} else {
log.Println(httpResponse)
log.Printf("Monitor %s is not updated because of %s", updownMonitor.Name, err.Error())

}
Expand All @@ -171,7 +188,9 @@ func (service *UpdownMonitorService) Update(updownMonitor models.Monitor) {
// Remove function will remove a monitor (updown check)
func (updownService *UpdownMonitorService) Remove(updownMonitor models.Monitor) {

log.Println("Updown's Remove method has been called")
_, httpResponse, err := updownService.client.Check.Remove(updownMonitor.ID)
log.Println("Updown's check Remove request has been completed")

if (httpResponse.StatusCode == constants.StatusCodes["OK"]) && (err == nil) {
log.Printf("Monitor %v has been deleted.", updownMonitor.Name)
Expand Down
53 changes: 40 additions & 13 deletions pkg/monitors/updown/updown-monitor_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package updown

import (
"testing"
"time"

"github.com/stakater/IngressMonitorController/pkg/config"
"github.com/stakater/IngressMonitorController/pkg/models"
Expand Down Expand Up @@ -77,6 +78,7 @@ func TestGetAllMonitorWhileNoCheckExists(t *testing.T) {
UpdownService := UpdownMonitorService{}
provider := util.GetProviderWithName(config, "Updown")
UpdownService.Setup(*provider)

monitorSlice := UpdownService.GetAll()

assert.Equal(t, 0, len(monitorSlice))
Expand All @@ -90,8 +92,8 @@ func TestGetByNameMonitorWhileNoCheckExists(t *testing.T) {
UpdownService.Setup(*provider)

var nilMonitorModelObj *models.Monitor

monitorObject, _ := UpdownService.GetByName("NoExistingCheck")

assert.Equal(t, monitorObject, nilMonitorModelObj)

}
Expand All @@ -108,7 +110,6 @@ func TestAddMonitorWhileNoCheckExists(t *testing.T) {
}

UpdownService.Add(newMonitor)

}

func TestAddMonitorWhileCheckExists(t *testing.T) {
Expand All @@ -121,6 +122,7 @@ func TestAddMonitorWhileCheckExists(t *testing.T) {
URL: CheckURL,
Name: CheckName,
}

UpdownService.Add(newMonitor)
}

Expand All @@ -129,13 +131,14 @@ func TestGetAllMonitorWhileCheckExists(t *testing.T) {
UpdownService := UpdownMonitorService{}
provider := util.GetProviderWithName(config, "Updown")
UpdownService.Setup(*provider)
monitorSlice := UpdownService.GetAll()

time.Sleep(30 * time.Second)
monitorSlice2 := UpdownService.GetAll()
firstElement := 0

assert.Equal(t, 1, len(monitorSlice))
assert.Equal(t, monitorSlice[firstElement].Name, CheckName)
assert.Equal(t, monitorSlice[firstElement].URL, CheckURL)
assert.Equal(t, 1, len(monitorSlice2))
assert.Equal(t, monitorSlice2[firstElement].Name, CheckName)
assert.Equal(t, monitorSlice2[firstElement].URL, CheckURL)

}

Expand All @@ -144,9 +147,9 @@ func TestGetByNameMonitorWhileCheckExists(t *testing.T) {
UpdownService := UpdownMonitorService{}
provider := util.GetProviderWithName(config, "Updown")
UpdownService.Setup(*provider)

firstElement := 0
var nilMonitorModelObj *models.Monitor

monitorSlice := UpdownService.GetAll()
monitorObject, _ := UpdownService.GetByName(monitorSlice[firstElement].ID)

Expand All @@ -159,14 +162,28 @@ func TestUpdateMonitorWhileCheckExists(t *testing.T) {
UpdownService := UpdownMonitorService{}
provider := util.GetProviderWithName(config, "Updown")
UpdownService.Setup(*provider)
firstElement := 0

firstElement := 0
monitorSlice := UpdownService.GetAll()
updatedMonitor := models.Monitor{
URL: CheckURL,
Name: UpdatedCheckName,
}
ID: monitorSlice[firstElement].ID}

UpdownService.Update(updatedMonitor)

}

func TestGetAllMonitorWhileCheckUpdated(t *testing.T) {
config := config.GetControllerConfig()
UpdownService := UpdownMonitorService{}
provider := util.GetProviderWithName(config, "Updown")
UpdownService.Setup(*provider)

time.Sleep(10 * time.Second)
monitorSlice := UpdownService.GetAll()
firstElement := 0

assert.NotEqual(t, monitorSlice[firstElement].Name, UpdatedCheckName)

}
Expand All @@ -176,17 +193,27 @@ func TestRemoveMonitorWhileCheckExists(t *testing.T) {
UpdownService := UpdownMonitorService{}
provider := util.GetProviderWithName(config, "Updown")
UpdownService.Setup(*provider)
firstElement := 0

firstElement := 0
monitorSlice := UpdownService.GetAll()

updatedMonitor := models.Monitor{
URL: monitorSlice[firstElement].URL,
Name: monitorSlice[firstElement].Name,
ID: monitorSlice[firstElement].ID}

UpdownService.Remove(updatedMonitor)
monitorSlice = UpdownService.GetAll()
assert.Equal(t, len(monitorSlice), 0)

}

func TestGetAllMonitorWhenCheckAreRemoved(t *testing.T) {
config := config.GetControllerConfig()
UpdownService := UpdownMonitorService{}
provider := util.GetProviderWithName(config, "Updown")
UpdownService.Setup(*provider)

time.Sleep(30 * time.Second)
monitorSlice1 := UpdownService.GetAll()

assert.Equal(t, 0, len(monitorSlice1))

}

0 comments on commit 6c80c74

Please sign in to comment.