blob: 427e837c0e9532c407c4131eb5e877e57a85951f [file] [log] [blame]
/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { async, TestBed, ComponentFixture } from '@angular/core/testing';
import { SensorRawJsonComponent } from './sensor-raw-json.component';
import { SharedModule } from '../../shared/shared.module';
import { SimpleChanges, SimpleChange } from '@angular/core';
import { SensorParserConfig } from '../../model/sensor-parser-config';
import {
SensorEnrichmentConfig,
EnrichmentConfig,
ThreatIntelConfig
} from '../../model/sensor-enrichment-config';
import { SensorRawJsonModule } from './sensor-raw-json.module';
import { IndexingConfigurations } from '../../model/sensor-indexing-config';
describe('Component: SensorRawJsonComponent', () => {
let fixture: ComponentFixture<SensorRawJsonComponent>;
let component: SensorRawJsonComponent;
let sensorParserConfigString =
'{"parserClassName":"org.apache.metron.parsers.bro.BasicBroParser","sensorTopic":"bro",' +
'"parserConfig": {},"fieldTransformations":[]}';
let sensorParserConfig: SensorParserConfig = new SensorParserConfig();
sensorParserConfig.sensorTopic = 'bro';
sensorParserConfig.parserClassName =
'org.apache.metron.parsers.bro.BasicBroParser';
sensorParserConfig.parserConfig = {};
let sensorParserConfigWithClassNameString = `{"parserClassName":"org.apache.metron.parsers.bro.BasicBroParser","sensorTopic":"bro",
"parserConfig": {},"fieldTransformations":[], "writerClassName": "org.example.writerClassName",
"errorWriterClassName": "org.example.errorWriterClassName",
"filterClassName": "org.example.filterClassName", "invalidWriterClassName": "org.example.invalidWriterClassName"}`;
let sensorParserConfigWithClassName = Object.assign(
new SensorParserConfig(),
sensorParserConfig
);
sensorParserConfigWithClassName.writerClassName =
'org.example.writerClassName';
sensorParserConfigWithClassName.errorWriterClassName =
'org.example.errorWriterClassName';
sensorParserConfigWithClassName.filterClassName =
'org.example.filterClassName';
sensorParserConfigWithClassName.invalidWriterClassName =
'org.example.invalidWriterClassName';
let sensorEnrichmentConfigString =
'{"enrichment" : {"fieldMap": ' +
'{"geo": ["ip_dst_addr", "ip_src_addr"],"host": ["host"]}},"threatIntel": {"fieldMap": {"hbaseThreatIntel":' +
' ["ip_src_addr", "ip_dst_addr"]},"fieldToTypeMap": {"ip_src_addr" : ["malicious_ip"],"ip_dst_addr" : ["malicious_ip"]}}}';
let sensorEnrichmentConfig = new SensorEnrichmentConfig();
sensorEnrichmentConfig.enrichment = Object.assign(new EnrichmentConfig(), {
fieldMap: {
geo: ['ip_dst_addr', 'ip_src_addr'],
host: ['host']
}
});
sensorEnrichmentConfig.threatIntel = Object.assign(new ThreatIntelConfig(), {
fieldMap: {
hbaseThreatIntel: ['ip_src_addr', 'ip_dst_addr']
},
fieldToTypeMap: {
ip_src_addr: ['malicious_ip'],
ip_dst_addr: ['malicious_ip']
}
});
let sensorEnrichmentConfigWithConfigString = `{"configuration": "some-configuration",
"enrichment" : {"fieldMap": {"geo": ["ip_dst_addr", "ip_src_addr"],"host": ["host"]}},
"threatIntel": {"fieldMap": {"hbaseThreatIntel":["ip_src_addr", "ip_dst_addr"]},
"fieldToTypeMap": {"ip_src_addr" : ["malicious_ip"],"ip_dst_addr" : ["malicious_ip"]}}}`;
let sensorEnrichmentConfigWithConfig = Object.assign(
new SensorEnrichmentConfig(),
sensorEnrichmentConfig
);
sensorEnrichmentConfigWithConfig.configuration = 'some-configuration';
let sensorIndexingConfigString = `{"hdfs": {"index": "bro","batchSize": 5,"enabled":true},
"elasticsearch": {"index": "bro","batchSize": 5,"enabled":true},
"solr": {"index": "bro","batchSize": 5,"enabled":true}}`;
let sensorIndexingConfig = new IndexingConfigurations();
sensorIndexingConfig.hdfs.index = 'bro';
sensorIndexingConfig.hdfs.batchSize = 5;
sensorIndexingConfig.hdfs.enabled = true;
sensorIndexingConfig.elasticsearch.index = 'bro';
sensorIndexingConfig.elasticsearch.batchSize = 5;
sensorIndexingConfig.elasticsearch.enabled = true;
sensorIndexingConfig.solr.index = 'bro';
sensorIndexingConfig.solr.batchSize = 5;
sensorIndexingConfig.solr.enabled = true;
let sensorIndexingConfigChangedString = `{"hdfs": {"index": "squid","batchSize": 1,"enabled":true},
"elasticsearch": {"index": "squid","batchSize": 1,"enabled":true},
"solr": {"index": "squid","batchSize": 1,"enabled":true}}`;
let sensorIndexingConfigChanged = new IndexingConfigurations();
sensorIndexingConfigChanged.hdfs.index = 'squid';
sensorIndexingConfigChanged.hdfs.batchSize = 1;
sensorIndexingConfigChanged.hdfs.enabled = true;
sensorIndexingConfigChanged.elasticsearch.index = 'squid';
sensorIndexingConfigChanged.elasticsearch.batchSize = 1;
sensorIndexingConfigChanged.elasticsearch.enabled = true;
sensorIndexingConfigChanged.solr.index = 'squid';
sensorIndexingConfigChanged.solr.batchSize = 1;
sensorIndexingConfigChanged.solr.enabled = true;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [SharedModule, SensorRawJsonModule]
});
fixture = TestBed.createComponent(SensorRawJsonComponent);
component = fixture.componentInstance;
}));
it('should create an instance', () => {
expect(component).toBeDefined();
});
it('should create an instance', () => {
spyOn(component, 'init');
let changes: SimpleChanges = {
showRawJson: new SimpleChange(false, true, true)
};
component.ngOnChanges(changes);
expect(component.init).toHaveBeenCalled();
changes = { showRawJson: new SimpleChange(true, false, false) };
component.ngOnChanges(changes);
expect(component.init['calls'].count()).toEqual(1);
fixture.destroy();
});
it('should initialise the fields', () => {
component.init();
expect(component.newSensorParserConfig).toEqual(undefined);
expect(component.newSensorEnrichmentConfig).toEqual(undefined);
expect(component.newIndexingConfigurations).toEqual(undefined);
component.sensorParserConfig = sensorParserConfig;
component.sensorEnrichmentConfig = sensorEnrichmentConfig;
component.indexingConfigurations = sensorIndexingConfig;
component.init();
expect(component.newSensorParserConfig).toEqual(
JSON.stringify(sensorParserConfig, null, '\t')
);
expect(component.newSensorEnrichmentConfig).toEqual(
JSON.stringify(sensorEnrichmentConfig, null, '\t')
);
expect(component.newIndexingConfigurations).toEqual(
JSON.stringify(sensorIndexingConfig, null, '\t')
);
fixture.destroy();
});
it('should save the fields', () => {
spyOn(component.hideRawJson, 'emit');
spyOn(component.onRawJsonChanged, 'emit');
component.sensorParserConfig = new SensorParserConfig();
component.sensorEnrichmentConfig = new SensorEnrichmentConfig();
component.indexingConfigurations = new IndexingConfigurations();
component.newSensorParserConfig = sensorParserConfigString;
component.newSensorEnrichmentConfig = sensorEnrichmentConfigString;
component.newIndexingConfigurations = sensorIndexingConfigString;
component.onSave();
expect(component.sensorParserConfig).toEqual(sensorParserConfig);
expect(component.sensorEnrichmentConfig).toEqual(sensorEnrichmentConfig);
expect(component.indexingConfigurations).toEqual(sensorIndexingConfig);
expect(component.hideRawJson.emit).toHaveBeenCalled();
expect(component.onRawJsonChanged.emit).toHaveBeenCalled();
component.newSensorParserConfig = sensorParserConfigWithClassNameString;
component.newSensorEnrichmentConfig = sensorEnrichmentConfigWithConfigString;
component.newIndexingConfigurations = sensorIndexingConfigChangedString;
component.onSave();
expect(component.sensorParserConfig).toEqual(
sensorParserConfigWithClassName
);
expect(component.sensorEnrichmentConfig).toEqual(
sensorEnrichmentConfigWithConfig
);
expect(component.indexingConfigurations).toEqual(
sensorIndexingConfigChanged
);
expect(component.hideRawJson.emit['calls'].count()).toEqual(2);
expect(component.onRawJsonChanged.emit['calls'].count()).toEqual(2);
fixture.destroy();
});
it('should hide panel', () => {
spyOn(component.hideRawJson, 'emit');
component.onCancel();
expect(component.hideRawJson.emit).toHaveBeenCalled();
fixture.destroy();
});
});