You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@metron.apache.org by rm...@apache.org on 2017/09/27 17:31:52 UTC

[3/3] metron git commit: METRON-1189 Add alert escalation to the Alerts UI (merrimanr) closes apache/metron#762

METRON-1189 Add alert escalation to the Alerts UI (merrimanr) closes apache/metron#762


Project: http://git-wip-us.apache.org/repos/asf/metron/repo
Commit: http://git-wip-us.apache.org/repos/asf/metron/commit/cd7257e1
Tree: http://git-wip-us.apache.org/repos/asf/metron/tree/cd7257e1
Diff: http://git-wip-us.apache.org/repos/asf/metron/diff/cd7257e1

Branch: refs/heads/master
Commit: cd7257e126752dcb5aff1c75d89948565d9dd838
Parents: e3900c4
Author: merrimanr <me...@gmail.com>
Authored: Wed Sep 27 12:31:34 2017 -0500
Committer: merrimanr <me...@apache.org>
Committed: Wed Sep 27 12:31:34 2017 -0500

----------------------------------------------------------------------
 .../metron-alerts/alerts-server-e2e.js          | 161 ---
 metron-interface/metron-alerts/angular-cli.json |   3 +-
 .../e2e/alert-details/alert-details.po.ts       |  60 ++
 .../alert-details-status.e2e-spec.ts            |  60 ++
 .../alert-status/alerts-list-status.e2e-spec.ts |  85 ++
 .../e2e/alerts-list/alerts-list.e2e-spec.ts     |   5 +-
 .../e2e/alerts-list/alerts-list.po.ts           |  35 +-
 .../configure-table/configure-table.e2e-spec.ts |   3 +
 .../save-search/save-search.e2e-spec.ts         |   9 +-
 .../metron-alerts/e2e/login/login.po.ts         |   2 +-
 .../e2e/mock-data/alerts_ui_e2e_index.data      | 338 +++++++
 .../e2e/mock-data/alerts_ui_e2e_index.template  | 975 +++++++++++++++++++
 .../metron-alerts/e2e/mock-data/setup.sh        |  19 +
 .../metron-alerts/e2e/mock-data/teardown.sh     |  18 +
 .../metron-alerts/e2e/utils/e2e_util.ts         |  11 +
 .../metron-alerts/protractor.conf.js            |   6 +-
 .../scripts/start-server-for-e2e.sh             |   4 +-
 .../alert-details/alert-details.component.html  |  10 +-
 .../alert-details/alert-details.component.ts    |  36 +-
 .../alert-details/alerts-details.module.ts      |   5 +-
 .../alerts-list/alerts-list.component.html      |   6 +-
 .../alerts/alerts-list/alerts-list.component.ts |  84 +-
 .../alerts/alerts-list/alerts-list.module.ts    |   3 +-
 .../table-view/table-view.component.html        |   2 +-
 .../table-view/table-view.component.ts          |  49 +-
 .../src/app/model/patch-request.ts              |  24 +
 .../src/app/service/alerts.service.ts           |  36 +
 .../src/app/service/data-source.ts              |   9 -
 .../src/app/service/search.service.ts           |  17 -
 .../src/app/service/update.service.ts           |  58 ++
 .../src/app/service/workflow.service.ts         |  36 -
 .../metron-table-pagination.component.ts        |  11 +-
 .../src/environments/environment.e2e.ts         |  21 +
 .../src/environments/environment.prod.ts        |   3 +-
 .../src/environments/environment.ts             |   3 +-
 metron-interface/metron-config/package.json     |   3 +-
 pom.xml                                         |   2 +
 37 files changed, 1885 insertions(+), 327 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/alerts-server-e2e.js
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/alerts-server-e2e.js b/metron-interface/metron-alerts/alerts-server-e2e.js
deleted file mode 100644
index f1b6410..0000000
--- a/metron-interface/metron-alerts/alerts-server-e2e.js
+++ /dev/null
@@ -1,161 +0,0 @@
-#!/usr/bin/env node
-/**
- * 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.
- */
-
-'use strict';
-
-var os          = require('os');
-var jsonfile    = require('jsonfile');
-var bodyParser  = require('body-parser');
-var app         = require('express')();
-var path        = require('path');
-var compression = require('compression');
-var serveStatic = require('serve-static');
-var favicon     = require('serve-favicon');
-var proxy       = require('http-proxy-middleware');
-var argv        = require('optimist')
-                  .demand(['p', 'r'])
-                  .usage('Usage: alerts-server-e2e.js -p [port]')
-                  .describe('p', 'Port to run metron alerts ui')
-                  .describe('r', 'Url where metron rest application is available')
-                  .argv;
-
-var port = argv.p;
-var metronUIAddress = '';
-var ifaces = os.networkInterfaces();
-var restUrl =  argv.r || argv.resturl;
-var conf = {
-  "restapi": {
-    "target": restUrl,
-    "secure": false
-  }
-};
-
-Object.keys(ifaces).forEach(function (dev) {
-  ifaces[dev].forEach(function (details) {
-    if (details.family === 'IPv4') {
-      metronUIAddress += '\n';
-      metronUIAddress += 'http://' + details.address + ':' + port;
-    }
-  });
-});
-
-function setCustomCacheControl (res, path) {
-  if (serveStatic.mime.lookup(path) === 'text/html') {
-    res.setHeader('Cache-Control', 'public, max-age=10')
-  }
-  res.setHeader("Expires", new Date(Date.now() + 2592000000).toUTCString());
-}
-
-var indexHTML = function(req, res){
-  res.sendFile(path.resolve('dist/index.html'));
-};
-
-var searchResult = function(req, res){
-  console.log('Serving ', req.originalUrl ,'from alert-list.json');
-  jsonfile.readFile('e2e/mock-data/alert-list.json', function(err, obj) {
-    if(err) {
-      res.json({status: 'error', reason: err.toString()});
-      return;
-    }
-
-    var responseMap = {
-      total: 0,
-      results: obj.hits.hits
-    };
-    
-    var filter = req.body.query;
-
-    if (filter !== '*') {
-      filter = filter.replace(/\\/g, '');
-      var lastIndex = filter.lastIndexOf(':');
-      var key = filter.substr(0, lastIndex);
-      var value = filter.substr(lastIndex+1);
-      responseMap.results =  obj.hits.hits.filter(function (hits) {
-        return hits._source[key] === value;
-      });
-    }
-
-    var sortField = req.body.sort && req.body.sort.length === 1 && req.body.sort[0];
-    if (sortField) {
-      var key = Object.keys(sortField)[0];
-      var order = sortField[key].order;
-      responseMap.results = obj.hits.hits.sort(function(o1, o2) {
-        if (!o1._source[key] || !o2._source[key]) {
-          return -1;
-        } 
-
-        if (typeof(o1._source[key]) === 'number' && typeof(o2._source[key]) === 'number') {
-          return order === 'desc' ? o2._source[key]- (o1._source[key]) : o1._source[key] - (o2._source[key]);
-        } else {
-          return order === 'desc' ? o2._source[key].localeCompare(o1._source[key]) : o1._source[key].localeCompare(o2._source[key]);
-        }
-
-      });
-    }
-
-    responseMap.total = responseMap.results.length;
-    responseMap.results = responseMap.results.splice(req.body.from, req.body.size);
-
-    responseMap.results.map(function (obj) {
-      obj.id = obj._id;
-      obj.source = obj._source;
-    });
-
-    res.json(responseMap);
-  });
-};
-
-var clusterState = function(req, res){
-  console.log('Serving ', req.originalUrl ,'from cluster-state.json');
-  jsonfile.readFile('e2e/mock-data/cluster-state.json', function(err, obj) {
-    if(err) {
-      res.json({status: 'error', reason: err.toString()});
-      return;
-    }
-    res.json(obj);
-  });
-};
-
-
-app.use(compression());
-
-app.use(favicon(path.join(__dirname, 'dist/favicon.ico')));
-app.use(serveStatic(path.join(__dirname, 'dist'), {
-  maxAge: '1d',
-  setHeaders: setCustomCacheControl
-}));
-
-app.use('/logout', proxy(conf.restapi));
-app.use('/api/v1/user', proxy(conf.restapi));
-app.use('/api/v1/search/findOne', proxy(conf.restapi));
-app.use('/api/v1/search/column/metadata', proxy(conf.restapi));
-
-app.get('/alerts-list', indexHTML);
-app.get('', indexHTML);
-
-app.use(bodyParser.json());
-app.post('/api/v1/search/search', searchResult);
-
-app.use(function(req, res, next){
-  res.status(404).sendStatus(304);
-});
-
-app.listen(port, function(){
-  console.log("Metron alerts ui is listening on " + metronUIAddress);
-});

