package workloadsiemcfg import ( "encoding/json" "testing" assertapi "github.com/stretchr/testify/assert" corev1 "k8s.io/api/core/v1" v1 "k8s.io/apimachinery/pkg/apis/meta/v1" ) const ( class1 = `"log_class":"audit"` class2 = `"log_class":"security"` alpineContainer = "alpine-fim" testHelmEdgeID1 = `"helm_edge_ID":"4acb3c0e-89a2-4f5e-bc36-559b7e874b40"` couchdbContainer = "couchdb" testHelmEdgeID2 = `"helm_edge_ID":"4acb3c0e-89a2-4f5e-bc36-559b7e874b41"` authserverContainer = "authserver" testHelmEdgeID3 = `"helm_edge_ID":"4acb3c0e-89a2-4f5e-bc36-559b7e874b42"` ) func TestFromConfigMap(t *testing.T) { assert := assertapi.New(t) cfg := getSiemConfigMap() sc := FromConfigMap(cfg) assert.Contains(sc.Configs, class1) assert.Contains(sc.Configs, alpineContainer) assert.Contains(sc.Configs, testHelmEdgeID1) assert.Contains(sc.Configs, class2) assert.Contains(sc.Configs, couchdbContainer) assert.Contains(sc.Configs, testHelmEdgeID2) assert.Contains(sc.Configs, class2) assert.Contains(sc.Configs, authserverContainer) assert.Contains(sc.Configs, testHelmEdgeID3) } func TestToConfigMap(t *testing.T) { assert := assertapi.New(t) customSiem := getSiemConfig() cfg := customSiem.ToConfigMap() assert.Contains(cfg.Data[WorkloadSiemConfigDataFieldName], class1) assert.Contains(cfg.Data[WorkloadSiemConfigDataFieldName], alpineContainer) assert.Contains(cfg.Data[WorkloadSiemConfigDataFieldName], testHelmEdgeID1) assert.Contains(cfg.Data[WorkloadSiemConfigDataFieldName], class2) assert.Contains(cfg.Data[WorkloadSiemConfigDataFieldName], couchdbContainer) assert.Contains(cfg.Data[WorkloadSiemConfigDataFieldName], testHelmEdgeID2) assert.Contains(cfg.Data[WorkloadSiemConfigDataFieldName], class2) assert.Contains(cfg.Data[WorkloadSiemConfigDataFieldName], authserverContainer) assert.Contains(cfg.Data[WorkloadSiemConfigDataFieldName], testHelmEdgeID3) } func TestNewValidSiemConfigConfigMap(t *testing.T) { assert := assertapi.New(t) cfg := getSiemConfigMap() siemConfig, err := New(cfg) assert.NoError(err) assert.Contains(siemConfig.Configs, class1) assert.Contains(siemConfig.Configs, alpineContainer) assert.Contains(siemConfig.Configs, testHelmEdgeID1) assert.Contains(siemConfig.Configs, class2) assert.Contains(siemConfig.Configs, couchdbContainer) assert.Contains(siemConfig.Configs, testHelmEdgeID2) assert.Contains(siemConfig.Configs, class2) assert.Contains(siemConfig.Configs, authserverContainer) assert.Contains(siemConfig.Configs, testHelmEdgeID3) } func TestNewInvalidCustomSiemConfigMap(t *testing.T) { assert := assertapi.New(t) cfg := getSiemConfigMap() delete(cfg.Data, WorkloadSiemConfigDataFieldName) sc, err := New(cfg) assert.Error(err) assert.Nil(sc) } func TestIsCustomSiemConfigMap(t *testing.T) { assert := assertapi.New(t) expected := getSiemConfigMap() IsCustomSiemConfigMap := IsSiemConfigMap(expected.ObjectMeta.Name, expected.ObjectMeta.Namespace) assert.True(IsCustomSiemConfigMap) } func TestFieldsRequired(t *testing.T) { assert := assertapi.New(t) cfg := &corev1.ConfigMap{} err := ValidateConfigMap(cfg) assert.Error(err) allFields := "workload-siem configmap invalid, value(s) not provided: " + WorkloadSiemConfigDataFieldName assert.Equal(err.Error(), allFields) } // TEST HELPER FUNCTIONS TO MOCK FAKE DATA func getSiemConfig() *WorkloadSiemConfigData { // fake model data classifications := []SIEMClassification{ { HelmEdgeID: "4acb3c0e-89a2-4f5e-bc36-559b7e874b40", Pod: "samhaim", Container: "alpine-fim", LogType: "alpine-fim", LogClass: "audit", Severity: "INFO", Pattern: "xyz", }, { HelmEdgeID: "4acb3c0e-89a2-4f5e-bc36-559b7e874b41", Pod: "data-sync-couchdb", Container: "couchdb", LogType: "couchdb", LogClass: "security", Severity: "INFO", Pattern: "123", }, { HelmEdgeID: "4acb3c0e-89a2-4f5e-bc36-559b7e874b42", Pod: "authserver", Container: "authserver", LogType: "authserver", LogClass: "security", Severity: "WARNING", Pattern: "", }, } marshaledClassifications, _ := json.Marshal(classifications) // defer the closing of our jsonFile so that we can parse it later on return &WorkloadSiemConfigData{ Configs: string(marshaledClassifications), } } func getSiemConfigMap() *corev1.ConfigMap { // sc is shorthand SiemConfig sc := getSiemConfig() return &corev1.ConfigMap{ TypeMeta: v1.TypeMeta{ Kind: "ConfigMap", APIVersion: v1.SchemeGroupVersion.String(), }, ObjectMeta: v1.ObjectMeta{ Name: WorkloadSiemConfigMapName, Namespace: WorkloadSiemConfigMapNS, }, Data: map[string]string{ WorkloadSiemConfigDataFieldName: sc.Configs, }, } }