This is an automated email from the ASF dual-hosted git repository.
av pushed a commit to branch ignite-ducktape
in repository https://gitbox.apache.org/repos/asf/ignite.git
The following commit(s) were added to refs/heads/ignite-ducktape by this push:
new 5f3b0f1 Ducktape Service Specs (#8154)
5f3b0f1 is described below
commit 5f3b0f18fa5aa6fa45b8cfb546414cf4c31dd3d0
Author: Maksim Timonin <[email protected]>
AuthorDate: Mon Aug 17 15:15:54 2020 +0300
Ducktape Service Specs (#8154)
---
modules/ducktests/tests/MANIFEST.in | 2 +-
.../ducktests/tests/ignitetest/services/ignite.py | 28 +--
.../tests/ignitetest/services/ignite_app.py | 88 ++++++++-
.../ducktests/tests/ignitetest/services/spark.py | 30 +--
.../ignitetest/services/utils/control_utility.py | 4 +-
.../ignitetest/services/utils/ignite_aware.py | 90 ++-------
.../ignitetest/services/utils/ignite_aware_app.py | 143 --------------
.../ignitetest/services/utils/ignite_config.py | 10 +-
.../tests/ignitetest/services/utils/ignite_path.py | 8 +-
.../services/utils/ignite_persistence.py | 64 +++++++
.../tests/ignitetest/services/utils/ignite_spec.py | 213 +++++++++++++++++++++
.../ignitetest/tests/add_node_rebalance_test.py | 4 +-
.../ignitetest/tests/cellular_affinity_test.py | 4 +-
.../tests/ignitetest/tests/control_utility_test.py | 6 +-
.../tests/ignitetest/tests/discovery_test.py | 6 +-
.../tests/ignitetest/tests/pme_free_switch_test.py | 4 +-
.../ducktests/tests/ignitetest/tests/smoke_test.py | 21 +-
.../tests/ignitetest/{tests => }/utils/__init__.py | 0
.../tests/ignitetest/{tests => }/utils/_mark.py | 2 +-
.../ignitetest/{tests => }/utils/ignite_test.py | 0
.../tests/ignitetest/{tests => }/utils/version.py | 0
modules/ducktests/tests/setup.cfg | 30 ---
modules/ducktests/tests/setup.py | 31 +--
23 files changed, 434 insertions(+), 354 deletions(-)
diff --git a/modules/ducktests/tests/MANIFEST.in
b/modules/ducktests/tests/MANIFEST.in
index edef4ab..6fcceb3 100644
--- a/modules/ducktests/tests/MANIFEST.in
+++ b/modules/ducktests/tests/MANIFEST.in
@@ -13,4 +13,4 @@
# See the License for the specific language governing permissions and
# limitations under the License.
-recursive-include ignitetest */templates/*
+recursive-include ignitetest **.j2
diff --git a/modules/ducktests/tests/ignitetest/services/ignite.py
b/modules/ducktests/tests/ignitetest/services/ignite.py
index 1c5a476..d0bb6d4 100644
--- a/modules/ducktests/tests/ignitetest/services/ignite.py
+++ b/modules/ducktests/tests/ignitetest/services/ignite.py
@@ -31,7 +31,7 @@ from ducktape.utils.util import wait_until
from ignitetest.services.utils.concurrent import CountDownLatch, AtomicValue
from ignitetest.services.utils.ignite_aware import IgniteAwareService
-from ignitetest.tests.utils.version import DEV_BRANCH
+from ignitetest.utils.version import DEV_BRANCH
class IgniteService(IgniteAwareService):
@@ -52,9 +52,11 @@ class IgniteService(IgniteAwareService):
}
# pylint: disable=R0913
- def __init__(self, context, num_nodes, modules=None, client_mode=False,
version=DEV_BRANCH, properties="",
- jvm_opts=None):
- super(IgniteService, self).__init__(context, num_nodes, modules,
client_mode, version, properties, jvm_opts)
+ def __init__(self, context, num_nodes, jvm_opts=None, properties="",
client_mode=False, modules=None,
+ version=DEV_BRANCH):
+ super(IgniteService, self).__init__(context, num_nodes, properties,
+ client_mode=client_mode,
modules=modules, version=version,
+ jvm_opts=jvm_opts)
# pylint: disable=W0221
def start(self, timeout_sec=180):
@@ -65,22 +67,6 @@ class IgniteService(IgniteAwareService):
for node in self.nodes:
self.await_node_started(node, timeout_sec)
- def start_cmd(self, node):
- jvm_opts = self.jvm_options + " "
- jvm_opts += "-J-DIGNITE_SUCCESS_FILE=" + IgniteService.PERSISTENT_ROOT
+ "/success_file "
- jvm_opts += "-J-Dlog4j.configDebug=true "
-
- cmd = "export EXCLUDE_TEST_CLASSES=true; "
- cmd += "export IGNITE_LOG_DIR=" + IgniteService.PERSISTENT_ROOT + "; "
- cmd += "export USER_LIBS=%s; " % ":".join(self.user_libs)
- cmd += "%s %s %s 1>> %s 2>> %s &" % \
- (self.path.script("ignite.sh"),
- jvm_opts,
- IgniteService.CONFIG_FILE,
- IgniteService.STDOUT_STDERR_CAPTURE,
- IgniteService.STDOUT_STDERR_CAPTURE)
- return cmd
-
def await_node_started(self, node, timeout_sec):
"""
Await topology ready event on node start.
@@ -162,7 +148,7 @@ class IgniteService(IgniteAwareService):
def clean_node(self, node):
node.account.kill_java_processes(self.APP_SERVICE_CLASS,
clean_shutdown=False, allow_fail=True)
- node.account.ssh("sudo rm -rf -- %s" % IgniteService.PERSISTENT_ROOT,
allow_fail=False)
+ node.account.ssh("sudo rm -rf -- %s" % self.PERSISTENT_ROOT,
allow_fail=False)
def thread_dump(self, node):
"""
diff --git a/modules/ducktests/tests/ignitetest/services/ignite_app.py
b/modules/ducktests/tests/ignitetest/services/ignite_app.py
index ef5120e..8d60dee 100644
--- a/modules/ducktests/tests/ignitetest/services/ignite_app.py
+++ b/modules/ducktests/tests/ignitetest/services/ignite_app.py
@@ -14,20 +14,90 @@
# limitations under the License.
"""
-This module contains the ignite application service allows to perform custom
logic writen on java.
+This module contains the base class to build Ignite aware application written
on java.
"""
-from ignitetest.services.utils.ignite_aware_app import
IgniteAwareApplicationService
-from ignitetest.tests.utils.version import DEV_BRANCH
+import re
+from ignitetest.services.utils.ignite_aware import IgniteAwareService
+from ignitetest.utils.version import DEV_BRANCH
-class IgniteApplicationService(IgniteAwareApplicationService):
+
+class IgniteApplicationService(IgniteAwareService):
"""
- The Ignite application service allows to perform custom logic writen on
java.
+ The base class to build Ignite aware application written on java.
"""
+ SERVICE_JAVA_CLASS_NAME =
"org.apache.ignite.internal.ducktest.utils.IgniteAwareApplicationService"
+
# pylint: disable=R0913
- def __init__(self, context, java_class_name, modules=None,
client_mode=True, version=DEV_BRANCH,
- properties="", params="", jvm_options=None, timeout_sec=60):
- super(IgniteApplicationService, self).__init__(context,
java_class_name, modules, client_mode, version,
- properties, params,
jvm_options, timeout_sec, start_ignite=True)
+ def __init__(self, context, java_class_name, params="", properties="",
timeout_sec=60, modules=None,
+ client_mode=True, version=DEV_BRANCH,
servicejava_class_name=SERVICE_JAVA_CLASS_NAME,
+ jvm_opts=None, start_ignite=True):
+ super(IgniteApplicationService, self).__init__(context, 1, properties,
+ client_mode=client_mode,
+ version=version,
+ modules=modules,
+
servicejava_class_name=servicejava_class_name,
+
java_class_name=java_class_name,
+ params=params,
+ jvm_opts=jvm_opts,
+
start_ignite=start_ignite)
+
+ self.servicejava_class_name = servicejava_class_name
+ self.java_class_name = java_class_name
+ self.timeout_sec = timeout_sec
+ self.stop_timeout_sec = 10
+
+ def start(self):
+ super(IgniteApplicationService, self).start()
+
+ self.logger.info("Waiting for Ignite aware Application (%s) to
start..." % self.java_class_name)
+
+ self.await_event("Topology snapshot", self.timeout_sec,
from_the_beginning=True)
+
self.await_event("IGNITE_APPLICATION_INITIALIZED\\|IGNITE_APPLICATION_BROKEN",
self.timeout_sec,
+ from_the_beginning=True)
+
+ try:
+ self.await_event("IGNITE_APPLICATION_INITIALIZED", 1,
from_the_beginning=True)
+ except Exception:
+ raise Exception("Java application execution failed. %s" %
self.extract_result("ERROR"))
+
+ # pylint: disable=W0221
+ def stop_node(self, node, clean_shutdown=True, timeout_sec=20):
+ self.logger.info("%s Stopping node %s" % (self.__class__.__name__,
str(node.account)))
+ node.account.kill_java_processes(self.servicejava_class_name,
clean_shutdown=clean_shutdown, allow_fail=True)
+
+ stopped = self.wait_node(node, timeout_sec=self.stop_timeout_sec)
+ assert stopped, "Node %s: did not stop within the specified timeout of
%s seconds" % \
+ (str(node.account), str(self.stop_timeout_sec))
+
+
self.await_event("IGNITE_APPLICATION_FINISHED\\|IGNITE_APPLICATION_BROKEN",
from_the_beginning=True,
+ timeout_sec=timeout_sec)
+
+ def clean_node(self, node):
+ if self.alive(node):
+ self.logger.warn("%s %s was still alive at cleanup time. Killing
forcefully..." %
+ (self.__class__.__name__, node.account))
+
+ node.account.kill_java_processes(self.servicejava_class_name,
clean_shutdown=False, allow_fail=True)
+
+ node.account.ssh("rm -rf %s" % self.PERSISTENT_ROOT, allow_fail=False)
+
+ def pids(self, node):
+ return node.account.java_pids(self.servicejava_class_name)
+
+ def extract_result(self, name):
+ """
+ :param name: Result parameter's name.
+ :return: Extracted result of application run.
+ """
+ res = ""
+
+ output = self.nodes[0].account.ssh_capture(
+ "grep '%s' %s" % (name + "->", self.STDOUT_STDERR_CAPTURE),
allow_fail=False)
+
+ for line in output:
+ res = re.search("%s(.*)%s" % (name + "->", "<-"), line).group(1)
+
+ return res
diff --git a/modules/ducktests/tests/ignitetest/services/spark.py
b/modules/ducktests/tests/ignitetest/services/spark.py
index 72ce9bc..a7cb65e 100644
--- a/modules/ducktests/tests/ignitetest/services/spark.py
+++ b/modules/ducktests/tests/ignitetest/services/spark.py
@@ -20,13 +20,11 @@ This module contains spark service class.
import os.path
from ducktape.cluster.remoteaccount import RemoteCommandError
-from ducktape.services.service import Service
+from ducktape.services.background_thread import BackgroundThreadService
+from ignitetest.services.utils.ignite_persistence import PersistenceAware
-from ignitetest.services.utils.ignite_aware import IgniteAwareService
-from ignitetest.tests.utils.version import DEV_BRANCH
-
-class SparkService(IgniteAwareService):
+class SparkService(BackgroundThreadService, PersistenceAware):
"""
Start a spark node.
"""
@@ -36,15 +34,12 @@ class SparkService(IgniteAwareService):
logs = {}
# pylint: disable=R0913
- def __init__(self, context, modules=None, version=DEV_BRANCH, num_nodes=3,
properties=""):
+ def __init__(self, context, num_nodes=3):
"""
:param context: test context
:param num_nodes: number of Ignite nodes.
"""
- modules = modules or []
- modules.extend(["ignite-spark"])
-
- IgniteAwareService.__init__(self, context, num_nodes, modules, False,
version, properties, None)
+ super(SparkService, self).__init__(context, num_nodes)
self.log_level = "DEBUG"
@@ -59,11 +54,14 @@ class SparkService(IgniteAwareService):
}
def start(self):
- Service.start(self)
+ BackgroundThreadService.start(self)
self.logger.info("Waiting for Spark to start...")
def start_cmd(self, node):
+ """
+ Prepare command to start Spark nodes
+ """
if node == self.nodes[0]:
script = "start-master.sh"
else:
@@ -77,8 +75,7 @@ class SparkService(IgniteAwareService):
return cmd
- # pylint: disable=W0221
- def start_node(self, node, timeout_sec=30):
+ def start_node(self, node):
self.init_persistent(node)
cmd = self.start_cmd(node)
@@ -93,6 +90,7 @@ class SparkService(IgniteAwareService):
self.logger.debug("Monitoring - %s" % log_file)
+ timeout_sec = 30
with node.account.monitor_log(log_file) as monitor:
node.account.ssh(cmd)
monitor.wait_until(log_msg, timeout_sec=timeout_sec, backoff_sec=5,
@@ -108,11 +106,17 @@ class SparkService(IgniteAwareService):
node.account.ssh(os.path.join(SparkService.INSTALL_DIR, "sbin",
"stop-slave.sh"))
def clean_node(self, node):
+ """
+ Clean spark persistence files
+ """
node.account.kill_java_processes(self.java_class_name(node),
clean_shutdown=False, allow_fail=True)
node.account.ssh("sudo rm -rf -- %s" %
SparkService.SPARK_PERSISTENT_ROOT, allow_fail=False)
def pids(self, node):
+ """
+ :return: list of service pids on specific node
+ """
try:
cmd = "jcmd | grep -e %s | awk '{print $1}'" %
self.java_class_name(node)
return list(node.account.ssh_capture(cmd, allow_fail=True,
callback=int))
diff --git
a/modules/ducktests/tests/ignitetest/services/utils/control_utility.py
b/modules/ducktests/tests/ignitetest/services/utils/control_utility.py
index ed91d18..2c13301 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/control_utility.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/control_utility.py
@@ -140,8 +140,8 @@ class ControlUtility:
return output
def __form_cmd(self, node, cmd):
- return self._cluster.path.script("%s --host %s %s" %
(self.BASE_COMMAND, node.account.externally_routable_ip,
- cmd))
+ return self._cluster.spec.path.script("%s --host %s %s" %
+ (self.BASE_COMMAND,
node.account.externally_routable_ip, cmd))
@staticmethod
def __parse_output(raw_output):
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
b/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
index 0b5e18f..77e48d7 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_aware.py
@@ -17,62 +17,34 @@
This module contains the base class to build services aware of Ignite.
"""
-import os
from abc import abstractmethod, ABCMeta
from ducktape.services.background_thread import BackgroundThreadService
from ducktape.utils.util import wait_until
from six import add_metaclass
-from ignitetest.services.utils.ignite_config import IgniteLoggerConfig,
IgniteServerConfig, IgniteClientConfig
-from ignitetest.services.utils.ignite_path import IgnitePath
+from ignitetest.services.utils.ignite_spec import resolve_spec
from ignitetest.services.utils.jmx_utils import ignite_jmx_mixin
-from ignitetest.tests.utils.version import IgniteVersion
+from ignitetest.services.utils.ignite_persistence import IgnitePersistenceAware
@add_metaclass(ABCMeta)
-class IgniteAwareService(BackgroundThreadService):
+class IgniteAwareService(BackgroundThreadService, IgnitePersistenceAware):
"""
The base class to build services aware of Ignite.
"""
- # Root directory for persistent output
- PERSISTENT_ROOT = "/mnt/service"
- STDOUT_STDERR_CAPTURE = os.path.join(PERSISTENT_ROOT, "console.log")
- WORK_DIR = os.path.join(PERSISTENT_ROOT, "work")
- CONFIG_FILE = os.path.join(PERSISTENT_ROOT, "ignite-config.xml")
- LOG4J_CONFIG_FILE = os.path.join(PERSISTENT_ROOT, "ignite-log4j.xml")
-
- logs = {
- "console_log": {
- "path": STDOUT_STDERR_CAPTURE,
- "collect_default": True}
- }
# pylint: disable=R0913
- def __init__(self, context, num_nodes, modules, client_mode, version,
properties, jvm_options):
+ def __init__(self, context, num_nodes, properties, **kwargs):
+ """
+ **kwargs are params that passed to IgniteSpec
+ """
super(IgniteAwareService, self).__init__(context, num_nodes)
- global_jvm_options = context.globals.get("jvm_opts", "")
-
- service_jvm_options = " ".join(map(lambda x: '-J' + x, jvm_options))
if jvm_options else ""
-
- self.jvm_options = " ".join(filter(None, [global_jvm_options,
service_jvm_options]))
-
self.log_level = "DEBUG"
self.properties = properties
- if isinstance(version, IgniteVersion):
- self.version = version
- else:
- self.version = IgniteVersion(version)
-
- self.path = IgnitePath(self.version, context)
- self.client_mode = client_mode
-
- libs = modules or []
- libs.extend(["ignite-log4j"])
-
- self.user_libs = list(map(lambda m: self.path.module(m) + "/*", libs))
+ self.spec = resolve_spec(self, context, **kwargs)
def start_node(self, node):
self.init_persistent(node)
@@ -88,26 +60,15 @@ class IgniteAwareService(BackgroundThreadService):
Init persistent directory.
:param node: Ignite service node.
"""
- logger_config = IgniteLoggerConfig().render(work_dir=self.WORK_DIR)
-
- node.account.mkdirs(self.PERSISTENT_ROOT)
+ super(IgniteAwareService, self).init_persistent(node)
- node_config = self.config().render(config_dir=self.PERSISTENT_ROOT,
- work_dir=self.WORK_DIR,
- properties=self.properties,
-
consistent_id=node.account.externally_routable_ip)
+ node_config =
self.spec.config().render(config_dir=self.PERSISTENT_ROOT,
+ work_dir=self.WORK_DIR,
+ properties=self.properties,
+
consistent_id=node.account.externally_routable_ip)
setattr(node, "consistent_id", node.account.externally_routable_ip)
node.account.create_file(self.CONFIG_FILE, node_config)
- node.account.create_file(self.LOG4J_CONFIG_FILE, logger_config)
-
- @abstractmethod
- def start_cmd(self, node):
- """
- Start up command for service.
- :param node: Ignite service node.
- """
- raise NotImplementedError
@abstractmethod
def pids(self, node):
@@ -117,18 +78,9 @@ class IgniteAwareService(BackgroundThreadService):
"""
raise NotImplementedError
- def config(self):
- """
- :return: Ignite node configuration.
- """
- if self.client_mode:
- return IgniteClientConfig(self.context)
-
- return IgniteServerConfig(self.context)
-
# pylint: disable=W0613
def _worker(self, idx, node):
- cmd = self.start_cmd(node)
+ cmd = self.spec.command()
self.logger.debug("Attempting to start Application Service on %s with
command: %s" % (str(node.account), cmd))
@@ -141,7 +93,6 @@ class IgniteAwareService(BackgroundThreadService):
"""
return len(self.pids(node)) > 0
- # pylint: disable=R0913
def await_event_on_node(self, evt_message, node, timeout_sec,
from_the_beginning=False, backoff_sec=5):
"""
Await for specific event message in a node's log file.
@@ -171,16 +122,3 @@ class IgniteAwareService(BackgroundThreadService):
for node in self.nodes:
self.await_event_on_node(evt_message, node, timeout_sec,
from_the_beginning=from_the_beginning,
backoff_sec=backoff_sec)
-
- def execute(self, command):
- """
- Execute command on all nodes.
- :param command: Command to execute.
- """
- for node in self.nodes:
- cmd = "%s 1>> %s 2>> %s" % \
- (self.path.script(command),
- self.STDOUT_STDERR_CAPTURE,
- self.STDOUT_STDERR_CAPTURE)
-
- node.account.ssh(cmd)
diff --git
a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware_app.py
b/modules/ducktests/tests/ignitetest/services/utils/ignite_aware_app.py
deleted file mode 100644
index 29e0a2c..0000000
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_aware_app.py
+++ /dev/null
@@ -1,143 +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.
-
-"""
-This module contains the base class to build Ignite aware application written
on java.
-"""
-
-import base64
-import json
-import re
-
-from ignitetest.services.utils.ignite_aware import IgniteAwareService
-
-
-class IgniteAwareApplicationService(IgniteAwareService):
- """
- The base class to build Ignite aware application written on java.
- """
-
- # pylint: disable=R0913
- def __init__(self, context, java_class_name, modules, client_mode,
version, properties, params, jvm_options,
- timeout_sec, start_ignite=False,
-
service_java_class_name="org.apache.ignite.internal.ducktest.utils.IgniteAwareApplicationService"):
- super(IgniteAwareApplicationService, self).__init__(context, 1,
modules, client_mode, version, properties,
- jvm_options)
-
- self.servicejava_class_name = service_java_class_name
- self.java_class_name = java_class_name
- self.timeout_sec = timeout_sec
- self.stop_timeout_sec = 10
- self.params = params
- self.start_ignite = start_ignite
-
- def start(self):
- super(IgniteAwareApplicationService, self).start()
-
- self.logger.info("Waiting for Ignite aware Application (%s) to
start..." % self.java_class_name)
-
- self.await_event("Topology snapshot", self.timeout_sec,
from_the_beginning=True)
-
self.await_event("IGNITE_APPLICATION_INITIALIZED\\|IGNITE_APPLICATION_BROKEN",
self.timeout_sec,
- from_the_beginning=True)
-
- try:
- self.await_event("IGNITE_APPLICATION_INITIALIZED", 1,
from_the_beginning=True)
- except Exception:
- raise Exception("Java application execution failed. %s" %
self.extract_result("ERROR"))
-
- def start_cmd(self, node):
- cmd = self.env()
- cmd += "%s %s %s 1>> %s 2>> %s &" % \
- (self.path.script("ignite.sh"),
- self.jvm_opts(),
- self.app_args(),
- self.STDOUT_STDERR_CAPTURE,
- self.STDOUT_STDERR_CAPTURE)
- return cmd
-
- # pylint: disable=W0221
- def stop_node(self, node, clean_shutdown=True, timeout_sec=20):
- self.logger.info("%s Stopping node %s" % (self.__class__.__name__,
str(node.account)))
- node.account.kill_java_processes(self.servicejava_class_name,
clean_shutdown=clean_shutdown, allow_fail=True)
-
- stopped = self.wait_node(node, timeout_sec=self.stop_timeout_sec)
- assert stopped, "Node %s: did not stop within the specified timeout of
%s seconds" % \
- (str(node.account), str(self.stop_timeout_sec))
-
-
self.await_event("IGNITE_APPLICATION_FINISHED\\|IGNITE_APPLICATION_BROKEN",
from_the_beginning=True,
- timeout_sec=timeout_sec)
-
- def clean_node(self, node):
- if self.alive(node):
- self.logger.warn("%s %s was still alive at cleanup time. Killing
forcefully..." %
- (self.__class__.__name__, node.account))
-
- node.account.kill_java_processes(self.servicejava_class_name,
clean_shutdown=False, allow_fail=True)
-
- node.account.ssh("rm -rf %s" % self.PERSISTENT_ROOT, allow_fail=False)
-
- def app_args(self):
- """
- :return: Application arguments.
- """
- args = ",".join([str(self.start_ignite), self.java_class_name,
IgniteAwareApplicationService.CONFIG_FILE])
-
- if self.params != "":
- args = ",".join([args,
str(base64.b64encode(json.dumps(self.params).encode("UTF-8")))])
-
- return args
-
- def pids(self, node):
- return node.account.java_pids(self.servicejava_class_name)
-
- def jvm_opts(self):
- """
- :return: Application JVM options.
- """
- return "-J-DIGNITE_SUCCESS_FILE=" + self.PERSISTENT_ROOT +
"/success_file " + \
- "-J-Dlog4j.configDebug=true " \
- "-J-Xmx1G " \
- "-J-ea " \
- "-J-DIGNITE_ALLOW_ATOMIC_OPS_IN_TX=false " + self.jvm_options
-
- def env(self):
- """
- :return: Export string of additional environment variables.
- """
- if not self.version.is_dev:
- # Jackson requred to parse application params at java side.
Release's version should be used.
- for line in self.nodes[0].account.ssh_capture(
- "ls -d %s/libs/optional/ignite-aws/* | grep jackson | tr
'\n' ':' | sed 's/.$//'" % self.path.home):
- self.user_libs.extend([line])
-
- return "export MAIN_CLASS={main_class};
".format(main_class=self.servicejava_class_name) + \
- "export EXCLUDE_TEST_CLASSES=true; " + \
- "export IGNITE_LOG_DIR={log_dir};
".format(log_dir=self.PERSISTENT_ROOT) + \
- "export
USER_LIBS=%s:/opt/ignite-dev/modules/ducktests/target/*; " %
(":".join(self.user_libs))
-
- def extract_result(self, name):
- """
- :param name: Result parameter's name.
- :return: Extracted result of application run.
- """
- res = ""
-
- output = self.nodes[0].account.ssh_capture(
- "grep '%s' %s" % (name + "->", self.STDOUT_STDERR_CAPTURE),
allow_fail=False)
-
- for line in output:
- res = re.search("%s(.*)%s" % (name + "->", "<-"), line).group(1)
-
- return res
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_config.py
b/modules/ducktests/tests/ignitetest/services/utils/ignite_config.py
index 90b3bfa..a2bfe3d 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_config.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_config.py
@@ -51,10 +51,7 @@ class IgniteServerConfig(Config):
"""
Ignite server node configuration.
"""
- def __init__(self, context):
- path = DEFAULT_IGNITE_CONF
- if 'ignite_server_config_path' in context.globals:
- path = context.globals['ignite_server_config_path']
+ def __init__(self, path=DEFAULT_IGNITE_CONF):
super(IgniteServerConfig, self).__init__(path)
@@ -62,10 +59,7 @@ class IgniteClientConfig(Config):
"""
Ignite client node configuration.
"""
- def __init__(self, context):
- path = DEFAULT_IGNITE_CONF
- if 'ignite_client_config_path' in context.globals:
- path = context.globals['ignite_client_config_path']
+ def __init__(self, path=DEFAULT_IGNITE_CONF):
super(IgniteClientConfig, self).__init__(path)
self.default_params.update(client_mode=True)
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_path.py
b/modules/ducktests/tests/ignitetest/services/utils/ignite_path.py
index 2177e9b..4089112 100644
--- a/modules/ducktests/tests/ignitetest/services/utils/ignite_path.py
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_path.py
@@ -31,11 +31,9 @@ class IgnitePath:
SCRATCH_ROOT = "/mnt"
IGNITE_INSTALL_ROOT = "/opt"
- def __init__(self, version, context):
+ def __init__(self, version, project="ignite"):
self.version = version
- self.project = context.globals.get("project", "ignite")
-
- home_dir = "%s-%s" % (self.project, str(self.version))
+ home_dir = "%s-%s" % (project, str(self.version))
self.home = os.path.join(IgnitePath.IGNITE_INSTALL_ROOT, home_dir)
def module(self, module_name):
@@ -46,7 +44,7 @@ class IgnitePath:
if self.version.is_dev:
module_path = os.path.join("modules", module_name, "target")
else:
- module_path = os.path.join("libs", "optional", module_name)
+ module_path = os.path.join("libs", "optional", "ignite-%s" %
module_name)
return os.path.join(self.home, module_path)
diff --git
a/modules/ducktests/tests/ignitetest/services/utils/ignite_persistence.py
b/modules/ducktests/tests/ignitetest/services/utils/ignite_persistence.py
new file mode 100644
index 0000000..9c79b2e
--- /dev/null
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_persistence.py
@@ -0,0 +1,64 @@
+# 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.
+
+"""
+This module contains classes that represent persistent artifacts of tests
+"""
+
+import os
+
+from ignitetest.services.utils.ignite_config import IgniteLoggerConfig
+
+
+class PersistenceAware(object):
+ """
+ This class contains basic persistence artifacts
+ """
+ # Root directory for persistent output
+ PERSISTENT_ROOT = "/mnt/service"
+ STDOUT_STDERR_CAPTURE = os.path.join(PERSISTENT_ROOT, "console.log")
+
+ logs = {
+ "console_log": {
+ "path": STDOUT_STDERR_CAPTURE,
+ "collect_default": True
+ }
+ }
+
+ def init_persistent(self, node):
+ """
+ Init persistent directory.
+ :param node: Service node.
+ """
+ node.account.mkdirs(self.PERSISTENT_ROOT)
+
+
+class IgnitePersistenceAware(PersistenceAware):
+ """
+ This class contains Ignite persistence artifacts
+ """
+ WORK_DIR = os.path.join(PersistenceAware.PERSISTENT_ROOT, "work")
+ CONFIG_FILE = os.path.join(PersistenceAware.PERSISTENT_ROOT,
"ignite-config.xml")
+ LOG4J_CONFIG_FILE = os.path.join(PersistenceAware.PERSISTENT_ROOT,
"ignite-log4j.xml")
+
+ def init_persistent(self, node):
+ """
+ Init persistent directory.
+ :param node: Ignite service node.
+ """
+ super(IgnitePersistenceAware, self).init_persistent(node)
+
+ logger_config = IgniteLoggerConfig().render(work_dir=self.WORK_DIR)
+ node.account.create_file(self.LOG4J_CONFIG_FILE, logger_config)
diff --git a/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
b/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
new file mode 100644
index 0000000..32468a9
--- /dev/null
+++ b/modules/ducktests/tests/ignitetest/services/utils/ignite_spec.py
@@ -0,0 +1,213 @@
+# 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.
+
+"""
+This module contains Spec classes that describes config and command line to
start Ignite services
+"""
+
+import base64
+import importlib
+import json
+
+from ignitetest.services.utils.ignite_path import IgnitePath
+from ignitetest.services.utils.ignite_config import IgniteClientConfig,
IgniteServerConfig
+from ignitetest.utils.version import DEV_BRANCH, IgniteVersion
+
+from ignitetest.services.utils.ignite_persistence import IgnitePersistenceAware
+
+
+# pylint: disable=no-else-return
+def resolve_spec(service, context, **kwargs):
+ """
+ Resolve Spec classes for IgniteService and IgniteApplicationService
+ """
+ def _resolve_spec(name, default):
+ if name in context.globals:
+ fqdn = context.globals[name]
+ (module, clazz) = fqdn.rsplit('.', 1)
+ module = importlib.import_module(module)
+ return getattr(module, clazz)
+ return default
+
+ def is_impl(impl):
+ classes = map(lambda s: s.__name__, service.__class__.mro())
+ impl_filter = list(filter(lambda c: c == impl, classes))
+ return len(impl_filter) > 0
+
+ if is_impl("IgniteService"):
+ return _resolve_spec("NodeSpec", ApacheIgniteNodeSpec)(**kwargs)
+ elif is_impl("IgniteApplicationService"):
+ return _resolve_spec("AppSpec",
ApacheIgniteApplicationSpec)(context=context, **kwargs)
+ else:
+ raise Exception("There is no specification for class %s" %
type(service))
+
+
+class IgniteSpec(object):
+ """
+ This class is a basic Spec
+ """
+ def __init__(self, version, project, client_mode, jvm_opts):
+ if isinstance(version, IgniteVersion):
+ self.version = version
+ else:
+ self.version = IgniteVersion(version)
+
+ self.path = IgnitePath(self.version, project)
+ self.envs = {}
+ self.jvm_opts = jvm_opts or []
+ self.client_mode = client_mode
+
+ def config(self):
+ """
+ :return: config that service will use to start on a node
+ """
+ if self.client_mode:
+ return IgniteClientConfig()
+ return IgniteServerConfig()
+
+ def command(self):
+ """
+ :return: string that represents command to run service on a node
+ """
+ raise NotImplementedError()
+
+ def _envs(self):
+ """
+ :return: line with exports env variables: export A=B; export C=D;
+ """
+ exports = ["export %s=%s" % (key, self.envs[key]) for key in self.envs]
+ return "; ".join(exports) + ";"
+
+ def _jvm_opts(self):
+ """
+ :return: line with extra JVM params for ignite.sh script:
-J-Dparam=value -J-ea
+ """
+ opts = ["-J%s" % o for o in self.jvm_opts]
+ return " ".join(opts)
+
+
+class IgniteNodeSpec(IgniteSpec, IgnitePersistenceAware):
+ """
+ Spec to run ignite node
+ """
+ def __init__(self, **kwargs):
+ IgniteSpec.__init__(self, **kwargs)
+
+ def command(self):
+ cmd = "%s %s %s %s 1>> %s 2>> %s &" % \
+ (self._envs(),
+ self.path.script("ignite.sh"),
+ self._jvm_opts(),
+ self.CONFIG_FILE,
+ self.STDOUT_STDERR_CAPTURE,
+ self.STDOUT_STDERR_CAPTURE)
+
+ return cmd
+
+
+class IgniteApplicationSpec(IgniteSpec, IgnitePersistenceAware):
+ """
+ Spec to run ignite application
+ """
+ def __init__(self, **kwargs):
+ super(IgniteApplicationSpec, self).__init__(**kwargs)
+ self.args = ""
+
+ def _app_args(self):
+ return ",".join(self.args)
+
+ def command(self):
+ cmd = "%s %s %s %s 1>> %s 2>> %s &" % \
+ (self._envs(),
+ self.path.script("ignite.sh"),
+ self._jvm_opts(),
+ self._app_args(),
+ self.STDOUT_STDERR_CAPTURE,
+ self.STDOUT_STDERR_CAPTURE)
+
+ return cmd
+
+
+###
+
+
+class ApacheIgniteNodeSpec(IgniteNodeSpec, IgnitePersistenceAware):
+ """
+ Implementation IgniteNodeSpec for Apache Ignite project
+ """
+ def __init__(self, modules, **kwargs):
+ super(ApacheIgniteNodeSpec, self).__init__(project="ignite", **kwargs)
+
+ libs = (modules or [])
+ libs.append("log4j")
+ libs = list(map(lambda m: self.path.module(m) + "/*", libs))
+
+ self.envs = {
+ 'EXCLUDE_TEST_CLASSES': 'true',
+ 'IGNITE_LOG_DIR': self.PERSISTENT_ROOT,
+ 'USER_LIBS': ":".join(libs)
+ }
+
+ self.jvm_opts.extend([
+ "-DIGNITE_SUCCESS_FILE=" + self.PERSISTENT_ROOT + "/success_file",
+ "-Dlog4j.configDebug=true"
+ ])
+
+
+class ApacheIgniteApplicationSpec(IgniteApplicationSpec,
IgnitePersistenceAware):
+ """
+ Implementation IgniteApplicationSpec for Apache Ignite project
+ """
+ # pylint: disable=too-many-arguments
+ def __init__(self, context, modules, servicejava_class_name,
java_class_name, params, start_ignite, **kwargs):
+ super(ApacheIgniteApplicationSpec, self).__init__(project="ignite",
**kwargs)
+ self.context = context
+
+ libs = modules or []
+ libs.extend(["log4j"])
+
+ libs = [self.path.module(m) + "/*" for m in libs]
+ libs.append(IgnitePath(DEV_BRANCH).module("ducktests") + "/*")
+ libs.extend(self.__jackson())
+
+ self.envs = {
+ "MAIN_CLASS": servicejava_class_name,
+ "EXCLUDE_TEST_CLASSES": "true",
+ "IGNITE_LOG_DIR": self.PERSISTENT_ROOT,
+ "USER_LIBS": ":".join(libs)
+ }
+
+ self.jvm_opts.extend([
+ "-DIGNITE_SUCCESS_FILE=" + self.PERSISTENT_ROOT + "/success_file ",
+ "-Dlog4j.configDebug=true",
+ "-Xmx1G",
+ "-ea",
+ "-DIGNITE_ALLOW_ATOMIC_OPS_IN_TX=false"
+ ])
+
+ self.args = [
+ str(start_ignite),
+ java_class_name,
+ self.CONFIG_FILE,
+ str(base64.b64encode(json.dumps(params).encode("UTF-8")))
+ ]
+
+ def __jackson(self):
+ if not self.version.is_dev:
+ aws = self.path.module("aws")
+ return self.context.cluster.nodes[0].account.ssh_capture(
+ "ls -d %s/* | grep jackson | tr '\n' ':' | sed 's/.$//'" % aws)
+ else:
+ return []
diff --git
a/modules/ducktests/tests/ignitetest/tests/add_node_rebalance_test.py
b/modules/ducktests/tests/ignitetest/tests/add_node_rebalance_test.py
index 28fc4fb..0eebea8 100644
--- a/modules/ducktests/tests/ignitetest/tests/add_node_rebalance_test.py
+++ b/modules/ducktests/tests/ignitetest/tests/add_node_rebalance_test.py
@@ -22,8 +22,8 @@ from ducktape.mark.resource import cluster
from ignitetest.services.ignite import IgniteService
from ignitetest.services.ignite_app import IgniteApplicationService
-from ignitetest.tests.utils.ignite_test import IgniteTest
-from ignitetest.tests.utils.version import DEV_BRANCH, IgniteVersion, LATEST
+from ignitetest.utils.ignite_test import IgniteTest
+from ignitetest.utils.version import DEV_BRANCH, IgniteVersion, LATEST
# pylint: disable=W0223
diff --git a/modules/ducktests/tests/ignitetest/tests/cellular_affinity_test.py
b/modules/ducktests/tests/ignitetest/tests/cellular_affinity_test.py
index 8087012..718d5da 100644
--- a/modules/ducktests/tests/ignitetest/tests/cellular_affinity_test.py
+++ b/modules/ducktests/tests/ignitetest/tests/cellular_affinity_test.py
@@ -23,8 +23,8 @@ from jinja2 import Template
from ignitetest.services.ignite import IgniteService
from ignitetest.services.ignite_app import IgniteApplicationService
-from ignitetest.tests.utils.ignite_test import IgniteTest
-from ignitetest.tests.utils.version import DEV_BRANCH
+from ignitetest.utils.ignite_test import IgniteTest
+from ignitetest.utils.version import DEV_BRANCH
# pylint: disable=W0223
diff --git a/modules/ducktests/tests/ignitetest/tests/control_utility_test.py
b/modules/ducktests/tests/ignitetest/tests/control_utility_test.py
index a1b00de..f2c1a4c 100644
--- a/modules/ducktests/tests/ignitetest/tests/control_utility_test.py
+++ b/modules/ducktests/tests/ignitetest/tests/control_utility_test.py
@@ -23,9 +23,9 @@ from jinja2 import Template
from ignitetest.services.ignite import IgniteService
from ignitetest.services.utils.control_utility import ControlUtility,
ControlUtilityError
-from ignitetest.tests.utils import version_if
-from ignitetest.tests.utils.ignite_test import IgniteTest
-from ignitetest.tests.utils.version import DEV_BRANCH, LATEST_2_8,
IgniteVersion, LATEST_2_7, V_2_8_0
+from ignitetest.utils import version_if
+from ignitetest.utils.ignite_test import IgniteTest
+from ignitetest.utils.version import DEV_BRANCH, LATEST_2_8, IgniteVersion,
LATEST_2_7, V_2_8_0
# pylint: disable=W0223
diff --git a/modules/ducktests/tests/ignitetest/tests/discovery_test.py
b/modules/ducktests/tests/ignitetest/tests/discovery_test.py
index 8d93396..ee94d2c 100644
--- a/modules/ducktests/tests/ignitetest/tests/discovery_test.py
+++ b/modules/ducktests/tests/ignitetest/tests/discovery_test.py
@@ -29,8 +29,8 @@ from ignitetest.services.ignite import IgniteService
from ignitetest.services.utils.ignite_aware import IgniteAwareService
from ignitetest.services.utils.time_utils import epoch_mills
from ignitetest.services.zk.zookeeper import ZookeeperService
-from ignitetest.tests.utils.ignite_test import IgniteTest
-from ignitetest.tests.utils.version import DEV_BRANCH, LATEST_2_7
+from ignitetest.utils.ignite_test import IgniteTest
+from ignitetest.utils.version import DEV_BRANCH, LATEST_2_7
# pylint: disable=W0223
@@ -165,7 +165,7 @@ class DiscoveryTest(IgniteTest):
self.servers = IgniteService(
self.test_context,
num_nodes=self.NUM_NODES,
- modules=["ignite-zookeeper"],
+ modules=["zookeeper"],
properties=properties,
version=version)
diff --git a/modules/ducktests/tests/ignitetest/tests/pme_free_switch_test.py
b/modules/ducktests/tests/ignitetest/tests/pme_free_switch_test.py
index 108fa9d..774ab41 100644
--- a/modules/ducktests/tests/ignitetest/tests/pme_free_switch_test.py
+++ b/modules/ducktests/tests/ignitetest/tests/pme_free_switch_test.py
@@ -25,8 +25,8 @@ from ducktape.mark.resource import cluster
from ignitetest.services.ignite import IgniteService
from ignitetest.services.ignite_app import IgniteApplicationService
from ignitetest.services.utils.control_utility import ControlUtility
-from ignitetest.tests.utils.ignite_test import IgniteTest
-from ignitetest.tests.utils.version import DEV_BRANCH, LATEST_2_7, V_2_8_0,
IgniteVersion
+from ignitetest.utils.ignite_test import IgniteTest
+from ignitetest.utils.version import DEV_BRANCH, LATEST_2_7, V_2_8_0,
IgniteVersion
# pylint: disable=W0223
diff --git a/modules/ducktests/tests/ignitetest/tests/smoke_test.py
b/modules/ducktests/tests/ignitetest/tests/smoke_test.py
index a52f382..a8dfc87 100644
--- a/modules/ducktests/tests/ignitetest/tests/smoke_test.py
+++ b/modules/ducktests/tests/ignitetest/tests/smoke_test.py
@@ -23,8 +23,8 @@ from ignitetest.services.ignite import IgniteService
from ignitetest.services.ignite_app import IgniteApplicationService
from ignitetest.services.spark import SparkService
from ignitetest.services.zk.zookeeper import ZookeeperService
-from ignitetest.tests.utils.ignite_test import IgniteTest
-from ignitetest.tests.utils.version import DEV_BRANCH
+from ignitetest.utils.ignite_test import IgniteTest
+from ignitetest.utils.version import DEV_BRANCH
# pylint: disable=W0223
@@ -42,6 +42,18 @@ class SmokeServicesTest(IgniteTest):
pass
@parametrize(version=str(DEV_BRANCH))
+ def test_ignite_start_stop(self, version):
+ """
+ Test that IgniteService correctly start and stop
+ """
+ ignite = IgniteService(
+ self.test_context,
+ num_nodes=1,
+ version=version)
+ ignite.start()
+ ignite.stop()
+
+ @parametrize(version=str(DEV_BRANCH))
def test_ignite_app_start_stop(self, version):
"""
Test that IgniteService and IgniteApplicationService correctly start
and stop
@@ -61,12 +73,11 @@ class SmokeServicesTest(IgniteTest):
app.stop()
ignite.stop()
- @parametrize(version=str(DEV_BRANCH))
- def test_spark_start_stop(self, version):
+ def test_spark_start_stop(self):
"""
Test that SparkService correctly start and stop
"""
- spark = SparkService(self.test_context, version=version, num_nodes=2)
+ spark = SparkService(self.test_context, num_nodes=2)
spark.start()
spark.stop()
diff --git a/modules/ducktests/tests/ignitetest/tests/utils/__init__.py
b/modules/ducktests/tests/ignitetest/utils/__init__.py
similarity index 100%
rename from modules/ducktests/tests/ignitetest/tests/utils/__init__.py
rename to modules/ducktests/tests/ignitetest/utils/__init__.py
diff --git a/modules/ducktests/tests/ignitetest/tests/utils/_mark.py
b/modules/ducktests/tests/ignitetest/utils/_mark.py
similarity index 97%
rename from modules/ducktests/tests/ignitetest/tests/utils/_mark.py
rename to modules/ducktests/tests/ignitetest/utils/_mark.py
index d5ea8cf..c4b2b35 100644
--- a/modules/ducktests/tests/ignitetest/tests/utils/_mark.py
+++ b/modules/ducktests/tests/ignitetest/utils/_mark.py
@@ -19,7 +19,7 @@ Module contains useful test decorators.
import six
from ducktape.mark._mark import Ignore, Mark
-from ignitetest.tests.utils.version import IgniteVersion
+from ignitetest.utils.version import IgniteVersion
class VersionIf(Ignore):
diff --git a/modules/ducktests/tests/ignitetest/tests/utils/ignite_test.py
b/modules/ducktests/tests/ignitetest/utils/ignite_test.py
similarity index 100%
rename from modules/ducktests/tests/ignitetest/tests/utils/ignite_test.py
rename to modules/ducktests/tests/ignitetest/utils/ignite_test.py
diff --git a/modules/ducktests/tests/ignitetest/tests/utils/version.py
b/modules/ducktests/tests/ignitetest/utils/version.py
similarity index 100%
rename from modules/ducktests/tests/ignitetest/tests/utils/version.py
rename to modules/ducktests/tests/ignitetest/utils/version.py
diff --git a/modules/ducktests/tests/setup.cfg
b/modules/ducktests/tests/setup.cfg
deleted file mode 100644
index 974d5bb..0000000
--- a/modules/ducktests/tests/setup.cfg
+++ /dev/null
@@ -1,30 +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.
-
-# pytest configuration (can also be defined in tox.ini or pytest.ini file)
-#
-# This file defines naming convention and root search directory for
autodiscovery of
-# pytest unit tests for the system test service classes.
-#
-# To ease possible confusion, 'check' instead of 'test' as a prefix for unit
tests, since
-# many system test files, classes, and methods have 'test' somewhere in the
name
-[pytest]
-testpaths=unit
-python_files=check_*.py
-python_classes=Check
-python_functions=check_*
-
-# don't search inside any resources directory for unit tests
-norecursedirs = resources
diff --git a/modules/ducktests/tests/setup.py b/modules/ducktests/tests/setup.py
index e82bdfb..8ad70b0 100644
--- a/modules/ducktests/tests/setup.py
+++ b/modules/ducktests/tests/setup.py
@@ -14,36 +14,13 @@
# limitations under the License.
import re
-import sys
-
from setuptools import find_packages, setup
-from setuptools.command.test import test as TestCommand
-version = ''
+
with open('ignitetest/__init__.py', 'r') as fd:
version = re.search(r'^__version__\s*=\s*[\'"]([^\'"]*)[\'"]', fd.read(),
re.MULTILINE).group(1)
-class PyTest(TestCommand):
- user_options = [('pytest-args=', 'a', "Arguments to pass to py.test")]
-
- def initialize_options(self):
- TestCommand.initialize_options(self)
- self.pytest_args = []
-
- def finalize_options(self):
- TestCommand.finalize_options(self)
- self.test_args = []
- self.test_suite = True
-
- def run_tests(self):
- # import here, cause outside the eggs aren't loaded
- import pytest
- print(self.pytest_args)
- errno = pytest.main(self.pytest_args)
- sys.exit(errno)
-
-
# Note: when changing the version of ducktape, also revise
tests/docker/Dockerfile
setup(name="ignitetest",
version=version,
@@ -51,9 +28,7 @@ setup(name="ignitetest",
author="Apache Ignite",
platforms=["any"],
license="apache2.0",
- packages=find_packages(),
+ packages=find_packages(exclude=["ignitetest.tests",
"ignitetest.tests.*"]),
include_package_data=True,
- install_requires=["ducktape==0.7.8", "requests==2.20.0"],
- tests_require=["pytest", "mock", "monotonic"],
- cmdclass={'test': PyTest}
+ install_requires=["ducktape==0.7.8", "requests==2.22.0",
"monotonic==1.5"]
)