...

Source file src/edge-infra.dev/cmd/edge/monitoring/alertman/cli/cli_test.go

Documentation: edge-infra.dev/cmd/edge/monitoring/alertman/cli

     1  package cli
     2  
     3  import (
     4  	"context"
     5  	"fmt"
     6  	"log"
     7  	"os"
     8  	"strings"
     9  	"testing"
    10  	"time"
    11  )
    12  
    13  // Specficy project against which to run tests. Ex: 'ret-edge-3u27t1ttkk4ngtkmk842b'
    14  const gcpProjectID string = ""
    15  const folderPath string = "testdata/rundata"
    16  const exeData string = "testdata/exedata"
    17  
    18  var dirPath string
    19  
    20  // Runs setupSuite when the test starts to setup test data
    21  func setupSuite() func(t *testing.T) { //nolint
    22  	log.Println("setup suite")
    23  	projectID = gcpProjectID
    24  
    25  	// delete all the policies in projectID before starting the tests
    26  	deleteArgs.labels = "policy-owner:observability"
    27  	if deleteErr := runDelete(context.Background(), []string{}); deleteErr != nil {
    28  		fmt.Printf("Test setup error Delete %s \n", deleteErr)
    29  	}
    30  	// create AlertPolicies to support the tests
    31  	createArgs.templatePath = exeData
    32  	if CreateErr := runCreate(context.Background(), []string{}); CreateErr != nil {
    33  		fmt.Printf("Test setup error Create %s \n", CreateErr)
    34  	}
    35  	// add a 1:00 min pause before test execution starts
    36  	duration := time.Duration(60) * time.Second
    37  	time.Sleep(duration)
    38  
    39  	// Return a function to teardown the test
    40  	return func(_ *testing.T) {
    41  		log.Println("teardown suite")
    42  		// Open the directory and read all its files.
    43  		dirRead, _ := os.Open(folderPath)
    44  		dirFiles, _ := dirRead.Readdir(0)
    45  
    46  		// Loop over the directory's files.
    47  		for index := range dirFiles {
    48  			fileHere := dirFiles[index]
    49  
    50  			// Get name of file and its full path.
    51  			nameHere := fileHere.Name()
    52  			fullPath := folderPath + "/" + nameHere
    53  
    54  			// Remove the file.
    55  			if !strings.Contains(nameHere, "UnitTestPolicy") {
    56  				os.Remove(fullPath)
    57  				fmt.Println("Removed file:", fullPath)
    58  			}
    59  		}
    60  	}
    61  }
    62  
    63  func TestRunner(t *testing.T) {
    64  	// Comment to run the tests locally only. Uncomment before pushing changes.
    65  	t.SkipNow()
    66  
    67  	// Find and set temporary directory for the test data downloaded at runtime
    68  	dirPath = os.TempDir()
    69  	log.Printf("the temp dir path is %s\n", dirPath)
    70  
    71  	teardownSuite := setupSuite()
    72  	defer teardownSuite(t)
    73  
    74  	testCases := []struct {
    75  		name    string
    76  		args    []string
    77  		cmd     map[string]string
    78  		cmdbool map[string]bool
    79  		wantErr bool
    80  	}{
    81  		// TODO: Add test cases.
    82  		{
    83  			name:    "Create_AlertPolicy1",
    84  			args:    []string{"Create", "--project", gcpProjectID},
    85  			cmd:     map[string]string{"createArgs.templatePath": folderPath + "/UnitTestPolicy1.json"},
    86  			wantErr: false,
    87  		},
    88  		{
    89  			name:    "Create_AlertPolicy2",
    90  			args:    []string{"Create", "--project", gcpProjectID},
    91  			cmd:     map[string]string{"createArgs.templatePath": folderPath + "/UnitTestPolicy2.json"},
    92  			wantErr: false,
    93  		},
    94  		{
    95  			name:    "Create_AlertPolicy3",
    96  			args:    []string{"Create", "--project", gcpProjectID},
    97  			cmd:     map[string]string{"createArgs.templatePath": folderPath + "/UnitTestPolicy3.json"},
    98  			wantErr: false,
    99  		},
   100  		{
   101  			name:    "Create_AlertPolicyWrongPath",
   102  			args:    []string{"Create", "--project", gcpProjectID},
   103  			cmd:     map[string]string{"createArgs.templatePath": folderPath + "/UnitTestPolicy0.json"},
   104  			wantErr: false,
   105  		},
   106  		{
   107  			name:    "Get_SaveSinglePolicyAllFields",
   108  			args:    []string{"get", "--project", gcpProjectID},
   109  			cmd:     map[string]string{"getArgs.name": "Test Channels", "getArgs.templatePath": dirPath},
   110  			cmdbool: map[string]bool{"getArgs.overwrite": true, "getArgs.templateFormat": true},
   111  			wantErr: false,
   112  		},
   113  		{
   114  			name:    "Get_SaveSinglePolicyTemplateFormat",
   115  			args:    []string{"get", "--project", gcpProjectID},
   116  			cmd:     map[string]string{"getArgs.name": "Test Channels", "getArgs.templatePath": dirPath},
   117  			cmdbool: map[string]bool{"getArgs.overwrite": true},
   118  			wantErr: false,
   119  		},
   120  		{
   121  			name:    "Get_SaveAllPolicies",
   122  			args:    []string{"get", "--project", gcpProjectID},
   123  			cmd:     map[string]string{"getArgs.templatePath": dirPath},
   124  			cmdbool: map[string]bool{"getArgs.overwrite": true},
   125  			wantErr: false,
   126  		},
   127  		{
   128  			name:    "Get_SaveAllPoliciesWrongPath",
   129  			args:    []string{"get", "--project", gcpProjectID},
   130  			cmd:     map[string]string{"getArgs.templatePath": dirPath + "/wrongpath"},
   131  			cmdbool: map[string]bool{"getArgs.overwrite": true},
   132  			wantErr: false,
   133  		},
   134  		{
   135  			name:    "Update_AddSingleLabel",
   136  			args:    []string{"update", "--project", gcpProjectID},
   137  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.addUserLabels": "testlabel1:multilabel1"},
   138  			wantErr: false,
   139  		},
   140  		{
   141  			name:    "Update_AddMultiLabelsWithCorrectDelimiter",
   142  			args:    []string{"update", "--project", gcpProjectID},
   143  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.addUserLabels": " testlabel2 : multilabel2  ,  testlabel3 : multilabel3 testlabel4 : multilabel4  , testlabel5 : multilabel5 testlabel6 : multilabel6 testlabel7 : multilabel7  testlabel8 : multilabel8"},
   144  			wantErr: false,
   145  		},
   146  		{
   147  			name:    "Update_ChangeExistingLabelValue",
   148  			args:    []string{"update", "--project", gcpProjectID},
   149  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.addUserLabels": "testlabel6:updatedmultilabel6"},
   150  			wantErr: false,
   151  		},
   152  		{
   153  			name:    "Update_DeleteSingleLabel",
   154  			args:    []string{"update", "--project", gcpProjectID},
   155  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel6:updatedmultilabel6"},
   156  			wantErr: false,
   157  		},
   158  		{
   159  			name:    "Update_DeleteSingleLabelByKey",
   160  			args:    []string{"update", "--project", gcpProjectID},
   161  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel5:"},
   162  			wantErr: false,
   163  		},
   164  		{
   165  			name:    "Update_DeleteMultiLabelByKey",
   166  			args:    []string{"update", "--project", gcpProjectID},
   167  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel4: , testlabel3: , testlabel2:,testlabel1: "},
   168  			wantErr: false,
   169  		},
   170  		{
   171  			name:    "Update_BulkAddSingleLabel",
   172  			args:    []string{"update", "--project", gcpProjectID},
   173  			cmd:     map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.addUserLabels": "bulk-update1: test1 "},
   174  			wantErr: false,
   175  		},
   176  		{
   177  			name:    "Update_BulkAddMultiLabels",
   178  			args:    []string{"update", "--project", gcpProjectID},
   179  			cmd:     map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.addUserLabels": "bulk-update2: test2 bulk-update3: test3, bulk-update4: test4 bulk-update5: test5 "},
   180  			wantErr: false,
   181  		},
   182  		{
   183  			name:    "Update_BulkDeleteSingleLabel",
   184  			args:    []string{"update", "--project", gcpProjectID},
   185  			cmd:     map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.delUserLabels": "bulk-update1: test1  "},
   186  			wantErr: false,
   187  		},
   188  		{
   189  			name:    "Update_BulkDeleteMultiLabels",
   190  			args:    []string{"update", "--project", gcpProjectID},
   191  			cmd:     map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.delUserLabels": "bulk-update2: test2 bulk-update3: test3"},
   192  			wantErr: false,
   193  		},
   194  		{
   195  			name:    "Update_BulkDeleteMultiLabelsByKey",
   196  			args:    []string{"update", "--project", gcpProjectID},
   197  			cmd:     map[string]string{"updateArgs.filter": "user_labels='unit-test'", "updateArgs.delUserLabels": "bulk-update4: , bulk-update5: "},
   198  			wantErr: false,
   199  		},
   200  		{
   201  			name:    "Update_DeleteMultiLabelsWithDelimiter",
   202  			args:    []string{"update", "--project", gcpProjectID},
   203  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel7 : multilabel7  testlabel8 : multilabel8 "},
   204  			wantErr: false,
   205  		},
   206  		{
   207  			name:    "Update_DeleteSingleMissingLabel",
   208  			args:    []string{"update", "--project", gcpProjectID},
   209  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": "testlabel6:multilabel6"},
   210  			wantErr: true,
   211  		},
   212  		{
   213  			name:    "Update_DeleteMultiMissingLabels",
   214  			args:    []string{"update", "--project", gcpProjectID},
   215  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.delUserLabels": " testlabel3 : multilabel3  ,  testlabel4 : multilabel4 testlabel5 : multilabel5  "},
   216  			wantErr: true,
   217  		},
   218  		{
   219  			name:    "Update_AddLabelsNonExistingPolicy",
   220  			args:    []string{"update", "--project", gcpProjectID},
   221  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy", "updateArgs.addUserLabels": " testlabel3 : multilabel3  ,  testlabel4 : multilabel4 testlabel5 : multilabel5  "},
   222  			wantErr: true,
   223  		},
   224  		{
   225  			name:    "Update_DeleteLabelsNonExistingPolicy",
   226  			args:    []string{"update", "--project", gcpProjectID},
   227  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy", "updateArgs.delUserLabels": " testlabel3 : multilabel3  ,  testlabel4 : multilabel4 testlabel5 : multilabel5  "},
   228  			wantErr: true,
   229  		},
   230  		{
   231  			name:    "Update_PolicyFromTemplate",
   232  			args:    []string{"update", "--project", gcpProjectID},
   233  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.templatePath": folderPath + "/UnitTestPolicyTemplate.json"},
   234  			wantErr: false,
   235  		},
   236  		{
   237  			name:    "Update_EnablePolicy",
   238  			args:    []string{"update", "--project", gcpProjectID},
   239  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy Template"},
   240  			cmdbool: map[string]bool{"updateArgs.enable": true},
   241  			wantErr: false,
   242  		},
   243  		{
   244  			name:    "Update_EnableActivePolicy",
   245  			args:    []string{"update", "--project", gcpProjectID},
   246  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy Template"},
   247  			cmdbool: map[string]bool{"updateArgs.enable": true},
   248  			wantErr: true,
   249  		},
   250  		{
   251  			name:    "Update_EnableNonExistingPolicy",
   252  			args:    []string{"update", "--project", gcpProjectID},
   253  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy"},
   254  			cmdbool: map[string]bool{"updateArgs.enable": true},
   255  			wantErr: true,
   256  		},
   257  		{
   258  			name:    "Update_DisablePolicy",
   259  			args:    []string{"update", "--project", gcpProjectID},
   260  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy Template"},
   261  			cmdbool: map[string]bool{"updateArgs.disable": true},
   262  			wantErr: false,
   263  		},
   264  		{
   265  			name:    "Update_DisableInactivePolicy",
   266  			args:    []string{"update", "--project", gcpProjectID},
   267  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy Template"},
   268  			cmdbool: map[string]bool{"updateArgs.disable": true},
   269  			wantErr: true,
   270  		},
   271  		{
   272  			name:    "Update_DisableNonExistingPolicy",
   273  			args:    []string{"update", "--project", gcpProjectID},
   274  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy"},
   275  			cmdbool: map[string]bool{"updateArgs.disable": true},
   276  			wantErr: true,
   277  		},
   278  		{
   279  			name:    "Update_BulkEnablePolicy",
   280  			args:    []string{"update", "--project", gcpProjectID},
   281  			cmd:     map[string]string{"updateArgs.filter": "user_labels=\"unit-test\""},
   282  			cmdbool: map[string]bool{"updateArgs.enable": true},
   283  			wantErr: false,
   284  		},
   285  		{
   286  			name:    "Update_BulkEnableActivePolicy",
   287  			args:    []string{"update", "--project", gcpProjectID},
   288  			cmd:     map[string]string{"updateArgs.filter": "user_labels='unit-test'"},
   289  			cmdbool: map[string]bool{"updateArgs.enable": true},
   290  			wantErr: true,
   291  		},
   292  		{
   293  			name:    "Update_RenamePolicy",
   294  			args:    []string{"update", "--project", gcpProjectID},
   295  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy Template", "updateArgs.rename": "Unit Test Policy 2"},
   296  			wantErr: false,
   297  		},
   298  		{
   299  			name:    "Update_RenameToExistingPolicy",
   300  			args:    []string{"update", "--project", gcpProjectID},
   301  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 2", "updateArgs.rename": "Unit Test Policy 3"},
   302  			wantErr: true,
   303  		},
   304  		{
   305  			name:    "Update_RenameToNonExistingPolicy",
   306  			args:    []string{"update", "--project", gcpProjectID},
   307  			cmd:     map[string]string{"updateArgs.name": "Unit Test Policy 4", "updateArgs.rename": "Unit Test Policy 3"},
   308  			wantErr: true,
   309  		},
   310  		{
   311  			name:    "Update_BulkDisablePolicy",
   312  			args:    []string{"update", "--project", gcpProjectID},
   313  			cmd:     map[string]string{"updateArgs.filter": "(user_labels='unit-test')"},
   314  			cmdbool: map[string]bool{"updateArgs.disable": true},
   315  			wantErr: false,
   316  		},
   317  		{
   318  			name:    "Update_BulkDisableActivePolicy",
   319  			args:    []string{"update", "--project", gcpProjectID},
   320  			cmd:     map[string]string{"updateArgs.filter": "(user_labels='unit-test')"},
   321  			cmdbool: map[string]bool{"updateArgs.disable": true},
   322  			wantErr: true,
   323  		},
   324  		{
   325  			name:    "Sync_Verify",
   326  			args:    []string{"sync", "--project", gcpProjectID},
   327  			cmd:     map[string]string{"syncArgs.templatePath": folderPath},
   328  			wantErr: false,
   329  		},
   330  		{
   331  			name:    "Sync_Push",
   332  			args:    []string{"sync", "--project", gcpProjectID},
   333  			cmd:     map[string]string{"syncArgs.templatePath": folderPath},
   334  			cmdbool: map[string]bool{"syncArgs.push": true},
   335  			wantErr: false,
   336  		},
   337  		{
   338  			name:    "Delete_AlertPolicyByLabel",
   339  			args:    []string{"delete", "--project", gcpProjectID},
   340  			cmd:     map[string]string{"deleteArgs.labels": "unit-test:test"},
   341  			cmdbool: map[string]bool{"deleteArgs.deleteAll": false},
   342  			wantErr: false,
   343  		},
   344  		{
   345  			name:    "Delete_NonExistingAlertPolicy",
   346  			args:    []string{"delete", "--project", gcpProjectID},
   347  			cmd:     map[string]string{"deleteArgs.name": "Unit Test Policy"},
   348  			cmdbool: map[string]bool{"deleteArgs.deleteAll": false},
   349  			wantErr: true,
   350  		},
   351  	}
   352  
   353  	for _, tc := range testCases {
   354  		t.Run(tc.name, func(t *testing.T) {
   355  			createArgs.templatePath = tc.cmd["createArgs.templatePath"]
   356  			getArgs.name = tc.cmd["getArgs.name"]
   357  			getArgs.templatePath = tc.cmd["getArgs.templatePath"]
   358  			getArgs.overwrite = tc.cmdbool["getArgs.overwrite"]
   359  			getArgs.templateFormat = tc.cmdbool["getArgs.templateFormat"]
   360  			updateArgs.name = tc.cmd["updateArgs.name"]
   361  			updateArgs.addUserLabels = tc.cmd["updateArgs.addUserLabels"]
   362  			updateArgs.delUserLabels = tc.cmd["updateArgs.delUserLabels"]
   363  			updateArgs.enable = tc.cmdbool["updateArgs.enable"]
   364  			updateArgs.disable = tc.cmdbool["updateArgs.disable"]
   365  			updateArgs.rename = tc.cmd["updateArgs.rename"]
   366  			updateArgs.templatePath = tc.cmd["updateArgs.templatePath"]
   367  			updateArgs.filter = tc.cmd["updateArgs.filter"]
   368  			deleteArgs.name = tc.cmd["deleteArgs.name"]
   369  			deleteArgs.labels = tc.cmd["deleteArgs.labels"]
   370  			deleteArgs.deleteAll = tc.cmdbool["deleteArgs.deleteAll"]
   371  			syncArgs.push = tc.cmdbool["syncArgs.push"]
   372  			syncArgs.templatePath = tc.cmd["syncArgs.templatePath"]
   373  
   374  			if err := Run(tc.args); (err != nil) != tc.wantErr {
   375  				t.Errorf("Run() error = %v, wantErr %v", err, tc.wantErr)
   376  			}
   377  		})
   378  	}
   379  }
   380  

View as plain text