diff --git a/.circleci/config.yml b/.circleci/config.yml index 90d04601..a7ca401c 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -20,7 +20,7 @@ jobs: executor: << parameters.os >> steps: - checkout - - python/load-cache + #- python/load-cache - run: name: install deps command: | @@ -50,6 +50,75 @@ jobs: path: test-results - store_artifacts: path: htmlcov + + test-splunk: + parameters: + os: + type: executor + splunk-version: + type: string + python-version: + type: string + executor: << parameters.os >> + steps: + - checkout + - run: git submodule sync + - run: git submodule update --init + - run: + name: Install Splunk + command: | + pip install git+https://github.com/pixelb/crudini + export SPLUNK_PRODUCT=splunk + export SPLUNK_VERSION=$(crudini --get deps/build/addonfactory_test_matrix_splunk/splunk_matrix.conf "<>" VERSION) + export SPLUNK_BUILD=$(crudini --get deps/build/addonfactory_test_matrix_splunk/splunk_matrix.conf "<>" BUILD) + export SPLUNK_SLUG=$SPLUNK_VERSION-SPLUNK_BUILD + export SPLUNK_ARCH=x86_64 + export SPLUNK_LINUX_FILENAME=splunk-${SPLUNK_VERSION}-${SPLUNK_BUILD}-Linux-${SPLUNK_ARCH}.tgz + export SPLUNK_BUILD_URL=https://download.splunk.com/products/${SPLUNK_PRODUCT}/releases/${SPLUNK_VERSION}/linux/${SPLUNK_LINUX_FILENAME} + echo $SPLUNK_BUILD_URL + export SPLUNK_HOME=/opt/splunk + wget -qO /tmp/splunk.tgz ${SPLUNK_BUILD_URL} + sudo tar -C /opt -zxf /tmp/splunk.tgz + sudo cp -r examples/data/solnlib_demo $SPLUNK_HOME/etc/apps + sudo cp -r solnlib $SPLUNK_HOME/etc/apps/solnlib_demo/bin/ + sudo mkdir -p $SPLUNK_HOME/etc/apps/Splunk_TA_test/default/ + sudo chown -R $USER:$USER /opt/splunk + ls $SPLUNK_HOME/etc/apps/solnlib_demo/bin/ + echo [user_info] >$SPLUNK_HOME/etc/system/local/user-seed.conf + echo USERNAME=Admin >>$SPLUNK_HOME/etc/system/local/user-seed.conf + echo PASSWORD=Chang3d! >>$SPLUNK_HOME/etc/system/local/user-seed.conf + /opt/splunk/bin/splunk start --accept-license + #- python/load-cache + - run: + name: Install deps + command: | + pip install --upgrade pip + pip install --upgrade virtualenv + unset PYENV_ROOT + curl -L https://github.com/pyenv/pyenv-installer/raw/master/bin/pyenv-installer | bash + export PATH="$HOME/.pyenv/bin:$PATH" + eval "$(pyenv init -)" + pyenv install << parameters.python-version >> + pyenv global << parameters.python-version >> + virtualenv .venv + pip install --upgrade virtualenv + source .venv/bin/activate + pip install -r requirements.txt + pip install -e . + mkdir test-results || true + - python/save-cache + - run: + command: | + source .venv/bin/activate + SPLUNK_HOME=/opt/splunk/ python -m pytest --junitxml=test-results/results.xml -v examples + name: Test + - store_test_results: + path: test-results + - store_artifacts: + path: test-results + - store_artifacts: + path: htmlcov + workflows: main: jobs: @@ -58,3 +127,9 @@ workflows: parameters: os: [linux] python-version: ["2.7.17", "3.7.4"] + - test-splunk: + matrix: + parameters: + os: [linux] + splunk-version: ["7.2", "7.3", "8.0"] + python-version: ["2.7.17", "3.7.4"] diff --git a/.gitignore b/.gitignore index 5f48a64d..114d528f 100644 --- a/.gitignore +++ b/.gitignore @@ -3,7 +3,7 @@ .coverage* *.idea *.DS_Store* -build +/build dist docs/_build docs/solnlib @@ -22,3 +22,6 @@ solnlib.egg-info/ venv/* *.log tools/solution_lib_release_env/* +.python-version +.venv +.vscode/settings.json diff --git a/.gitmodules b/.gitmodules new file mode 100644 index 00000000..803ee42f --- /dev/null +++ b/.gitmodules @@ -0,0 +1,3 @@ +[submodule "deps/build/addonfactory_test_matrix_splunk"] + path = deps/build/addonfactory_test_matrix_splunk + url = git@github.com:splunk/addonfactory_test_matrix_splunk.git diff --git a/.python-version b/.python-version deleted file mode 100644 index a6164926..00000000 --- a/.python-version +++ /dev/null @@ -1 +0,0 @@ -2.7.18 diff --git a/deps/build/addonfactory_test_matrix_splunk b/deps/build/addonfactory_test_matrix_splunk new file mode 160000 index 00000000..a1bb9adb --- /dev/null +++ b/deps/build/addonfactory_test_matrix_splunk @@ -0,0 +1 @@ +Subproject commit a1bb9adbc0a58e4530b1826f9352bd117ebc482a diff --git a/examples/.pytest.expect b/examples/.pytest.expect new file mode 100644 index 00000000..cb39f936 --- /dev/null +++ b/examples/.pytest.expect @@ -0,0 +1,2 @@ +pytest-expect file v1 +(3, 7, 7, 'final', 0) diff --git a/examples/main.py b/examples/main.py index a16143d7..8e91fed6 100644 --- a/examples/main.py +++ b/examples/main.py @@ -1,3 +1,4 @@ +from __future__ import print_function import sys import os import os.path as op @@ -18,8 +19,8 @@ def setup_environment(): - print 'Setup solnlib demo environment...' - print 'Copying %s to %s' % (source_dir, target_dir) + print('Setup solnlib demo environment...') + print('Copying %s to %s' % (source_dir, target_dir)) shutil.copytree(source_dir, target_dir) shutil.copytree(solnlib_lib_dir, solnlib_lib_target_dir) @@ -27,9 +28,9 @@ def setup_environment(): def teardown_environment(): - print 'Teardown solnlib demo environment...' + print('Teardown solnlib demo environment...') os.system(splunk_bin + ' stop') - print 'Removing %s' % target_dir + print('Removing %s' % target_dir) if op.exists(target_dir): shutil.rmtree(target_dir) @@ -47,31 +48,31 @@ def run_test(): import test_hec_event_writer import test_time_parser - print 'check splunk environment...' + print('check splunk environment...') test_splunkenv.test_splunkenv() - print 'check splunk server info...' + print('check splunk server info...') test_server_info.test_server_info() - print 'test kvstore...' + print('test kvstore...') test_kvstore.test_kvstore() - print 'test metadata reader...' + print('test metadata reader...') test_metadata.test_metadata_reader() - print 'test acl manager...' + print('test acl manager...') test_acl.test_acl_manager() - print 'test credential manager...' + print('test credential manager...') test_credentials.test_credential_manager() - print 'test conf manager...' + print('test conf manager...') test_conf_manager.test_conf_manager() - print 'test user access...' + print('test user access...') test_user_access.test_user_access() - print 'test hec config...' + print('test hec config...') test_hec_config.test_hec_config() - print 'test hec eventwriter...' + print('test hec eventwriter...') test_hec_event_writer.test_hec_event_writer() - print 'test time parser...' + print('test time parser...') test_time_parser.test_time_parser() if __name__ == '__main__': teardown_environment() setup_environment() run_test() - print 'Run tests success.' + print('Run tests success.') diff --git a/examples/test_credentials.py b/examples/test_credentials.py index 403bc17d..5d94d512 100644 --- a/examples/test_credentials.py +++ b/examples/test_credentials.py @@ -1,3 +1,4 @@ +from builtins import range import sys import os.path as op import pytest @@ -19,7 +20,7 @@ def test_credential_manager(): cm.set_password('testuser1', 'password1') assert cm.get_password('testuser1') == 'password1' - long_password = ''.join(['1111111111' for i in xrange(30)]) + long_password = ''.join(['1111111111' for i in range(30)]) cm.set_password('testuser2', long_password) assert cm.get_password('testuser2') == long_password diff --git a/examples/test_hec_event_writer.py b/examples/test_hec_event_writer.py index 36cb8d88..f5ff1226 100644 --- a/examples/test_hec_event_writer.py +++ b/examples/test_hec_event_writer.py @@ -1,3 +1,4 @@ +from builtins import range import sys import os.path as op @@ -14,12 +15,12 @@ def test_hec_event_writer(): ew = hew.HECEventWriter("test", session_key) m1 = {} - for i in xrange(100): + for i in range(100): m1[i] = "test1 data %s" % i e1 = ew.create_event(m1, index="main", host="testing", sourcetype="hec") m2 = {} - for i in xrange(100): + for i in range(100): m2[i] = "test2 data %s" % i e2 = ew.create_event(m2, index="main", host="testing", sourcetype="hec") diff --git a/examples/test_kvstore.py b/examples/test_kvstore.py index 42eebdd0..a97eba8c 100644 --- a/examples/test_kvstore.py +++ b/examples/test_kvstore.py @@ -1,3 +1,4 @@ +from builtins import range import json import os.path as op import sys @@ -27,7 +28,7 @@ def test_kvstore(): 'user': 'string'} last_ex = None - for i in xrange(3): + for i in range(3): try: kvstore.create('sessions', fields=fields) break diff --git a/examples/test_server_info.py b/examples/test_server_info.py index bdef68a1..6c9b7669 100644 --- a/examples/test_server_info.py +++ b/examples/test_server_info.py @@ -1,3 +1,4 @@ +from __future__ import print_function import os.path as op import sys @@ -14,23 +15,23 @@ def test_server_info(): si = server_info.ServerInfo(session_key, scheme=context.scheme, host=context.host, port=context.port) - print 'Local splunk server info' + print('Local splunk server info') - print ' -name: ', si.server_name + print(' -name: ', si.server_name) - print ' -version: ', si.version + print(' -version: ', si.version) - print ' -is a cluster captain: ', si.is_captain() + print(' -is a cluster captain: ', si.is_captain()) - print ' -is a clound instance: ', si.is_cloud_instance() + print(' -is a clound instance: ', si.is_cloud_instance()) - print ' -is a search head: ', si.is_search_head() + print(' -is a search head: ', si.is_search_head()) - print ' -is a SHC member: ', si.is_shc_member() + print(' -is a SHC member: ', si.is_shc_member()) try: shc_members = si.get_shc_members() except server_info.ServerInfoException as e: - print e.message + print(e.message) else: - print ' -SHC members are: ', shc_members + print(' -SHC members are: ', shc_members) diff --git a/requirements.txt b/requirements.txt index c2b58e30..ed5c5a87 100644 --- a/requirements.txt +++ b/requirements.txt @@ -2,4 +2,6 @@ setuptools-lint==0.4.1 pytest==2.9.1 pytest-cov==2.2.1 mock==2.0.0 -requests==2.24.0 \ No newline at end of file +requests==2.24.0 +future==0.18.2 +pytest-expect \ No newline at end of file diff --git a/solnlib/splunkenv.py b/solnlib/splunkenv.py index d8bc31f1..86786cd6 100644 --- a/solnlib/splunkenv.py +++ b/solnlib/splunkenv.py @@ -265,8 +265,8 @@ def get_conf_stanzas(conf_name): conf_name = conf_name[:-5] # TODO: dynamically caculate SPLUNK_HOME - btool_cli = [op.join(os.environ['SPLUNK_HOME'], 'bin', 'btool'), - conf_name, 'list'] + btool_cli = [op.join(os.environ['SPLUNK_HOME'], 'bin', 'splunk'), + 'cmd', 'btool', conf_name, 'list'] p = subprocess.Popen(btool_cli, stdout=subprocess.PIPE, stderr=subprocess.PIPE) diff --git a/tests/common.py b/tests/common.py index 3eb6aa2c..a911371e 100644 --- a/tests/common.py +++ b/tests/common.py @@ -23,7 +23,7 @@ def __init__(self, args, bufsize=0, executable=None, preexec_fn=None, close_fds=False, shell=False, cwd=None, env=None, universal_newlines=False, startupinfo=None, creationflags=0): - self._conf = args[1] + self._conf = args[3] def communicate(self, input=None): if self._conf == 'server':