http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/angular-cli.json
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/angular-cli.json b/metron-interface/metron-alerts/angular-cli.json
index 68922d7..141f29b 100644
--- a/metron-interface/metron-alerts/angular-cli.json
+++ b/metron-interface/metron-alerts/angular-cli.json
@@ -31,7 +31,8 @@
       "environmentSource": "environments/environment.ts",
       "environments": {
         "dev": "environments/environment.ts",
-        "prod": "environments/environment.prod.ts"
+        "prod": "environments/environment.prod.ts",
+        "e2e": "environments/environment.e2e.ts"
       }
     }
   ],

http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/e2e/alert-details/alert-details.po.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/e2e/alert-details/alert-details.po.ts b/metron-interface/metron-alerts/e2e/alert-details/alert-details.po.ts
new file mode 100644
index 0000000..de0650f
--- /dev/null
+++ b/metron-interface/metron-alerts/e2e/alert-details/alert-details.po.ts
@@ -0,0 +1,60 @@
+/**
+ * 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 {browser, element, by, protractor} from 'protractor';
+
+export class MetronAlertDetailsPage {
+
+  navigateTo() {
+    browser.waitForAngularEnabled(false);
+    return browser.get('/alerts-list(dialog:details/alerts_ui_e2e/c4c5e418-3938-099e-bb0d-37028a98dca8)');
+  }
+
+  clickNew() {
+    element.all(by.css('.metron-slider-pane-details table tbody tr')).get(1).all(by.css('td')).get(0).click();
+  }
+
+  clickOpen() {
+    element.all(by.css('.metron-slider-pane-details table tbody tr')).get(1).all(by.css('td')).get(1).click();
+  }
+
+  clickDismiss() {
+    element.all(by.css('.metron-slider-pane-details table tbody tr')).get(1).all(by.css('td')).get(2).click();
+  }
+
+  clickEscalate() {
+    element.all(by.css('.metron-slider-pane-details table tbody tr')).get(0).all(by.css('td')).get(1).click();
+  }
+
+  clickResolve() {
+    element.all(by.css('.metron-slider-pane-details table tbody tr')).get(2).all(by.css('td')).get(1).click();
+  }
+
+  getAlertStatus(previousText) {
+    let alertStatusElement = element.all(by.css('.metron-slider-pane-details .form .row')).get(0).all(by.css('div')).get(1);
+    return this.waitForTextChange(alertStatusElement, previousText).then(() => {
+      return alertStatusElement.getText();
+    });
+  }
+
+  waitForTextChange(element, previousText) {
+    let EC = protractor.ExpectedConditions;
+    return browser.wait(EC.not(EC.textToBePresentInElement(element, previousText)));
+  }
+
+}

http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/e2e/alert-details/alert-status/alert-details-status.e2e-spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/e2e/alert-details/alert-status/alert-details-status.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alert-details/alert-status/alert-details-status.e2e-spec.ts
new file mode 100644
index 0000000..f464e62
--- /dev/null
+++ b/metron-interface/metron-alerts/e2e/alert-details/alert-status/alert-details-status.e2e-spec.ts
@@ -0,0 +1,60 @@
+/// <reference path="../../matchers/custom-matchers.d.ts"/>
+/**
+ * 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 { MetronAlertDetailsPage } from '../alert-details.po';
+import {customMatchers} from '../../matchers/custom-matchers';
+import {LoginPage} from '../../login/login.po';
+import {loadTestData, deleteTestData} from '../../utils/e2e_util';
+import { MetronAlertsPage } from '../../alerts-list/alerts-list.po';
+
+describe('metron-alerts alert status', function() {
+  let page: MetronAlertDetailsPage;
+  let loginPage: LoginPage;
+
+  beforeAll(() => {
+    loadTestData();
+    loginPage = new LoginPage();
+    loginPage.login();
+  });
+
+  afterAll(() => {
+    new MetronAlertsPage().navigateTo();
+    loginPage.logout();
+    deleteTestData();
+  });
+
+  beforeEach(() => {
+    page = new MetronAlertDetailsPage();
+    jasmine.addMatchers(customMatchers);
+  });
+
+  it('should change alert statuses', () => {
+    page.navigateTo();
+    page.clickNew();
+    page.clickOpen();
+    expect(page.getAlertStatus('NEW')).toEqual('OPEN');
+    page.clickDismiss();
+    expect(page.getAlertStatus('OPEN')).toEqual('DISMISS');
+    page.clickEscalate();
+    expect(page.getAlertStatus('DISMISS')).toEqual('ESCALATE');
+    page.clickResolve();
+    expect(page.getAlertStatus('ESCALATE')).toEqual('RESOLVE');
+    page.clickNew();
+  });
+
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/e2e/alerts-list/alert-status/alerts-list-status.e2e-spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/alert-status/alerts-list-status.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/alert-status/alerts-list-status.e2e-spec.ts
new file mode 100644
index 0000000..e793d6f
--- /dev/null
+++ b/metron-interface/metron-alerts/e2e/alerts-list/alert-status/alerts-list-status.e2e-spec.ts
@@ -0,0 +1,85 @@
+/// <reference path="../../matchers/custom-matchers.d.ts"/>
+/**
+ * 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 { MetronAlertsPage } from '../alerts-list.po';
+import {customMatchers} from '../../matchers/custom-matchers';
+import {LoginPage} from '../../login/login.po';
+import {loadTestData, deleteTestData} from '../../utils/e2e_util';
+
+describe('metron-alerts alert status', function() {
+  let page: MetronAlertsPage;
+  let loginPage: LoginPage;
+
+  beforeAll(() => {
+    loadTestData();
+    loginPage = new LoginPage();
+    loginPage.login();
+  });
+
+  afterAll(() => {
+    loginPage.logout();
+    deleteTestData();
+  });
+
+  beforeEach(() => {
+    page = new MetronAlertsPage();
+    jasmine.addMatchers(customMatchers);
+  });
+
+  it('should change alert status for multiple alerts to OPEN', () => {
+    page.navigateTo();
+    page.toggleAlertInList(0);
+    page.toggleAlertInList(1);
+    page.toggleAlertInList(2);
+    page.clickActionDropdownOption('Open');
+    expect(page.getAlertStatus(0, 'NEW')).toEqual('OPEN');
+    expect(page.getAlertStatus(1, 'NEW')).toEqual('OPEN');
+    expect(page.getAlertStatus(2, 'NEW')).toEqual('OPEN');
+  });
+
+  it('should change alert status for multiple alerts to DISMISS', () => {
+    page.toggleAlertInList(3);
+    page.toggleAlertInList(4);
+    page.toggleAlertInList(5);
+    page.clickActionDropdownOption('Dismiss');
+    expect(page.getAlertStatus(3, 'NEW')).toEqual('DISMISS');
+    expect(page.getAlertStatus(4, 'NEW')).toEqual('DISMISS');
+    expect(page.getAlertStatus(5, 'NEW')).toEqual('DISMISS');
+  });
+
+  it('should change alert status for multiple alerts to ESCALATE', () => {
+    page.toggleAlertInList(6);
+    page.toggleAlertInList(7);
+    page.toggleAlertInList(8);
+    page.clickActionDropdownOption('Escalate');
+    expect(page.getAlertStatus(6, 'NEW')).toEqual('ESCALATE');
+    expect(page.getAlertStatus(7, 'NEW')).toEqual('ESCALATE');
+    expect(page.getAlertStatus(8, 'NEW')).toEqual('ESCALATE');
+  });
+
+  it('should change alert status for multiple alerts to RESOLVE', () => {
+    page.toggleAlertInList(9);
+    page.toggleAlertInList(10);
+    page.toggleAlertInList(11);
+    page.clickActionDropdownOption('Resolve');
+    expect(page.getAlertStatus(9, 'NEW')).toEqual('RESOLVE');
+    expect(page.getAlertStatus(10, 'NEW')).toEqual('RESOLVE');
+    expect(page.getAlertStatus(11, 'NEW')).toEqual('RESOLVE');
+  });
+
+});

http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.e2e-spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.e2e-spec.ts
index b27df7e..8e92737 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.e2e-spec.ts
@@ -19,6 +19,7 @@
 import { MetronAlertsPage } from './alerts-list.po';
 import { customMatchers } from  '../matchers/custom-matchers';
 import { LoginPage } from '../login/login.po';
+import { loadTestData, deleteTestData } from "../utils/e2e_util";
 
 describe('metron-alerts App', function() {
   let page: MetronAlertsPage;
@@ -29,12 +30,14 @@ describe('metron-alerts App', function() {
                                 'ip_dst_addr', 'host', 'alert_status' ];
 
   beforeAll(() => {
+    loadTestData();
     loginPage = new LoginPage();
     loginPage.login();
   });
 
   afterAll(() => {
     loginPage.logout();
+    deleteTestData();
   });
 
   beforeEach(() => {
@@ -55,7 +58,7 @@ describe('metron-alerts App', function() {
     expect(page.isPausePlayRefreshButtonPresent()).toEqualBcoz(true, 'for pause/play button');
     expect(page.isConfigureTableColumnsPresent()).toEqualBcoz(true, 'for alerts table column configure button');
 
-    expect(page.getAlertTableTitle()).toEqualBcoz('Alerts (25 of 169)', 'for alerts title');
+    expect(page.getAlertTableTitle()).toEqualBcoz('Alerts (169)', 'for alerts title');
     expect(page.getActionDropdownItems()).toEqualBcoz([ 'Open', 'Dismiss', 'Escalate', 'Resolve' ], 'for default dropdown actions');
     expect(page.getTableColumnNames()).toEqualBcoz(columnNames, 'for default column names for alert list table');
   });

http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.po.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.po.ts b/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.po.ts
index cefa137..ec44120 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.po.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/alerts-list.po.ts
@@ -68,8 +68,18 @@ export class MetronAlertsPage {
     return element(by.css('.col-form-label-lg')).getText();
   }
 
+  clickActionDropdown() {
+    return element(by.buttonText('ACTIONS')).click();
+  }
+
+  clickActionDropdownOption(option: string) {
+    this.clickActionDropdown().then(() => {
+      element(by.cssContainingText('.dropdown-menu span', option)).click();
+    });
+  }
+
   getActionDropdownItems() {
-    return element(by.buttonText('ACTIONS')).click().then(() => element.all(by.css('.dropdown-menu .dropdown-item.disabled')).getText());
+    return this.clickActionDropdown().then(() => element.all(by.css('.dropdown-menu .dropdown-item.disabled')).getText());
   }
 
   getTableColumnNames() {
@@ -241,4 +251,27 @@ export class MetronAlertsPage {
     let EC = protractor.ExpectedConditions;
     return browser.wait(EC.presenceOf(element));
   }
+
+  waitForTextChange(element, previousText) {
+    let EC = protractor.ExpectedConditions;
+    return browser.wait(EC.not(EC.textToBePresentInElement(element, previousText)));
+  }
+
+  toggleAlertInList(index: number) {
+    let selector = by.css('app-alerts-list tbody tr label');
+    let checkbox = element.all(selector).get(index);
+    this.waitForElementPresence(checkbox).then(() => {
+      browser.actions().mouseMove(checkbox).perform().then(() => {
+        checkbox.click();
+      });
+    });
+  }
+
+  getAlertStatus(rowIndex: number, previousText) {
+    let row = element.all(by.css('app-alerts-list tbody tr')).get(rowIndex);
+    let column = row.all(by.css('td a')).get(8);
+    return this.waitForTextChange(column, previousText).then(() => {
+      return column.getText();
+    });
+  }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/e2e/alerts-list/configure-table/configure-table.e2e-spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/configure-table/configure-table.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/configure-table/configure-table.e2e-spec.ts
index fb3e3cd..284255f 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/configure-table/configure-table.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/configure-table/configure-table.e2e-spec.ts
@@ -19,6 +19,7 @@
 import { MetronAlertsPage } from '../alerts-list.po';
 import {customMatchers} from '../../matchers/custom-matchers';
 import {LoginPage} from '../../login/login.po';
+import {loadTestData, deleteTestData} from '../../utils/e2e_util';
 
 describe('metron-alerts configure table', function() {
   let page: MetronAlertsPage;
@@ -27,12 +28,14 @@ describe('metron-alerts configure table', function() {
     'ip_dst_addr', 'host', 'alert_status' ];
 
   beforeAll(() => {
+    loadTestData();
     loginPage = new LoginPage();
     loginPage.login();
   });
 
   afterAll(() => {
     loginPage.logout();
+    deleteTestData();
   });
 
   beforeEach(() => {

http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/e2e/alerts-list/save-search/save-search.e2e-spec.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/e2e/alerts-list/save-search/save-search.e2e-spec.ts b/metron-interface/metron-alerts/e2e/alerts-list/save-search/save-search.e2e-spec.ts
index 85127dc..91bb81a 100644
--- a/metron-interface/metron-alerts/e2e/alerts-list/save-search/save-search.e2e-spec.ts
+++ b/metron-interface/metron-alerts/e2e/alerts-list/save-search/save-search.e2e-spec.ts
@@ -19,18 +19,21 @@
 import { customMatchers } from  '../../matchers/custom-matchers';
 import {MetronAlertsPage} from '../alerts-list.po';
 import {LoginPage} from '../../login/login.po';
+import {loadTestData, deleteTestData} from '../../utils/e2e_util';
 
 describe('metron-alerts Search', function() {
   let page: MetronAlertsPage;
   let loginPage: LoginPage;
 
   beforeAll(() => {
+    loadTestData();
     loginPage = new LoginPage();
     loginPage.login();
   });
 
   afterAll(() => {
     loginPage.logout();
+    deleteTestData();
   });
 
   beforeEach(() => {
@@ -73,10 +76,10 @@ describe('metron-alerts Search', function() {
 
   it('should delete first search items from search box having multiple search fields', () => {
     page.clickTableText('US');
-    page.clickTableText('bro');
-    expect(page.getSearchText()).toEqual('enrichments:geo:ip_dst_addr:country:US AND source:type:bro', 'for search text US and bro');
+    page.clickTableText('alerts_ui_e2e');
+    expect(page.getSearchText()).toEqual('enrichments:geo:ip_dst_addr:country:US AND source:type:alerts_ui_e2e', 'for search text US and alerts_ui_e2e');
     page.clickRemoveSearchChip();
-    expect(page.getSearchText()).toEqual('source:type:bro', 'for search text bro after US is removed');
+    expect(page.getSearchText()).toEqual('source:type:alerts_ui_e2e', 'for search text alerts_ui_e2e after US is removed');
     page.clickRemoveSearchChip();
     expect(page.getSearchText()).toEqual('*', 'for search chip remove for two search texts');
   });

http://git-wip-us.apache.org/repos/asf/metron/blob/cd7257e1/metron-interface/metron-alerts/e2e/login/login.po.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/e2e/login/login.po.ts b/metron-interface/metron-alerts/e2e/login/login.po.ts
index b3e9769..c9f8c23 100644
--- a/metron-interface/metron-alerts/e2e/login/login.po.ts
+++ b/metron-interface/metron-alerts/e2e/login/login.po.ts
@@ -24,7 +24,7 @@ export class LoginPage {
     }
 
     login() {
-        browser.wait(function() {return element(by.css('input.form-control')).isPresent(); });
+        this.navigateToLogin();
         this.setUserNameAndPassword('admin', 'password');
         this.submitLoginForm();
         browser.waitForAngularEnabled(false);