You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ignite.apache.org by sb...@apache.org on 2015/06/05 16:19:38 UTC
[2/5] incubator-ignite git commit: #nodejs: move all nodejs files to
ignite-nodejs module.
#nodejs: move all nodejs files to ignite-nodejs module.
Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/6546a873
Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/6546a873
Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/6546a873
Branch: refs/heads/nodejs
Commit: 6546a8732ac763abc9d778481f52b0ca6675eba6
Parents: de9f02a
Author: ivasilinets <iv...@gridgain.com>
Authored: Fri Jun 5 15:58:03 2015 +0300
Committer: ivasilinets <iv...@gridgain.com>
Committed: Fri Jun 5 15:58:03 2015 +0300
----------------------------------------------------------------------
modules/nodejs/pom.xml | 6 +
modules/nodejs/src/main/nodejs/cache.js | 56 +++++++
modules/nodejs/src/main/nodejs/ignition.js | 49 ++++++
modules/nodejs/src/main/nodejs/server.js | 94 +++++++++++
.../apache/ignite/internal/NodeJsSelfTest.java | 118 +++++++++++++
modules/nodejs/src/test/nodejs/rest-jetty.xml | 53 ++++++
modules/nodejs/src/test/nodejs/runtest.bat | 17 ++
modules/nodejs/src/test/nodejs/runtest.sh | 6 +
modules/nodejs/src/test/nodejs/test-node.xml | 97 +++++++++++
modules/nodejs/src/test/nodejs/test.js | 166 +++++++++++++++++++
10 files changed, 662 insertions(+)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/pom.xml
----------------------------------------------------------------------
diff --git a/modules/nodejs/pom.xml b/modules/nodejs/pom.xml
index f4ee60a..5dbfc89 100644
--- a/modules/nodejs/pom.xml
+++ b/modules/nodejs/pom.xml
@@ -48,6 +48,12 @@
<dependency>
<groupId>org.apache.ignite</groupId>
+ <artifactId>ignite-log4j</artifactId>
+ <version>${project.version}</version>
+ </dependency>
+
+ <dependency>
+ <groupId>org.apache.ignite</groupId>
<artifactId>ignite-rest-http</artifactId>
<version>${project.version}</version>
</dependency>
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/src/main/nodejs/cache.js
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/main/nodejs/cache.js b/modules/nodejs/src/main/nodejs/cache.js
new file mode 100644
index 0000000..59c8ece
--- /dev/null
+++ b/modules/nodejs/src/main/nodejs/cache.js
@@ -0,0 +1,56 @@
+/**
+ * Creates an instance of Cache
+ *
+ * @constructor
+ * @this {Cache}
+ * @param {Server} server Server class
+ * @param {string} cacheName Cache name
+ */
+function Cache(server, cacheName) {
+ this._server = server;
+ this._cacheName = cacheName;
+ this._cacheNameParam = _pair("cacheName", this._cacheName);
+}
+
+/**
+ * Get cache value
+ *
+ * @this {Cache}
+ * @param {string} key Key
+ * @param {Cache~onGet} callback Called on finish
+ */
+Cache.prototype.get = function(key, callback) {
+ this._server.runCommand("get", [this._cacheNameParam, _pair("key", key)], callback);
+};
+
+/**
+ * Callback for cache get
+ * @callback Cache~onGet
+ * @param {string} error Error
+ * @param {string} result Result value
+ */
+
+/**
+ * Put cache value
+ *
+ * @this {Cache}
+ * @param {string} key Key
+ * @param {string} value Value
+ * @param {Cache~onPut} callback Called on finish
+ */
+Cache.prototype.put = function(key, value, callback) {
+ this._server.runCommand("put", [this._cacheNameParam, _pair("key", key), _pair("val", value)],
+ callback);
+}
+
+/**
+ * Callback for cache put
+ * @callback Cache~onPut
+ * @param {string} error Error
+ */
+
+function _pair(key, value) {
+ return {key: key, value: value}
+}
+
+exports.Cache = Cache
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/src/main/nodejs/ignition.js
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/main/nodejs/ignition.js b/modules/nodejs/src/main/nodejs/ignition.js
new file mode 100644
index 0000000..1d8aa46
--- /dev/null
+++ b/modules/nodejs/src/main/nodejs/ignition.js
@@ -0,0 +1,49 @@
+/**
+ * Creates an instance of Ignition
+ *
+ * @constructor
+ */
+function Ignition() {
+}
+
+/**
+ * Callback for Ignition start
+ *
+ * @callback Ignition~onStart
+ * @param {string} error Error
+ * @param {Server} server Connected server
+ */
+
+/**
+ * Open connection with server node
+ *
+ * @param {number} port Port
+ * @param {string[]} hosts List of nodes hosts
+ * @param {Ignition~onStart} callback Called on finish
+ */
+Ignition.start = function(port, hosts, callback) {
+ var Server = require("./server").Server;
+ var numConn = hosts.length;
+ for (var host of hosts) {
+ var server = new Server(host, port);
+ server.checkConnection(onConnect.bind(null, server));
+ }
+
+ function onConnect(server, error) {
+ if (!callback)
+ return;
+
+ numConn--;
+ if (!error) {
+ callback.call(null, null, server);
+ callback = null;
+ return;
+ }
+
+ console.log(error);
+ if (!numConn)
+ callback.call(null, "Cannot connect to servers", null);
+ }
+}
+
+exports.Ignition = Ignition;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/src/main/nodejs/server.js
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/main/nodejs/server.js b/modules/nodejs/src/main/nodejs/server.js
new file mode 100644
index 0000000..fa6d477
--- /dev/null
+++ b/modules/nodejs/src/main/nodejs/server.js
@@ -0,0 +1,94 @@
+/**
+ * Creates an instance of Server
+ *
+ * @constructor
+ * @this {Server}
+ * @param {string} host Host address
+ * @param {number} port Port
+ */
+function Server(host, port) {
+ this._host = host;
+ this._port = port;
+}
+
+/**
+ * Host value
+ *
+ * @this {Server}
+ * @returns {string} Host value
+ */
+Server.prototype.host = function()
+{
+ return this._host;
+}
+
+/**
+ * Callback for Server runCommand
+ *
+ * @callback Server~onRunCommand
+ * @param {string} error Error
+ * @param {string} result Result value
+ */
+
+/**
+ * Run http request
+ *
+ * @this {Server}
+ * @param {string} cmdName command name.
+ * @param params Parameters for command.
+ * @param {Server~onRunCommand} Called on finish
+ */
+Server.prototype.runCommand = function(cmdName, params, callback) {
+ var paramsString = "";
+
+ for (var p of params)
+ //TODO: escape value
+ paramsString += "&" + p.key + "=" + p.value;
+
+ var requestQry = "cmd=" + cmdName + paramsString;
+
+ var http = require('http');
+
+ var options = {
+ host: this._host,
+ port: this._port,
+ path: "/ignite?" + requestQry
+ };
+
+ function streamCallback(response) {
+ var fullResponseString = '';
+
+ response.on('data', function (chunk) {
+ fullResponseString += chunk;
+ });
+
+ response.on('end', function () {
+ try {
+ var response = JSON.parse(fullResponseString);
+ if (response.successStatus)
+ callback.call(null, response.error, null)
+ else
+ callback.call(null, null, response.response);
+ } catch (e) {
+ callback.call(null, e, null);
+ }
+ });
+ }
+
+ var request = http.request(options, streamCallback);
+
+ request.on('error', callback);
+ request.end();
+}
+
+/**
+ * Check the connection with server node.
+ *
+ * @this {Server}
+ * @param {Server~onRunCommand} callback Called on finish
+ */
+Server.prototype.checkConnection = function(callback) {
+ this.runCommand("version", [], callback);
+}
+
+exports.Server = Server;
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsSelfTest.java
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsSelfTest.java b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsSelfTest.java
new file mode 100644
index 0000000..d79dc76
--- /dev/null
+++ b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsSelfTest.java
@@ -0,0 +1,118 @@
+/*
+ * Copyright (C) GridGain Systems. All Rights Reserved.
+ * _________ _____ __________________ _____
+ * __ ____/___________(_)______ /__ ____/______ ____(_)_______
+ * _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+ * / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+ * \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+ */
+
+package org.apache.ignite.internal;
+
+import org.apache.ignite.cache.*;
+import org.apache.ignite.configuration.*;
+import org.apache.ignite.internal.util.*;
+import org.apache.ignite.internal.util.typedef.*;
+import org.apache.ignite.internal.util.typedef.internal.*;
+import org.apache.ignite.testframework.junits.common.*;
+
+import java.util.*;
+import java.util.concurrent.*;
+
+import static java.util.concurrent.TimeUnit.*;
+
+/**
+ * Test node js client.
+ */
+public class NodeJsSelfTest extends GridCommonAbstractTest {
+ /** Cache name. */
+ private static final String CACHE_NAME = "mycache";
+
+ /** {@inheritDoc} */
+ @Override protected IgniteConfiguration getConfiguration(String gridName) throws Exception {
+ IgniteConfiguration cfg = super.getConfiguration(gridName);
+ cfg.setCacheConfiguration(cacheConfiguration());
+
+ ConnectorConfiguration conCfg = new ConnectorConfiguration();
+
+ conCfg.setJettyPath(getNodeJsTestDir() + "rest-jetty.xml");
+
+ cfg.setConnectorConfiguration(conCfg);
+
+ return cfg;
+ }
+
+ /**
+ * @return Cache configuration.
+ */
+ private CacheConfiguration cacheConfiguration() {
+ CacheConfiguration ccfg = new CacheConfiguration();
+
+ ccfg.setName(CACHE_NAME);
+ ccfg.setAtomicityMode(CacheAtomicityMode.ATOMIC);
+
+ return ccfg;
+ }
+
+ /**
+ * @throws Exception If failed.
+ */
+ public void testPutGetJs() throws Exception {
+ startGrid(0);
+
+ final CountDownLatch readyLatch = new CountDownLatch(1);
+
+ GridJavaProcess proc = null;
+
+ final List<String> errors = new ArrayList<>();
+
+ try {
+ proc = GridJavaProcess.exec(
+ getNodeJsTestDir() + "runtest.bat",
+ log,
+ new CI1<String>() {
+ @Override
+ public void apply(String s) {
+ info("Node js: " + s);
+
+ if (s.contains("OK: "))
+ readyLatch.countDown();
+
+ if (s.contains("Error") || s.contains("FAILURES")) {
+ errors.add("Script failed: " + s);
+
+ readyLatch.countDown();
+ }
+ }
+ },
+ null
+ );
+
+ assertTrue(readyLatch.await(60, SECONDS));
+
+ assertEquals(errors.toString(), 0, errors.size());
+
+ proc.getProcess().waitFor();
+ }
+ finally {
+ stopAllGrids();
+
+ if (proc != null)
+ proc.killProcess();
+ }
+ }
+
+ /**
+ * @return Node js test dir.
+ */
+ private String getNodeJsTestDir() {
+ String sep = System.getProperty("file.separator");
+
+ return U.getIgniteHome() +
+ sep + "modules" +
+ sep + "nodejs" +
+ sep + "src" +
+ sep + "test" +
+ sep + "nodejs" + sep;
+ }
+}
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/src/test/nodejs/rest-jetty.xml
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/nodejs/rest-jetty.xml b/modules/nodejs/src/test/nodejs/rest-jetty.xml
new file mode 100644
index 0000000..e31304f
--- /dev/null
+++ b/modules/nodejs/src/test/nodejs/rest-jetty.xml
@@ -0,0 +1,53 @@
+<?xml version="1.0"?>
+<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
+<Configure id="Server" class="org.eclipse.jetty.server.Server">
+ <Arg name="threadPool">
+ <!-- Default queued blocking thread pool -->
+ <New class="org.eclipse.jetty.util.thread.QueuedThreadPool">
+ <Set name="minThreads">20</Set>
+ <Set name="maxThreads">200</Set>
+ </New>
+ </Arg>
+ <New id="httpCfg" class="org.eclipse.jetty.server.HttpConfiguration">
+ <Set name="secureScheme">https</Set>
+ <Set name="securePort">8443</Set>
+ <Set name="sendServerVersion">true</Set>
+ <Set name="sendDateHeader">true</Set>
+ </New>
+ <Call name="addConnector">
+ <Arg>
+ <New class="org.eclipse.jetty.server.ServerConnector">
+ <Arg name="server"><Ref refid="Server"/></Arg>
+ <Arg name="factories">
+ <Array type="org.eclipse.jetty.server.ConnectionFactory">
+ <Item>
+ <New class="org.eclipse.jetty.server.HttpConnectionFactory">
+ <Ref refid="httpCfg"/>
+ </New>
+ </Item>
+ </Array>
+ </Arg>
+ <Set name="host">
+ <SystemProperty name="IGNITE_JETTY_HOST" default="localhost"/>
+ </Set>
+ <Set name="port">
+ <SystemProperty name="IGNITE_JETTY_PORT" default="9090"/>
+ </Set>
+ <Set name="idleTimeout">30000</Set>
+ <Set name="reuseAddress">true</Set>
+ </New>
+ </Arg>
+ </Call>
+ <Set name="handler">
+ <New id="Handlers" class="org.eclipse.jetty.server.handler.HandlerCollection">
+ <Set name="handlers">
+ <Array type="org.eclipse.jetty.server.Handler">
+ <Item>
+ <New id="Contexts" class="org.eclipse.jetty.server.handler.ContextHandlerCollection"/>
+ </Item>
+ </Array>
+ </Set>
+ </New>
+ </Set>
+ <Set name="stopAtShutdown">false</Set>
+</Configure>
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/src/test/nodejs/runtest.bat
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/nodejs/runtest.bat b/modules/nodejs/src/test/nodejs/runtest.bat
new file mode 100644
index 0000000..c3e0648
--- /dev/null
+++ b/modules/nodejs/src/test/nodejs/runtest.bat
@@ -0,0 +1,17 @@
+::
+:: Copyright (C) GridGain Systems. All Rights Reserved.
+::
+:: _________ _____ __________________ _____
+:: __ ____/___________(_)______ /__ ____/______ ____(_)_______
+:: _ / __ __ ___/__ / _ __ / _ / __ _ __ `/__ / __ __ \
+:: / /_/ / _ / _ / / /_/ / / /_/ / / /_/ / _ / _ / / /
+:: \____/ /_/ /_/ \_,__/ \____/ \__,_/ /_/ /_/ /_/
+::
+::
+
+::
+:: Internal script that starts test runner.
+::
+if "%IGNITE_HOME%" == "" echo %0, ERROR: IGNITE_HOME environment vairable is not found.
+
+nodeunit %IGNITE_HOME%\modules\nodejs\src\test\nodejs\test.js
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/src/test/nodejs/runtest.sh
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/nodejs/runtest.sh b/modules/nodejs/src/test/nodejs/runtest.sh
new file mode 100644
index 0000000..a60da47
--- /dev/null
+++ b/modules/nodejs/src/test/nodejs/runtest.sh
@@ -0,0 +1,6 @@
+#!/usr/bin/env bash
+if [ "${IGNITE_HOME}" = "" ]; then
+ export IGNITE_HOME="$(dirname $(readlink -f $0))"/..
+fi
+
+nodeunit ${IGNITE_HOME}$/../ggprivate/modules/clients/src/test/nodejs/test.js
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/src/test/nodejs/test-node.xml
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/nodejs/test-node.xml b/modules/nodejs/src/test/nodejs/test-node.xml
new file mode 100644
index 0000000..a1a17e4
--- /dev/null
+++ b/modules/nodejs/src/test/nodejs/test-node.xml
@@ -0,0 +1,97 @@
+<?xml version="1.0" encoding="UTF-8"?>
+
+<!--
+ 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.
+-->
+
+<!--
+ Ignite configuration with all defaults and enabled p2p deployment and enabled events.
+-->
+<beans xmlns="http://www.springframework.org/schema/beans"
+ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+ xmlns:util="http://www.springframework.org/schema/util"
+ xsi:schemaLocation="
+ http://www.springframework.org/schema/beans
+ http://www.springframework.org/schema/beans/spring-beans.xsd
+ http://www.springframework.org/schema/util
+ http://www.springframework.org/schema/util/spring-util.xsd">
+ <bean id="ignite.cfg" class="org.apache.ignite.configuration.IgniteConfiguration">
+ <!-- Set to true to enable distributed class loading for examples, default is false. -->
+ <property name="peerClassLoadingEnabled" value="true"/>
+
+ <property name="cacheConfiguration">
+ <list>
+ <!-- Partitioned cache example configuration (Atomic mode). -->
+ <bean class="org.apache.ignite.configuration.CacheConfiguration">
+ <property name="name" value="mycache"/>
+ <property name="atomicityMode" value="ATOMIC"/>
+ <property name="backups" value="1"/>
+ </bean>
+ </list>
+ </property>
+
+ <property name="marshaller">
+ <bean class="org.apache.ignite.marshaller.optimized.OptimizedMarshaller">
+ <!-- Set to false to allow non-serializable objects in examples, default is true. -->
+ <property name="requireSerializable" value="false"/>
+ </bean>
+ </property>
+
+ <property name="connectorConfiguration">
+ <bean class="org.apache.ignite.configuration.ConnectorConfiguration">
+ <property name="jettyPath" value="rest-jetty.xml"/>
+ </bean>
+ </property>
+
+ <!-- Enable task execution events for examples. -->
+ <property name="includeEventTypes">
+ <list>
+ <!--Task execution events-->
+ <util:constant static-field="org.apache.ignite.events.EventType.EVT_TASK_STARTED"/>
+ <util:constant static-field="org.apache.ignite.events.EventType.EVT_TASK_FINISHED"/>
+ <util:constant static-field="org.apache.ignite.events.EventType.EVT_TASK_FAILED"/>
+ <util:constant static-field="org.apache.ignite.events.EventType.EVT_TASK_TIMEDOUT"/>
+ <util:constant static-field="org.apache.ignite.events.EventType.EVT_TASK_SESSION_ATTR_SET"/>
+ <util:constant static-field="org.apache.ignite.events.EventType.EVT_TASK_REDUCED"/>
+
+ <!--Cache events-->
+ <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_PUT"/>
+ <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_READ"/>
+ <util:constant static-field="org.apache.ignite.events.EventType.EVT_CACHE_OBJECT_REMOVED"/>
+ </list>
+ </property>
+
+ <!-- Explicitly configure TCP discovery SPI to provide list of initial nodes. -->
+ <property name="discoverySpi">
+ <bean class="org.apache.ignite.spi.discovery.tcp.TcpDiscoverySpi">
+ <property name="ipFinder">
+ <!--
+ Ignite provides several options for automatic discovery that can be used
+ instead os static IP based discovery. For information on all options refer
+ to our documentation: http://apacheignite.readme.io/docs/cluster-config
+ -->
+ <!-- Uncomment static IP finder to enable static-based discovery of initial nodes. -->
+ <!--<bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">-->
+ <bean class="org.apache.ignite.spi.discovery.tcp.ipfinder.vm.TcpDiscoveryVmIpFinder">
+ <constructor-arg>
+ <value>true</value>
+ </constructor-arg>
+ </bean>
+ </property>
+ </bean>
+ </property>
+ </bean>
+</beans>
http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/6546a873/modules/nodejs/src/test/nodejs/test.js
----------------------------------------------------------------------
diff --git a/modules/nodejs/src/test/nodejs/test.js b/modules/nodejs/src/test/nodejs/test.js
new file mode 100644
index 0000000..39fcafd
--- /dev/null
+++ b/modules/nodejs/src/test/nodejs/test.js
@@ -0,0 +1,166 @@
+module.exports = {
+ 'Test put/get' : function(test) {
+ test.expect(1);
+
+ var Cache = require(scriptPath() + "cache").Cache;
+ var Server = require(scriptPath() + "server").Server;
+
+ var assert = require('assert');
+
+ //var node = startIgniteNode();
+
+ setTimeout(initCache, 10000); //If start node from javascrip set timeout 10000);
+
+ function initCache() {
+ var server = new Server('127.0.0.1', 9090);
+ var cache = new Cache(server, "mycache");
+ cache.put("mykey", "6", onPut.bind(null, cache));
+ }
+
+ function onPut(cache, error) {
+ if (error) {
+ console.error("Failed to put " + error);
+ finishTest(test/*, node*/);
+ return;
+ }
+
+ console.log("Put finished");
+ cache.get("mykey", onGet);
+ }
+
+ function onGet(error, value) {
+ if (error) {
+ console.error("Failed to get " + error);
+ finishTest(test/*, node*/);
+ return;
+ }
+
+ console.log("Get finished");
+ test.ok(value === "6", "This shouldn't fail " + value + "<>6");
+ finishTest(test/*, node*/);
+ }
+ },
+ 'Test connection' : function(test) {
+ test.expect(0);
+
+ //var node = startIgniteNode();
+
+ var Server = require(scriptPath() + "server").Server;
+
+ setTimeout(initServer, 10000);
+
+ function initServer() {
+ var server = new Server('127.0.0.1', 9090);
+
+ console.log("Try to check connection");
+
+ server.checkConnection(onConnect);
+ }
+
+ function onConnect(error) {
+ if (error) {
+ finishWithError(test/*, node*/, error);
+ return;
+ }
+ console.log("Successfully connected");
+ finishTest(test/*, node*/);
+ }
+ },
+ 'Test ignition' : function(test) {
+ test.expect(1);
+
+ //var node = startIgniteNode('127.0.0.1', 9090);
+
+ var Ignition = require(scriptPath() + "ignition").Ignition;
+
+ setTimeout(Ignition.start.bind(null, 9090, ['127.0.0.0', '127.0.0.1'], onConnect), 5000);
+
+ function onConnect(error, server) {
+ if (error) {
+ finishWithError(test/*, node*/, error);
+ return;
+ }
+ test.ok(server.host() === '127.0.0.1')
+ finishTest(test/*, node*/);
+ }
+ }
+ };
+
+function scriptPath() {
+ return igniteHome() +
+ sep() + "modules" +
+ sep() + "nodejs" +
+ sep() + "src" +
+ sep() + "main" +
+ sep() + "nodejs" + sep();
+}
+
+function startIgniteNode() {
+ var libs = classpath(igniteHome() + sep() + "target" +
+ sep() + "bin" +
+ sep() + "apache-ignite-fabric-1.1.1-SNAPSHOT-bin" +
+ sep() + "libs");
+
+ var cp = libs.join(require('path').delimiter);
+
+ var spawn = require('child_process').spawn;
+
+ var child = spawn('java',['-classpath', cp, 'org.apache.ignite.startup.cmdline.CommandLineStartup',
+ "test-node.xml"]);
+
+ child.stdout.on('data', function (data) {
+ console.log("" + data);
+ });
+
+ child.stderr.on('data', function (data) {
+ console.log("" + data);
+ });
+
+ return child;
+}
+
+function finishWithError(test/*, node*/, error) {
+ console.log("Error: " + error);
+ test.ok(false);
+ finishTest(test/*, node*/);
+}
+
+function finishTest(test/*, node*/) {
+ //node.kill();
+ test.done();
+}
+
+function igniteHome() {
+ return process.env.IGNITE_HOME;
+}
+
+function sep() {
+ return require('path').sep;
+}
+
+function classpath(dir) {
+ var fs = require('fs');
+ var path = require('path');
+ function walk(dir, done) {
+ var results = [];
+ var list = fs.readdirSync(dir)
+ for (var i = 0; i < list.length; ++i) {
+ file = path.resolve(dir, list[i]);
+ var stat = fs.statSync(file);
+ if (stat && stat.isDirectory()) {
+ if (list[i] != "optional" && file.indexOf("optional") !== -1 && file.indexOf("rest") == -1 )
+ continue;
+
+ var sublist = walk(file);
+ results = results.concat(sublist);
+ } else {
+ if (file.indexOf(".jar") !== -1) {
+ results.push(file);
+ }
+ }
+ }
+ return results;
+ };
+
+ return walk(dir);
+};
\ No newline at end of file