github.com/stakater/IngressMonitorController@v1.0.103/pkg/monitors/uptimerobot/uptime-status-page_test.go (about)

     1  package uptimerobot
     2  
     3  import (
     4  	"strings"
     5  	"testing"
     6  
     7  	log "github.com/sirupsen/logrus"
     8  	"github.com/stakater/IngressMonitorController/pkg/config"
     9  	"github.com/stakater/IngressMonitorController/pkg/models"
    10  	"github.com/stakater/IngressMonitorController/pkg/util"
    11  )
    12  
    13  // Not a test case. Cleanup to remove added dummy StatusPages
    14  func TestRemoveDanglingStatusPages(t *testing.T) {
    15  	config := config.GetControllerConfig()
    16  	service := UpTimeStatusPageService{}
    17  	provider := util.GetProviderWithName(config, "UptimeRobot")
    18  	service.Setup(*provider)
    19  
    20  	statusPages, err := service.GetAllStatusPages("status-page-test")
    21  
    22  	if err == nil && statusPages == nil {
    23  		log.Println("No dangling StatusPages named: status-page-test")
    24  	}
    25  	if err != nil && statusPages != nil {
    26  		for _, statusPage := range statusPages {
    27  			service.Remove(statusPage)
    28  		}
    29  	}
    30  
    31  	statusPages1, err := service.GetAllStatusPages("status-page-test-1")
    32  
    33  	if err == nil && statusPages1 == nil {
    34  		log.Println("No dangling StatusPages named: status-page-test-1")
    35  	}
    36  	if err != nil && statusPages1 != nil {
    37  		for _, statusPage := range statusPages1 {
    38  			service.Remove(statusPage)
    39  		}
    40  	}
    41  
    42  	statusPages2, err := service.GetAllStatusPages("status-page-test-2")
    43  
    44  	if err == nil && statusPages2 == nil {
    45  		log.Println("No dangling StatusPages named: status-page-test-2")
    46  	}
    47  	if err != nil && statusPages2 != nil {
    48  		for _, statusPage := range statusPages2 {
    49  			service.Remove(statusPage)
    50  		}
    51  	}
    52  
    53  	statusPages3, err := service.GetAllStatusPages("status-page-test-3")
    54  
    55  	if err == nil && statusPages3 == nil {
    56  		log.Println("No dangling StatusPages named: status-page-test-3")
    57  	}
    58  	if err == nil && statusPages3 != nil {
    59  		for _, statusPage := range statusPages3 {
    60  			service.Remove(statusPage)
    61  		}
    62  	}
    63  
    64  }
    65  
    66  func TestAddMonitorMultipleTimesToStatusPage(t *testing.T) {
    67  	config := config.GetControllerConfig()
    68  	service := UpTimeStatusPageService{}
    69  	provider := util.GetProviderWithName(config, "UptimeRobot")
    70  	service.Setup(*provider)
    71  
    72  	statusPage := UpTimeStatusPage{Name: "status-page-test"}
    73  	ID, err := service.Add(statusPage)
    74  	if err != nil {
    75  		t.Error("Error: " + err.Error())
    76  	}
    77  	statusPage.ID = ID
    78  
    79  	monitorService := UpTimeMonitorService{}
    80  	provider = util.GetProviderWithName(config, "UptimeRobot")
    81  	monitorService.Setup(*provider)
    82  
    83  	monitor := models.Monitor{Name: "google-test", URL: "https://google.com"}
    84  	monitorService.Add(monitor)
    85  
    86  	monitorRes, err := monitorService.GetByName("google-test")
    87  	if err != nil {
    88  		t.Error("Error: " + err.Error())
    89  	}
    90  
    91  	service.AddMonitorToStatusPage(statusPage, *monitorRes)
    92  	if err != nil {
    93  		t.Error("Error: " + err.Error())
    94  	}
    95  
    96  	statusPageRes, err := service.Get(statusPage.ID)
    97  	if err != nil {
    98  		t.Error("Error: " + err.Error())
    99  	}
   100  	if !util.ContainsString(statusPageRes.Monitors, monitorRes.ID) {
   101  		t.Error("The status page does not contain the monitor, expected: " + monitorRes.ID + ", but was: " + strings.Join(statusPageRes.Monitors, "-"))
   102  	}
   103  
   104  	service.AddMonitorToStatusPage(statusPage, *monitorRes)
   105  	if err != nil {
   106  		t.Error("Error: " + err.Error())
   107  	}
   108  
   109  	statusPageRes, err = service.Get(statusPage.ID)
   110  	if err != nil {
   111  		t.Error("Error: " + err.Error())
   112  	}
   113  	if !util.ContainsString(statusPageRes.Monitors, monitorRes.ID) {
   114  		t.Error("The status page does not contain the monitor, expected: " + monitorRes.ID + ", but was: " + strings.Join(statusPageRes.Monitors, "-"))
   115  	}
   116  
   117  	// Tidy up
   118  	monitorService.Remove(*monitorRes)
   119  	service.Remove(statusPage)
   120  }
   121  
   122  func TestAddMultipleMonitorsToStatusPage(t *testing.T) {
   123  	config := config.GetControllerConfig()
   124  	service := UpTimeStatusPageService{}
   125  	provider := util.GetProviderWithName(config, "UptimeRobot")
   126  	service.Setup(*provider)
   127  
   128  	statusPage := UpTimeStatusPage{Name: "status-page-test"}
   129  	ID, err := service.Add(statusPage)
   130  	if err != nil {
   131  		t.Error("Error: " + err.Error())
   132  	}
   133  	statusPage.ID = ID
   134  
   135  	monitorService := UpTimeMonitorService{}
   136  	provider = util.GetProviderWithName(config, "UptimeRobot")
   137  	monitorService.Setup(*provider)
   138  	monitor1 := models.Monitor{Name: "google-test-1", URL: "https://google.com"}
   139  	monitorService.Add(monitor1)
   140  
   141  	monitor1Res, err := monitorService.GetByName("google-test-1")
   142  	if err != nil {
   143  		t.Error("Error: " + err.Error())
   144  	}
   145  
   146  	service.AddMonitorToStatusPage(statusPage, *monitor1Res)
   147  	if err != nil {
   148  		t.Error("Error: " + err.Error())
   149  	}
   150  
   151  	monitor2 := models.Monitor{Name: "google-test-2", URL: "https://google.co.uk"}
   152  	monitorService.Add(monitor2)
   153  
   154  	monitor2Res, err := monitorService.GetByName("google-test-2")
   155  	if err != nil {
   156  		t.Error("Error: " + err.Error())
   157  	}
   158  
   159  	service.AddMonitorToStatusPage(statusPage, *monitor2Res)
   160  	if err != nil {
   161  		t.Error("Error: " + err.Error())
   162  	}
   163  
   164  	statusPageRes, err := service.Get(statusPage.ID)
   165  	if err != nil {
   166  		t.Error("Error: " + err.Error())
   167  	}
   168  	if !util.ContainsString(statusPageRes.Monitors, monitor1Res.ID) {
   169  		t.Error("The status page does not contain the first monitor, expected: " + monitor1Res.ID + ", but was: " + strings.Join(statusPageRes.Monitors, "-"))
   170  	}
   171  	if !util.ContainsString(statusPageRes.Monitors, monitor2Res.ID) {
   172  		t.Error("The status page does not contain the second monitor, expected: " + monitor2Res.ID + ", but was: " + strings.Join(statusPageRes.Monitors, "-"))
   173  	}
   174  
   175  	// Tidy up
   176  	monitorService.Remove(*monitor1Res)
   177  	monitorService.Remove(*monitor2Res)
   178  	service.Remove(statusPage)
   179  }
   180  
   181  func TestGetStatusPagesForMonitor(t *testing.T) {
   182  	config := config.GetControllerConfig()
   183  	service := UpTimeStatusPageService{}
   184  	provider := util.GetProviderWithName(config, "UptimeRobot")
   185  	service.Setup(*provider)
   186  
   187  	statusPage1 := UpTimeStatusPage{Name: "status-page-test-1"}
   188  	ID1, err := service.Add(statusPage1)
   189  	if err != nil {
   190  		t.Error("Error: " + err.Error())
   191  	}
   192  	statusPage1.ID = ID1
   193  
   194  	statusPage2 := UpTimeStatusPage{Name: "status-page-test-2"}
   195  	ID2, err := service.Add(statusPage2)
   196  	if err != nil {
   197  		t.Error("Error: " + err.Error())
   198  	}
   199  	statusPage2.ID = ID2
   200  
   201  	statusPage3 := UpTimeStatusPage{Name: "status-page-test-3"}
   202  	ID3, err := service.Add(statusPage3)
   203  	if err != nil {
   204  		t.Error("Error: " + err.Error())
   205  	}
   206  	statusPage3.ID = ID3
   207  
   208  	monitorService := UpTimeMonitorService{}
   209  	provider = util.GetProviderWithName(config, "UptimeRobot")
   210  	monitorService.Setup(*provider)
   211  	monitor := models.Monitor{Name: "google-test", URL: "https://google.com"}
   212  	monitorService.Add(monitor)
   213  
   214  	monitorRes, err := monitorService.GetByName("google-test")
   215  	if err != nil {
   216  		t.Error("Error: " + err.Error())
   217  	}
   218  
   219  	service.AddMonitorToStatusPage(statusPage1, *monitorRes)
   220  	if err != nil {
   221  		t.Error("Error: " + err.Error())
   222  	}
   223  
   224  	service.AddMonitorToStatusPage(statusPage2, *monitorRes)
   225  	if err != nil {
   226  		t.Error("Error: " + err.Error())
   227  	}
   228  
   229  	statusPageIds, err := service.GetStatusPagesForMonitor(monitorRes.ID)
   230  	if err != nil {
   231  		t.Error("Error: " + err.Error())
   232  	}
   233  	if !util.ContainsString(statusPageIds, statusPage1.ID) {
   234  		t.Error("The first status page does not contain the monitor, expected: " + statusPage1.ID + ", but was: " + strings.Join(statusPageIds, "-"))
   235  	}
   236  	if !util.ContainsString(statusPageIds, statusPage2.ID) {
   237  		t.Error("The second status page does not contain the monitor, expected: " + statusPage2.ID + ", but was: " + strings.Join(statusPageIds, "-"))
   238  	}
   239  
   240  	if util.ContainsString(statusPageIds, statusPage3.ID) {
   241  		t.Error("The third status page should not contain the monitor, but was: " + strings.Join(statusPageIds, "-"))
   242  	}
   243  
   244  	// Tidy up
   245  	monitorService.Remove(*monitorRes)
   246  	service.Remove(statusPage1)
   247  	service.Remove(statusPage2)
   248  	service.Remove(statusPage3)
   249  }
   250  
   251  func TestRemoveMonitorFromStatusPage(t *testing.T) {
   252  	config := config.GetControllerConfig()
   253  	service := UpTimeStatusPageService{}
   254  	provider := util.GetProviderWithName(config, "UptimeRobot")
   255  	service.Setup(*provider)
   256  
   257  	statusPage := UpTimeStatusPage{Name: "status-page-test"}
   258  	ID, err := service.Add(statusPage)
   259  	if err != nil {
   260  		t.Error("Error: " + err.Error())
   261  	}
   262  	statusPage.ID = ID
   263  
   264  	monitorService := UpTimeMonitorService{}
   265  	provider = util.GetProviderWithName(config, "UptimeRobot")
   266  	monitorService.Setup(*provider)
   267  	monitor := models.Monitor{Name: "google-test", URL: "https://google.com"}
   268  	monitorService.Add(monitor)
   269  
   270  	monitorRes, err := monitorService.GetByName("google-test")
   271  	if err != nil {
   272  		t.Error("Error: " + err.Error())
   273  	}
   274  
   275  	_, err = service.AddMonitorToStatusPage(statusPage, *monitorRes)
   276  	if err != nil {
   277  		t.Error("Error: " + err.Error())
   278  	}
   279  
   280  	statusPageRes, err := service.Get(statusPage.ID)
   281  	if err != nil {
   282  		t.Error("Error: " + err.Error())
   283  	}
   284  	if !util.ContainsString(statusPageRes.Monitors, monitorRes.ID) {
   285  		t.Error("The status page does not contain the monitor, expected: " + monitorRes.ID + ", but was: " + strings.Join(statusPageRes.Monitors, "-"))
   286  	}
   287  
   288  	_, err = service.RemoveMonitorFromStatusPage(statusPage, *monitorRes)
   289  	if err != nil {
   290  		t.Error("Error: " + err.Error())
   291  	}
   292  
   293  	statusPageRes, err = service.Get(statusPage.ID)
   294  	if err != nil {
   295  		t.Error("Error: " + err.Error())
   296  	}
   297  	if util.ContainsString(statusPageRes.Monitors, monitorRes.ID) {
   298  		t.Error("The status page still contains the monitor, but shouldn't, monitors: " + strings.Join(statusPageRes.Monitors, "-"))
   299  	}
   300  
   301  	// Tidy up
   302  	monitorService.Remove(*monitorRes)
   303  	service.Remove(statusPage)
   304  }