This is an automated email from the ASF dual-hosted git repository. jerrypeng pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/pulsar.git
The following commit(s) were added to refs/heads/master by this push: new 1a1cf22 adding Python function instance unit test (#2850) 1a1cf22 is described below commit 1a1cf226a718fbaece393e8e1ed9584b59a8752b Author: Boyang Jerry Peng <jerry.boyang.p...@gmail.com> AuthorDate: Fri Oct 26 10:14:01 2018 -0700 adding Python function instance unit test (#2850) * adding python function instance unittests * adding license headers --- bin/pulsar | 2 +- bin/pulsar-admin | 2 +- distribution/server/src/assemble/bin.xml | 2 +- pulsar-client-cpp/run-unit-tests.sh | 4 ++ pulsar-functions/instance/pom.xml | 31 ++++++++++++ .../src/scripts/run_python_instance_tests.sh | 30 +++++++++++ .../src/test/python/test_python_instance.py | 58 ++++++++++++++++++++++ pulsar-functions/runtime/pom.xml | 28 ----------- 8 files changed, 126 insertions(+), 31 deletions(-) diff --git a/bin/pulsar b/bin/pulsar index 9cacfe7..02a81a0 100755 --- a/bin/pulsar +++ b/bin/pulsar @@ -94,7 +94,7 @@ fi # find the python instance location if [ ! -f "${PY_INSTANCE_FILE}" ]; then # didn't find a released python instance, then search the built python instance - BUILT_PY_INSTANCE_FILE="${FUNCTIONS_HOME}/runtime/target/python-instance/python_instance_main.py" + BUILT_PY_INSTANCE_FILE="${FUNCTIONS_HOME}/instance/target/python-instance/python_instance_main.py" if [ -z "${BUILT_PY_INSTANCE_FILE}" ]; then echo "\nCouldn't find pulsar-functions python instance."; echo "Make sure you've run 'mvn package'\n"; diff --git a/bin/pulsar-admin b/bin/pulsar-admin index 1a1339d..39d1239 100755 --- a/bin/pulsar-admin +++ b/bin/pulsar-admin @@ -130,7 +130,7 @@ fi # find the python instance location if [ ! -f "${PY_INSTANCE_FILE}" ]; then # didn't find a released python instance, then search the built python instance - BUILT_PY_INSTANCE_FILE="${FUNCTIONS_HOME}/runtime/target/python-instance/python_instance_main.py" + BUILT_PY_INSTANCE_FILE="${FUNCTIONS_HOME}/instance/target/python-instance/python_instance_main.py" if [ -f "${BUILT_PY_INSTANCE_FILE}" ]; then PY_INSTANCE_FILE=${BUILT_PY_INSTANCE_FILE} else diff --git a/distribution/server/src/assemble/bin.xml b/distribution/server/src/assemble/bin.xml index c9ad893..d17d4ff 100644 --- a/distribution/server/src/assemble/bin.xml +++ b/distribution/server/src/assemble/bin.xml @@ -44,7 +44,7 @@ <directory>${basedir}/licenses</directory> </fileSet> <fileSet> - <directory>${basedir}/../../pulsar-functions/runtime/target/python-instance</directory> + <directory>${basedir}/../../pulsar-functions/instance/target/python-instance</directory> <outputDirectory>instances/python-instance</outputDirectory> </fileSet> <fileSet> diff --git a/pulsar-client-cpp/run-unit-tests.sh b/pulsar-client-cpp/run-unit-tests.sh index ed4b6b4..cffe002 100755 --- a/pulsar-client-cpp/run-unit-tests.sh +++ b/pulsar-client-cpp/run-unit-tests.sh @@ -88,6 +88,10 @@ if [ $RES -eq 0 ]; then python pulsar_test.py RES=$? + echo "---- Running Python Function Instance unit tests" + bash /pulsar/pulsar-functions/instance/src/scripts/run_python_instance_tests.sh + RES=$? + popd popd diff --git a/pulsar-functions/instance/pom.xml b/pulsar-functions/instance/pom.xml index e206b11..1c8f3ab 100644 --- a/pulsar-functions/instance/pom.xml +++ b/pulsar-functions/instance/pom.xml @@ -103,4 +103,35 @@ </dependencies> + <build> + <plugins> + <!-- this task is used for copy all python files together to provide a instance directory + for running python instance --> + <plugin> + <groupId>org.apache.maven.plugins</groupId> + <artifactId>maven-antrun-plugin</artifactId> + <executions> + <execution> + <phase>compile</phase> + <goals> + <goal>run</goal> + </goals> + <configuration> + <tasks> + <echo>building python instance</echo> + <mkdir dir="${basedir}/target/python-instance"/> + <copydir src="${basedir}/src/main/python" dest="${basedir}/target/python-instance"/> + <mkdir dir="${basedir}/target/python-instance/pulsar"/> + <copydir src="${basedir}/../../pulsar-client-cpp/python/pulsar" + dest="${basedir}/target/python-instance/pulsar"/> + <mkdir dir="${basedir}/target/python-instance/tests"/> + <copydir src="${basedir}/src/test/python" dest="${basedir}/target/python-instance/tests"/> + </tasks> + </configuration> + </execution> + </executions> + </plugin> + </plugins> + </build> + </project> diff --git a/pulsar-functions/instance/src/scripts/run_python_instance_tests.sh b/pulsar-functions/instance/src/scripts/run_python_instance_tests.sh new file mode 100644 index 0000000..9b33c24 --- /dev/null +++ b/pulsar-functions/instance/src/scripts/run_python_instance_tests.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +# +# 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. +# + + +# Make sure dependencies are installed +pip install mock --user +pip install protobuf --user + +CUR_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" >/dev/null && pwd )" +PULSAR_HOME=$CUR_DIR/../../../../ + +# run instance tests +PULSAR_HOME=${PULSAR_HOME} PYTHONPATH=${PULSAR_HOME}/pulsar-functions/instance/target/python-instance python -m unittest discover -v ${PULSAR_HOME}/pulsar-functions/instance/target/python-instance/tests \ No newline at end of file diff --git a/pulsar-functions/instance/src/test/python/test_python_instance.py b/pulsar-functions/instance/src/test/python/test_python_instance.py new file mode 100644 index 0000000..0b5355f --- /dev/null +++ b/pulsar-functions/instance/src/test/python/test_python_instance.py @@ -0,0 +1,58 @@ +# +# 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. +# + + +# DEPENDENCIES: unittest2,mock + +from contextimpl import ContextImpl +from python_instance import InstanceConfig +from mock import Mock + +import Function_pb2 +import log +import os +import unittest + +class TestContextImpl(unittest.TestCase): + + def setUp(self): + log.init_logger("INFO", "foo", os.environ.get("PULSAR_HOME") + "/conf/functions-logging/console_logging_config.ini") + + def test_context_publish(self): + instance_id = 'test_instance_id' + function_id = 'test_function_id' + function_version = 'test_function_version' + function_details = Function_pb2.FunctionDetails() + max_buffered_tuples = 100; + instance_config = InstanceConfig(instance_id, function_id, function_version, function_details, max_buffered_tuples) + logger = log.Log + pulsar_client = Mock() + producer = Mock() + producer.send_async = Mock(return_value=None) + pulsar_client.create_producer = Mock(return_value=producer) + user_code=__file__ + consumers = None + context_impl = ContextImpl(instance_config, logger, pulsar_client, user_code, consumers) + + context_impl.publish("test_topic_name", "test_message") + + producer.send_async.assert_called_with("test_message", None, properties=None) + + + diff --git a/pulsar-functions/runtime/pom.xml b/pulsar-functions/runtime/pom.xml index 843f5e3..66d245f 100644 --- a/pulsar-functions/runtime/pom.xml +++ b/pulsar-functions/runtime/pom.xml @@ -70,32 +70,4 @@ </dependencies> - <build> - <plugins> - <!-- this task is used for copy all python files together to provide a instance directory - for running python instance --> - <plugin> - <groupId>org.apache.maven.plugins</groupId> - <artifactId>maven-antrun-plugin</artifactId> - <executions> - <execution> - <phase>package</phase> - <goals> - <goal>run</goal> - </goals> - <configuration> - <tasks> - <echo>building python instance</echo> - <mkdir dir="${basedir}/target/python-instance"/> - <copydir src="${basedir}/../instance/src/main/python" dest="${basedir}/target/python-instance"/> - <mkdir dir="${basedir}/target/python-instance/pulsar"/> - <copydir src="${basedir}/../../pulsar-client-cpp/python/pulsar" dest="${basedir}/target/python-instance/pulsar"/> - </tasks> - </configuration> - </execution> - </executions> - </plugin> - </plugins> - </build> - </project>