You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by an...@apache.org on 2016/07/08 06:28:03 UTC

[17/17] ignite git commit: IGNITE-3262 Review.

IGNITE-3262 Review.


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

Branch: refs/heads/ignite-3262
Commit: b6bb112ca6b0953d14b3f5b032964b49744029b1
Parents: 9db6959
Author: Andrey Novikov <an...@apache.org>
Authored: Fri Jul 8 13:27:23 2016 +0700
Committer: Andrey Novikov <an...@apache.org>
Committed: Fri Jul 8 13:27:23 2016 +0700

----------------------------------------------------------------------
 modules/web-console/src/main/js/.babelrc        |   8 +-
 modules/web-console/src/main/js/.gitignore      |   1 -
 .../src/main/js/ignite_modules/injector.json    |   3 -
 modules/web-console/src/main/js/karma.conf.js   | 113 -------------------
 modules/web-console/src/main/js/package.json    |   2 +-
 .../web-console/src/main/js/protractor.conf.js  |  33 ------
 modules/web-console/src/main/js/serve/index.js  |  26 +++--
 .../web-console/src/main/js/serve/injector.js   |  18 +--
 .../src/main/js/serve/routes/configuration.js   |   1 -
 .../web-console/src/main/js/serve/settings.js   |  10 +-
 .../src/main/js/test/backend/injector.js        |  16 +--
 .../js/test/backend/unit/CacheService.test.js   |   8 +-
 .../src/main/js/test/frontend/e2e/d.test.js     |  40 -------
 .../main/js/test/frontend/e2e/exampe.test.js    |  40 +++++++
 .../src/main/js/test/frontend/karma.conf.js     | 113 +++++++++++++++++++
 .../main/js/test/frontend/protractor.conf.js    |  33 ++++++
 16 files changed, 235 insertions(+), 230 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/.babelrc
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/.babelrc b/modules/web-console/src/main/js/.babelrc
index 53efe4c..dcc2d40 100644
--- a/modules/web-console/src/main/js/.babelrc
+++ b/modules/web-console/src/main/js/.babelrc
@@ -1,9 +1,9 @@
 {
   "presets": ["angular"],
-  "plugins": [
-    ["transform-builtin-extend", {
+  "plugins": [[
+    "transform-builtin-extend", {
       "globals": ["Error", "Array"],
       "approximate": true
-    }]
-  ]
+    }
+  ]]
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/.gitignore
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/.gitignore b/modules/web-console/src/main/js/.gitignore
index 2572173..a6af5e1 100644
--- a/modules/web-console/src/main/js/.gitignore
+++ b/modules/web-console/src/main/js/.gitignore
@@ -6,5 +6,4 @@ node_modules
 ignite_modules_temp/*
 public/stylesheets/*.css
 serve/config/*.json
-!serve/config/settings.test.json
 serve/agent_dists/*.zip

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/ignite_modules/injector.json
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/ignite_modules/injector.json b/modules/web-console/src/main/js/ignite_modules/injector.json
deleted file mode 100644
index 1c9ca15..0000000
--- a/modules/web-console/src/main/js/ignite_modules/injector.json
+++ /dev/null
@@ -1,3 +0,0 @@
-{
-  "use": []
-}
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/karma.conf.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/karma.conf.js b/modules/web-console/src/main/js/karma.conf.js
deleted file mode 100644
index f58e38b..0000000
--- a/modules/web-console/src/main/js/karma.conf.js
+++ /dev/null
@@ -1,113 +0,0 @@
-/*
- * 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.
- */
-
-const path = require('path');
-const webpack = require('webpack');
-
-const basePath = path.resolve('./');
-
-module.exports = function(config) {
-    config.set({
-        // Base path that will be used to resolve all patterns (eg. files, exclude).
-        basePath: basePath,
-
-        // Frameworks to use available frameworks: https://npmjs.org/browse/keyword/karma-adapter
-        frameworks: ['mocha'],
-
-        // List of files / patterns to load in the browser.
-        files: [
-            'test/frontend/**/*.test.js'
-        ],
-
-        plugins: [
-            require('karma-phantomjs-launcher'),
-            require('karma-teamcity-reporter'),
-            require('karma-webpack'),
-            require('karma-mocha')
-        ],
-
-        // Preprocess matching files before serving them to the browser
-        // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor.
-        preprocessors: {
-            'test/frontend/**/*.js': ['webpack']
-        },
-
-        webpack: {
-            module: {
-                loaders: [
-                    {
-                        test: /\.json$/,
-                        loader: 'json'
-                    },
-                    {
-                        test: /\.js$/,
-                        loader: 'babel',
-                        exclude: /node_modules/
-                    }
-                ]
-            },
-            resolve: {
-                extensions: ["", ".js"]
-            },
-            plugins: [
-                new webpack.ProvidePlugin({
-                    _: 'lodash'
-                })
-            ]
-        },
-
-        webpackMiddleware: {
-            noInfo: true
-        },
-
-        // Test results reporter to use
-        // possible values: 'dots', 'progress'
-        // available reporters: https://npmjs.org/browse/keyword/karma-reporter.
-        reporters: ['teamcity'],
-
-        // web server port
-        port: 9876,
-
-        // enable / disable colors in the output (reporters and logs)
-        colors: true,
-
-        // level of logging
-        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
-        logLevel: config.LOG_INFO,
-
-        // enable / disable watching file and executing tests whenever any file changes
-        autoWatch: true,
-
-        // start these browsers
-        // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
-        browsers: ['PhantomJS'],
-
-        // Continuous Integration mode
-        // if true, Karma captures browsers, runs the tests and exits
-        singleRun: true,
-
-        // Concurrency level
-        // how many browser should be started simultaneous
-        concurrency: Infinity,
-
-        client: {
-            mocha: {
-                ui: 'tdd'
-            }
-        }
-    });
-};

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/package.json
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/package.json b/modules/web-console/src/main/js/package.json
index aee2179..23e7242 100644
--- a/modules/web-console/src/main/js/package.json
+++ b/modules/web-console/src/main/js/package.json
@@ -6,7 +6,7 @@
   "scripts": {
     "dev": "cross-env NODE_ENV=development gulp watch",
     "build": "cross-env NODE_ENV=production gulp build",
-    "test": "karma start karma.conf.js",
+    "test": "karma start ./test/frontend/karma.conf.js",
     "ci-test-backend": "cross-env NODE_ENV=test CONFIG_PATH='./test/backend/config/settings.json' mocha -u tdd --require babel-core/register --reporter mocha-teamcity-reporter --recursive ./test/backend/unit",
     "test-backend": "cross-env NODE_ENV=test CONFIG_PATH='./test/backend/config/settings.json' mocha -u tdd --require babel-core/register  --recursive ./test/backend/unit",
     "eslint": "eslint --env node --format node_modules/eslint-friendly-formatter gulpfile.babel.js/ serve/ app/ controllers/ generator/ ignite_modules/ ignite_modules_temp/"

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/protractor.conf.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/protractor.conf.js b/modules/web-console/src/main/js/protractor.conf.js
deleted file mode 100644
index 5913ef9..0000000
--- a/modules/web-console/src/main/js/protractor.conf.js
+++ /dev/null
@@ -1,33 +0,0 @@
-// exports.config = {
-//   specs: ['test/e2e/*.js'],
-//   capabilities: {
-
-//   }
-// };
-
-exports.config = {
-  seleniumAddress: 'http://localhost:4444/wd/hub',
-
-  capabilities: {
-    'browserName': 'chrome'
-    // 'browserName': 'phantomjs',
-
-    // /* 
-    //  * Can be used to specify the phantomjs binary path.
-    //  * This can generally be ommitted if you installed phantomjs globally.
-    //  */
-    // 'phantomjs.binary.path': require('phantomjs').path,
-
-    // /*
-    //  * Command line args to pass to ghostdriver, phantomjs's browser driver.
-    //  * See https://github.com/detro/ghostdriver#faq
-    //  */
-    // 'phantomjs.ghostdriver.cli.args': ['--loglevel=DEBUG']
-  },
-
-  specs: ['test/e2e/*.js'],
-
-  jasmineNodeOpts: {
-    showColors: true
-  }
-};
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/serve/index.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/serve/index.js b/modules/web-console/src/main/js/serve/index.js
index f2bfc4a..bbd9106 100644
--- a/modules/web-console/src/main/js/serve/index.js
+++ b/modules/web-console/src/main/js/serve/index.js
@@ -17,9 +17,24 @@
 
 'use strict';
 
+import fs from 'fs';
+import path from 'path';
 import http from 'http';
 import https from 'https';
-import fireUp from './injector';
+
+const igniteModules = process.env.IGNITE_MODULES || './ignite_modules';
+
+let injector;
+
+try {
+    const igniteModulesInjector = path.join(igniteModules, 'injector.js');
+
+    fs.accessSync(igniteModulesInjector, fs.F_OK);
+
+    injector = require(igniteModulesInjector);
+} catch (ignore) {
+    injector = require(path.join(__dirname, 'injector'));
+}
 
 /**
  * Event listener for HTTP server "error" event.
@@ -56,13 +71,8 @@ const _onListening = (addr) => {
     console.log('Start listening on ' + bind);
 };
 
-Promise.all([fireUp('settings'), fireUp('app'), fireUp('agent-manager'), fireUp('browser-manager')])
-    .then((values) => {
-        const settings = values[0];
-        const app = values[1];
-        const agentMgr = values[2];
-        const browserMgr = values[3];
-
+Promise.all([injector('settings'), injector('app'), injector('agent-manager'), injector('browser-manager')])
+    .then(([settings, app, agentMgr, browserMgr]) => {
         // Start rest server.
         const server = settings.server.SSLOptions
             ? https.createServer(settings.server.SSLOptions) : http.createServer();

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/serve/injector.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/serve/injector.js b/modules/web-console/src/main/js/serve/injector.js
index d1fac9c..ef5f752 100644
--- a/modules/web-console/src/main/js/serve/injector.js
+++ b/modules/web-console/src/main/js/serve/injector.js
@@ -15,21 +15,11 @@
  * limitations under the License.
  */
 
-import path from 'path';
-import injector from 'fire-up';
+import fireUp from 'fire-up';
 
-const igniteModules = (process.env.IGNITE_MODULES && path.relative(__dirname, process.env.IGNITE_MODULES)) || './ignite_modules';
-
-const modulesInjectConfig = require(path.join(igniteModules, 'injector.json'));
-
-const defaultInjectConfig = {
+module.exports = fireUp.newInjector({
     basePath: __dirname,
     modules: [
-        './**/*.js',
-        `${igniteModules}/**/*.js`
+        './**/*.js'
     ]
-};
-
-const fireUp = injector.newInjector(Object.assign({}, defaultInjectConfig, modulesInjectConfig));
-
-module.exports = fireUp;
+});

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/serve/routes/configuration.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/serve/routes/configuration.js b/modules/web-console/src/main/js/serve/routes/configuration.js
index 244a4f3..53d9e5a 100644
--- a/modules/web-console/src/main/js/serve/routes/configuration.js
+++ b/modules/web-console/src/main/js/serve/routes/configuration.js
@@ -25,7 +25,6 @@ module.exports = {
 };
 
 module.exports.factory = function(_, express, mongo, configurationService) {
-
     return new Promise((factoryResolve) => {
         const router = new express.Router();
         /**

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/serve/settings.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/serve/settings.js b/modules/web-console/src/main/js/serve/settings.js
index fe11fd4..dc5a38b 100644
--- a/modules/web-console/src/main/js/serve/settings.js
+++ b/modules/web-console/src/main/js/serve/settings.js
@@ -28,7 +28,15 @@ module.exports = {
 };
 
 module.exports.factory = function(nconf, fs) {
-    nconf.file({file: './serve/config/settings.json'});
+    const file = process.env.SETTINGS || 'serve/config/settings.json';
+
+    try {
+        fs.accessSync(file, fs.F_OK);
+
+        nconf.file({file});
+    } catch (ignore) {
+        nconf.file({file: 'serve/config/settings.json'});
+    }
 
     if (process.env.CONFIG_PATH && fs.existsSync(process.env.CONFIG_PATH))
         nconf.file({file: process.env.CONFIG_PATH});

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/test/backend/injector.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/test/backend/injector.js b/modules/web-console/src/main/js/test/backend/injector.js
index 01991e4..b01c63a 100644
--- a/modules/web-console/src/main/js/test/backend/injector.js
+++ b/modules/web-console/src/main/js/test/backend/injector.js
@@ -16,15 +16,17 @@
  */
 
 import path from 'path';
+import fireUp from 'fire-up';
 
-const igniteModules = (process.env.IGNITE_MODULES && path.relative(__dirname, process.env.IGNITE_MODULES)) || './ignite_modules';
+const igniteModules = process.env.IGNITE_MODULES || './ignite_modules';
 
-const fireUp = require('fire-up').newInjector({
-    basePath: `${__dirname}/../..`,
+module.exports = fireUp.newInjector({
+    basePath: __dirname,
     modules: [
-        './serve/**/*.js',
-        `${igniteModules}/**/*.js`
+        '**/*.js',
+        path.join(igniteModules, '**/*.js')
+    ],
+    use: [
+        'services/configuration:gridgain'
     ]
 });
-
-module.exports = fireUp;

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/test/backend/unit/CacheService.test.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/test/backend/unit/CacheService.test.js b/modules/web-console/src/main/js/test/backend/unit/CacheService.test.js
index 44b0d1b..91362f0 100644
--- a/modules/web-console/src/main/js/test/backend/unit/CacheService.test.js
+++ b/modules/web-console/src/main/js/test/backend/unit/CacheService.test.js
@@ -17,7 +17,7 @@
 
 
 import {assert} from 'chai';
-import fireUp from '../injector';
+import injector from '../injector';
 import testCaches from '../data/caches.json';
 import testAccounts from '../data/accounts.json';
 
@@ -39,9 +39,9 @@ suite('CacheServiceTestsSuite', () => {
     };
 
     suiteSetup(() => {
-        return Promise.all([fireUp('services/cache'),
-            fireUp('mongo'),
-            fireUp('errors')])
+        return Promise.all([injector('services/cache'),
+            injector('mongo'),
+            injector('errors')])
             .then(([_cacheService, _mongo, _errors]) => {
                 mongo = _mongo;
                 cacheService = _cacheService;

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/test/frontend/e2e/d.test.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/test/frontend/e2e/d.test.js b/modules/web-console/src/main/js/test/frontend/e2e/d.test.js
deleted file mode 100644
index 8088b16..0000000
--- a/modules/web-console/src/main/js/test/frontend/e2e/d.test.js
+++ /dev/null
@@ -1,40 +0,0 @@
-/*
- * 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.
- */
-
-suite('test', () => {
-    setup(() => {
-        // browser.get('http://localhost:9000/');
-    });
-
-    test('initially has a greeting', (done) => {
-        done();
-
-        // element(by.model('ui.email')).sendKeys('jhon@doe.com');
-    });
-
-    test('initially has a greeting', (done) => {
-        done();
-
-        // element(by.model('ui.email')).sendKeys('jhon@doe.com');
-    });
-
-    test('initially has a greeting', (done) => {
-        done();
-
-        // element(by.model('ui.email')).sendKeys('jhon@doe.com');
-    });
-});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/test/frontend/e2e/exampe.test.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/test/frontend/e2e/exampe.test.js b/modules/web-console/src/main/js/test/frontend/e2e/exampe.test.js
new file mode 100644
index 0000000..c778c79
--- /dev/null
+++ b/modules/web-console/src/main/js/test/frontend/e2e/exampe.test.js
@@ -0,0 +1,40 @@
+/*
+ * 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.
+ */
+
+suite('ExampleTestSuite', () => {
+    setup(() => {
+        // browser.get('http://localhost:9000/');
+    });
+
+    test('initially has a greeting', (done) => {
+        done();
+
+        // element(by.model('ui.email')).sendKeys('jhon@doe.com');
+    });
+
+    test('initially has a greeting', (done) => {
+        done();
+
+        // element(by.model('ui.email')).sendKeys('jhon@doe.com');
+    });
+
+    test('initially has a greeting', (done) => {
+        done();
+
+        // element(by.model('ui.email')).sendKeys('jhon@doe.com');
+    });
+});
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/test/frontend/karma.conf.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/test/frontend/karma.conf.js b/modules/web-console/src/main/js/test/frontend/karma.conf.js
new file mode 100644
index 0000000..f58e38b
--- /dev/null
+++ b/modules/web-console/src/main/js/test/frontend/karma.conf.js
@@ -0,0 +1,113 @@
+/*
+ * 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.
+ */
+
+const path = require('path');
+const webpack = require('webpack');
+
+const basePath = path.resolve('./');
+
+module.exports = function(config) {
+    config.set({
+        // Base path that will be used to resolve all patterns (eg. files, exclude).
+        basePath: basePath,
+
+        // Frameworks to use available frameworks: https://npmjs.org/browse/keyword/karma-adapter
+        frameworks: ['mocha'],
+
+        // List of files / patterns to load in the browser.
+        files: [
+            'test/frontend/**/*.test.js'
+        ],
+
+        plugins: [
+            require('karma-phantomjs-launcher'),
+            require('karma-teamcity-reporter'),
+            require('karma-webpack'),
+            require('karma-mocha')
+        ],
+
+        // Preprocess matching files before serving them to the browser
+        // available preprocessors: https://npmjs.org/browse/keyword/karma-preprocessor.
+        preprocessors: {
+            'test/frontend/**/*.js': ['webpack']
+        },
+
+        webpack: {
+            module: {
+                loaders: [
+                    {
+                        test: /\.json$/,
+                        loader: 'json'
+                    },
+                    {
+                        test: /\.js$/,
+                        loader: 'babel',
+                        exclude: /node_modules/
+                    }
+                ]
+            },
+            resolve: {
+                extensions: ["", ".js"]
+            },
+            plugins: [
+                new webpack.ProvidePlugin({
+                    _: 'lodash'
+                })
+            ]
+        },
+
+        webpackMiddleware: {
+            noInfo: true
+        },
+
+        // Test results reporter to use
+        // possible values: 'dots', 'progress'
+        // available reporters: https://npmjs.org/browse/keyword/karma-reporter.
+        reporters: ['teamcity'],
+
+        // web server port
+        port: 9876,
+
+        // enable / disable colors in the output (reporters and logs)
+        colors: true,
+
+        // level of logging
+        // possible values: config.LOG_DISABLE || config.LOG_ERROR || config.LOG_WARN || config.LOG_INFO || config.LOG_DEBUG
+        logLevel: config.LOG_INFO,
+
+        // enable / disable watching file and executing tests whenever any file changes
+        autoWatch: true,
+
+        // start these browsers
+        // available browser launchers: https://npmjs.org/browse/keyword/karma-launcher
+        browsers: ['PhantomJS'],
+
+        // Continuous Integration mode
+        // if true, Karma captures browsers, runs the tests and exits
+        singleRun: true,
+
+        // Concurrency level
+        // how many browser should be started simultaneous
+        concurrency: Infinity,
+
+        client: {
+            mocha: {
+                ui: 'tdd'
+            }
+        }
+    });
+};

http://git-wip-us.apache.org/repos/asf/ignite/blob/b6bb112c/modules/web-console/src/main/js/test/frontend/protractor.conf.js
----------------------------------------------------------------------
diff --git a/modules/web-console/src/main/js/test/frontend/protractor.conf.js b/modules/web-console/src/main/js/test/frontend/protractor.conf.js
new file mode 100644
index 0000000..5913ef9
--- /dev/null
+++ b/modules/web-console/src/main/js/test/frontend/protractor.conf.js
@@ -0,0 +1,33 @@
+// exports.config = {
+//   specs: ['test/e2e/*.js'],
+//   capabilities: {
+
+//   }
+// };
+
+exports.config = {
+  seleniumAddress: 'http://localhost:4444/wd/hub',
+
+  capabilities: {
+    'browserName': 'chrome'
+    // 'browserName': 'phantomjs',
+
+    // /* 
+    //  * Can be used to specify the phantomjs binary path.
+    //  * This can generally be ommitted if you installed phantomjs globally.
+    //  */
+    // 'phantomjs.binary.path': require('phantomjs').path,
+
+    // /*
+    //  * Command line args to pass to ghostdriver, phantomjs's browser driver.
+    //  * See https://github.com/detro/ghostdriver#faq
+    //  */
+    // 'phantomjs.ghostdriver.cli.args': ['--loglevel=DEBUG']
+  },
+
+  specs: ['test/e2e/*.js'],
+
+  jasmineNodeOpts: {
+    showColors: true
+  }
+};
\ No newline at end of file