http://git-wip-us.apache.org/repos/asf/metron/blob/436cec43/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 8d37800..3e42395 100644
--- a/metron-interface/metron-alerts/e2e/login/login.po.ts
+++ b/metron-interface/metron-alerts/e2e/login/login.po.ts
@@ -24,43 +24,47 @@ export class LoginPage {
     }
 
     login() {
-        this.navigateToLogin();
-        this.setUserNameAndPassword('admin', 'password');
-        this.submitLoginForm();
-        browser.waitForAngularEnabled(false);
-        browser.wait(function() {return 
element(by.css('.logout')).isPresent(); });
+        return this.navigateToLogin()
+        .then(() => this.setUserNameAndPassword('admin', 'password'))
+        .then(() => this.submitLoginForm())
+        .then(() => browser.waitForAngularEnabled(false))
+        .then(() => waitForElementVisibility(element(by.css('.logout-link'))))
+        .then(() => browser.executeScript("document.body.className += ' 
notransition';"));
     }
 
     logout() {
-        browser.waitForAngularEnabled(false);
-        element.all(by.css('.alert .close')).click();
-        element.all(by.css('.logout-link')).click();
-        waitForURL('http://localhost:4200/login');
+        return browser.waitForAngularEnabled(false)
+        .then(() => waitForElementVisibility(element(by.css('.logout-link'))))
+        .then(() => element(by.css('.logout-link')).click())
+        .then(() => waitForURL('http://localhost:4200/login'));
     }
 
     setUserNameAndPassword(userName: string, password: string) {
-        element.all(by.css('input.form-control')).get(0).sendKeys(userName);
-        element.all(by.css('input.form-control')).get(1).sendKeys(password);
+        return waitForElementVisibility(element(by.css('[name=user]')))
+        .then(() => 
waitForElementVisibility(element(by.css('[name=password]'))))
+        .then(() => element(by.css('[name=user]')).clear())
+        .then(() => element(by.css('[name=user]')).sendKeys(userName))
+        .then(() => element(by.css('[name=password]')).clear())
+        .then(() => element(by.css('[name=password]')).sendKeys(password));
     }
 
     submitLoginForm() {
-        return element.all(by.buttonText('LOG IN')).click();
+        return element(by.buttonText('LOG IN')).click();
     }
 
     getErrorMessage() {
-        browser.waitForAngularEnabled(false);
         let errElement = element(by.css('.login-failed-msg'));
-        return waitForElementVisibility(errElement).then(() => {
-            browser.sleep(1000);
-            return errElement.getText().then((message) => {
-                return message.replace(/\n/, '').replace(/LOG\ IN$/, '');
+        return browser.waitForAngularEnabled(false)
+                .then(() => waitForElementVisibility(errElement))
+                .then(() => {
+                        browser.sleep(1000);
+                    return errElement.getText().then((message) => {
+                        return message.replace(/\n/, '').replace(/LOG\ IN$/, 
'');
             });
         });
     }
 
     getLocation() {
-        return browser.getCurrentUrl().then(url => {
-            return url;
-        });
+        return browser.getCurrentUrl();
     }
 }

http://git-wip-us.apache.org/repos/asf/metron/blob/436cec43/metron-interface/metron-alerts/e2e/utils/clean_metron_update_table.ts
----------------------------------------------------------------------
diff --git 
a/metron-interface/metron-alerts/e2e/utils/clean_metron_update_table.ts 
b/metron-interface/metron-alerts/e2e/utils/clean_metron_update_table.ts
new file mode 100644
index 0000000..c6e99df
--- /dev/null
+++ b/metron-interface/metron-alerts/e2e/utils/clean_metron_update_table.ts
@@ -0,0 +1,52 @@
+declare var Promise: any;
+var chalk = require('chalk');
+var Client = require('ssh2').Client;
+var errorMsg = '';
+
+export function cleanMetronUpdateTable() {
+  return  new Promise(
+      function (resolve, reject) {
+        resolve();
+        // cleanupTable(resolve, reject);
+      }
+  );
+}
+
+function cleanupTable(resolve, reject) {
+  var conn = new Client();
+  conn.on('ready', function() {
+    console.log(chalk.bold.green('Connected to node1 as root'));
+    conn.shell(function(err, stream) {
+      if (err) throw err;
+      stream.on('close', function() {
+        if (errorMsg.length > 0) {
+          console.log(chalk.bold.red('Error is:') + errorMsg);
+          console.log(chalk.red.bgBlack.bold('Unable to truncate metron_update 
table in HBase. Most likely reason is HBase is down !!!'));
+          reject();
+        } else {
+          console.log(chalk.bold.green('Truncated metron_update table in 
HBase'));
+          resolve();
+        }
+        conn.end();
+      }).on('data', function(data) {
+        console.log('STDOUT: ' + data);
+        if (data.indexOf('ERROR') !== -1) {
+          errorMsg = data;
+        }
+      }).stderr.on('data', function(data) {
+        console.log('STDERR: ' + data);
+      });
+      var comands = [
+        'echo \'truncate "metron_update"\' | 
/usr/hdp/current/hbase-master/bin/hbase shell',
+        'exit',
+        ''
+      ];
+      stream.end(comands.join('\r\n'));
+    });
+  }).connect({
+    host: 'node1',
+    port: 22,
+    username: 'root',
+    password: 'vagrant'
+  });
+}

http://git-wip-us.apache.org/repos/asf/metron/blob/436cec43/metron-interface/metron-alerts/e2e/utils/e2e_util.ts
----------------------------------------------------------------------
diff --git a/metron-interface/metron-alerts/e2e/utils/e2e_util.ts 
b/metron-interface/metron-alerts/e2e/utils/e2e_util.ts
index 8ae1de1..9f9180c 100644
--- a/metron-interface/metron-alerts/e2e/utils/e2e_util.ts
+++ b/metron-interface/metron-alerts/e2e/utils/e2e_util.ts
@@ -1,7 +1,18 @@
-import { browser, protractor } from 'protractor';
+import { browser, protractor, by, element, ElementFinder } from 'protractor';
 import request = require('request');
 import fs = require('fs');
 
+export class UtilFun {
+  public static async waitForElementPresence(element: ElementFinder): 
Promise<void> {
+    let EC = protractor.ExpectedConditions;
+    await browser.wait(
+        EC.visibilityOf(element),
+        10000,
+        `${element.locator()} was expected to be visible`
+    );
+  }
+}
+
 export function changeURL(url: string) {
     return browser.get(url).then(() => {
         return browser.getCurrentUrl().then((newURL) => {
@@ -15,56 +26,186 @@ export function waitForURL(url: string) {
   return browser.wait(EC.urlIs(url));
 }
 
-export function waitForText(element, text) {
+export function waitForText(selector, text) {
   let EC = protractor.ExpectedConditions;
-  return browser.wait(EC.textToBePresentInElementValue(element, text));
+  return browser.wait(EC.textToBePresentInElement(element(by.css(selector)), 
text)).catch((error) => console.log(`waitForText:`, error));;
 }
 
 export function waitForTextChange(element, previousText) {
   let EC = protractor.ExpectedConditions;
-  return browser.wait(EC.not(EC.textToBePresentInElement(element, 
previousText)));
+  if (previousText.trim().length === 0) {
+    return waitForNonEmptyText(element);
+  }
+  return browser.wait(EC.not(EC.textToBePresentInElement(element, 
previousText))).catch((error) => console.log(`${element.locator()} 
waitForTextChange:`, error));
 }
 
 export function waitForElementInVisibility (_element ) {
     let EC = protractor.ExpectedConditions;
-    return browser.wait(EC.invisibilityOf(_element));
+    return browser.wait(EC.invisibilityOf(_element)).catch((error) => 
console.log(`${_element.locator()} waitForElementInVisibility:`, error));
 }
 
 export function waitForElementPresence (_element ) {
     let EC = protractor.ExpectedConditions;
-    return browser.wait(EC.presenceOf(_element));
+    return browser.wait(EC.presenceOf(_element)).catch((error) => 
console.log(`${_element.locator()} waitForElementPresence:`, error));
 }
 
 export function waitForElementVisibility (_element ) {
     let EC = protractor.ExpectedConditions;
-    return browser.wait(EC.visibilityOf(_element));
+    return browser.wait(EC.visibilityOf(_element)).catch((error) => 
console.log(`${_element.locator()} waitForElementVisibility:`, error));
+}
+
+export function waitForElementPresenceAndvisbility(selector) {
+  let EC = protractor.ExpectedConditions;
+  return 
browser.wait(EC.visibilityOf(element(by.css(selector)))).catch((error) => 
console.log(`waitForElementPresenceAndvisbility: `, error));
 }
 
 export function waitForStalenessOf (_element ) {
     let EC = protractor.ExpectedConditions;
-    return browser.wait(EC.stalenessOf(_element));
+    return browser.wait(EC.stalenessOf(_element)).catch((error) => 
console.log(`${_element.locator()} waitForStalenessOf: `, error));
+}
+
+export function waitForCssClass(elementFinder, desiredClass) {
+  function waitForCssClass$(elementFinder, desiredClass)
+  {
+    return function () {
+      return elementFinder.getAttribute('class').then(function (classValue) {
+        return classValue && classValue.indexOf(desiredClass) >= 0;
+      });
+    }
+  }
+  return browser.wait(waitForCssClass$(elementFinder, 
desiredClass)).catch((error) => console.log(`waitForCssClass:`, error));
+}
+
+export function waitForCssClassNotToBePresent(elementFinder, desiredClass) {
+  function waitForCssClassNotToBePresent$(elementFinder, desiredClass)
+  {
+    return function () {
+      return elementFinder.getAttribute('class').then(function (classValue) {
+        return classValue && classValue.indexOf(desiredClass) === -1;
+      }).catch((error) => console.log(`waitForCssClassNotToBePresent:`, 
error));;
+    }
+  }
+  return browser.wait(waitForCssClassNotToBePresent$(elementFinder, 
desiredClass)).catch((error) => console.log(`waitForCssClassNotToBePresent:`, 
error));
+}
+
+export function catchNoSuchElementError() {
+  return (err) => {
+    if (err.name === 'NoSuchElementError' || err.name === 'Error') {
+      return null;
+    }
+    throw err;
+  };
+}
+
+export function waitForNonEmptyTextAndGetText(elementFinder) {
+  function waitForNonEmptyText$(elementFinder)
+  {
+    return function () {
+      return elementFinder.getText().then(function (text) {
+        return text.trim().length > 0;
+      }).catch(catchNoSuchElementError());
+    }
+  }
+  return browser.wait(waitForNonEmptyText$(elementFinder))
+  .then(() => elementFinder.getText())
+  .catch( catchNoSuchElementError());
+}
+
+export function waitForNonEmptyText(elementFinder) {
+  function waitForNonEmptyText$(elementFinder)
+  {
+    return function () {
+      return elementFinder.getText().then(function (text) {
+        return text.trim().length > 0;
+      }).catch(catchNoSuchElementError());
+    }
+  }
+  return 
browser.wait(waitForNonEmptyText$(elementFinder)).catch(catchNoSuchElementError());
+}
+
+export function waitForElementCountGreaterThan(className, expectedCount) {
+  function waitForElementCountGreaterThan$()
+  {
+    return function () {
+      return element.all(by.css(className)).count().then(function (count) {
+        return count >= expectedCount;
+      }).catch((error) => console.log(`waitForElementCountGreaterThan:`, 
error));;
+    }
+  }
+
+  return browser.wait(waitForElementCountGreaterThan$()).catch((error) => 
console.log(`waitForElementCountGreaterThan: `, error));
+}
+
+export function scrollIntoView(element, eleToTopBottom){
+    return browser.executeScript(function(element, eleToTopBottom) {
+      element.scrollIntoView(eleToTopBottom);
+    },  element.getWebElement(), eleToTopBottom)
+    .catch((error) => console.log());
+}
+
+function promiseHandlerWithResponse(resolve, reject) {
+  return (response) => {
+    if (response && (response.statusCode === 200 || response.statusCode === 
404)) {
+      resolve();
+    } else {
+      console.log(response.statusCode);
+      reject();
+    }
+  };
+}
+
+function promiseHandlerWithResponseAndBody(resolve, reject) {
+  return (error, response, body) => {
+    if (response && (response.statusCode === 200 || response.statusCode === 
404)) {
+      resolve();
+    } else {
+      reject();
+    }
+  };
 }
 
 export function loadTestData() {
-  deleteTestData();
-
-  let template = fs.readFileSync('e2e/mock-data/alerts_ui_e2e_index.template', 
'utf8');
-  request({
-    url: 'http://node1:9200/_template/alerts_ui_e2e_index',
-    method: 'POST',
-    body: template
-  }, function(error, response, body) {
-    // add logging if desired
+  let deleteIndex = function () {
+    return new Promise((resolve, reject) => {
+      request.delete('http://node1:9200/alerts_ui_e2e_index*')
+      .on('response', promiseHandlerWithResponse(resolve, reject));
+    });
+  };
+
+  let createTemplate = function () {
+    return new Promise((resolve, reject) => {
+      let template = 
fs.readFileSync('e2e/mock-data/alerts_ui_e2e_index.template', 'utf8');
+      request({
+        url: 'http://node1:9200/_template/alerts_ui_e2e_index',
+        method: 'POST',
+        body: template
+      },promiseHandlerWithResponseAndBody(resolve, reject));
+    });
+  };
+
+  let loadData = function () {
+    return new Promise((resolve, reject) => {
+      let data = fs.readFileSync('e2e/mock-data/alerts_ui_e2e_index.data', 
'utf8');
+      request({
+        url: 'http://node1:9200/alerts_ui_e2e_index/alerts_ui_e2e_doc/_bulk',
+        method: 'POST',
+        body: data
+      }, promiseHandlerWithResponseAndBody(resolve, reject));
+    })
+  };
+
+  return deleteIndex().then(() => createTemplate()).then(() => loadData(), 
reason => {
+    console.error( 'Load test data failed ', reason );
   });
+}
 
-  let data = fs.readFileSync('e2e/mock-data/alerts_ui_e2e_index.data', 'utf8');
-  request({
-    url: 'http://node1:9200/alerts_ui_e2e_index/alerts_ui_e2e_doc/_bulk',
-    method: 'POST',
-    body: data
-  }, function(error, response, body) {
-    // add logging if desired
-  });
+export function reduce_for_get_all() {
+  return  (acc, elem) => {
+    return elem.getText().then(function(text) {
+      acc.push(text);
+      return acc;
+    }).catch(e => console.log(e));
+  };
 }
 
 export function deleteTestData() {
@@ -72,19 +213,29 @@ export function deleteTestData() {
 }
 
 export function createMetaAlertsIndex() {
-  deleteMetaAlertsIndex();
-
-  let template = 
fs.readFileSync('./../../metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/files/metaalert_index.template',
 'utf8');
-  request({
-    url: 'http://node1:9200/_template/metaalert_index',
-    method: 'POST',
-    body: template
-  }, function(error, response, body) {
-    // add logging if desired
+  let deleteIndex = function () {
+    return new Promise((resolve, reject) => {
+      request.delete('http://node1:9200/metaalert_index*')
+            .on('response', promiseHandlerWithResponse(resolve, reject));
+    });
+  };
+
+  let createIndex = function () {
+    return new Promise((resolve, reject) => {
+      let template = 
fs.readFileSync('./../../metron-deployment/packaging/ambari/metron-mpack/src/main/resources/common-services/METRON/CURRENT/package/files/metaalert_index.template',
 'utf8');
+      request({
+        url: 'http://node1:9200/_template/metaalert_index',
+        method: 'POST',
+        body: template
+      }, promiseHandlerWithResponseAndBody(resolve, reject));
+    });
+  };
+
+  return deleteIndex().then(() => createIndex(), reason => {
+    console.error( 'create Meta Alerts Index failed', reason );
   });
 }
 
 export function deleteMetaAlertsIndex() {
   request.delete('http://node1:9200/metaalert_index*');
-}
-
+}
\ No newline at end of file

Reply via email to