blob: 205d88585b6d80a51bda41a22119718fbd1d09dd [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, ComponentFixture, TestBed} from '@angular/core/testing';
import {SpyLocation} from '@angular/common/testing';
import {Http, ResponseOptions, RequestOptions, Response} from '@angular/http';
import {DebugElement, Inject} from '@angular/core';
import {By} from '@angular/platform-browser';
import {Router, NavigationStart} from '@angular/router';
import {Observable} from 'rxjs/Observable';
import {SensorParserListComponent} from './sensor-parser-list.component';
import {SensorParserConfigService} from '../../service/sensor-parser-config.service';
import {MetronAlerts} from '../../shared/metron-alerts';
import {TopologyStatus} from '../../model/topology-status';
import {SensorParserConfig} from '../../model/sensor-parser-config';
import {AuthenticationService} from '../../service/authentication.service';
import {SensorParserListModule} from './sensor-parser-list.module';
import {MetronDialogBox} from '../../shared/metron-dialog-box';
import {Sort} from '../../util/enums';
import 'jquery';
import {SensorParserConfigHistoryService} from '../../service/sensor-parser-config-history.service';
import {SensorParserConfigHistory} from '../../model/sensor-parser-config-history';
import {APP_CONFIG, METRON_REST_CONFIG} from '../../app.config';
import {StormService} from '../../service/storm.service';
import {IAppConfig} from '../../app.config.interface';
class MockAuthenticationService extends AuthenticationService {
constructor(private http2: Http, private router2: Router, @Inject(APP_CONFIG) private config2: IAppConfig) {
super(http2, router2, config2);
}
public checkAuthentication() {
}
public getCurrentUser(options: RequestOptions): Observable<Response> {
return Observable.create(observer => {
observer.next(new Response(new ResponseOptions({body: 'test'})));
observer.complete();
});
}
}
class MockSensorParserConfigHistoryService extends SensorParserConfigHistoryService {
private allSensorParserConfigHistory: SensorParserConfigHistory[];
constructor(private http2: Http, @Inject(APP_CONFIG) private config2: IAppConfig) {
super(http2, config2);
}
public setSensorParserConfigHistoryForTest(allSensorParserConfigHistory: SensorParserConfigHistory[]) {
this.allSensorParserConfigHistory = allSensorParserConfigHistory;
}
public getAll(): Observable<SensorParserConfigHistory[]> {
return Observable.create(observer => {
observer.next(this.allSensorParserConfigHistory);
observer.complete();
});
}
}
class MockSensorParserConfigService extends SensorParserConfigService {
private sensorParserConfigs: {};
constructor(private http2: Http, @Inject(APP_CONFIG) private config2: IAppConfig) {
super(http2, config2);
}
public setSensorParserConfigForTest(sensorParserConfigs: {}) {
this.sensorParserConfigs = sensorParserConfigs;
}
public getAll(): Observable<{string: SensorParserConfig}> {
return Observable.create(observer => {
observer.next(this.sensorParserConfigs);
observer.complete();
});
}
public deleteSensorParserConfigs(sensorNames: string[]): Observable<{success: Array<string>, failure: Array<string>}> {
let result: {success: Array<string>, failure: Array<string>} = {success: [], failure: []};
let observable = Observable.create((observer => {
for (let i = 0; i < sensorNames.length; i++) {
result.success.push(sensorNames[i]);
}
observer.next(result);
observer.complete();
}));
return observable;
}
}
class MockStormService extends StormService {
private topologyStatuses: TopologyStatus[];
constructor(private http2: Http, @Inject(APP_CONFIG) private config2: IAppConfig) {
super(http2, config2);
}
public setTopologyStatusForTest(topologyStatuses: TopologyStatus[]) {
this.topologyStatuses = topologyStatuses;
}
public pollGetAll(): Observable<TopologyStatus[]> {
return Observable.create(observer => {
observer.next(this.topologyStatuses);
observer.complete();
});
}
public getAll(): Observable<TopologyStatus[]> {
return Observable.create(observer => {
observer.next(this.topologyStatuses);
observer.complete();
});
}
}
class MockRouter {
events: Observable<Event> = Observable.create(observer => {
observer.next(new NavigationStart(1, '/sensors'));
observer.complete();
});
navigateByUrl(url: string) {
}
}
class MockMetronDialogBox {
public showConfirmationMessage(message: string) {
return Observable.create(observer => {
observer.next(true);
observer.complete();
});
}
}
describe('Component: SensorParserList', () => {
let comp: SensorParserListComponent;
let fixture: ComponentFixture<SensorParserListComponent>;
let authenticationService: MockAuthenticationService;
let sensorParserConfigService: MockSensorParserConfigService;
let stormService: MockStormService;
let sensorParserConfigHistoryService: MockSensorParserConfigHistoryService;
let router: Router;
let metronAlerts: MetronAlerts;
let metronDialog: MetronDialogBox;
let dialogEl: DebugElement;
beforeEach(async(() => {
TestBed.configureTestingModule({
imports: [SensorParserListModule],
providers: [
{provide: Http},
{provide: Location, useClass: SpyLocation},
{provide: AuthenticationService, useClass: MockAuthenticationService},
{provide: SensorParserConfigService, useClass: MockSensorParserConfigService},
{provide: StormService, useClass: MockStormService},
{provide: SensorParserConfigHistoryService, useClass: MockSensorParserConfigHistoryService},
{provide: Router, useClass: MockRouter},
{provide: MetronDialogBox, useClass: MockMetronDialogBox},
{provide: APP_CONFIG, useValue: METRON_REST_CONFIG},
MetronAlerts
]
}).compileComponents()
.then(() => {
fixture = TestBed.createComponent(SensorParserListComponent);
comp = fixture.componentInstance;
authenticationService = fixture.debugElement.injector.get(AuthenticationService);
sensorParserConfigService = fixture.debugElement.injector.get(SensorParserConfigService);
stormService = fixture.debugElement.injector.get(StormService);
sensorParserConfigHistoryService = fixture.debugElement.injector.get(SensorParserConfigHistoryService);
router = fixture.debugElement.injector.get(Router);
metronAlerts = fixture.debugElement.injector.get(MetronAlerts);
metronDialog = fixture.debugElement.injector.get(MetronDialogBox);
dialogEl = fixture.debugElement.query(By.css('.primary'));
});
}));
it('should create an instance', async(() => {
let component: SensorParserListComponent = fixture.componentInstance;
expect(component).toBeDefined();
fixture.destroy();
}));
it('getSensors should call getStatus and poll status and all variables should be initialised', async(() => {
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
let sensorParserConfigHistory2 = new SensorParserConfigHistory();
let sensorParserConfig1 = new SensorParserConfig();
let sensorParserConfig2 = new SensorParserConfig();
sensorParserConfigHistory1.sensorName = 'squid';
sensorParserConfigHistory2.sensorName = 'bro';
sensorParserConfigHistory1.config = sensorParserConfig1;
sensorParserConfigHistory2.config = sensorParserConfig2;
let sensorParserStatus1 = new TopologyStatus();
let sensorParserStatus2 = new TopologyStatus();
sensorParserStatus1.name = 'squid';
sensorParserStatus1.status = 'KILLED';
sensorParserStatus2.name = 'bro';
sensorParserStatus2.status = 'KILLED';
sensorParserConfigService.setSensorParserConfigForTest({'squid': sensorParserConfig1, 'bro': sensorParserConfig2});
stormService.setTopologyStatusForTest([sensorParserStatus1, sensorParserStatus2]);
let component: SensorParserListComponent = fixture.componentInstance;
component.enableAutoRefresh = false;
component.ngOnInit();
expect(component.sensors[0].sensorName).toEqual(sensorParserConfigHistory1.sensorName);
expect(component.sensors[1].sensorName).toEqual(sensorParserConfigHistory2.sensorName);
expect(component.sensorsStatus[0]).toEqual(Object.assign(new TopologyStatus(), sensorParserStatus1));
expect(component.sensorsStatus[1]).toEqual(Object.assign(new TopologyStatus(), sensorParserStatus2));
expect(component.selectedSensors).toEqual([]);
expect(component.count).toEqual(2);
fixture.destroy();
}));
it('getParserType should return the Type of Parser', async(() => {
let component: SensorParserListComponent = fixture.componentInstance;
let sensorParserConfig1 = new SensorParserConfig();
sensorParserConfig1.sensorTopic = 'squid';
sensorParserConfig1.parserClassName = 'org.apache.metron.parsers.GrokParser';
let sensorParserConfig2 = new SensorParserConfig();
sensorParserConfig2.sensorTopic = 'bro';
sensorParserConfig2.parserClassName = 'org.apache.metron.parsers.bro.BasicBroParser';
expect(component.getParserType(sensorParserConfig1)).toEqual('Grok');
expect(component.getParserType(sensorParserConfig2)).toEqual('Bro');
fixture.destroy();
}));
it('navigateToSensorEdit should set selected sensor and change url', async(() => {
let event = new Event('mouse');
event.stopPropagation = jasmine.createSpy('stopPropagation');
spyOn(router, 'navigateByUrl');
let component: SensorParserListComponent = fixture.componentInstance;
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
sensorParserConfigHistory1.sensorName = 'squid';
component.navigateToSensorEdit(sensorParserConfigHistory1, event);
let expectStr = router.navigateByUrl['calls'].argsFor(0);
expect(expectStr).toEqual(['/sensors(dialog:sensors-config/squid)']);
expect(event.stopPropagation).toHaveBeenCalled();
fixture.destroy();
}));
it('addAddSensor should change the URL', async(() => {
spyOn(router, 'navigateByUrl');
let component: SensorParserListComponent = fixture.componentInstance;
component.addAddSensor();
let expectStr = router.navigateByUrl['calls'].argsFor(0);
expect(expectStr).toEqual(['/sensors(dialog:sensors-config/new)']);
fixture.destroy();
}));
it('onRowSelected should add add/remove items from the selected stack', async(() => {
let component: SensorParserListComponent = fixture.componentInstance;
let event = {target: {checked: true}};
let sensorParserConfigHistory = new SensorParserConfigHistory();
let sensorParserConfig = new SensorParserConfig();
sensorParserConfig.sensorTopic = 'squid';
sensorParserConfigHistory.config = sensorParserConfig;
component.onRowSelected(sensorParserConfigHistory, event);
expect(component.selectedSensors[0]).toEqual(sensorParserConfigHistory);
event = {target: {checked: false}};
component.onRowSelected(sensorParserConfigHistory, event);
expect(component.selectedSensors).toEqual([]);
fixture.destroy();
}));
it('onSelectDeselectAll should populate items into selected stack', async(() => {
let component: SensorParserListComponent = fixture.componentInstance;
let sensorParserConfig1 = new SensorParserConfig();
let sensorParserConfig2 = new SensorParserConfig();
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
let sensorParserConfigHistory2 = new SensorParserConfigHistory();
sensorParserConfig1.sensorTopic = 'squid';
sensorParserConfigHistory1.config = sensorParserConfig1;
sensorParserConfig2.sensorTopic = 'bro';
sensorParserConfigHistory2.config = sensorParserConfig2;
component.sensors.push(sensorParserConfigHistory1);
component.sensors.push(sensorParserConfigHistory2);
let event = {target: {checked: true}};
component.onSelectDeselectAll(event);
expect(component.selectedSensors).toEqual([sensorParserConfigHistory1, sensorParserConfigHistory2]);
event = {target: {checked: false}};
component.onSelectDeselectAll(event);
expect(component.selectedSensors).toEqual([]);
fixture.destroy();
}));
it('onSensorRowSelect should change the url and updated the selected items stack', async(() => {
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
sensorParserConfigHistory1.sensorName = 'squid';
let component: SensorParserListComponent = fixture.componentInstance;
let event = {target: {type: 'div', parentElement: {firstChild: {type: 'div'}}}};
component.selectedSensor = sensorParserConfigHistory1;
component.onSensorRowSelect(sensorParserConfigHistory1, event);
expect(component.selectedSensor).toEqual(null);
component.onSensorRowSelect(sensorParserConfigHistory1, event);
expect(component.selectedSensor).toEqual(sensorParserConfigHistory1);
component.selectedSensor = sensorParserConfigHistory1;
event = {target: {type: 'checkbox', parentElement: {firstChild: {type: 'div'}}}};
component.onSensorRowSelect(sensorParserConfigHistory1, event);
expect(component.selectedSensor).toEqual(sensorParserConfigHistory1);
fixture.destroy();
}));
it('onSensorRowSelect should change the url and updated the selected items stack', async(() => {
let component: SensorParserListComponent = fixture.componentInstance;
let sensorParserConfigHistory = new SensorParserConfigHistory();
let sensorParserConfig = new SensorParserConfig();
sensorParserConfig.sensorTopic = 'squid';
sensorParserConfigHistory.config = sensorParserConfig;
component.toggleStartStopInProgress(sensorParserConfigHistory);
expect(sensorParserConfig['startStopInProgress']).toEqual(true);
component.toggleStartStopInProgress(sensorParserConfigHistory);
expect(sensorParserConfig['startStopInProgress']).toEqual(false);
}));
it('onDeleteSensor should call the appropriate url', async(() => {
spyOn(metronAlerts, 'showSuccessMessage');
spyOn(metronDialog, 'showConfirmationMessage').and.callThrough();
let event = new Event('mouse');
event.stopPropagation = jasmine.createSpy('stopPropagation');
let component: SensorParserListComponent = fixture.componentInstance;
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
let sensorParserConfigHistory2 = new SensorParserConfigHistory();
let sensorParserConfig1 = new SensorParserConfig();
let sensorParserConfig2 = new SensorParserConfig();
sensorParserConfigHistory1.sensorName = 'squid';
sensorParserConfigHistory2.sensorName = 'bro';
sensorParserConfigHistory1.config = sensorParserConfig1;
sensorParserConfigHistory2.config = sensorParserConfig2;
component.selectedSensors.push(sensorParserConfigHistory1);
component.selectedSensors.push(sensorParserConfigHistory2);
component.onDeleteSensor();
expect(metronAlerts.showSuccessMessage).toHaveBeenCalled();
component.deleteSensor(event, [sensorParserConfigHistory1]);
expect(metronDialog.showConfirmationMessage).toHaveBeenCalled();
expect(metronDialog.showConfirmationMessage['calls'].count()).toEqual(2);
expect(metronDialog.showConfirmationMessage['calls'].count()).toEqual(2);
expect(metronDialog.showConfirmationMessage['calls'].all()[0].args).toEqual(['Are you sure you want to delete sensor(s) squid, bro ?']);
expect(metronDialog.showConfirmationMessage['calls'].all()[1].args).toEqual(['Are you sure you want to delete sensor(s) squid ?']);
expect(event.stopPropagation).toHaveBeenCalled();
fixture.destroy();
}));
it('onStopSensor should call the appropriate url', async(() => {
let event = new Event('mouse');
event.stopPropagation = jasmine.createSpy('stopPropagation');
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
let sensorParserConfig1 = new SensorParserConfig();
sensorParserConfig1.sensorTopic = 'squid';
sensorParserConfigHistory1.config = sensorParserConfig1;
let observableToReturn = Observable.create(observer => {
observer.next({status: 'success', message: 'Some Message'});
observer.complete();
});
spyOn(metronAlerts, 'showSuccessMessage');
spyOn(stormService, 'stopParser').and.returnValue(observableToReturn);
let component: SensorParserListComponent = fixture.componentInstance;
component.onStopSensor(sensorParserConfigHistory1, event);
expect(stormService.stopParser).toHaveBeenCalled();
expect(event.stopPropagation).toHaveBeenCalled();
expect(metronAlerts.showSuccessMessage).toHaveBeenCalled();
fixture.destroy();
}));
it('onStartSensor should call the appropriate url', async(() => {
let event = new Event('mouse');
event.stopPropagation = jasmine.createSpy('stopPropagation');
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
let sensorParserConfig1 = new SensorParserConfig();
sensorParserConfig1.sensorTopic = 'squid';
sensorParserConfigHistory1.config = sensorParserConfig1;
let observableToReturn = Observable.create(observer => {
observer.next({status: 'success', message: 'Some Message'});
observer.complete();
});
spyOn(metronAlerts, 'showSuccessMessage');
spyOn(stormService, 'startParser').and.returnValue(observableToReturn);
let component: SensorParserListComponent = fixture.componentInstance;
component.onStartSensor(sensorParserConfigHistory1, event);
expect(stormService.startParser).toHaveBeenCalled();
expect(event.stopPropagation).toHaveBeenCalled();
expect(metronAlerts.showSuccessMessage).toHaveBeenCalled();
fixture.destroy();
}));
it('onEnableSensor should call the appropriate url', async(() => {
let event = new Event('mouse');
event.stopPropagation = jasmine.createSpy('stopPropagation');
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
let sensorParserConfig1 = new SensorParserConfig();
sensorParserConfig1.sensorTopic = 'squid';
sensorParserConfigHistory1.config = sensorParserConfig1;
let observableToReturn = Observable.create(observer => {
observer.next({status: 'success', message: 'Some Message'});
observer.complete();
});
spyOn(metronAlerts, 'showSuccessMessage');
spyOn(stormService, 'activateParser').and.returnValue(observableToReturn);
let component: SensorParserListComponent = fixture.componentInstance;
component.onEnableSensor(sensorParserConfigHistory1, event);
expect(stormService.activateParser).toHaveBeenCalled();
expect(event.stopPropagation).toHaveBeenCalled();
expect(metronAlerts.showSuccessMessage).toHaveBeenCalled();
fixture.destroy();
}));
it('onDisableSensor should call the appropriate url', async(() => {
let event = new Event('mouse');
event.stopPropagation = jasmine.createSpy('stopPropagation');
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
let sensorParserConfig1 = new SensorParserConfig();
sensorParserConfig1.sensorTopic = 'squid';
sensorParserConfigHistory1.config = sensorParserConfig1;
let observableToReturn = Observable.create(observer => {
observer.next({status: 'success', message: 'Some Message'});
observer.complete();
});
spyOn(metronAlerts, 'showSuccessMessage');
spyOn(stormService, 'deactivateParser').and.returnValue(observableToReturn);
let component: SensorParserListComponent = fixture.componentInstance;
component.onDisableSensor(sensorParserConfigHistory1, event);
expect(stormService.deactivateParser).toHaveBeenCalled();
expect(event.stopPropagation).toHaveBeenCalled();
expect(metronAlerts.showSuccessMessage).toHaveBeenCalled();
fixture.destroy();
}));
it('onStartSensors/onStopSensors should call start on all sensors that have status != ' +
'Running and status != Running respectively', async(() => {
let component: SensorParserListComponent = fixture.componentInstance;
spyOn(component, 'onStartSensor');
spyOn(component, 'onStopSensor');
spyOn(component, 'onDisableSensor');
spyOn(component, 'onEnableSensor');
let sensorParserConfigHistory1 = new SensorParserConfigHistory();
let sensorParserConfigHistory2 = new SensorParserConfigHistory();
let sensorParserConfigHistory3 = new SensorParserConfigHistory();
let sensorParserConfigHistory4 = new SensorParserConfigHistory();
let sensorParserConfigHistory5 = new SensorParserConfigHistory();
let sensorParserConfigHistory6 = new SensorParserConfigHistory();
let sensorParserConfigHistory7 = new SensorParserConfigHistory();
let sensorParserConfig1 = new SensorParserConfig();
let sensorParserConfig2 = new SensorParserConfig();
let sensorParserConfig3 = new SensorParserConfig();
let sensorParserConfig4 = new SensorParserConfig();
let sensorParserConfig5 = new SensorParserConfig();
let sensorParserConfig6 = new SensorParserConfig();
let sensorParserConfig7 = new SensorParserConfig();
sensorParserConfig1.sensorTopic = 'squid';
sensorParserConfigHistory1['status'] = 'Running';
sensorParserConfigHistory1.config = sensorParserConfig1;
sensorParserConfig2.sensorTopic = 'bro';
sensorParserConfigHistory2['status'] = 'Stopped';
sensorParserConfigHistory2.config = sensorParserConfig2;
sensorParserConfig3.sensorTopic = 'test';
sensorParserConfigHistory3['status'] = 'Stopped';
sensorParserConfigHistory3.config = sensorParserConfig3;
sensorParserConfig4.sensorTopic = 'test1';
sensorParserConfigHistory4['status'] = 'Stopped';
sensorParserConfigHistory4.config = sensorParserConfig4;
sensorParserConfig5.sensorTopic = 'test2';
sensorParserConfigHistory5['status'] = 'Running';
sensorParserConfigHistory5.config = sensorParserConfig5;
sensorParserConfig6.sensorTopic = 'test2';
sensorParserConfigHistory6['status'] = 'Disabled';
sensorParserConfigHistory6.config = sensorParserConfig6;
sensorParserConfig7.sensorTopic = 'test3';
sensorParserConfigHistory7['status'] = 'Disabled';
sensorParserConfigHistory7.config = sensorParserConfig7;
component.selectedSensors = [sensorParserConfigHistory1, sensorParserConfigHistory2, sensorParserConfigHistory3,
sensorParserConfigHistory4, sensorParserConfigHistory5, sensorParserConfigHistory6, sensorParserConfigHistory7];
component.onStartSensors();
expect(component.onStartSensor['calls'].count()).toEqual(3);
component.onStopSensors();
expect(component.onStopSensor['calls'].count()).toEqual(4);
component.onDisableSensors();
expect(component.onDisableSensor['calls'].count()).toEqual(2);
component.onEnableSensors();
expect(component.onEnableSensor['calls'].count()).toEqual(2);
fixture.destroy();
}));
it('sort', async(() => {
let component: SensorParserListComponent = fixture.componentInstance;
component.sensors = [
Object.assign(new SensorParserConfigHistory(), {
'sensorName': 'abc',
'config': {
'parserClassName': 'org.apache.metron.parsers.GrokParser',
'sensorTopic': 'abc',
},
'createdBy': 'raghu',
'modifiedBy': 'abc',
'createdDate': '2016-11-25 09:09:12',
'modifiedByDate': '2016-11-25 09:09:12'
}),
Object.assign(new SensorParserConfigHistory(), {
'sensorName': 'plm',
'config': {
'parserClassName': 'org.apache.metron.parsers.Bro',
'sensorTopic': 'plm',
},
'createdBy': 'raghu',
'modifiedBy': 'plm',
'createdDate': '2016-11-25 12:39:21',
'modifiedByDate': '2016-11-25 12:39:21'
}),
Object.assign(new SensorParserConfigHistory(), {
'sensorName': 'xyz',
'config': {
'parserClassName': 'org.apache.metron.parsers.GrokParser',
'sensorTopic': 'xyz',
},
'createdBy': 'raghu',
'modifiedBy': 'xyz',
'createdDate': '2016-11-25 12:44:03',
'modifiedByDate': '2016-11-25 12:44:03'
})
];
component.onSort({sortBy: 'sensorName', sortOrder: Sort.ASC});
expect(component.sensors[0].sensorName).toEqual('abc');
expect(component.sensors[1].sensorName).toEqual('plm');
expect(component.sensors[2].sensorName).toEqual('xyz');
component.onSort({sortBy: 'sensorName', sortOrder: Sort.DSC});
expect(component.sensors[0].sensorName).toEqual('xyz');
expect(component.sensors[1].sensorName).toEqual('plm');
expect(component.sensors[2].sensorName).toEqual('abc');
component.onSort({sortBy: 'parserClassName', sortOrder: Sort.ASC});
expect(component.sensors[0].config.parserClassName).toEqual('org.apache.metron.parsers.Bro');
expect(component.sensors[1].config.parserClassName).toEqual('org.apache.metron.parsers.GrokParser');
expect(component.sensors[2].config.parserClassName).toEqual('org.apache.metron.parsers.GrokParser');
component.onSort({sortBy: 'parserClassName', sortOrder: Sort.DSC});
expect(component.sensors[0].config.parserClassName).toEqual('org.apache.metron.parsers.GrokParser');
expect(component.sensors[1].config.parserClassName).toEqual('org.apache.metron.parsers.GrokParser');
expect(component.sensors[2].config.parserClassName).toEqual('org.apache.metron.parsers.Bro');
component.onSort({sortBy: 'modifiedBy', sortOrder: Sort.ASC});
expect(component.sensors[0].modifiedBy).toEqual('abc');
expect(component.sensors[1].modifiedBy).toEqual('plm');
expect(component.sensors[2].modifiedBy).toEqual('xyz');
component.onSort({sortBy: 'modifiedBy', sortOrder: Sort.DSC});
expect(component.sensors[0].modifiedBy).toEqual('xyz');
expect(component.sensors[1].modifiedBy).toEqual('plm');
expect(component.sensors[2].modifiedBy).toEqual('abc');
}));
it('sort', async(() => {
let component: SensorParserListComponent = fixture.componentInstance;
component.sensors = [
Object.assign(new SensorParserConfigHistory(), {
'sensorName': 'abc',
'config': {
'parserClassName': 'org.apache.metron.parsers.GrokParser',
'sensorTopic': 'abc',
},
'createdBy': 'raghu',
'modifiedBy': 'abc',
'createdDate': '2016-11-25 09:09:12',
'modifiedByDate': '2016-11-25 09:09:12'
})];
component.sensorsStatus = [
Object.assign(new TopologyStatus(), {
'name': 'abc',
'status': 'ACTIVE',
'latency': '10',
'throughput': '23'
})
];
component.updateSensorStatus();
expect(component.sensors[0]['status']).toEqual('Running');
expect(component.sensors[0]['latency']).toEqual('10s');
expect(component.sensors[0]['throughput']).toEqual('23kb/s');
component.sensorsStatus[0].status = 'KILLED';
component.updateSensorStatus();
expect(component.sensors[0]['status']).toEqual('Stopped');
expect(component.sensors[0]['latency']).toEqual('-');
expect(component.sensors[0]['throughput']).toEqual('-');
component.sensorsStatus[0].status = 'INACTIVE';
component.updateSensorStatus();
expect(component.sensors[0]['status']).toEqual('Disabled');
expect(component.sensors[0]['latency']).toEqual('-');
expect(component.sensors[0]['throughput']).toEqual('-');
component.sensorsStatus = [];
component.updateSensorStatus();
expect(component.sensors[0]['status']).toEqual('Stopped');
expect(component.sensors[0]['latency']).toEqual('-');
expect(component.sensors[0]['throughput']).toEqual('-');
}));
});