...

Source file src/edge-infra.dev/pkg/edge/api/services/log_classifcation_service_test.go

Documentation: edge-infra.dev/pkg/edge/api/services

     1  package services
     2  
     3  /*
     4    TODO: TO BE DEPRECATED IN 0.25 @RS185722
     5  */
     6  import (
     7  	"context"
     8  	"testing"
     9  
    10  	"github.com/DATA-DOG/go-sqlmock"
    11  	"github.com/stretchr/testify/assert"
    12  	"github.com/stretchr/testify/require"
    13  
    14  	"edge-infra.dev/pkg/edge/api/graph/model"
    15  	sqlquery "edge-infra.dev/pkg/edge/api/sql"
    16  )
    17  
    18  var (
    19  	testClassificationBannerEdgeID = "9c478a9c-b536-4ea9-9f1f-144c87094f6b"
    20  	classificationEdgeIDs          = []string{"de4f477e-1f68-40f7-9f1f-f9c9dc08c250", "9c478a9c-b536-4ea9-94c7-144c87094f6b", "c93fd8fd-531f-42d3-8c96-e827fdbbe0ea", "56d36657-4107-4da5-9787-72b1c07d18a5", "a5aea7e7-2bd6-4f86-862e-6c540feaaae4"}
    21  	classificationDescriptions     = []string{"test-description-1", "test-description-2", "test-description-3", "test-description-4", "test-description-5", "test-description-6", "test-description-7", "test-description-8", "test-description-9"}
    22  	classificationPods             = []string{"test-pod1", "test-pod2", "test-pod3", "test-pod4", "test-pod5", "test-pod6", "test-pod7", "test-pod8", "test-pod9"}
    23  	classificationContainers       = []string{"test-container1", "test-container2", "test-container3", "test-container4", "test-container5", "test-container6", "test-container7", "test-container8", "test-container9"}
    24  	classificationTypes            = []string{"test-type1", "test-type2", "test-type3", "test-type4", "test-type5", "test-type6", "test-type7", "test-type8", "test-type9"}
    25  	classificationClasses          = []string{"audit", "security"}
    26  	classificationPatterns         = []string{"test-pattern1", "test-pattern2", "test-pattern3", "test-pattern4", "test-pattern5", "test-pattern6", "test-pattern7", "test-pattern8", "test-pattern9"}
    27  
    28  	testClassifications = &model.LogClassification{
    29  		Description: classificationDescriptions[0],
    30  		Pod:         classificationPods[0],
    31  		Container:   classificationContainers[0],
    32  		Type:        classificationTypes[0],
    33  		Class:       classificationClasses[0],
    34  		Pattern:     classificationPatterns[0],
    35  	}
    36  
    37  	testClassifications2 = &model.LogClassification{
    38  		Description: classificationDescriptions[1],
    39  		Pod:         classificationPods[1],
    40  		Container:   classificationContainers[1],
    41  		Type:        classificationTypes[1],
    42  		Class:       classificationClasses[1],
    43  		Pattern:     classificationPatterns[1],
    44  	}
    45  
    46  	multiClassifications = []*model.LogClassification{
    47  		{
    48  			BannerEdgeID:            testClassificationBannerEdgeID,
    49  			LogClassificationEdgeID: classificationEdgeIDs[2],
    50  			Description:             classificationDescriptions[2],
    51  			Pod:                     classificationPods[2],
    52  			Container:               classificationContainers[2],
    53  			Type:                    classificationTypes[2],
    54  			Class:                   classificationClasses[0],
    55  			Pattern:                 classificationPatterns[2],
    56  		},
    57  		{
    58  			BannerEdgeID:            testClassificationBannerEdgeID,
    59  			LogClassificationEdgeID: classificationEdgeIDs[3],
    60  			Description:             classificationDescriptions[3],
    61  			Pod:                     classificationPods[3],
    62  			Container:               classificationContainers[3],
    63  			Type:                    classificationTypes[3],
    64  			Class:                   classificationClasses[0],
    65  			Pattern:                 classificationPatterns[3],
    66  		},
    67  		{
    68  			BannerEdgeID:            testClassificationBannerEdgeID,
    69  			LogClassificationEdgeID: classificationEdgeIDs[4],
    70  			Description:             classificationDescriptions[4],
    71  			Pod:                     classificationPods[4],
    72  			Container:               classificationContainers[4],
    73  			Type:                    classificationTypes[4],
    74  			Class:                   classificationClasses[1],
    75  			Pattern:                 classificationPatterns[4],
    76  		},
    77  	}
    78  
    79  	logClassificationRows = sqlmock.NewRows([]string{"banner_edge_id", "classification_edge_id", "classification_description", "pod", "container", "log_type", "log_class", "pattern"})
    80  )
    81  
    82  func TestGetClassification(t *testing.T) {
    83  	db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
    84  	require.NoError(t, err)
    85  	defer db.Close()
    86  
    87  	mock.ExpectQuery(sqlquery.GetLogClassification).
    88  		WithArgs(testClassificationBannerEdgeID, classificationEdgeIDs[0]).
    89  		WillReturnRows(logClassificationRows.
    90  			AddRow(testClassificationBannerEdgeID, classificationEdgeIDs[0], classificationDescriptions[0], classificationPods[0], classificationContainers[0], classificationTypes[0], classificationClasses[0], classificationPatterns[0]))
    91  
    92  	service := NewLogClassificationService(db)
    93  	logClassification, err := service.GetLogClassification(context.Background(), testClassificationBannerEdgeID, classificationEdgeIDs[0])
    94  
    95  	assert.NoError(t, err)
    96  	assert.NotEmpty(t, logClassification)
    97  
    98  	assert.Equal(t, testClassificationBannerEdgeID, logClassification.BannerEdgeID)
    99  	assert.Equal(t, classificationDescriptions[0], logClassification.Description)
   100  	assert.Equal(t, classificationPods[0], logClassification.Pod)
   101  	assert.Equal(t, classificationContainers[0], logClassification.Container)
   102  	assert.Equal(t, classificationTypes[0], logClassification.Type)
   103  	assert.Equal(t, classificationClasses[0], logClassification.Class)
   104  	assert.Equal(t, classificationPatterns[0], logClassification.Pattern)
   105  }
   106  
   107  func TestDeleteClassification(t *testing.T) {
   108  	db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
   109  	require.NoError(t, err)
   110  	defer db.Close()
   111  
   112  	mock.ExpectExec(sqlquery.DeleteLogClassification).WithArgs(testClassificationBannerEdgeID, classificationEdgeIDs[0]).
   113  		WillReturnResult(sqlmock.NewResult(1, 1))
   114  
   115  	service := NewLogClassificationService(db)
   116  
   117  	if deleted, err := service.DeleteLogClassification(context.Background(), testClassificationBannerEdgeID, classificationEdgeIDs[0]); !deleted && err != nil {
   118  		t.Errorf("error was not expected while deleting classification: %s", err)
   119  	}
   120  }
   121  
   122  func TestCreateClassification(t *testing.T) {
   123  	db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
   124  	require.NoError(t, err)
   125  	defer db.Close()
   126  
   127  	mock.ExpectBegin()
   128  	mock.ExpectExec(sqlquery.CreateLogClassification).
   129  		WithArgs(testClassificationBannerEdgeID, classificationEdgeIDs[0], testClassifications.Description, testClassifications.Pod, testClassifications.Container, testClassifications.Type, testClassifications.Class, "").
   130  		WillReturnResult(sqlmock.NewResult(1, 1))
   131  
   132  	mock.ExpectCommit()
   133  
   134  	service := NewLogClassificationService(db)
   135  
   136  	createClassificationInput := model.CreateClassificationInput{
   137  		Description: classificationDescriptions[0],
   138  		Pod:         classificationPods[0],
   139  		Container:   classificationContainers[0],
   140  		Type:        classificationTypes[0],
   141  		Class:       model.LogClassSelectionAudit,
   142  		Pattern:     "",
   143  	}
   144  
   145  	result, err := service.CreateLogClassification(context.Background(), testClassificationBannerEdgeID, classificationEdgeIDs[0], createClassificationInput)
   146  
   147  	assert.NoError(t, err)
   148  	assert.Equal(t, testClassificationBannerEdgeID, result.BannerEdgeID)
   149  	assert.Equal(t, classificationEdgeIDs[0], result.LogClassificationEdgeID)
   150  	assert.Equal(t, classificationDescriptions[0], result.Description)
   151  	assert.Equal(t, classificationPods[0], result.Pod)
   152  	assert.Equal(t, classificationContainers[0], result.Container)
   153  	assert.Equal(t, classificationTypes[0], result.Type)
   154  	assert.Equal(t, classificationClasses[0], result.Class)
   155  	assert.Equal(t, "", result.Pattern)
   156  }
   157  
   158  func TestUpdateClassification(t *testing.T) {
   159  	db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
   160  	require.NoError(t, err)
   161  	defer db.Close()
   162  
   163  	mock.ExpectQuery(sqlquery.GetLogClassification).
   164  		WithArgs(testClassificationBannerEdgeID, classificationEdgeIDs[1]).
   165  		WillReturnRows(logClassificationRows.
   166  			AddRow(testClassificationBannerEdgeID, classificationEdgeIDs[1], classificationDescriptions[0], classificationPods[0], classificationContainers[0], classificationTypes[0], classificationClasses[0], classificationPatterns[0]))
   167  
   168  	mock.ExpectBegin()
   169  	mock.ExpectExec(sqlquery.UpdateLogClassification).
   170  		WithArgs(testClassificationBannerEdgeID, classificationEdgeIDs[1], testClassifications2.Description, testClassifications2.Pod, testClassifications2.Container, testClassifications2.Type, testClassifications2.Class, testClassifications2.Pattern).
   171  		WillReturnResult(sqlmock.NewResult(1, 1))
   172  
   173  	mock.ExpectCommit()
   174  
   175  	service := NewLogClassificationService(db)
   176  
   177  	testClass := model.LogClassSelectionSecurity
   178  	updateClassificationInput := &model.UpdateClassificationInput{
   179  		Description: &classificationDescriptions[1],
   180  		Pod:         &classificationPods[1],
   181  		Container:   &classificationContainers[1],
   182  		Type:        &classificationTypes[1],
   183  		Class:       &testClass,
   184  		Pattern:     &classificationPatterns[1],
   185  	}
   186  
   187  	result, err := service.UpdateLogClassification(context.Background(), testClassificationBannerEdgeID, classificationEdgeIDs[1], updateClassificationInput)
   188  
   189  	assert.NoError(t, err)
   190  	assert.Equal(t, classificationEdgeIDs[1], result.LogClassificationEdgeID)
   191  	assert.Equal(t, classificationDescriptions[1], result.Description)
   192  	assert.Equal(t, classificationPods[1], result.Pod)
   193  	assert.Equal(t, classificationContainers[1], result.Container)
   194  	assert.Equal(t, classificationTypes[1], result.Type)
   195  	assert.Equal(t, classificationClasses[1], result.Class)
   196  	assert.Equal(t, classificationPatterns[1], result.Pattern)
   197  
   198  	if err := mock.ExpectationsWereMet(); err != nil {
   199  		t.Errorf("there were unfulfilled expectations: %s", err)
   200  	}
   201  }
   202  
   203  func TestGetClassificationByBanner(t *testing.T) {
   204  	db, mock, err := sqlmock.New(sqlmock.QueryMatcherOption(sqlmock.QueryMatcherEqual))
   205  	require.NoError(t, err)
   206  	defer db.Close()
   207  
   208  	mock.ExpectQuery(sqlquery.GetLogClassificationsByBanner).
   209  		WithArgs(testClassificationBannerEdgeID).
   210  		WillReturnRows(logClassificationRows.
   211  			AddRow(testClassificationBannerEdgeID, classificationEdgeIDs[2], classificationDescriptions[2], classificationPods[2], classificationContainers[2], classificationTypes[2], classificationClasses[0], classificationPatterns[2]).
   212  			AddRow(testClassificationBannerEdgeID, classificationEdgeIDs[3], classificationDescriptions[3], classificationPods[3], classificationContainers[3], classificationTypes[3], classificationClasses[0], classificationPatterns[3]).
   213  			AddRow(testClassificationBannerEdgeID, classificationEdgeIDs[4], classificationDescriptions[4], classificationPods[4], classificationContainers[4], classificationTypes[4], classificationClasses[1], classificationPatterns[4]))
   214  
   215  	service := NewLogClassificationService(db)
   216  	logClassifications, err := service.GetLogClassificationsByBanner(context.Background(), testClassificationBannerEdgeID)
   217  
   218  	assert.NoError(t, err)
   219  	assert.NotEmpty(t, logClassifications)
   220  
   221  	for index, classification := range logClassifications {
   222  		assert.Equal(t, testClassificationBannerEdgeID, classification.BannerEdgeID)
   223  		assert.Equal(t, multiClassifications[index].LogClassificationEdgeID, classification.LogClassificationEdgeID)
   224  		assert.Equal(t, multiClassifications[index].Description, classification.Description)
   225  		assert.Equal(t, multiClassifications[index].Pod, classification.Pod)
   226  		assert.Equal(t, multiClassifications[index].Container, classification.Container)
   227  		assert.Equal(t, multiClassifications[index].Type, classification.Type)
   228  		assert.Equal(t, multiClassifications[index].Class, classification.Class)
   229  		assert.Equal(t, multiClassifications[index].Pattern, classification.Pattern)
   230  	}
   231  }
   232  

View as plain text